Shaka Packager SDK
Loading...
Searching...
No Matches
simple_mpd_notifier.h
1// Copyright 2014 Google LLC. All rights reserved.
2//
3// Use of this source code is governed by a BSD-style
4// license that can be found in the LICENSE file or at
5// https://developers.google.com/open-source/licenses/bsd
6
7#ifndef MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
8#define MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
9
10#include <cstdint>
11#include <map>
12#include <memory>
13#include <string>
14#include <utility>
15#include <vector>
16
17#include <absl/synchronization/mutex.h>
18
19#include <packager/mpd/base/mpd_builder.h>
20#include <packager/mpd/base/mpd_notifier.h>
21
22namespace shaka {
23
24class AdaptationSet;
25class MpdBuilder;
26class Representation;
27
28struct MpdOptions;
29
33 public:
34 explicit SimpleMpdNotifier(const MpdOptions& mpd_options);
35 ~SimpleMpdNotifier() override;
36
40 bool Init() override;
41 bool NotifyNewContainer(const MediaInfo& media_info, uint32_t* id) override;
42 bool NotifyAvailabilityTimeOffset(uint32_t container_id) override;
43 bool NotifySampleDuration(uint32_t container_id,
44 int32_t sample_duration) override;
45 bool NotifySegmentDuration(uint32_t container_id) override;
46 bool NotifyNewSegment(uint32_t container_id,
47 int64_t start_time,
48 int64_t duration,
49 uint64_t size,
50 int64_t segment_number) override;
51 bool NotifyCompletedSegment(uint32_t container_id,
52 int64_t duration,
53 uint64_t size) override;
54 bool NotifyCueEvent(uint32_t container_id, int64_t timestamp) override;
55 bool NotifyEncryptionUpdate(uint32_t container_id,
56 const std::string& drm_uuid,
57 const std::vector<uint8_t>& new_key_id,
58 const std::vector<uint8_t>& new_pssh) override;
59 bool NotifyMediaInfoUpdate(uint32_t container_id,
60 const MediaInfo& media_info) override;
61
62 bool NotifyEndOfStream() override;
63
64 bool Flush() override;
66
67 private:
68 SimpleMpdNotifier(const SimpleMpdNotifier&) = delete;
69 SimpleMpdNotifier& operator=(const SimpleMpdNotifier&) = delete;
70
71 friend class SimpleMpdNotifierTest;
72
73 // Testing only method. Returns a pointer to MpdBuilder.
74 MpdBuilder* MpdBuilderForTesting() const { return mpd_builder_.get(); }
75
76 // Testing only method. Sets mpd_builder_.
77 void SetMpdBuilderForTesting(std::unique_ptr<MpdBuilder> mpd_builder) {
78 mpd_builder_ = std::move(mpd_builder);
79 }
80
81 // MPD output path.
82 std::string output_path_;
83 std::unique_ptr<MpdBuilder> mpd_builder_;
84 bool content_protection_in_adaptation_set_ = true;
85 absl::Mutex lock_;
86
87 uint32_t next_adaptation_set_id_ = 0;
88 // Maps Representation ID to Representation.
89 std::map<uint32_t, Representation*> representation_map_;
90 // Maps Representation ID to AdaptationSet. This is for updating the PSSH.
91 std::map<uint32_t, AdaptationSet*> representation_id_to_adaptation_set_;
92};
93
94} // namespace shaka
95
96#endif // MPD_BASE_SIMPLE_MPD_NOTIFIER_H_
This class generates DASH MPDs (Media Presentation Descriptions).
Definition mpd_builder.h:37
bool NotifyNewSegment(uint32_t container_id, int64_t start_time, int64_t duration, uint64_t size, int64_t segment_number) override
bool NotifyCompletedSegment(uint32_t container_id, int64_t duration, uint64_t size) override
bool NotifySampleDuration(uint32_t container_id, int32_t sample_duration) override
bool NotifyNewContainer(const MediaInfo &media_info, uint32_t *id) override
bool NotifyCueEvent(uint32_t container_id, int64_t timestamp) override
bool NotifyMediaInfoUpdate(uint32_t container_id, const MediaInfo &media_info) 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
bool NotifySegmentDuration(uint32_t container_id) override
bool NotifyAvailabilityTimeOffset(uint32_t container_id) override
All the methods that are virtual are virtual for mocking.
Defines Mpd Options.
Definition mpd_options.h:24