Source release v3.4.1
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
namespace wvcdm {
|
||||
|
||||
// Protobuf generated classes.
|
||||
using video_widevine::WidevineCencHeader;
|
||||
using video_widevine::WidevinePsshData;
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -164,6 +164,19 @@ const std::string kZeroSizedPsshBox = a2bs_hex(
|
||||
// data:
|
||||
"08011a0d7769646576696e655f74657374220f73747265616d696e675f636c697031");
|
||||
|
||||
const std::string kSubLicensePsshBox = a2bs_hex(
|
||||
// Widevine PSSH box
|
||||
"0000009f" // atom size (whole buffer)
|
||||
"70737368" // atom type="pssh"
|
||||
"00000000" // v0, flags=0
|
||||
"edef8ba979d64acea3c827dcd51d21ed" // system id (Widevine)
|
||||
"0000007f" // data size
|
||||
// data:
|
||||
"0801120d746573745f6b65795f69645f30120d746573745f6b65795f69645f31220f"
|
||||
"746573745f636f6e74656e745f69645a250a147375625f73657373696f6e5f6b6579"
|
||||
"5f69645f30120d7375625f6c6963656e73655f305a250a147375625f73657373696f"
|
||||
"6e5f6b65795f69645f31120d7375625f6c6963656e73655f31");
|
||||
|
||||
// HLS test attribute key and values
|
||||
const std::string kHlsIvHexValue = "6DF49213A781E338628D0E9C812D328E";
|
||||
const std::string kHlsIvValue = "0x" + kHlsIvHexValue;
|
||||
@@ -353,7 +366,9 @@ struct HlsInitDataVariant {
|
||||
HlsInitDataVariant(CdmHlsMethod method, const std::string& provider,
|
||||
const std::string& content_id, const std::string& key_id,
|
||||
bool success)
|
||||
: method_(method), provider_(provider), content_id_(content_id),
|
||||
: method_(method),
|
||||
provider_(provider),
|
||||
content_id_(content_id),
|
||||
success_(success) {
|
||||
if (key_id.size() > 0) key_ids_.push_back(key_id);
|
||||
}
|
||||
@@ -410,13 +425,31 @@ TEST_P(InitializationDataTest, Parse) {
|
||||
EXPECT_FALSE(init_data.IsEmpty());
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(ParsePssh, InitializationDataTest,
|
||||
::testing::Values(kWidevinePssh, kWidevinePsshFirst,
|
||||
kWidevinePsshAfterV0Pssh,
|
||||
kWidevinePsshAfterNonZeroFlags,
|
||||
kWidevinePsshAfterV1Pssh,
|
||||
kWidevineV1Pssh, kOtherBoxFirst,
|
||||
kZeroSizedPsshBox));
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
ParsePssh, InitializationDataTest,
|
||||
::testing::Values(kWidevinePssh, kWidevinePsshFirst,
|
||||
kWidevinePsshAfterV0Pssh, kWidevinePsshAfterNonZeroFlags,
|
||||
kWidevinePsshAfterV1Pssh, kWidevineV1Pssh, kOtherBoxFirst,
|
||||
kZeroSizedPsshBox, kSubLicensePsshBox));
|
||||
TEST_F(InitializationDataTest, ExtractSubLicense) {
|
||||
InitializationData init_data(ISO_BMFF_VIDEO_MIME_TYPE, kSubLicensePsshBox);
|
||||
EXPECT_FALSE(init_data.IsEmpty());
|
||||
std::vector<video_widevine::SubLicense> keys =
|
||||
init_data.ExtractEmbeddedKeys();
|
||||
ASSERT_EQ(keys.size(), 2UL);
|
||||
ASSERT_EQ(keys[0].sub_session_key_id(), "sub_session_key_id_0");
|
||||
ASSERT_EQ(keys[1].sub_session_key_id(), "sub_session_key_id_1");
|
||||
ASSERT_EQ(keys[0].key_msg(), "sub_license_0");
|
||||
ASSERT_EQ(keys[1].key_msg(), "sub_license_1");
|
||||
}
|
||||
|
||||
TEST_F(InitializationDataTest, ExtractEmptySubLicense) {
|
||||
InitializationData init_data(ISO_BMFF_VIDEO_MIME_TYPE, kWidevinePssh);
|
||||
EXPECT_FALSE(init_data.IsEmpty());
|
||||
std::vector<video_widevine::SubLicense> keys =
|
||||
init_data.ExtractEmbeddedKeys();
|
||||
ASSERT_TRUE(keys.empty());
|
||||
}
|
||||
|
||||
TEST_P(HlsKeyFormatVersionsExtractionTest, ExtractKeyFormatVersions) {
|
||||
std::vector<std::string> versions = GetParam();
|
||||
@@ -598,9 +631,9 @@ TEST_P(HlsConstructionTest, InitData) {
|
||||
EXPECT_EQ(param.success_, InitializationData::ConstructWidevineInitData(
|
||||
param.method_, uri, &value));
|
||||
if (param.success_) {
|
||||
WidevineCencHeader cenc_header;
|
||||
WidevinePsshData cenc_header;
|
||||
EXPECT_TRUE(cenc_header.ParseFromString(value));
|
||||
EXPECT_EQ(video_widevine::WidevineCencHeader_Algorithm_AESCTR,
|
||||
EXPECT_EQ(video_widevine::WidevinePsshData_Algorithm_AESCTR,
|
||||
cenc_header.algorithm());
|
||||
for (size_t i = 0; i < param.key_ids_.size(); ++i) {
|
||||
bool key_id_found = false;
|
||||
@@ -620,9 +653,14 @@ TEST_P(HlsConstructionTest, InitData) {
|
||||
cenc_header.content_id());
|
||||
uint32_t protection_scheme = 0;
|
||||
switch (param.method_) {
|
||||
case kHlsMethodAes128: protection_scheme = kFourCcCbc1; break;
|
||||
case kHlsMethodSampleAes: protection_scheme = kFourCcCbcs; break;
|
||||
default: break;
|
||||
case kHlsMethodAes128:
|
||||
protection_scheme = kFourCcCbc1;
|
||||
break;
|
||||
case kHlsMethodSampleAes:
|
||||
protection_scheme = kFourCcCbcs;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
EXPECT_EQ(protection_scheme, cenc_header.protection_scheme());
|
||||
}
|
||||
@@ -633,8 +671,8 @@ INSTANTIATE_TEST_CASE_P(
|
||||
::testing::Values(
|
||||
HlsInitDataVariant(kHlsMethodAes128, "", kHlsTestContentId,
|
||||
kHlsTestKeyId1, false),
|
||||
HlsInitDataVariant(kHlsMethodAes128, kHlsTestProvider,
|
||||
"", kHlsTestKeyId1, false),
|
||||
HlsInitDataVariant(kHlsMethodAes128, kHlsTestProvider, "",
|
||||
kHlsTestKeyId1, false),
|
||||
HlsInitDataVariant(kHlsMethodAes128, kHlsTestProvider,
|
||||
kHlsTestContentId, "", false),
|
||||
HlsInitDataVariant(kHlsMethodAes128, kHlsTestProvider,
|
||||
@@ -699,9 +737,9 @@ TEST_P(HlsParseTest, Parse) {
|
||||
EXPECT_EQ(kHlsMethodSampleAes, init_data.hls_method());
|
||||
}
|
||||
|
||||
WidevineCencHeader cenc_header;
|
||||
WidevinePsshData cenc_header;
|
||||
EXPECT_TRUE(cenc_header.ParseFromString(init_data.data()));
|
||||
EXPECT_EQ(video_widevine::WidevineCencHeader_Algorithm_AESCTR,
|
||||
EXPECT_EQ(video_widevine::WidevinePsshData_Algorithm_AESCTR,
|
||||
cenc_header.algorithm());
|
||||
if (param.key_.compare(kJsonProvider) == 0) {
|
||||
EXPECT_EQ(param.value_, cenc_header.provider());
|
||||
|
||||
Reference in New Issue
Block a user