7 #include "packager/media/formats/mp2t/ts_muxer.h"
14 const uint32_t kTsTimescale = 90000;
17 TsMuxer::TsMuxer(
const MuxerOptions& muxer_options) : Muxer(muxer_options) {}
18 TsMuxer::~TsMuxer() {}
20 Status TsMuxer::InitializeMuxer() {
21 if (streams().size() > 1u)
22 return Status(error::MUXER_FAILURE,
"Cannot handle more than one streams.");
24 segmenter_.reset(
new TsSegmenter(options(), muxer_listener()));
25 Status status = segmenter_->Initialize(*streams()[0]);
26 FireOnMediaStartEvent();
30 Status TsMuxer::Finalize() {
31 FireOnMediaEndEvent();
32 return segmenter_->Finalize();
35 Status TsMuxer::AddMediaSample(
size_t stream_id,
const MediaSample& sample) {
36 DCHECK_EQ(stream_id, 0u);
37 if (num_samples_ < 2) {
38 sample_durations_[num_samples_] =
39 sample.duration() * kTsTimescale / streams().front()->time_scale();
40 if (num_samples_ == 1 && muxer_listener())
44 return segmenter_->AddSample(sample);
47 Status TsMuxer::FinalizeSegment(
size_t stream_id,
48 const SegmentInfo& segment_info) {
49 DCHECK_EQ(stream_id, 0u);
50 return segment_info.is_subsegment
52 : segmenter_->FinalizeSegment(segment_info.start_timestamp,
53 segment_info.duration);
56 void TsMuxer::FireOnMediaStartEvent() {
57 if (!muxer_listener())
59 muxer_listener()->
OnMediaStart(options(), *streams().front(), kTsTimescale,
60 MuxerListener::kContainerMpeg2ts);
63 void TsMuxer::FireOnMediaEndEvent() {
64 if (!muxer_listener())
69 MuxerListener::MediaRanges range;