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/fourccs.h"
17 #include "packager/media/base/muxer_options.h"
18 #include "packager/media/base/status.h"
19 #include "packager/media/event/muxer_listener.h"
20 #include "packager/media/event/progress_listener.h"
21 
22 namespace shaka {
23 namespace media {
24 
25 class KeySource;
26 class MediaSample;
27 class MediaStream;
28 
32 class Muxer {
33  public:
34  explicit Muxer(const MuxerOptions& options);
35  virtual ~Muxer();
36 
37  // TODO(kqyang): refactor max_sd_pixels through crypto_period_duration into
38  // an encapsulated EncryptionParams structure.
39 
60  void SetKeySource(KeySource* encryption_key_source,
61  uint32_t max_sd_pixels,
62  uint32_t max_hd_pixels,
63  uint32_t max_uhd1_pixels,
64  double clear_lead_in_seconds,
65  double crypto_period_duration_in_seconds,
66  FourCC protection_scheme);
67 
69  void AddStream(MediaStream* stream);
70 
72  Status Run();
73 
76  void Cancel();
77 
80  void SetMuxerListener(std::unique_ptr<MuxerListener> muxer_listener);
81 
84  void SetProgressListener(std::unique_ptr<ProgressListener> progress_listener);
85 
86  const std::vector<MediaStream*>& streams() const { return streams_; }
87 
94  void set_clock(base::Clock* clock) {
95  clock_ = clock;
96  }
97 
98  protected:
99  const MuxerOptions& options() const { return options_; }
100  KeySource* encryption_key_source() {
101  return encryption_key_source_;
102  }
103  uint32_t max_sd_pixels() const { return max_sd_pixels_; }
104  uint32_t max_hd_pixels() const { return max_hd_pixels_; }
105  uint32_t max_uhd1_pixels() const { return max_uhd1_pixels_; }
106  double clear_lead_in_seconds() const { return clear_lead_in_seconds_; }
107  double crypto_period_duration_in_seconds() const {
108  return crypto_period_duration_in_seconds_;
109  }
110  MuxerListener* muxer_listener() { return muxer_listener_.get(); }
111  ProgressListener* progress_listener() { return progress_listener_.get(); }
112  base::Clock* clock() { return clock_; }
113  FourCC protection_scheme() const { return protection_scheme_; }
114 
115  private:
116  friend class MediaStream; // Needed to access AddSample.
117 
118  // Add new media sample.
119  Status AddSample(const MediaStream* stream,
120  std::shared_ptr<MediaSample> sample);
121 
122  // Initialize the muxer.
123  virtual Status Initialize() = 0;
124 
125  // Final clean up.
126  virtual Status Finalize() = 0;
127 
128  // AddSample implementation.
129  virtual Status DoAddSample(const MediaStream* stream,
130  std::shared_ptr<MediaSample> sample) = 0;
131 
132  MuxerOptions options_;
133  bool initialized_;
134  std::vector<MediaStream*> streams_;
135  KeySource* encryption_key_source_;
136  uint32_t max_sd_pixels_;
137  uint32_t max_hd_pixels_;
138  uint32_t max_uhd1_pixels_;
139  double clear_lead_in_seconds_;
140  double crypto_period_duration_in_seconds_;
141  FourCC protection_scheme_;
142  bool cancelled_;
143 
144  std::unique_ptr<MuxerListener> muxer_listener_;
145  std::unique_ptr<ProgressListener> progress_listener_;
146  // An external injected clock, can be NULL.
147  base::Clock* clock_;
148 
149  DISALLOW_COPY_AND_ASSIGN(Muxer);
150 };
151 
152 } // namespace media
153 } // namespace shaka
154 
155 #endif // MEDIA_BASE_MUXER_H_
This structure contains the list of configuration options for Muxer.
Definition: muxer_options.h:18
void AddStream(MediaStream *stream)
Add video/audio stream.
Definition: muxer.cc:50
Status Run()
Drive the remuxing from muxer side (pull).
Definition: muxer.cc:56
void SetProgressListener(std::unique_ptr< ProgressListener > progress_listener)
Definition: muxer.cc:98
KeySource is responsible for encryption key acquisition.
Definition: key_source.h:30
void SetKeySource(KeySource *encryption_key_source, uint32_t max_sd_pixels, uint32_t max_hd_pixels, uint32_t max_uhd1_pixels, double clear_lead_in_seconds, double crypto_period_duration_in_seconds, FourCC protection_scheme)
Definition: muxer.cc:33
void set_clock(base::Clock *clock)
Definition: muxer.h:94
void SetMuxerListener(std::unique_ptr< MuxerListener > muxer_listener)
Definition: muxer.cc:94