DASH Media Packaging SDK
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator
muxer.h
1 // Copyright 2014 Google Inc. All rights reserved.
2 //
3 // Use of this source code is governed by a BSD-style
4 // license that can be found in the LICENSE file or at
5 // https://developers.google.com/open-source/licenses/bsd
6 //
7 // Defines the muxer interface.
8 
9 #ifndef MEDIA_BASE_MUXER_H_
10 #define MEDIA_BASE_MUXER_H_
11 
12 #include <memory>
13 #include <vector>
14 
15 #include "packager/base/time/clock.h"
16 #include "packager/media/base/media_handler.h"
17 #include "packager/media/base/muxer_options.h"
18 #include "packager/media/event/muxer_listener.h"
19 #include "packager/media/event/progress_listener.h"
20 #include "packager/status.h"
21 
22 namespace shaka {
23 namespace media {
24 
25 class MediaSample;
26 
30 class Muxer : public MediaHandler {
31  public:
32  explicit Muxer(const MuxerOptions& options);
33  virtual ~Muxer();
34 
37  void Cancel();
38 
41  void SetMuxerListener(std::unique_ptr<MuxerListener> muxer_listener);
42 
45  void SetProgressListener(std::unique_ptr<ProgressListener> progress_listener);
46 
47  const std::vector<std::shared_ptr<StreamInfo>>& streams() const {
48  return streams_;
49  }
50 
57  void set_clock(base::Clock* clock) {
58  clock_ = clock;
59  }
60 
61  protected:
64  Status InitializeInternal() override { return Status::OK; }
65  Status Process(std::unique_ptr<StreamData> stream_data) override;
66  Status OnFlushRequest(size_t input_stream_index) override { return Finalize(); }
68 
69  const MuxerOptions& options() const { return options_; }
70  MuxerListener* muxer_listener() { return muxer_listener_.get(); }
71  ProgressListener* progress_listener() { return progress_listener_.get(); }
72  base::Clock* clock() { return clock_; }
73 
74  private:
75  // Initialize the muxer.
76  virtual Status InitializeMuxer() = 0;
77 
78  // Final clean up.
79  virtual Status Finalize() = 0;
80 
81  // Add a new sample.
82  virtual Status AddSample(size_t stream_id,
83  std::shared_ptr<MediaSample> sample) = 0;
84 
85  // Finalize the segment or subsegment.
86  virtual Status FinalizeSegment(size_t stream_id,
87  std::shared_ptr<SegmentInfo> segment_info) = 0;
88 
89  MuxerOptions options_;
90  std::vector<std::shared_ptr<StreamInfo>> streams_;
91  std::vector<uint8_t> current_key_id_;
92  bool encryption_started_ = false;
93  bool cancelled_;
94 
95  std::unique_ptr<MuxerListener> muxer_listener_;
96  std::unique_ptr<ProgressListener> progress_listener_;
97  // An external injected clock, can be NULL.
98  base::Clock* clock_;
99 
100  DISALLOW_COPY_AND_ASSIGN(Muxer);
101 };
102 
103 } // namespace media
104 } // namespace shaka
105 
106 #endif // MEDIA_BASE_MUXER_H_
Status OnFlushRequest(size_t input_stream_index) override
Event handler for flush request at the specific input stream index.
Definition: muxer.h:66
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:20
void SetProgressListener(std::unique_ptr< ProgressListener > progress_listener)
Definition: muxer.cc:32
Status InitializeInternal() override
Definition: muxer.h:64
Status Process(std::unique_ptr< StreamData > stream_data) override
Definition: muxer.cc:37
void set_clock(base::Clock *clock)
Definition: muxer.h:57
void SetMuxerListener(std::unique_ptr< MuxerListener > muxer_listener)
Definition: muxer.cc:28