/* * Copyright (C) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef VIDEO_PLAYER_NAPI_H_ #define VIDEO_PLAYER_NAPI_H_ #include "player.h" #include "media_errors.h" #include "napi/native_api.h" #include "napi/native_node_api.h" #include "common_napi.h" #include "audio_info.h" namespace OHOS { namespace Media { class VideoPlayerNapi { public: static napi_value Init(napi_env env, napi_value exports); private: static napi_value Constructor(napi_env env, napi_callback_info info); static void Destructor(napi_env env, void *nativeObject, void *finalize); /** * createVideoPlayer(callback: AsyncCallback): void * createVideoPlayer(): Promise */ static napi_value CreateVideoPlayer(napi_env env, napi_callback_info info); /** * setDisplaySurface(surfaceId: string, callback: AsyncCallback): void * setDisplaySurface(surfaceId: string): Promise */ static napi_value SetDisplaySurface(napi_env env, napi_callback_info info); /** * prepare(callback: AsyncCallback): void * prepare(): Promise */ static napi_value Prepare(napi_env env, napi_callback_info info); /** * play(callback: AsyncCallback): void * play(): Promise */ static napi_value Play(napi_env env, napi_callback_info info); /** * pause(callback: AsyncCallback): void * pause(): Promise */ static napi_value Pause(napi_env env, napi_callback_info info); /** * stop(callback: AsyncCallback): void * stop(): Promise */ static napi_value Stop(napi_env env, napi_callback_info info); /** * reset(callback: AsyncCallback): void * reset(): Promise */ static napi_value Reset(napi_env env, napi_callback_info info); /** * release(callback: AsyncCallback): void * release(): Promise */ static napi_value Release(napi_env env, napi_callback_info info); /** * seek(timeMs: number, callback:AsyncCallback): void * seek(timeMs: number, mode:SeekMode, callback:AsyncCallback): void * seek(timeMs: number): Promise * seek(timeMs: number, mode:SeekMode): Promise */ static napi_value Seek(napi_env env, napi_callback_info info); /** * setSpeed(speed: number, callback:AsyncCallback): void * setSpeed(speed: number): Promise */ static napi_value SetSpeed(napi_env env, napi_callback_info info); /** * setVolume(vol: number, callback:AsyncCallback): void * setVolume(vol: number): Promise */ static napi_value SetVolume(napi_env env, napi_callback_info info); /** * SelectBitrate(bitRate: number, callback:AsyncCallback): void * SelectBitrate(bitRate: number): Promise */ static napi_value SelectBitrate(napi_env env, napi_callback_info info); /** * url: string */ static napi_value SetUrl(napi_env env, napi_callback_info info); static napi_value GetUrl(napi_env env, napi_callback_info info); /** * dataSrc?: AVDataSource */ static napi_value GetDataSrc(napi_env env, napi_callback_info info); static napi_value SetDataSrc(napi_env env, napi_callback_info info); /** * fdSrc: AVFileDescriptor */ static napi_value GetFdSrc(napi_env env, napi_callback_info info); static napi_value SetFdSrc(napi_env env, napi_callback_info info); /** * loop: boolenan */ static napi_value SetLoop(napi_env env, napi_callback_info info); static napi_value GetLoop(napi_env env, napi_callback_info info); /** * videoScaleType?: VideoScaleType */ static napi_value SetVideoScaleType(napi_env env, napi_callback_info info); static napi_value GetVideoScaleType(napi_env env, napi_callback_info info); /** * audioInterruptMode?: audio.AudioInterruptMode */ static napi_value GetAudioInterruptMode(napi_env env, napi_callback_info info); static napi_value SetAudioInterruptMode(napi_env env, napi_callback_info info); /** * readonly currentTime: number */ static napi_value GetCurrentTime(napi_env env, napi_callback_info info); /** * readonly duration: number */ static napi_value GetDuration(napi_env env, napi_callback_info info); /** * readonly state: VideoPlayState */ static napi_value GetState(napi_env env, napi_callback_info info); /** * readonly width: number */ static napi_value GetWidth(napi_env env, napi_callback_info info); /** * readonly height: number */ static napi_value GetHeight(napi_env env, napi_callback_info info); /** * getTrackDescription(callback:AsyncCallback>): void * getTrackDescription(): Promise> */ static napi_value GetTrackDescription(napi_env env, napi_callback_info info); /** * on(type: 'playbackCompleted', callback: Callback): void * on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, valut: number) => void): void * on(type: 'startRenderFrame', callback: Callback): void * on(type: 'videoSizeChanged', callback: (width: number, height: number)) => void): void * on(type: 'error', callback: ErrorCallback): void */ static napi_value On(napi_env env, napi_callback_info info); static void AsyncGetTrackDescription(napi_env env, void *data); static void AsyncSetDisplaySurface(napi_env env, void *data); static void CompleteAsyncWork(napi_env env, napi_status status, void *data); static int32_t ProcessWork(napi_env env, napi_status status, void *data); void ErrorCallback(MediaServiceExtErrCode errCode, std::string errMsg = "unknown"); void SetCallbackReference(const std::string &callbackName, std::shared_ptr ref); void CancelCallback(); VideoPlayerNapi(); ~VideoPlayerNapi(); static thread_local napi_ref constructor_; napi_env env_ = nullptr; std::shared_ptr nativePlayer_ = nullptr; std::shared_ptr jsCallback_ = nullptr; std::string url_ = ""; int32_t videoScaleType_ = 0; std::vector videoTrackInfoVec_; AVFileDescriptor rawFd_; OHOS::AudioStandard::InterruptMode interruptMode_ = AudioStandard::InterruptMode::SHARE_MODE; std::map> refMap_; }; } // namespace Media } // namespace OHOS #endif // VIDEO_PLAYER_NAPI_H_