add info of key system to kpi message
authorshuai.yuan <shuai.yuan@samsung.com>
Tue, 14 Nov 2023 09:57:58 +0000 (17:57 +0800)
committershuai.yuan <shuai.yuan@samsung.com>
Tue, 14 Nov 2023 09:57:58 +0000 (17:57 +0800)
src/esplusplayer/CMakeLists.txt
src/esplusplayer/include_internal/esplayer/esplayer.h
src/esplusplayer/src/esplayer.cpp
src/plusplayer-core/include_internal/core/kpi.h
src/plusplayer-core/src/kpi.cpp

index a5b4b5429c6f71233fbb696372b96b20dc7c6ef9..dc95d9c93d17f90d59200d105fb852aa94d592b8 100644 (file)
@@ -23,7 +23,8 @@ SET(dependents "gstreamer-1.0 glib-2.0 dlog"
                "boost"
                "tv-resource-manager"
                "elementary ecore ecore-wl2"
-               "jsoncpp")
+               "jsoncpp"
+               "drmdecrypt")
 
 INCLUDE(FindPkgConfig)
 
index 3a4d077e5d2ca7e74caf22676d7cdcf67ac1c40a..e33095f6490dd18c2f4ccc2c61ba1d3302852ba7 100644 (file)
@@ -14,6 +14,7 @@
 #include <string>
 #include <utility>
 #include <vector>
+#include <IEME.h>
 
 #include "core/decoderinputbuffer.h"
 #include "core/kpi.h"
@@ -293,6 +294,8 @@ class EsPlayer : public EsPlusPlayer {
   EsStateManager state_manager_;
 
   SubmitDataType submit_data_type_ = SubmitDataType::kCleanData;
+  std::string key_system_ = "";
+  bool key_system_acquired_ = false;
   drm::Property drm_property_;
   std::uint32_t low_latency_mode_ = 0;
   std::uint32_t video_frame_peek_mode_ = 0;
index fc6e9407caea9e96670f30cf145db5e1588e1811..8304ec05cb9a360152d645bf9721fcc365754a17 100644 (file)
@@ -1312,6 +1312,7 @@ void EsPlayer::ResetContextForClose_() {
   app_info_ = PlayerAppInfo();
   src_queue_size_ = SrcQueueSize();
   is_msg_task_stop_ = false;
+  key_system_acquired_ = false;
 }
 
 void EsPlayer::ResetContextForStop_() {
@@ -1635,6 +1636,16 @@ PacketSubmitStatus EsPlayer::SubmitEncryptedPacket(
     MakeGstBufferForEncryptedPacket_(gstbuffer, packet, drm_info);
     return PacketSubmitStatus::kSuccess;
   };
+  if (!key_system_acquired_) {
+    key_system_ = eme::IEME::getKeySystemName(drm_info.handle);
+    LOG_ERROR("KeySystemName :: [%s] ", key_system_.c_str());
+    if (!state_manager_.GetPreparingState()) { //if the stream comes with clean data at the begining, re-post kpi when we get key system. 
+        kpi::CodecLogger logger;
+        kpi::EsCodecLoggerKeys event_keys = MakeKpiKeys_();
+        logger.SendKpi(true, event_keys);
+    }
+    key_system_acquired_ = true;
+  }
   return SubmitPacketCommon_(packet, submitpacket_op);
 }
 // LCOV_EXCL_STOP
@@ -2984,6 +2995,7 @@ kpi::EsCodecLoggerKeys EsPlayer::MakeKpiKeys_() {
     event_info.is_clean = true;
   } else {
     event_info.is_clean = false;
+    event_info.key_system = key_system_;
   }
 
   for (const auto& track : track_) {
index 28bc826f285bf1e1ec6de743d5502f1b6108c70e..e75569f3e5ceb7154092e010f16cf86f33fc829a 100644 (file)
@@ -37,6 +37,7 @@ struct EsCodecLoggerKeys {
   std::string v_codec;
   int v_codec_version;
   std::string a_codec;
+  std::string key_system;
 };
 
 
index ba8d44bb4fb044481b737dd4f824c0fcbfaf8c98..12f6dfaca13879be96253f27f5729fbf7170c5db 100644 (file)
@@ -156,6 +156,7 @@ bool CodecLogger::SendKpi(bool event_case, const EsCodecLoggerKeys& keys) {
   str << ";a_codec=" << keys.a_codec;
   str << ";a_tag=0x" << std::hex << audio_tag;
   str << ";app_id=" << keys.app_id;
+  if(!keys.is_clean) str << ";key_system=" << keys.key_system;
   str << "}";
 
   return SendKpi_(event_case, str);