48 const std::vector<std::shared_ptr<const StreamInfo>>& streams()
const {
58 void set_clock(std::shared_ptr<Clock> clock) { clock_ = clock; }
64 Status
Process(std::unique_ptr<StreamData> stream_data)
override;
69 MuxerListener* muxer_listener() {
return muxer_listener_.get(); }
70 ProgressListener* progress_listener() {
return progress_listener_.get(); }
72 uint64_t Now()
const {
73 auto duration = clock_->now().time_since_epoch();
75 std::chrono::duration_cast<std::chrono::seconds>(duration).count();
76 return static_cast<uint64_t
>(seconds);
80 Muxer(
const Muxer&) =
delete;
81 Muxer& operator=(
const Muxer&) =
delete;
86 virtual Status InitializeMuxer() = 0;
89 virtual Status Finalize() = 0;
93 virtual Status AddMediaSample(
size_t stream_id,
const MediaSample& sample);
97 virtual Status AddTextSample(
size_t stream_id,
const TextSample& sample);
100 virtual Status FinalizeSegment(
102 const SegmentInfo& segment_info) = 0;
106 Status ReinitializeMuxer(int64_t timestamp);
108 MuxerOptions options_;
109 std::vector<std::shared_ptr<const StreamInfo>> streams_;
110 std::vector<uint8_t> current_key_id_;
111 bool encryption_started_ =
false;
112 bool cancelled_ =
false;
114 std::unique_ptr<MuxerListener> muxer_listener_;
115 std::unique_ptr<ProgressListener> progress_listener_;
116 std::shared_ptr<Clock> clock_;
120 std::string output_file_template_;
121 size_t output_file_index_ = 1;