From fe5e187fc57ec14d9def4fd19b002809f2caaa3d Mon Sep 17 00:00:00 2001 From: "DESKTOP-9FJNTIC\\gyb" <121287102@qq.com> Date: Mon, 29 Sep 2025 18:21:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E8=BF=9B=E5=85=A5,=E6=89=93=E5=BC=80=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=90=AF=E5=8A=A8=E7=94=BB=E4=B8=AD=E7=94=BB=E5=90=8E?= =?UTF-8?q?,=E5=8F=B3=E4=B8=8A=E8=A7=92=E6=8C=89=E9=92=AE=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E7=9B=B4=E6=8E=A5=E5=90=AF=E5=8A=A8=E7=94=BB=E4=B8=AD?= =?UTF-8?q?=E7=94=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/ets/component/VideoPlayComponent.ets | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets b/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets index 51eecf4..ef624d0 100644 --- a/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets +++ b/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets @@ -137,6 +137,9 @@ export struct VideoPlayComponent { contentWidth: this.curBp === 'sm' ? 16 : this.curBp === 'md' ? 16 : 3, contentHeight: this.curBp === 'sm' ? 9 : this.curBp === 'md' ? 9 : 2 }); + // Add initial state setup + this.curState = 'STOPPED'; + this.pipController.on('stateChange', (state: PiPWindow.PiPState, reason: string) => { this.onStateChange(state, reason); if (state === PiPWindow.PiPState.STOPPED || state === PiPWindow.PiPState.STARTED) { @@ -354,7 +357,7 @@ export struct VideoPlayComponent { controller: this.mXComponentController }) .onLoad(() => { - Logger.info(`[${TAG}] XComponent onLoad`); + Logger.info(TAG, ` XComponent onLoad`); this.surfaceId = this.mXComponentController.getXComponentSurfaceId(); this.player = new AVPlayer(this.surfaceId, CommonConstants.AVPLAYER_TYPE, this.getUIContext().getHostContext()!); this.player.avPlayerFdSrc(); @@ -405,7 +408,11 @@ export struct VideoPlayComponent { this.hintMsgVisibility = true; this.changePipControllerStatusStart(); } else { - this.createPip(); + if (this.pipController) { + this.startPip(); + } else { + this.createPip(); + } this.hintMsgVisibility = true; this.changePipControllerStatusStart(); } -- Gitee From 034ec000565f20d824991996cefb8c003c50d3fa Mon Sep 17 00:00:00 2001 From: "DESKTOP-9FJNTIC\\gyb" <121287102@qq.com> Date: Mon, 29 Sep 2025 19:54:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20Logger=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ets/component/VideoPlayComponent.ets | 10 +++---- .../main/ets/constants/CommonConstants.ets | 2 +- .../src/main/ets/player/AVPlayer.ets | 28 ++++++++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets b/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets index ef624d0..3d1b215 100644 --- a/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets +++ b/windowpiplibrary/src/main/ets/component/VideoPlayComponent.ets @@ -103,7 +103,7 @@ export struct VideoPlayComponent { async startPip(): Promise { if (!this.pipController) { - Logger.info(`[${TAG}] pipController create error`); + Logger.info(TAG, `pipController create error`); return; } await this.pipController.startPiP(); @@ -112,7 +112,7 @@ export struct VideoPlayComponent { async stopPip(): Promise { if (!this.pipController) { - Logger.info(`[${TAG}] pipController is not exist`); + Logger.info(TAG, `pipController is not exist`); return; } await this.pipController.stopPiP(); @@ -196,7 +196,7 @@ export struct VideoPlayComponent { default: break; } - Logger.info(`[${TAG}] onStateChange: ${this.curState}, reason: ${reason}`); + Logger.info(TAG, `onStateChange: ${this.curState}, reason: ${reason}`); } onActionEvent(event: PiPWindow.PiPActionEventType, status: number | undefined): void { @@ -214,7 +214,7 @@ export struct VideoPlayComponent { break; } this.buttonAction = event + `-status:${status}`; - Logger.info(`[${TAG}] onActionEvent: ${this.buttonAction} status:${status}}`); + Logger.info(TAG, `onActionEvent: ${this.buttonAction} status:${status}}`); } showToast() { @@ -224,7 +224,7 @@ export struct VideoPlayComponent { duration: 2000 })); } catch (error) { - Logger.error(`showToast args error code is ${error.code}, message is ${error.message}}`); + Logger.error(TAG, `showToast args error code is ${error.code}, message is ${error.message}}`); } } diff --git a/windowpiplibrary/src/main/ets/constants/CommonConstants.ets b/windowpiplibrary/src/main/ets/constants/CommonConstants.ets index 69ddcca..786c4df 100644 --- a/windowpiplibrary/src/main/ets/constants/CommonConstants.ets +++ b/windowpiplibrary/src/main/ets/constants/CommonConstants.ets @@ -102,7 +102,7 @@ export class CommonConstants { /** * NavDestination page name. */ - public static readonly NAV_DESTINATION_NAME: string = 'PlayVideo'; + public static readonly NAV_DESTINATION_NAME: string = 'VideoPlayComponent'; /** * Control width. */ diff --git a/windowpiplibrary/src/main/ets/player/AVPlayer.ets b/windowpiplibrary/src/main/ets/player/AVPlayer.ets index 5aadbe2..2310a3c 100644 --- a/windowpiplibrary/src/main/ets/player/AVPlayer.ets +++ b/windowpiplibrary/src/main/ets/player/AVPlayer.ets @@ -19,6 +19,8 @@ import { resourceManager } from '@kit.LocalizationKit'; import { media } from '@kit.MediaKit'; import Logger from '../utils/Logger'; +const TAG: string = '[AVPlayer]'; + export class AVPlayer { private avPlayer?: media.AVPlayer; // The surfaceID is used to display the screen. @@ -55,11 +57,11 @@ export class AVPlayer { setAVPlayerCallback(): void { // Callback function for seek operation result. this.avPlayer?.on('seekDone', (seekDoneTime: number) => { - Logger.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`); + Logger.info(TAG, `AVPlayer seek succeeded, seek time is ${seekDoneTime}`); }); // error callback listens to the function. this.avPlayer?.on('error', (err: BusinessError) => { - Logger.info(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); + Logger.info(TAG, `Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); // Call the RESET call to reset the resource to trigger the idle state. this.avPlayer?.reset(); this.avPlayer?.play(); @@ -73,7 +75,7 @@ export class AVPlayer { switch (state) { // After the RESET API is successfully called, the state machine is triggered. case 'idle': - Logger.info('AVPlayer state idle called.'); + Logger.info(TAG, 'AVPlayer state idle called.'); if (!this.jumpNext) { // Call the release operation to destroy the instance object. this.avPlayer?.release(); @@ -85,18 +87,18 @@ export class AVPlayer { break; // After avplayer sets the playback source, this status is reported. case 'initialized': - Logger.info('AVPlayer state initialized called.'); + Logger.info(TAG, 'AVPlayer state initialized called.'); // You don't need to set the display screen when the playback asset is audio-only. this.avPlayer.surfaceId = this.surfaceID; this.avPlayer.prepare().then(() => { - Logger.info('AVPlayer prepare succeeded.'); + Logger.info(TAG, 'AVPlayer prepare succeeded.'); }, (err: BusinessError) => { - Logger.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`); + Logger.error(TAG, `Invoke prepare failed, code is ${err.code}, message is ${err.message}`); }); break; // After the prepare call is successful, the state machine is reported. case 'prepared': - Logger.info('AVPlayer state prepared called.'); + Logger.info(TAG, 'AVPlayer state prepared called.'); // Call the playback API to start playback. if (this.playStatus) { this.avPlayer.play(); @@ -104,31 +106,31 @@ export class AVPlayer { break; // After the play is successfully invoked, the state machine is triggered. case 'playing': - Logger.info('AVPlayer state playing called.'); + Logger.info(TAG, 'AVPlayer state playing called.'); this.jumpNext = false; break; // After pause is successfully invoked, the state machine is triggered. case 'paused': - Logger.info('AVPlayer state paused called.'); + Logger.info(TAG, 'AVPlayer state paused called.'); break; // After the playback ends, the state machine is triggered. case 'completed': - Logger.info('AVPlayer state completed called.'); + Logger.info(TAG, 'AVPlayer state completed called.'); // Call the playback end API. this.playNext(); break; // After the stop API is successfully called, the state machine is triggered. case 'stopped': - Logger.info('AVPlayer state stopped called.'); + Logger.info(TAG, 'AVPlayer state stopped called.'); // Call the reset operation to initialize the avplayer state. this.avPlayer.reset(); break; case 'released': - Logger.info('AVPlayer state released called.'); + Logger.info(TAG, 'AVPlayer state released called.'); this.avPlayer.release(); break; default: - Logger.info('AVPlayer state unknown called.'); + Logger.info(TAG, 'AVPlayer state unknown called.'); break; } }); -- Gitee