53 enum class MediaPlaylistStreamType {
60 enum class EncryptionMethod {
76 const std::string& file_name,
77 const std::string& name,
78 const std::string& group_id);
81 const std::string& file_name()
const {
return file_name_; }
82 const std::string& name()
const {
return name_; }
83 const std::string& group_id()
const {
return group_id_; }
84 MediaPlaylistStreamType stream_type()
const {
return stream_type_; }
85 const std::string& codec()
const {
return codec_; }
86 const std::string& supplemental_codec()
const {
return supplemental_codec_; }
87 const media::FourCC& compatible_brand()
const {
return compatible_brand_; }
88 const std::list<std::unique_ptr<HlsEntry>>& entries()
const {
106 const std::vector<std::string>& characteristics);
110 const std::string& url,
111 const std::string& key_id,
112 const std::string& iv,
113 const std::string& key_format,
114 const std::string& key_format_versions);
121 MediaInfo GetMediaInfo()
const {
return media_info_; }
136 virtual void AddSegment(
const std::string& file_name,
139 uint64_t start_byte_offset,
153 uint64_t start_byte_offset,
168 const std::string& url,
169 const std::string& key_id,
170 const std::string& iv,
171 const std::string& key_format,
172 const std::string& key_format_versions);
192 virtual bool WriteToFile(
const std::filesystem::path& file_path,
193 bool event_to_vod_on_end_of_stream,
249 const std::string&
language()
const {
return language_; }
251 const std::vector<std::string>& characteristics()
const {
252 return characteristics_;
255 bool forced_subtitle()
const {
return forced_subtitle_; }
257 bool is_dvs()
const {
261 const char DVS_CHARACTERISTICS[] =
"public.accessibility.describes-video";
262 return characteristics_.size() == 1 &&
263 characteristics_[0] == DVS_CHARACTERISTICS;
268 void AddSegmentInfoEntry(
const std::string& segment_file_name,
271 uint64_t start_byte_offset,
275 void AdjustLastSegmentInfoEntryDuration(int64_t next_timestamp);
282 void RemoveOldSegment(int64_t start_time);
284 const HlsParams& hls_params_;
286 const std::string file_name_;
287 const std::string name_;
288 const std::string group_id_;
289 MediaInfo media_info_;
290 MediaPlaylistStreamType stream_type_ = MediaPlaylistStreamType::kUnknown;
292 bool use_byte_range_ =
false;
294 std::string supplemental_codec_;
295 media::FourCC compatible_brand_;
296 std::string language_;
297 std::vector<std::string> characteristics_;
298 bool forced_subtitle_ =
false;
299 uint32_t media_sequence_number_ = 0;
300 bool inserted_discontinuity_tag_ =
false;
301 int discontinuity_sequence_number_ = 0;
303 double longest_segment_duration_seconds_ = 0.0;
304 int32_t time_scale_ = 0;
306 BandwidthEstimator bandwidth_estimator_;
310 uint64_t previous_segment_end_offset_ = 0;
313 bool target_duration_set_ =
false;
314 int32_t target_duration_ = 0;
318 std::list<std::unique_ptr<HlsEntry>> entries_;
319 double current_buffer_depth_ = 0;
322 std::list<std::string> segments_to_be_removed_;
325 absl::Time reference_time_;
328 struct KeyFrameInfo {
330 uint64_t start_byte_offset;
332 std::string segment_file_name;
334 std::list<KeyFrameInfo> key_frames_;
336 DISALLOW_COPY_AND_ASSIGN(MediaPlaylist);