From c174b7281384f20d7382c1dc542b912e658033b6 Mon Sep 17 00:00:00 2001 From: hanwenzhao Date: Thu, 29 May 2025 21:55:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BC=80=E6=94=BE=E6=9F=A5=E8=AF=A2pid?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hanwenzhao Change-Id: Ia5fa05ce6bd365ef5ea47c13c36f8035d612dc4a --- interfaces/inner_api/native/player_framework.versionscript | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/inner_api/native/player_framework.versionscript b/interfaces/inner_api/native/player_framework.versionscript index 5ed99716b..ba12d81f0 100644 --- a/interfaces/inner_api/native/player_framework.versionscript +++ b/interfaces/inner_api/native/player_framework.versionscript @@ -15,6 +15,7 @@ global: extern "C++" { *OHOS::Media::PlayerFactory::CreatePlayer*; + *OHOS::Media::PlayerFactory::GetPlayerPids*; *OHOS::Media::RecorderFactory::CreateRecorder*; *OHOS::Media::TransCoderFactory::CreateTransCoder*; *OHOS::Media::VideoEncoderFactory::CreateBy*; -- Gitee From fed464a9e175112e2859e830c3df8ab33d942439 Mon Sep 17 00:00:00 2001 From: hanwenzhao Date: Wed, 18 Jun 2025 20:51:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DSetDataSource=E5=90=8E?= =?UTF-8?q?=E5=86=8DSetCallback=E6=97=A0=E6=B3=95=E6=94=B6=E5=88=B0init?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=9B=9E=E8=B0=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hanwenzhao Change-Id: Id4a3d5331599aafec684752daae1201e04917888 --- frameworks/js/avplayer/avplayer_napi.cpp | 42 ++++++++++++++++++------ frameworks/js/avplayer/avplayer_napi.h | 2 ++ 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/frameworks/js/avplayer/avplayer_napi.cpp b/frameworks/js/avplayer/avplayer_napi.cpp index c94fae447..76158fb9e 100644 --- a/frameworks/js/avplayer/avplayer_napi.cpp +++ b/frameworks/js/avplayer/avplayer_napi.cpp @@ -1982,20 +1982,40 @@ napi_value AVPlayerNapi::JsSetDataSrc(napi_env env, napi_callback_info info) CHECK_AND_RETURN_RET_LOG(status == napi_ok && ref != nullptr, result, "failed to create reference!"); std::shared_ptr autoRef = std::make_shared(env, ref); jsPlayer->dataSrcCb_->SaveCallbackReference(READAT_CALLBACK_NAME, autoRef); + jsPlayer->SetDataSource(jsPlayer); + MEDIA_LOGI("JsSetDataSrc Out"); + return result; +} - if (jsPlayer->player_ != nullptr) { - if (jsPlayer->player_->SetSource(jsPlayer->dataSrcCb_) != MSERR_OK) { - jsPlayer->OnErrorCb(MSERR_EXT_API9_INVALID_PARAMETER, "player SetSource DataSrc failed"); - } else { - jsPlayer->state_ = PlayerStates::PLAYER_INITIALIZED; - } - if (jsPlayer->dataSrcDescriptor_.fileSize == -1) { - jsPlayer->isLiveStream_ = true; +void AVPlayerNapi::SetDataSource(AVPlayerNapi *jsPlayer) +{ + MEDIA_LOGI("SetDataSource while setStateChange_ %{public}d", jsPlayer->hasSetStateChangeCb_); + if (jsPlayer->hasSetStateChangeCb_) { + if (jsPlayer->player_ != nullptr) { + if (jsPlayer->player_->SetSource(jsPlayer->dataSrcCb_) != MSERR_OK) { + jsPlayer->OnErrorCb(MSERR_EXT_API9_INVALID_PARAMETER, "player SetSource DataSrc failed"); + } else { + jsPlayer->state_ = PlayerStates::PLAYER_INITIALIZED; + } + if (jsPlayer->dataSrcDescriptor_.fileSize == -1) { + jsPlayer->isLiveStream_ = true; + } } + return; } - MEDIA_LOGI("JsSetDataSrc Out"); - return result; + auto task = std::make_shared>([jsPlayer]() { + MEDIA_LOGI("SetDataSrc Task"); + if (jsPlayer->player_ != nullptr) { + if (jsPlayer->player_->SetSource(jsPlayer->dataSrcCb_) != MSERR_OK) { + jsPlayer->OnErrorCb(MSERR_EXT_API9_INVALID_PARAMETER, "player SetSource DataSrc failed"); + } + if (jsPlayer->dataSrcDescriptor_.fileSize == -1) { + jsPlayer->isLiveStream_ = true; + } + } + }); + (void)jsPlayer->taskQue_->EnqueueTask(task); } napi_value AVPlayerNapi::JsGetDataSrc(napi_env env, napi_callback_info info) @@ -3132,6 +3152,7 @@ napi_value AVPlayerNapi::JsSetOnCallback(napi_env env, napi_callback_info info) CHECK_AND_RETURN_RET_NOLOG( VerifyExpectedType({ env, args[0], napi_string }, jsPlayer, "type should be string."), result); std::string callbackName = CommonNapi::GetStringArgument(env, args[0]); + jsPlayer->hasSetStateChangeCb_ |= (callbackName == "stateChange"); napi_ref ref = nullptr; if (argCount == ARGS_THREE) { @@ -3218,6 +3239,7 @@ napi_value AVPlayerNapi::JsClearOnCallback(napi_env env, napi_callback_info info } std::string callbackName = CommonNapi::GetStringArgument(env, args[0]); + jsPlayer->hasSetStateChangeCb_ &= (callbackName != "stateChange"); MEDIA_LOGI("0x%{public}06" PRIXPTR " set callbackName: %{public}s", FAKE_POINTER(jsPlayer), callbackName.c_str()); if (callbackName != "seiMessageReceived") { jsPlayer->MaxAmplitudeCallbackOff(jsPlayer, callbackName); diff --git a/frameworks/js/avplayer/avplayer_napi.h b/frameworks/js/avplayer/avplayer_napi.h index 66a2ab967..3490a4988 100644 --- a/frameworks/js/avplayer/avplayer_napi.h +++ b/frameworks/js/avplayer/avplayer_napi.h @@ -320,6 +320,7 @@ private: void AddSubSource(std::string url); void SetSurface(const std::string &surfaceStr); void ResetUserParameters(); + void SetDataSource(AVPlayerNapi *jsPlayer); std::shared_ptr> PrepareTask(); std::shared_ptr> PlayTask(); @@ -440,6 +441,7 @@ private: bool getApiVersionFlag_ = true; std::atomic isReadyReleased_ = false; + bool hasSetStateChangeCb_ = false; }; } // namespace Media } // namespace OHOS -- Gitee