1 /* 2 * Copyright (C) 2021 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 VIDEO_PLAYER_NAPI_H_ 17 #define VIDEO_PLAYER_NAPI_H_ 18 19 #include "player.h" 20 #include "media_errors.h" 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 #include "common_napi.h" 24 #include "audio_info.h" 25 26 namespace OHOS { 27 namespace Media { 28 class VideoPlayerNapi { 29 public: 30 static napi_value Init(napi_env env, napi_value exports); 31 32 private: 33 static napi_value Constructor(napi_env env, napi_callback_info info); 34 static void Destructor(napi_env env, void *nativeObject, void *finalize); 35 /** 36 * createVideoPlayer(callback: AsyncCallback<VideoPlayer>): void 37 * createVideoPlayer(): Promise<VideoPlayer> 38 */ 39 static napi_value CreateVideoPlayer(napi_env env, napi_callback_info info); 40 /** 41 * setDisplaySurface(surfaceId: string, callback: AsyncCallback<void>): void 42 * setDisplaySurface(surfaceId: string): Promise<void> 43 */ 44 static napi_value SetDisplaySurface(napi_env env, napi_callback_info info); 45 /** 46 * prepare(callback: AsyncCallback<void>): void 47 * prepare(): Promise<void> 48 */ 49 static napi_value Prepare(napi_env env, napi_callback_info info); 50 /** 51 * play(callback: AsyncCallback<void>): void 52 * play(): Promise<void> 53 */ 54 static napi_value Play(napi_env env, napi_callback_info info); 55 /** 56 * pause(callback: AsyncCallback<void>): void 57 * pause(): Promise<void> 58 */ 59 static napi_value Pause(napi_env env, napi_callback_info info); 60 /** 61 * stop(callback: AsyncCallback<void>): void 62 * stop(): Promise<void> 63 */ 64 static napi_value Stop(napi_env env, napi_callback_info info); 65 /** 66 * reset(callback: AsyncCallback<void>): void 67 * reset(): Promise<void> 68 */ 69 static napi_value Reset(napi_env env, napi_callback_info info); 70 /** 71 * release(callback: AsyncCallback<void>): void 72 * release(): Promise<void> 73 */ 74 static napi_value Release(napi_env env, napi_callback_info info); 75 /** 76 * seek(timeMs: number, callback:AsyncCallback<number>): void 77 * seek(timeMs: number, mode:SeekMode, callback:AsyncCallback<number>): void 78 * seek(timeMs: number): Promise<number> 79 * seek(timeMs: number, mode:SeekMode): Promise<number> 80 */ 81 static napi_value Seek(napi_env env, napi_callback_info info); 82 /** 83 * setSpeed(speed: number, callback:AsyncCallback<number>): void 84 * setSpeed(speed: number): Promise<number> 85 */ 86 static napi_value SetSpeed(napi_env env, napi_callback_info info); 87 /** 88 * setVolume(vol: number, callback:AsyncCallback<void>): void 89 * setVolume(vol: number): Promise<void> 90 */ 91 static napi_value SetVolume(napi_env env, napi_callback_info info); 92 93 /** 94 * SelectBitrate(bitRate: number, callback:AsyncCallback<number>): void 95 * SelectBitrate(bitRate: number): Promise<number> 96 */ 97 static napi_value SelectBitrate(napi_env env, napi_callback_info info); 98 99 /** 100 * url: string 101 */ 102 static napi_value SetUrl(napi_env env, napi_callback_info info); 103 static napi_value GetUrl(napi_env env, napi_callback_info info); 104 /** 105 * dataSrc?: AVDataSource 106 */ 107 static napi_value GetDataSrc(napi_env env, napi_callback_info info); 108 static napi_value SetDataSrc(napi_env env, napi_callback_info info); 109 /** 110 * fdSrc: AVFileDescriptor 111 */ 112 static napi_value GetFdSrc(napi_env env, napi_callback_info info); 113 static napi_value SetFdSrc(napi_env env, napi_callback_info info); 114 /** 115 * loop: boolenan 116 */ 117 static napi_value SetLoop(napi_env env, napi_callback_info info); 118 static napi_value GetLoop(napi_env env, napi_callback_info info); 119 120 /** 121 * videoScaleType?: VideoScaleType 122 */ 123 static napi_value SetVideoScaleType(napi_env env, napi_callback_info info); 124 static napi_value GetVideoScaleType(napi_env env, napi_callback_info info); 125 126 /** 127 * audioInterruptMode?: audio.AudioInterruptMode 128 */ 129 static napi_value GetAudioInterruptMode(napi_env env, napi_callback_info info); 130 static napi_value SetAudioInterruptMode(napi_env env, napi_callback_info info); 131 /** 132 * readonly currentTime: number 133 */ 134 static napi_value GetCurrentTime(napi_env env, napi_callback_info info); 135 /** 136 * readonly duration: number 137 */ 138 static napi_value GetDuration(napi_env env, napi_callback_info info); 139 /** 140 * readonly state: VideoPlayState 141 */ 142 static napi_value GetState(napi_env env, napi_callback_info info); 143 /** 144 * readonly width: number 145 */ 146 static napi_value GetWidth(napi_env env, napi_callback_info info); 147 /** 148 * readonly height: number 149 */ 150 static napi_value GetHeight(napi_env env, napi_callback_info info); 151 /** 152 * getTrackDescription(callback:AsyncCallback<Array<MediaDescription>>): void 153 * getTrackDescription(): Promise<Array<MediaDescription>> 154 */ 155 static napi_value GetTrackDescription(napi_env env, napi_callback_info info); 156 /** 157 * on(type: 'playbackCompleted', callback: Callback<void>): void 158 * on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, valut: number) => void): void 159 * on(type: 'startRenderFrame', callback: Callback<void>): void 160 * on(type: 'videoSizeChanged', callback: (width: number, height: number)) => void): void 161 * on(type: 'error', callback: ErrorCallback): void 162 */ 163 static napi_value On(napi_env env, napi_callback_info info); 164 static void AsyncGetTrackDescription(napi_env env, void *data); 165 static void AsyncSetDisplaySurface(napi_env env, void *data); 166 static void CompleteAsyncWork(napi_env env, napi_status status, void *data); 167 static int32_t ProcessWork(napi_env env, napi_status status, void *data); 168 void ErrorCallback(MediaServiceExtErrCode errCode, std::string errMsg = "unknown"); 169 void SetCallbackReference(const std::string &callbackName, std::shared_ptr<AutoRef> ref); 170 void CancelCallback(); 171 VideoPlayerNapi(); 172 ~VideoPlayerNapi(); 173 174 static thread_local napi_ref constructor_; 175 napi_env env_ = nullptr; 176 std::shared_ptr<Player> nativePlayer_ = nullptr; 177 std::shared_ptr<PlayerCallback> jsCallback_ = nullptr; 178 std::string url_ = ""; 179 int32_t videoScaleType_ = 0; 180 std::vector<Format> videoTrackInfoVec_; 181 AVFileDescriptor rawFd_; 182 OHOS::AudioStandard::InterruptMode interruptMode_ = AudioStandard::InterruptMode::SHARE_MODE; 183 std::map<std::string, std::shared_ptr<AutoRef>> refMap_; 184 }; 185 } // namespace Media 186 } // namespace OHOS 187 #endif // VIDEO_PLAYER_NAPI_H_ 188