52 const std::vector<std::shared_ptr<const StreamInfo>>& streams()
const {
62 void set_clock(std::shared_ptr<Clock> clock) { clock_ = clock; }
68 Status
Process(std::unique_ptr<StreamData> stream_data)
override;
73 MuxerListener* muxer_listener() {
return muxer_listener_.get(); }
74 ProgressListener* progress_listener() {
return progress_listener_.get(); }
76 uint64_t Now()
const {
77 auto duration = clock_->now().time_since_epoch();
79 std::chrono::duration_cast<std::chrono::seconds>(duration).count();
80 return static_cast<uint64_t
>(seconds);
84 Muxer(
const Muxer&) =
delete;
85 Muxer& operator=(
const Muxer&) =
delete;
90 virtual Status InitializeMuxer() = 0;
93 virtual Status Finalize() = 0;
97 virtual Status AddMediaSample(
size_t stream_id,
const MediaSample& sample);
101 virtual Status AddTextSample(
size_t stream_id,
const TextSample& sample);
104 virtual Status FinalizeSegment(
size_t stream_id,
105 const SegmentInfo& segment_info) = 0;
109 Status ReinitializeMuxer(int64_t timestamp);
111 MuxerOptions options_;
112 std::vector<std::shared_ptr<const StreamInfo>> streams_;
113 std::vector<uint8_t> current_key_id_;
114 bool encryption_started_ =
false;
115 bool cancelled_ =
false;
117 std::unique_ptr<MuxerListener> muxer_listener_;
118 std::unique_ptr<ProgressListener> progress_listener_;
119 std::shared_ptr<Clock> clock_;
123 std::string output_file_template_;
124 size_t output_file_index_ = 1;