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);
188 virtual bool WriteToFile(
const std::filesystem::path& file_path);
243 const std::string&
language()
const {
return language_; }
245 const std::vector<std::string>& characteristics()
const {
246 return characteristics_;
249 bool forced_subtitle()
const {
return forced_subtitle_; }
251 bool is_dvs()
const {
255 const char DVS_CHARACTERISTICS[] =
"public.accessibility.describes-video";
256 return characteristics_.size() == 1 &&
257 characteristics_[0] == DVS_CHARACTERISTICS;
262 void AddSegmentInfoEntry(
const std::string& segment_file_name,
265 uint64_t start_byte_offset,
269 void AdjustLastSegmentInfoEntryDuration(int64_t next_timestamp);
276 void RemoveOldSegment(int64_t start_time);
278 const HlsParams& hls_params_;
280 const std::string file_name_;
281 const std::string name_;
282 const std::string group_id_;
283 MediaInfo media_info_;
284 MediaPlaylistStreamType stream_type_ = MediaPlaylistStreamType::kUnknown;
286 bool use_byte_range_ =
false;
288 std::string supplemental_codec_;
289 media::FourCC compatible_brand_;
290 std::string language_;
291 std::vector<std::string> characteristics_;
292 bool forced_subtitle_ =
false;
293 uint32_t media_sequence_number_ = 0;
294 bool inserted_discontinuity_tag_ =
false;
295 int discontinuity_sequence_number_ = 0;
297 double longest_segment_duration_seconds_ = 0.0;
298 int32_t time_scale_ = 0;
300 BandwidthEstimator bandwidth_estimator_;
304 uint64_t previous_segment_end_offset_ = 0;
307 bool target_duration_set_ =
false;
308 int32_t target_duration_ = 0;
312 std::list<std::unique_ptr<HlsEntry>> entries_;
313 double current_buffer_depth_ = 0;
316 std::list<std::string> segments_to_be_removed_;
319 absl::Time reference_time_;
322 struct KeyFrameInfo {
324 uint64_t start_byte_offset;
326 std::string segment_file_name;
328 std::list<KeyFrameInfo> key_frames_;
330 DISALLOW_COPY_AND_ASSIGN(MediaPlaylist);