Shaka Packager SDK
Loading...
Searching...
No Matches
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 <cstdint>
11#include <list>
12#include <map>
13#include <memory>
14#include <string>
15#include <vector>
16
17#include <absl/synchronization/mutex.h>
18#include <absl/time/time.h>
19
20#include <packager/hls/base/hls_notifier.h>
21#include <packager/hls/base/master_playlist.h>
22#include <packager/hls/base/media_playlist.h>
23#include <packager/hls_params.h>
24#include <packager/macros/classes.h>
25#include <packager/mpd/base/media_info.pb.h>
26
27namespace shaka {
28namespace hls {
29
33 public:
34 virtual ~MediaPlaylistFactory();
35 virtual std::unique_ptr<MediaPlaylist> Create(const HlsParams& hls_params,
36 const std::string& file_name,
37 const std::string& name,
38 const std::string& group_id);
39};
40
43 public:
45 explicit SimpleHlsNotifier(const HlsParams& hls_params);
46 ~SimpleHlsNotifier() override;
47
50 bool Init() override;
51 bool NotifyNewStream(const MediaInfo& media_info,
52 const std::string& playlist_name,
53 const std::string& stream_name,
54 const std::string& group_id,
55 uint32_t* stream_id) override;
56 bool NotifySampleDuration(uint32_t stream_id,
57 int32_t sample_duration) override;
58 bool NotifyNewSegment(uint32_t stream_id,
59 const std::string& segment_name,
60 int64_t start_time,
61 int64_t duration,
62 uint64_t start_byte_offset,
63 uint64_t size) override;
64 bool NotifyKeyFrame(uint32_t stream_id,
65 int64_t timestamp,
66 uint64_t start_byte_offset,
67 uint64_t size) override;
68 bool NotifyCueEvent(uint32_t container_id, int64_t timestamp) override;
70 uint32_t stream_id,
71 const std::vector<uint8_t>& key_id,
72 const std::vector<uint8_t>& system_id,
73 const std::vector<uint8_t>& iv,
74 const std::vector<uint8_t>& protection_system_specific_data) override;
75
76 bool NotifyEndOfStream() override;
77
78 bool Flush() override;
80
81 protected:
82 const absl::Time& reference_time() const { return reference_time_; }
83
84 private:
85 friend class SimpleHlsNotifierTest;
86
87 struct StreamEntry {
88 std::unique_ptr<MediaPlaylist> media_playlist;
89 MediaPlaylist::EncryptionMethod encryption_method;
90 };
91
92 std::string master_playlist_dir_;
93 int32_t target_duration_ = 0;
94 bool end_stream = false;
95
96 std::unique_ptr<MediaPlaylistFactory> media_playlist_factory_;
97 std::unique_ptr<MasterPlaylist> master_playlist_;
98
99 // Maps to unique_ptr because StreamEntry also holds unique_ptr
100 std::map<uint32_t, std::unique_ptr<StreamEntry>> stream_map_;
101 std::list<MediaPlaylist*> media_playlists_;
102
103 uint32_t sequence_number_ = 0;
104
105 absl::Mutex lock_;
106 absl::Time reference_time_ = absl::InfinitePast();
107
108 DISALLOW_COPY_AND_ASSIGN(SimpleHlsNotifier);
109};
110
111} // namespace hls
112} // namespace shaka
113
114#endif // PACKAGER_HLS_BASE_SIMPLE_HLS_NOTIFIER_H_
const HlsParams & hls_params() const
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
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
const absl::Time & reference_time() const
}@
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.