Skip to content

Commit 36eb7d4

Browse files
committed
parse default kid from init data if empty
1 parent 96e7ac1 commit 36eb7d4

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/Session.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "Session.h"
1010

1111
#include "CompKodiProps.h"
12+
#include "PRProtectionParser.h"
1213
#include "CompSettings.h"
1314
#include "SrvBroker.h"
1415
#include "aes_decrypter.h"
@@ -418,7 +419,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
418419
if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE)
419420
continue;
420421

421-
const std::vector<uint8_t> defaultKid = DRM::ConvertKidStrToBytes(sessionPsshset.defaultKID_);
422+
std::string defaultKidStr = sessionPsshset.defaultKID_;
422423
std::string_view licenseDataStr = CSrvBroker::GetKodiProps().GetLicenseData();
423424

424425
if (m_adaptiveTree->GetTreeType() == adaptive::TreeType::SMOOTH_STREAMING)
@@ -441,7 +442,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
441442
licenseData.empty() ? "" : "(with custom data)");
442443

443444
std::vector<uint8_t> wvPsshData;
444-
if (DRM::MakeWidevinePsshData(defaultKid, licenseData, wvPsshData))
445+
if (DRM::MakeWidevinePsshData(DRM::ConvertKidStrToBytes(defaultKidStr), licenseData, wvPsshData))
445446
DRM::MakePssh(DRM::ID_WIDEVINE, wvPsshData, initData);
446447
}
447448
}
@@ -469,6 +470,17 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
469470
initData = BASE64::Decode(licenseDataStr);
470471
}
471472

473+
// If no KID, but init data, extract the KID from init data
474+
if (!initData.empty() && defaultKidStr.empty())
475+
{
476+
CPsshParser parser;
477+
if (parser.Parse(initData) && !parser.GetKeyIds().empty())
478+
{
479+
LOG::Log(LOGDEBUG, "Default KID parsed from init data");
480+
defaultKidStr = STRING::ToHexadecimal(parser.GetKeyIds()[0]);
481+
}
482+
}
483+
472484
if (initData.empty() && sessionPsshset.m_licenseUrl.empty())
473485
{
474486
if (!sessionPsshset.pssh_.empty())
@@ -485,6 +497,8 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
485497
}
486498
}
487499

500+
const std::vector<uint8_t> defaultKid = DRM::ConvertKidStrToBytes(defaultKidStr);
501+
488502
if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter)
489503
{
490504
// If the CDM has been pre-initialized, on non-android systems

0 commit comments

Comments
 (0)