55 enum class MediaPlaylistStreamType {
62 enum class EncryptionMethod {
78 const std::string& file_name,
79 const std::string& name,
80 const std::string& group_id);
83 const std::string& file_name()
const {
return file_name_; }
84 const std::string& name()
const {
return name_; }
85 const std::string& group_id()
const {
return group_id_; }
86 MediaPlaylistStreamType stream_type()
const {
return stream_type_; }
87 const std::string& codec()
const {
return codec_; }
88 const std::string& supplemental_codec()
const {
return supplemental_codec_; }
89 const media::FourCC& compatible_brand()
const {
return compatible_brand_; }
90 const std::list<std::unique_ptr<HlsEntry>>& entries()
const {
108 const std::vector<std::string>& characteristics);
116 const std::string& url,
117 const std::string& key_id,
118 const std::string& iv,
119 const std::string& key_format,
120 const std::string& key_format_versions);
127 MediaInfo GetMediaInfo()
const {
return media_info_; }
142 virtual void AddSegment(
const std::string& file_name,
145 uint64_t start_byte_offset,
159 uint64_t start_byte_offset,
174 const std::string& url,
175 const std::string& key_id,
176 const std::string& iv,
177 const std::string& key_format,
178 const std::string& key_format_versions);
198 virtual bool WriteToFile(
const std::filesystem::path& file_path,
199 bool event_to_vod_on_end_of_stream,
255 const std::string&
language()
const {
return language_; }
257 const std::vector<std::string>& characteristics()
const {
258 return characteristics_;
261 bool forced_subtitle()
const {
return forced_subtitle_; }
263 bool is_dvs()
const {
267 const char DVS_CHARACTERISTICS[] =
"public.accessibility.describes-video";
268 return characteristics_.size() == 1 &&
269 characteristics_[0] == DVS_CHARACTERISTICS;
274 void AddSegmentInfoEntry(
const std::string& segment_file_name,
277 uint64_t start_byte_offset,
281 void AdjustLastSegmentInfoEntryDuration(int64_t next_timestamp);
288 void RemoveOldSegment(int64_t start_time);
290 const HlsParams& hls_params_;
292 const std::string file_name_;
293 const std::string name_;
294 const std::string group_id_;
295 MediaInfo media_info_;
296 MediaPlaylistStreamType stream_type_ = MediaPlaylistStreamType::kUnknown;
298 bool use_byte_range_ =
false;
300 std::string supplemental_codec_;
301 media::FourCC compatible_brand_;
302 std::string language_;
303 std::vector<std::string> characteristics_;
304 bool forced_subtitle_ =
false;
305 uint32_t media_sequence_number_ = 0;
306 bool inserted_discontinuity_tag_ =
false;
307 int discontinuity_sequence_number_ = 0;
309 double longest_segment_duration_seconds_ = 0.0;
310 int32_t time_scale_ = 0;
312 BandwidthEstimator bandwidth_estimator_;
316 uint64_t previous_segment_end_offset_ = 0;
319 bool target_duration_set_ =
false;
320 int32_t target_duration_ = 0;
324 std::list<std::unique_ptr<HlsEntry>> entries_;
325 double current_buffer_depth_ = 0;
328 std::list<std::string> segments_to_be_removed_;
331 absl::Time reference_time_;
334 struct KeyFrameInfo {
336 uint64_t start_byte_offset;
338 std::string segment_file_name;
340 std::list<KeyFrameInfo> key_frames_;
342 DISALLOW_COPY_AND_ASSIGN(MediaPlaylist);