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