Skip to content

Commit

Permalink
parse default kid from init data if empty
Browse files Browse the repository at this point in the history
  • Loading branch information
matthuisman committed Nov 10, 2024
1 parent 96e7ac1 commit 6e623bc
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/Session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "common/Chooser.h"
#include "decrypters/DrmFactory.h"
#include "decrypters/Helpers.h"
#include "parser/PRProtectionParser.h"
#include "utils/Base64Utils.h"
#include "utils/CurlUtils.h"
#include "utils/StringUtils.h"
Expand Down Expand Up @@ -418,7 +419,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE)
continue;

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

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

std::vector<uint8_t> wvPsshData;
if (DRM::MakeWidevinePsshData(defaultKid, licenseData, wvPsshData))
if (DRM::MakeWidevinePsshData(DRM::ConvertKidStrToBytes(defaultKidStr), licenseData, wvPsshData))
DRM::MakePssh(DRM::ID_WIDEVINE, wvPsshData, initData);
}
}
Expand Down Expand Up @@ -469,6 +470,17 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
initData = BASE64::Decode(licenseDataStr);
}

// If no KID, but init data, extract the KID from init data
if (!initData.empty() && defaultKidStr.empty())
{
CPsshParser parser;
if (parser.Parse(initData) && !parser.GetKeyIds().empty())
{
LOG::Log(LOGDEBUG, "Default KID parsed from init data");
defaultKidStr = STRING::ToHexadecimal(parser.GetKeyIds()[0]);
}
}

if (initData.empty() && sessionPsshset.m_licenseUrl.empty())
{
if (!sessionPsshset.pssh_.empty())
Expand All @@ -485,6 +497,8 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */)
}
}

const std::vector<uint8_t> defaultKid = DRM::ConvertKidStrToBytes(defaultKidStr);

if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter)
{
// If the CDM has been pre-initialized, on non-android systems
Expand Down

0 comments on commit 6e623bc

Please sign in to comment.