Shaka Packager SDK
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 PACKAGER_MEDIA_BASE_MUXER_H_
10 #define PACKAGER_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<const 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(
83  size_t stream_id,
84  const MediaSample& sample) = 0;
85 
86  // Finalize the segment or subsegment.
87  virtual Status FinalizeSegment(
88  size_t stream_id,
89  const SegmentInfo& segment_info) = 0;
90 
91  MuxerOptions options_;
92  std::vector<std::shared_ptr<const StreamInfo>> streams_;
93  std::vector<uint8_t> current_key_id_;
94  bool encryption_started_ = false;
95  bool cancelled_;
96 
97  std::unique_ptr<MuxerListener> muxer_listener_;
98  std::unique_ptr<ProgressListener> progress_listener_;
99  // An external injected clock, can be NULL.
100  base::Clock* clock_;
101 
102  DISALLOW_COPY_AND_ASSIGN(Muxer);
103 };
104 
105 } // namespace media
106 } // namespace shaka
107 
108 #endif // PACKAGER_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
All the methods that are virtual are virtual for mocking.
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:20
This class listens to progress updates events.
Class to hold a media sample.
Definition: media_sample.h:22
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