shaka-packager/packager/media/base/pssh_generator.h

74 lines
2.6 KiB
C
Raw Normal View History

// 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
#ifndef PACKAGER_MEDIA_BASE_PSSH_GENERATOR_H_
#define PACKAGER_MEDIA_BASE_PSSH_GENERATOR_H_
#include <vector>
#include "packager/base/optional.h"
#include "packager/media/base/protection_system_specific_info.h"
#include "packager/status.h"
// TODO(hmchen): move pssh related files into a sperate folder.
namespace shaka {
namespace media {
struct EncryptionKey;
class PsshGenerator {
public:
PsshGenerator();
virtual ~PsshGenerator() = 0;
/// @return whether the PSSH generates the PSSH box based on multiple key
/// IDs.
virtual bool SupportMultipleKeys() = 0;
/// Generate the PSSH and set the ProtectionSystemSpecificInfo.
/// @param key_ids is a vector of key IDs for all tracks.
/// @param info is a pointer to the ProtectionSystemSpecificInfo for setting
/// the PSSH box.
Status GeneratePsshFromKeyIds(
const std::vector<std::vector<uint8_t>>& key_ids,
ProtectionSystemSpecificInfo* info) const;
/// Generate the PSSH and set the ProtectionSystemSpecificInfo.
/// @param key_id is a the unique identifier for the key.
/// @param key is the content key.
/// @param info is a pointer to the ProtectionSystemSpecificInfo for setting
/// the PSSH box.
Status GeneratePsshFromKeyIdAndKey(const std::vector<uint8_t>& key_id,
const std::vector<uint8_t>& key,
ProtectionSystemSpecificInfo* info) const;
private:
/// Return the PSSH data generated from multiple |key_ids| on success. If
/// error happens, it returns no value.
/// @param key_ids is a set of key IDs for all tracks.
virtual base::Optional<std::vector<uint8_t>> GeneratePsshDataFromKeyIds(
const std::vector<std::vector<uint8_t>>& key_ids) const = 0;
/// Return the PSSH data generated from a pair of |key_id| and |key| on
/// success. If error happens, it returns no value.
/// @param key_id is a the unique identifier for the key.
/// @param key is the key for generating the PSSH box.
virtual base::Optional<std::vector<uint8_t>> GeneratePsshDataFromKeyIdAndKey(
const std::vector<uint8_t>& key_id,
const std::vector<uint8_t>& key) const = 0;
/// Return the PSSH box version.
virtual uint8_t PsshBoxVersion() const = 0;
/// Return the System ID.
virtual const std::vector<uint8_t>& SystemId() const = 0;
};
} // namespace media
} // namespace shaka
#endif // PACKAGER_MEDIA_BASE_PSSH_GENERATOR_H_