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);
114 const std::string& url,
115 const std::string& key_id,
116 const std::string& iv,
117 const std::string& key_format,
118 const std::string& key_format_versions);
125 MediaInfo GetMediaInfo()
const {
return media_info_; }
140 virtual void AddSegment(
const std::string& file_name,
143 uint64_t start_byte_offset,
157 uint64_t start_byte_offset,
172 const std::string& url,
173 const std::string& key_id,
174 const std::string& iv,
175 const std::string& key_format,
176 const std::string& key_format_versions);
196 virtual bool WriteToFile(
const std::filesystem::path& file_path,
197 bool event_to_vod_on_end_of_stream,
253 const std::string&
language()
const {
return language_; }
255 const std::vector<std::string>& characteristics()
const {
256 return characteristics_;
259 bool forced_subtitle()
const {
return forced_subtitle_; }
261 bool is_dvs()
const {
265 const char DVS_CHARACTERISTICS[] =
"public.accessibility.describes-video";
266 return characteristics_.size() == 1 &&
267 characteristics_[0] == DVS_CHARACTERISTICS;
272 void AddSegmentInfoEntry(
const std::string& segment_file_name,
275 uint64_t start_byte_offset,
279 void AdjustLastSegmentInfoEntryDuration(int64_t next_timestamp);
286 void RemoveOldSegment(int64_t start_time);
288 const HlsParams& hls_params_;
290 const std::string file_name_;
291 const std::string name_;
292 const std::string group_id_;
293 MediaInfo media_info_;
294 MediaPlaylistStreamType stream_type_ = MediaPlaylistStreamType::kUnknown;
296 bool use_byte_range_ =
false;
298 std::string supplemental_codec_;
299 media::FourCC compatible_brand_;
300 std::string language_;
301 std::vector<std::string> characteristics_;
302 bool forced_subtitle_ =
false;
303 uint32_t media_sequence_number_ = 0;
304 bool inserted_discontinuity_tag_ =
false;
305 int discontinuity_sequence_number_ = 0;
307 double longest_segment_duration_seconds_ = 0.0;
308 int32_t time_scale_ = 0;
310 BandwidthEstimator bandwidth_estimator_;
314 uint64_t previous_segment_end_offset_ = 0;
317 bool target_duration_set_ =
false;
318 int32_t target_duration_ = 0;
322 std::list<std::unique_ptr<HlsEntry>> entries_;
323 double current_buffer_depth_ = 0;
326 std::list<std::string> segments_to_be_removed_;
329 absl::Time reference_time_;
332 struct KeyFrameInfo {
334 uint64_t start_byte_offset;
336 std::string segment_file_name;
338 std::list<KeyFrameInfo> key_frames_;
340 DISALLOW_COPY_AND_ASSIGN(MediaPlaylist);