Shaka Packager SDK
simple_hls_notifier.h
1 // Copyright 2016 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 PACKAGER_HLS_BASE_SIMPLE_HLS_NOTIFIER_H_
8 #define PACKAGER_HLS_BASE_SIMPLE_HLS_NOTIFIER_H_
9 
10 #include <list>
11 #include <map>
12 #include <memory>
13 #include <string>
14 #include <vector>
15 
16 #include <absl/synchronization/mutex.h>
17 
18 #include <packager/hls/base/hls_notifier.h>
19 #include <packager/hls/base/master_playlist.h>
20 #include <packager/hls/base/media_playlist.h>
21 #include <packager/hls_params.h>
22 #include <packager/macros/classes.h>
23 
24 namespace shaka {
25 namespace hls {
26 
30  public:
31  virtual ~MediaPlaylistFactory();
32  virtual std::unique_ptr<MediaPlaylist> Create(const HlsParams& hls_params,
33  const std::string& file_name,
34  const std::string& name,
35  const std::string& group_id);
36 };
37 
40  public:
42  explicit SimpleHlsNotifier(const HlsParams& hls_params);
43  ~SimpleHlsNotifier() override;
44 
47  bool Init() override;
48  bool NotifyNewStream(const MediaInfo& media_info,
49  const std::string& playlist_name,
50  const std::string& stream_name,
51  const std::string& group_id,
52  uint32_t* stream_id) override;
53  bool NotifySampleDuration(uint32_t stream_id,
54  int32_t sample_duration) override;
55  bool NotifyNewSegment(uint32_t stream_id,
56  const std::string& segment_name,
57  int64_t start_time,
58  int64_t duration,
59  uint64_t start_byte_offset,
60  uint64_t size) override;
61  bool NotifyKeyFrame(uint32_t stream_id,
62  int64_t timestamp,
63  uint64_t start_byte_offset,
64  uint64_t size) override;
65  bool NotifyCueEvent(uint32_t container_id, int64_t timestamp) override;
67  uint32_t stream_id,
68  const std::vector<uint8_t>& key_id,
69  const std::vector<uint8_t>& system_id,
70  const std::vector<uint8_t>& iv,
71  const std::vector<uint8_t>& protection_system_specific_data) override;
72  bool Flush() override;
74 
75  private:
76  friend class SimpleHlsNotifierTest;
77 
78  struct StreamEntry {
79  std::unique_ptr<MediaPlaylist> media_playlist;
80  MediaPlaylist::EncryptionMethod encryption_method;
81  };
82 
83  std::string master_playlist_dir_;
84  int32_t target_duration_ = 0;
85 
86  std::unique_ptr<MediaPlaylistFactory> media_playlist_factory_;
87  std::unique_ptr<MasterPlaylist> master_playlist_;
88 
89  // Maps to unique_ptr because StreamEntry also holds unique_ptr
90  std::map<uint32_t, std::unique_ptr<StreamEntry>> stream_map_;
91  std::list<MediaPlaylist*> media_playlists_;
92 
93  uint32_t sequence_number_ = 0;
94 
95  absl::Mutex lock_;
96 
97  DISALLOW_COPY_AND_ASSIGN(SimpleHlsNotifier);
98 };
99 
100 } // namespace hls
101 } // namespace shaka
102 
103 #endif // PACKAGER_HLS_BASE_SIMPLE_HLS_NOTIFIER_H_
const HlsParams & hls_params() const
Definition: hls_notifier.h:104
bool NotifyNewSegment(uint32_t stream_id, const std::string &segment_name, int64_t start_time, int64_t duration, uint64_t start_byte_offset, uint64_t size) override
SimpleHlsNotifier(const HlsParams &hls_params)
bool NotifyNewStream(const MediaInfo &media_info, const std::string &playlist_name, const std::string &stream_name, const std::string &group_id, uint32_t *stream_id) override
bool NotifyKeyFrame(uint32_t stream_id, int64_t timestamp, uint64_t start_byte_offset, uint64_t size) override
bool NotifyEncryptionUpdate(uint32_t stream_id, const std::vector< uint8_t > &key_id, const std::vector< uint8_t > &system_id, const std::vector< uint8_t > &iv, const std::vector< uint8_t > &protection_system_specific_data) override
bool NotifyCueEvent(uint32_t container_id, int64_t timestamp) override
bool NotifySampleDuration(uint32_t stream_id, int32_t sample_duration) override
All the methods that are virtual are virtual for mocking.
Definition: crypto_flags.cc:66