7 #include "packager/mpd/base/simple_mpd_notifier.h"
9 #include "packager/base/logging.h"
10 #include "packager/base/stl_util.h"
11 #include "packager/mpd/base/mpd_builder.h"
12 #include "packager/mpd/base/mpd_notifier_util.h"
13 #include "packager/mpd/base/mpd_utils.h"
17 SimpleMpdNotifier::SimpleMpdNotifier(
const MpdOptions& mpd_options)
18 : MpdNotifier(mpd_options),
19 output_path_(mpd_options.mpd_params.mpd_output),
20 mpd_builder_(new MpdBuilder(mpd_options)) {
21 for (
const std::string& base_url : mpd_options.mpd_params.base_urls)
22 mpd_builder_->AddBaseUrl(base_url);
25 SimpleMpdNotifier::~SimpleMpdNotifier() {
33 uint32_t* container_id) {
37 if (content_type == kContentTypeUnknown)
40 base::AutoLock auto_lock(lock_);
44 std::string key = GetAdaptationSetKey(media_info);
45 std::string lang = GetLanguage(media_info);
47 if (*adaptation_set == NULL)
48 *adaptation_set = mpd_builder_->AddAdaptationSet(lang);
50 DCHECK(*adaptation_set);
51 MediaInfo adjusted_media_info(media_info);
54 (*adaptation_set)->AddRepresentation(adjusted_media_info);
55 if (representation == NULL)
61 *container_id = representation->
id();
62 DCHECK(!ContainsKey(representation_map_, representation->
id()));
63 representation_map_[representation->
id()] = representation;
68 uint32_t sample_duration) {
69 base::AutoLock auto_lock(lock_);
70 RepresentationMap::iterator it = representation_map_.find(container_id);
71 if (it == representation_map_.end()) {
72 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
75 it->second->SetSampleDuration(sample_duration);
83 base::AutoLock auto_lock(lock_);
84 RepresentationMap::iterator it = representation_map_.find(container_id);
85 if (it == representation_map_.end()) {
86 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
89 it->second->AddNewSegment(start_time, duration, size);
94 uint32_t container_id,
95 const std::string& drm_uuid,
96 const std::vector<uint8_t>& new_key_id,
97 const std::vector<uint8_t>& new_pssh) {
98 base::AutoLock auto_lock(lock_);
99 RepresentationMap::iterator it = representation_map_.find(container_id);
100 if (it == representation_map_.end()) {
101 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
104 it->second->UpdateContentProtectionPssh(drm_uuid,
110 uint32_t container_id,
112 base::AutoLock auto_lock(lock_);
113 RepresentationMap::iterator it = representation_map_.find(container_id);
114 if (it == representation_map_.end()) {
115 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
118 it->second->AddContentProtectionElement(content_protection_element);
123 base::AutoLock auto_lock(lock_);
bool AddContentProtectionElement(uint32_t id, const ContentProtectionElement &content_protection_element) override
void AddContentProtectionElements(const MediaInfo &media_info, Representation *parent)
bool NotifyNewSegment(uint32_t id, uint64_t start_time, uint64_t duration, uint64_t size) override
std::string Uint8VectorToBase64(const std::vector< uint8_t > &input)
Converts uint8 vector into base64 encoded string.
bool NotifySampleDuration(uint32_t container_id, uint32_t sample_duration) override
bool NotifyEncryptionUpdate(uint32_t container_id, const std::string &drm_uuid, const std::vector< uint8_t > &new_key_id, const std::vector< uint8_t > &new_pssh) override
static void MakePathsRelativeToMpd(const std::string &mpd_path, MediaInfo *media_info)
ContentType GetContentType(const MediaInfo &media_info)
bool WriteMpdToFile(const std::string &output_path, MpdBuilder *mpd_builder)
bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) override