1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 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 * http://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 16 #ifndef NWEB_NATIVE_VIDEO_PLAYER_H 17 #define NWEB_NATIVE_VIDEO_PLAYER_H 18 19 #include <map> 20 #include <string> 21 22 namespace OHOS::NWeb { 23 24 enum class Preload { NONE = 0, METADATA, AUTO }; 25 26 enum class MediaType { VIDEO = 0, AUDIO }; 27 28 enum class SourceType { URL = 0, MSE }; 29 30 enum class MediaError { NETWORK_ERROR = 1, FORMAT_ERROR, DECODE_ERROR }; 31 32 enum class ReadyState { HAVE_NOTHING = 0, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA }; 33 34 enum class SuspendType { ENTER_BACK_FORWARD_CACHE = 0, ENTER_BACKGROUND, AUTO_CLEANUP }; 35 36 enum class NetworkState { EMPTY = 0, IDLE, LOADING, NETWORK_ERROR }; 37 38 enum class PlaybackStatus { PAUSED = 0, PLAYING }; 39 40 class NWebMediaSourceInfo { 41 public: 42 virtual ~NWebMediaSourceInfo() = default; 43 44 virtual SourceType GetType() = 0; 45 46 virtual std::string GetFormat() = 0; 47 48 virtual std::string GetSource() = 0; 49 }; 50 51 class NWebNativeMediaPlayerSurfaceInfo { 52 public: 53 virtual ~NWebNativeMediaPlayerSurfaceInfo() = default; 54 55 virtual std::string GetId() = 0; 56 57 virtual double GetX() = 0; 58 59 virtual double GetY() = 0; 60 61 virtual double GetWidth() = 0; 62 63 virtual double GetHeight() = 0; 64 }; 65 66 class NWebMediaInfo { 67 public: 68 virtual ~NWebMediaInfo() = default; 69 70 virtual Preload GetPreload() = 0; 71 72 virtual bool GetIsMuted() = 0; 73 74 virtual std::string GetEmbedId() = 0; 75 76 virtual std::string GetPosterUrl() = 0; 77 78 virtual MediaType GetMediaType() = 0; 79 80 virtual bool GetIsControlsShown() = 0; 81 82 virtual std::vector<std::string> GetControls() = 0; 83 84 virtual std::map<std::string, std::string> GetHeaders() = 0; 85 86 virtual std::map<std::string, std::string> GetAttributes() = 0; 87 88 virtual std::vector<std::shared_ptr<NWebMediaSourceInfo>> GetSourceInfos() = 0; 89 90 virtual std::shared_ptr<NWebNativeMediaPlayerSurfaceInfo> GetSurfaceInfo() = 0; 91 }; 92 93 class NWebNativeMediaPlayerHandler { 94 public: 95 virtual ~NWebNativeMediaPlayerHandler() = default; 96 97 virtual void HandleStatusChanged(PlaybackStatus status) = 0; 98 99 virtual void HandleVolumeChanged(double volume) = 0; 100 101 virtual void HandleMutedChanged(bool isMuted) = 0; 102 103 virtual void HandlePlaybackRateChanged(double playbackRate) = 0; 104 105 virtual void HandleDurationChanged(double duration) = 0; 106 107 virtual void HandleTimeUpdate(double playTime) = 0; 108 109 virtual void HandleBufferedEndTimeChanged(double bufferedEndTime) = 0; 110 111 virtual void HandleEnded() = 0; 112 113 virtual void HandleNetworkStateChanged(NetworkState state) = 0; 114 115 virtual void HandleReadyStateChanged(ReadyState state) = 0; 116 117 virtual void HandleFullScreenChanged(bool isFullScreen) = 0; 118 119 virtual void HandleSeeking() = 0; 120 121 virtual void HandleSeekFinished() = 0; 122 123 virtual void HandleError(MediaError error, const std::string& message) = 0; 124 125 virtual void HandleVideoSizeChanged(double width, double height) = 0; 126 }; 127 128 class NWebNativeMediaPlayerBridge { 129 public: 130 virtual ~NWebNativeMediaPlayerBridge() = default; 131 132 virtual void UpdateRect(double x, double y, double width, double height) = 0; 133 134 virtual void Play() = 0; 135 136 virtual void Pause() = 0; 137 138 virtual void Seek(double time) = 0; 139 140 virtual void SetVolume(double volume) = 0; 141 142 virtual void SetMuted(bool isMuted) = 0; 143 144 virtual void SetPlaybackRate(double playbackRate) = 0; 145 146 virtual void Release() = 0; 147 148 virtual void EnterFullScreen() = 0; 149 150 virtual void ExitFullScreen() = 0; 151 152 virtual void ResumeMediaPlayer() = 0; 153 154 virtual void SuspendMediaPlayer(SuspendType type) = 0; 155 }; 156 157 class NWebCreateNativeMediaPlayerCallback { 158 public: 159 virtual ~NWebCreateNativeMediaPlayerCallback() = default; 160 161 virtual std::shared_ptr<NWebNativeMediaPlayerBridge> OnCreate( 162 std::shared_ptr<NWebNativeMediaPlayerHandler> handler, std::shared_ptr<NWebMediaInfo> mediaInfo) = 0; 163 }; 164 165 } // namespace OHOS::NWeb 166 167 #endif // NWEB_NATIVE_VIDEO_PLAYER_H 168