49 std::unique_ptr<FileType> ftyp,
50 std::unique_ptr<Movie> moov);
61 const std::vector<std::shared_ptr<const StreamInfo>>& streams,
94 virtual std::vector<Range> GetSegmentRanges() = 0;
96 int32_t GetReferenceTimeScale()
const;
102 aes128_encryption_config_ = config;
108 return sample_durations_[num_samples_ < 2 ? 0 : 1];
117 const MuxerOptions& options()
const {
return options_; }
118 FileType* ftyp() {
return ftyp_.get(); }
119 Movie* moov() {
return moov_.get(); }
120 BufferWriter* fragment_buffer() {
return fragment_buffer_.get(); }
121 SegmentIndex* sidx() {
return sidx_.get(); }
122 MuxerListener* muxer_listener() {
return muxer_listener_; }
123 uint64_t progress_target() {
return progress_target_; }
124 const std::vector<KeyFrameInfo>& key_frame_infos()
const {
125 return key_frame_infos_;
128 void set_progress_target(uint64_t progress_target) {
129 progress_target_ = progress_target;
132 const EncryptionConfig& aes128_encryption_config()
const {
133 return aes128_encryption_config_;
137 virtual Status DoInitialize() = 0;
138 virtual Status DoFinalize() = 0;
139 virtual Status DoFinalizeSegment(int64_t segment_number) = 0;
140 virtual Status DoFinalizeChunk(int64_t segment_number) {
return Status::OK; }
142 uint32_t GetReferenceStreamId();
144 void FinalizeFragmentForKeyRotation(
146 bool fragment_encrypted,
147 const EncryptionConfig& encryption_config);
149 const MuxerOptions& options_;
150 std::unique_ptr<FileType> ftyp_;
151 std::unique_ptr<Movie> moov_;
152 std::unique_ptr<MovieFragment> moof_;
153 std::unique_ptr<BufferWriter> fragment_buffer_;
154 std::unique_ptr<SegmentIndex> sidx_;
155 std::vector<std::unique_ptr<Fragmenter>> fragmenters_;
156 MuxerListener* muxer_listener_ =
nullptr;
157 ProgressListener* progress_listener_ =
nullptr;
158 uint64_t progress_target_ = 0u;
159 uint64_t accumulated_progress_ = 0u;
160 int64_t sample_durations_[2] = {0, 0};
161 size_t num_samples_ = 0;
162 std::vector<uint64_t> stream_durations_;
163 std::vector<KeyFrameInfo> key_frame_infos_;
165 EncryptionConfig aes128_encryption_config_;
167 DISALLOW_COPY_AND_ASSIGN(Segmenter);