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 a5b4b54..dc95d9c 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 3a4d077..e33095f 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 fc6e940..8304ec0 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 28bc826..e75569f 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 ba8d44b..12f6dfa 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);