62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
// Copyright 2017 Google Inc. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file or at
|
|
// https://developers.google.com/open-source/licenses/bsd
|
|
|
|
#include "packager/media/base/pssh_generator.h"
|
|
|
|
namespace shaka {
|
|
namespace media {
|
|
|
|
PsshGenerator::PsshGenerator() {}
|
|
|
|
PsshGenerator::~PsshGenerator() {}
|
|
|
|
Status PsshGenerator::GeneratePsshFromKeyIds(
|
|
const std::vector<std::vector<uint8_t>>& key_ids,
|
|
ProtectionSystemSpecificInfo* info) const {
|
|
base::Optional<std::vector<uint8_t>> pssh_data =
|
|
GeneratePsshDataFromKeyIds(key_ids);
|
|
if (!pssh_data) {
|
|
return Status(error::ENCRYPTION_FAILURE,
|
|
"Fail to generate PSSH data from multiple Key IDs.");
|
|
}
|
|
info->set_pssh_data(pssh_data.value());
|
|
|
|
info->clear_key_ids();
|
|
for (const auto& key_id : key_ids) {
|
|
info->add_key_id(key_id);
|
|
}
|
|
|
|
info->set_pssh_box_version(PsshBoxVersion());
|
|
const std::vector<uint8_t>& system_id = SystemId();
|
|
info->set_system_id(system_id.data(), system_id.size());
|
|
|
|
return Status::OK;
|
|
}
|
|
|
|
Status PsshGenerator::GeneratePsshFromKeyIdAndKey(
|
|
const std::vector<uint8_t>& key_id,
|
|
const std::vector<uint8_t>& key,
|
|
ProtectionSystemSpecificInfo* info) const {
|
|
base::Optional<std::vector<uint8_t>> pssh_data =
|
|
GeneratePsshDataFromKeyIdAndKey(key_id, key);
|
|
if (!pssh_data) {
|
|
return Status(error::ENCRYPTION_FAILURE,
|
|
"Fail to generate PSSH data from Key ID and Key.");
|
|
}
|
|
info->set_pssh_data(pssh_data.value());
|
|
|
|
info->clear_key_ids();
|
|
info->add_key_id(key_id);
|
|
info->set_pssh_box_version(PsshBoxVersion());
|
|
const std::vector<uint8_t>& system_id = SystemId();
|
|
info->set_system_id(system_id.data(), system_id.size());
|
|
|
|
return Status::OK;
|
|
}
|
|
|
|
} // namespace media
|
|
} // namespace shaka
|