Shaka Player Embedded
mse_media_player.h
Go to the documentation of this file.
1 // Copyright 2019 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef SHAKA_EMBEDDED_MEDIA_MSE_MEDIA_PLAYER_H_
16 #define SHAKA_EMBEDDED_MEDIA_MSE_MEDIA_PLAYER_H_
17 
18 #include <memory>
19 #include <string>
20 #include <vector>
21 
23 #include "shaka/media/decoder.h"
25 #include "shaka/media/renderer.h"
26 #include "src/debug/mutex.h"
30 
31 namespace shaka {
32 namespace media {
33 
39  public:
40  MseMediaPlayer(ClientList* clients, VideoRenderer* video_renderer,
41  AudioRenderer* audio_renderer);
42  ~MseMediaPlayer() override;
43 
44  void SetDecoders(Decoder* video_decoder, Decoder* audio_decoder);
45 
47  const MediaDecodingConfiguration& config) const override;
48  struct VideoPlaybackQuality VideoPlaybackQuality() const override;
49  void AddClient(MediaPlayer::Client* client) const override;
50  void RemoveClient(MediaPlayer::Client* client) const override;
51  std::vector<BufferedRange> GetBuffered() const override;
52  VideoReadyState ReadyState() const override;
53  VideoPlaybackState PlaybackState() const override;
54  std::vector<std::shared_ptr<MediaTrack>> AudioTracks() override;
55  std::vector<std::shared_ptr<const MediaTrack>> AudioTracks() const override;
56  std::vector<std::shared_ptr<MediaTrack>> VideoTracks() override;
57  std::vector<std::shared_ptr<const MediaTrack>> VideoTracks() const override;
58  std::vector<std::shared_ptr<TextTrack>> TextTracks() override;
59  std::vector<std::shared_ptr<const TextTrack>> TextTracks() const override;
60  std::shared_ptr<TextTrack> AddTextTrack(TextTrackKind kind,
61  const std::string& label,
62  const std::string& language) override;
63 
64  bool SetVideoFillMode(VideoFillMode mode) override;
65  uint32_t Height() const override;
66  uint32_t Width() const override;
67  double Volume() const override;
68  void SetVolume(double volume) override;
69  bool Muted() const override;
70  void SetMuted(bool muted) override;
71 
72  void Play() override;
73  void Pause() override;
74  double CurrentTime() const override;
75  void SetCurrentTime(double time) override;
76  double Duration() const override;
77  void SetDuration(double duration) override;
78  double PlaybackRate() const override;
79  void SetPlaybackRate(double rate) override;
80 
81  bool AttachSource(const std::string& src) override;
82  bool AttachMse() override;
83  bool AddMseBuffer(const std::string& mime, bool is_video,
84  const ElementaryStream* stream) override;
85  void LoadedMetaData(double duration) override;
86  void MseEndOfStream() override;
87  bool SetEmeImplementation(const std::string& key_system,
88  eme::Implementation* implementation) override;
89  void Detach() override;
90 
91  private:
92  class Source final {
93  public:
94  explicit Source(MseMediaPlayer* player);
95  ~Source();
96 
97  const DecodedStream* GetDecodedStream() const;
98  Decoder* GetDecoder() const;
99  void SetDecoder(Decoder* decoder);
100 
101  std::vector<BufferedRange> GetBuffered() const;
102  std::shared_ptr<DecodedFrame> GetFrame(double time) const;
103 
104  bool IsAttached() const;
105  void Attach(const ElementaryStream* stream);
106  void Detach();
107  void OnSeek();
108  void SetCdm(eme::Implementation* cdm);
109 
110  private:
111  const std::unique_ptr<Decoder> default_decoder_;
112 
113  DecodedStream decoded_frames_;
114  DecoderThread decoder_thread_;
115  const ElementaryStream* input_;
116 
117  Decoder* decoder_;
118  };
119 
120  void OnStatusChanged(VideoPlaybackState status);
121  void ReadyStateChanged(VideoReadyState ready_state);
122  void OnSeek();
123  void OnError(const std::string& error) override;
124  void OnWaitingForKey() override;
125  std::vector<BufferedRange> GetDecoded() const;
126 
127  mutable SharedMutex mutex_;
128  PipelineManager pipeline_manager_;
129  PipelineMonitor pipeline_monitor_;
130  VideoPlaybackState old_state_;
131  VideoReadyState ready_state_;
132 
133  Source video_;
134  Source audio_;
135 
136  VideoRenderer* const video_renderer_;
137  AudioRenderer* const audio_renderer_;
138  ClientList* const clients_;
139 };
140 
141 } // namespace media
142 } // namespace shaka
143 
144 #endif // SHAKA_EMBEDDED_MEDIA_MSE_MEDIA_PLAYER_H_
bool AttachSource(const std::string &src) override
std::vector< std::shared_ptr< MediaTrack > > VideoTracks() override
void SetVolume(double volume) override
std::shared_ptr< TextTrack > AddTextTrack(TextTrackKind kind, const std::string &label, const std::string &language) override
MediaCapabilitiesInfo DecodingInfo(const MediaDecodingConfiguration &config) const override
std::vector< std::shared_ptr< TextTrack > > TextTracks() override
VideoFillMode
Definition: utils.h:41
MseMediaPlayer(ClientList *clients, VideoRenderer *video_renderer, AudioRenderer *audio_renderer)
VideoPlaybackState PlaybackState() const override
VideoReadyState ReadyState() const override
uint32_t Width() const override
bool SetEmeImplementation(const std::string &key_system, eme::Implementation *implementation) override
double PlaybackRate() const override
bool AddMseBuffer(const std::string &mime, bool is_video, const ElementaryStream *stream) override
std::vector< BufferedRange > GetBuffered() const override
double CurrentTime() const override
std::vector< std::shared_ptr< MediaTrack > > AudioTracks() override
void SetPlaybackRate(double rate) override
double Volume() const override
void SetCurrentTime(double time) override
void SetDecoders(Decoder *video_decoder, Decoder *audio_decoder)
bool SetVideoFillMode(VideoFillMode mode) override
void AddClient(MediaPlayer::Client *client) const override
void SetDuration(double duration) override
uint32_t Height() const override
bool Muted() const override
double Duration() const override
void RemoveClient(MediaPlayer::Client *client) const override
void SetMuted(bool muted) override
void LoadedMetaData(double duration) override