Shaka Player Embedded
media_element.h
Go to the documentation of this file.
1 // Copyright 2016 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_JS_MSE_MEDIA_ELEMENT_H_
16 #define SHAKA_EMBEDDED_JS_MSE_MEDIA_ELEMENT_H_
17 
18 #include <memory>
19 #include <string>
20 #include <unordered_map>
21 #include <vector>
22 
24 #include "shaka/optional.h"
25 #include "src/core/ref_ptr.h"
26 #include "src/js/dom/element.h"
27 #include "src/js/eme/media_keys.h"
28 #include "src/js/mse/media_error.h"
29 #include "src/js/mse/media_track.h"
30 #include "src/js/mse/text_track.h"
31 #include "src/js/mse/track_list.h"
33 #include "src/mapping/enum.h"
35 #include "src/mapping/promise.h"
36 #include "src/media/types.h"
37 #include "src/util/clock.h"
38 
39 namespace shaka {
40 namespace js {
41 namespace mse {
42 
43 class MediaSource;
44 class TimeRanges;
45 
46 enum class CanPlayTypeEnum {
47  EMPTY,
48  MAYBE,
49  PROBABLY,
50 };
51 
54 
55  public:
57  const std::string& name,
58  media::MediaPlayer* player);
59 
60  void Trace(memory::HeapTracer* tracer) const override;
61  void RemoveAttribute(const std::string& attr) override;
62 
63  void Detach();
64 
65  // Encrypted media extensions
66  Promise SetMediaKeys(RefPtr<eme::MediaKeys> media_keys);
70 
71  // HTMLMediaElement members.
72  void Load();
73  CanPlayTypeEnum CanPlayType(const std::string& type);
74 
75  bool autoplay;
76  bool loop;
82 
83  media::VideoReadyState GetReadyState() const;
84  RefPtr<TimeRanges> Buffered() const;
85  RefPtr<TimeRanges> Seekable() const;
86  std::string Source() const;
87  ExceptionOr<void> SetSource(const std::string& src);
88  double CurrentTime() const;
89  ExceptionOr<void> SetCurrentTime(double time);
90  double Duration() const;
91  double PlaybackRate() const;
92  ExceptionOr<void> SetPlaybackRate(double rate);
93  double DefaultPlaybackRate() const;
94  ExceptionOr<void> SetDefaultPlaybackRate(double rate);
95  bool Muted() const;
96  ExceptionOr<void> SetMuted(bool muted);
97  double Volume() const;
98  ExceptionOr<void> SetVolume(double volume);
99 
100  bool Paused() const;
101  bool Seeking() const;
102  bool Ended() const;
103 
104  ExceptionOr<void> Play();
105  ExceptionOr<void> Pause();
107  optional<std::string> label,
108  optional<std::string> language);
109 
110  protected:
112 
113  private:
114  void OnReadyStateChanged(media::VideoReadyState old_state,
115  media::VideoReadyState new_state) override;
116  void OnPlaybackStateChanged(media::VideoPlaybackState old_state,
117  media::VideoPlaybackState new_state) override;
118  void OnPlaybackRateChanged(double old_rate, double new_rate) override;
119  void OnError(const std::string& error) override;
120  void OnPlay() override;
121  void OnSeeking() override;
122  void OnWaitingForKey() override;
123 
124  Member<MediaSource> media_source_;
125  const util::Clock* const clock_;
126  std::string src_;
127  double default_playback_rate_;
128 };
129 
131  : public BackingObjectFactory<HTMLMediaElement, dom::Element> {
132  public:
134 };
135 
136 } // namespace mse
137 } // namespace js
138 } // namespace shaka
139 
141 
143  AddMapping(Enum::EMPTY, "");
144  AddMapping(Enum::MAYBE, "maybe");
145  AddMapping(Enum::PROBABLY, "probably");
146 }
147 
148 #endif // SHAKA_EMBEDDED_JS_MSE_MEDIA_ELEMENT_H_
Member< VideoTrackList > video_tracks
Definition: media_element.h:80
const char * name
Member< AudioTrackList > audio_tracks
Definition: media_element.h:79
Member< TextTrackList > text_tracks
Definition: media_element.h:81
media::MediaPlayer * player_
ExceptionCode type
Member< MediaError > error
Definition: media_element.h:78
CONVERT_ENUM_AS_NUMBER(shaka::media, VideoReadyState)
DEFINE_ENUM_MAPPING(shaka::js::mse, CanPlayTypeEnum)
#define DECLARE_TYPE_INFO(type)
Member< eme::MediaKeys > media_keys
Definition: media_element.h:67