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 const std::vector<std::string>& base_urls,
19 const std::string& output_path)
20 : MpdNotifier(mpd_options),
21 output_path_(output_path),
22 mpd_builder_(new MpdBuilder(mpd_options)) {
23 for (
size_t i = 0; i < base_urls.size(); ++i)
24 mpd_builder_->AddBaseUrl(base_urls[i]);
27 SimpleMpdNotifier::~SimpleMpdNotifier() {
35 uint32_t* container_id) {
39 if (content_type == kContentTypeUnknown)
42 base::AutoLock auto_lock(lock_);
46 std::string key = GetAdaptationSetKey(media_info);
47 std::string lang = GetLanguage(media_info);
49 if (*adaptation_set == NULL)
50 *adaptation_set = mpd_builder_->AddAdaptationSet(lang);
52 DCHECK(*adaptation_set);
53 MediaInfo adjusted_media_info(media_info);
56 (*adaptation_set)->AddRepresentation(adjusted_media_info);
57 if (representation == NULL)
63 *container_id = representation->
id();
64 DCHECK(!ContainsKey(representation_map_, representation->
id()));
65 representation_map_[representation->
id()] = representation;
70 uint32_t sample_duration) {
71 base::AutoLock auto_lock(lock_);
72 RepresentationMap::iterator it = representation_map_.find(container_id);
73 if (it == representation_map_.end()) {
74 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
77 it->second->SetSampleDuration(sample_duration);
85 base::AutoLock auto_lock(lock_);
86 RepresentationMap::iterator it = representation_map_.find(container_id);
87 if (it == representation_map_.end()) {
88 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
91 it->second->AddNewSegment(start_time, duration, size);
96 uint32_t container_id,
97 const std::string& drm_uuid,
98 const std::vector<uint8_t>& new_key_id,
99 const std::vector<uint8_t>& new_pssh) {
100 base::AutoLock auto_lock(lock_);
101 RepresentationMap::iterator it = representation_map_.find(container_id);
102 if (it == representation_map_.end()) {
103 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
106 it->second->UpdateContentProtectionPssh(drm_uuid,
112 uint32_t container_id,
114 base::AutoLock auto_lock(lock_);
115 RepresentationMap::iterator it = representation_map_.find(container_id);
116 if (it == representation_map_.end()) {
117 LOG(ERROR) <<
"Unexpected container_id: " << container_id;
120 it->second->AddContentProtectionElement(content_protection_element);
125 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