Skip to content

Commit d50f6f4

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

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/Session.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
418418
if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE)
419419
continue;
420420

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

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

443443
std::vector<uint8_t> wvPsshData;
444-
if (DRM::MakeWidevinePsshData(defaultKid, licenseData, wvPsshData))
444+
if (DRM::MakeWidevinePsshData(DRM::ConvertKidStrToBytes(defaultKidStr), licenseData, wvPsshData))
445445
DRM::MakePssh(DRM::ID_WIDEVINE, wvPsshData, initData);
446446
}
447447
}
@@ -469,6 +469,17 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
469469
initData = BASE64::Decode(licenseDataStr);
470470
}
471471

472+
// If no KID, but init data, extract the KID from init data
473+
if (!initData.empty() && defaultKidStr.empty())
474+
{
475+
DRM::PSSH parser;
476+
if (parser.Parse(initData) && !parser.GetKeyIds().empty())
477+
{
478+
LOG::Log(LOGDEBUG, "Default KID parsed from init data");
479+
defaultKidStr = STRING::ToHexadecimal(parser.GetKeyIds()[0]);
480+
}
481+
}
482+
472483
if (initData.empty() && sessionPsshset.m_licenseUrl.empty())
473484
{
474485
if (!sessionPsshset.pssh_.empty())
@@ -485,6 +496,8 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
485496
}
486497
}
487498

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

0 commit comments

Comments
 (0)