From acd296a884dd2a003bcad84b66a6ccb7e6fecc01 Mon Sep 17 00:00:00 2001 From: lon9 <815882449@qq.com> Date: Mon, 21 Oct 2024 21:36:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=A7=86=E9=A2=91=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E5=8D=A1=E4=BD=8F=E4=B8=8D=E6=92=AD=E6=94=BE=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/src/main/ets/utils/AvPlayerUtil.ets | 72 +++++-------------- .../src/main/ets/view/VideoDetail.ets | 19 ++--- .../src/main/ets/view/VideoDetailView.ets | 17 +++-- .../src/main/ets/view/VideoPlayer.ets | 30 ++++---- 4 files changed, 51 insertions(+), 87 deletions(-) diff --git a/commons/base/src/main/ets/utils/AvPlayerUtil.ets b/commons/base/src/main/ets/utils/AvPlayerUtil.ets index 8f16786..9d8c5af 100644 --- a/commons/base/src/main/ets/utils/AvPlayerUtil.ets +++ b/commons/base/src/main/ets/utils/AvPlayerUtil.ets @@ -24,11 +24,8 @@ export class AvPlayerUtil { private avPlayer?: media.AVPlayer; private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; private url: resourceManager.RawFileDescriptor | null = null; - private playState: boolean = true; private surfaceId: string = ''; private sliderBegin: number = 0; - private startTime: number = 0; - private isFullScreen: boolean = false; private onError: (err: BusinessError) => void = (err: BusinessError) => { Logger.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); if (this.avPlayer === undefined) { @@ -75,32 +72,20 @@ export class AvPlayerUtil { case CommonConstants.AV_PLAYER_PREPARED_STATE: this.avPlayer.videoScaleType = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT; Logger.info('AVPlayer state prepared called.'); - this.seekToStart(); this.avPlayer.play(); AppStorage.setOrCreate(CommonConstants.AV_PLAYER_TOTAL_TIME, this.formatTime(this.avPlayer.duration)); break; case CommonConstants.AV_PLAYER_PLAYING_STATE: Logger.info('AVPlayer state playing called.'); - this.playState = true; - if (this.isFullScreen) { - AppStorage.setOrCreate('fullScreenPlayState', this.playState); - } - this.seekToStart(); + AppStorage.setOrCreate('avplayerState', this.avPlayer.state); break; case CommonConstants.AV_PLAYER_PAUSED_STATE: Logger.info('AVPlayer state paused called.'); - this.playState = false; - if (this.isFullScreen) { - AppStorage.setOrCreate('fullScreenPlayState', this.playState); - } - this.seekToStart(); + AppStorage.setOrCreate('avplayerState', this.avPlayer.state); break; case CommonConstants.AV_PLAYER_COMPLETED_STATE: Logger.info('AVPlayer state completed called.'); - this.playState = false; - if (this.isFullScreen) { - AppStorage.setOrCreate('fullScreenPlayState', this.playState); - } + AppStorage.setOrCreate('avplayerState', this.avPlayer.state); this.avPlayer.stop(); break; case CommonConstants.AV_PLAYER_STOPPED_STATE: @@ -118,8 +103,20 @@ export class AvPlayerUtil { } } - async createAvPlayer(surfaceId: string, isFullScreen: boolean): Promise { - this.isFullScreen = isFullScreen; + static getInstance(): AvPlayerUtil | undefined { + if (!AppStorage.get('avPlayerUtil')) { + AppStorage.setOrCreate('avPlayerUtil', new AvPlayerUtil()); + } else { + Logger.info(`AppStorage does not have avPlayerUtil`); + } + return AppStorage.get('avPlayerUtil'); + } + + setSurfaceId(surfaceId: string | undefined) { + this.avPlayer!.surfaceId = surfaceId; + } + + async createAvPlayer(surfaceId: string): Promise { if (this.avPlayer === undefined || this.avPlayer.state === CommonConstants.AV_PLAYER_RELEASE_STATE) { this.avPlayer = await media.createAVPlayer(); this.surfaceId = surfaceId; @@ -171,19 +168,6 @@ export class AvPlayerUtil { this.avPlayer.on('stateChange', this.onStateChange) } - setStartTime(startTime: number): void { - this.startTime = startTime; - } - - seekToStart(): void { - if (this.startTime != 0 && this.avPlayer !== undefined) { - this.avPlayer.seek(this.startTime, media.SeekMode.SEEK_PREV_SYNC); - this.startTime = 0; - } else { - Logger.info(`Video is played from the beginning`); - } - } - release(): void { if (this.avPlayer !== undefined && this.avPlayer.state !== CommonConstants.AV_PLAYER_RELEASE_STATE) { try { @@ -235,28 +219,10 @@ export class AvPlayerUtil { } if (this.avPlayer.state === CommonConstants.AV_PLAYER_STOPPED_STATE) { this.avPlayer.prepare(); - return; - } - if (!this.playState) { - this.avPlayer.play(); - } else { - this.avPlayer.pause(); - } - } - - play(): void { - if (this.avPlayer !== undefined && !this.playState) { + } else if (this.avPlayer.state === CommonConstants.AV_PLAYER_PAUSED_STATE) { this.avPlayer.play(); - } else { - Logger.info(`AvPlayer play failed`); - } - } - - pause(): void { - if (this.avPlayer !== undefined && this.playState) { + } else if (this.avPlayer.state === CommonConstants.AV_PLAYER_PLAYING_STATE) { this.avPlayer.pause(); - } else { - Logger.info(`AvPlayer pause failed`); } } diff --git a/features/videoDetail/src/main/ets/view/VideoDetail.ets b/features/videoDetail/src/main/ets/view/VideoDetail.ets index 983ded7..71ac728 100644 --- a/features/videoDetail/src/main/ets/view/VideoDetail.ets +++ b/features/videoDetail/src/main/ets/view/VideoDetail.ets @@ -25,7 +25,6 @@ import { DetailConstants } from '../constants/DetailConstants'; export struct VideoDetail { @StorageLink('currentWidthBreakpoint') currentWidthBreakpoint: string = BreakpointConstants.BREAKPOINT_LG; @StorageLink('windowWidth') windowWidth: number = 0; - @StorageLink('updateTime') updateTime: number = 0; @StorageLink('isHalfFolded') isHalfFolded: boolean = false; @Consume('pageInfo') pageInfo: NavPathStack; @State commentImgHeight: string = DetailConstants.INITIAL_COMMENT_IMAGE_HEIGHT; @@ -33,7 +32,7 @@ export struct VideoDetail { @State relatedVideoHeight: number = DetailConstants.INITIAL_RELATED_VIDEO_HEIGHT; @State videoHeight: number = DetailConstants.INITIAL_VIDEO_HEIGHT; @State screenWidth: number = DeviceScreen.getDeviceWidth(); - private avPlayerUtil: AvPlayerUtil= new AvPlayerUtil(); + private avPlayerUtil?: AvPlayerUtil; private screenHeight: number = 0; private windowUtil?: WindowUtil; private onDetailFoldStatusChange: Callback = (data: display.FoldStatus) => { @@ -62,6 +61,7 @@ export struct VideoDetail { }; aboutToAppear() { + this.avPlayerUtil = AvPlayerUtil.getInstance(); DisplayUtil.getFoldCreaseRegion(); this.screenHeight = DeviceScreen.getDeviceHeight(); this.windowUtil = WindowUtil.getInstance(); @@ -74,15 +74,15 @@ export struct VideoDetail { } } - aboutToDisappear() { - this.updateTime = 0; + async aboutToDisappear() { + this.avPlayerUtil?.offTimeUpdate(); + await this.avPlayerUtil?.release(); if (this.windowUtil === undefined) { return; } if (this.currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_MD && display.isFoldable()) { this.windowUtil.setMainWindowOrientation(window.Orientation.PORTRAIT); } - this.avPlayerUtil.release(); } build() { @@ -140,9 +140,7 @@ export struct VideoDetail { Column() { VideoDetailView({ screenHeight: this.screenHeight, - avPlayerUtil: this.avPlayerUtil, - relatedVideoHeight: - $relatedVideoHeight, + relatedVideoHeight: $relatedVideoHeight, videoHeight: $videoHeight }) .layoutWeight(1) @@ -189,9 +187,6 @@ export struct VideoDetail { if (this.currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_MD && display.isFoldable()) { this.isHalfFolded = false; } - this.avPlayerUtil.setStartTime(this.updateTime); - this.avPlayerUtil.playerStateControl(); - this.avPlayerUtil.onTimeUpdate(); }) .onHidden(() => { try { @@ -199,8 +194,6 @@ export struct VideoDetail { } catch (exception) { Logger.error('Failed to unregister callback. Code: ' + JSON.stringify(exception)); } - this.avPlayerUtil.pause(); - this.avPlayerUtil.offTimeUpdate(); }) } } \ No newline at end of file diff --git a/features/videoDetail/src/main/ets/view/VideoDetailView.ets b/features/videoDetail/src/main/ets/view/VideoDetailView.ets index 5172d7a..fc24a9a 100644 --- a/features/videoDetail/src/main/ets/view/VideoDetailView.ets +++ b/features/videoDetail/src/main/ets/view/VideoDetailView.ets @@ -29,11 +29,14 @@ export struct VideoDetailView { @Consume('pageInfo') pageInfo: NavPathStack; @Link relatedVideoHeight: number; @Link videoHeight: number; - private avPlayerUtil: AvPlayerUtil = new AvPlayerUtil(); + private avPlayerUtil?: AvPlayerUtil; private screenHeight: number = 0; - private surfaceId: string = ''; - private xComponentController: XComponentController = new XComponentController(); private scroller: Scroller = new Scroller(); + private xComponentController: XComponentController = new XComponentController(); + + aboutToAppear(): void { + this.avPlayerUtil = AvPlayerUtil.getInstance(); + } build() { Scroll(this.scroller) { @@ -45,8 +48,8 @@ export struct VideoDetailView { controller: this.xComponentController }) .onLoad(() => { - this.surfaceId = this.xComponentController.getXComponentSurfaceId(); - this.avPlayerUtil.createAvPlayer(this.surfaceId, false); + this.avPlayerUtil?.createAvPlayer(this.xComponentController.getXComponentSurfaceId()); + AppStorage.setOrCreate('detailSurfaceId', this.xComponentController.getXComponentSurfaceId()); }) .width(this.videoHeight + DetailConstants.PERCENT_SIGN) .height(CommonConstants.FULL_PERCENT) @@ -66,7 +69,7 @@ export struct VideoDetailView { value: this.progress }) .onChange((value: number, mode: SliderChangeMode) => { - this.avPlayerUtil.sliderChange(value, mode); + this.avPlayerUtil?.sliderChange(value, mode); }) .layoutWeight(1) .selectedColor($r('app.color.episodes_font')) @@ -106,7 +109,7 @@ export struct VideoDetailView { .width(CommonConstants.FULL_PERCENT) .backgroundColor(Color.Black) .onClick(() => { - this.avPlayerUtil.playerStateControl(); + this.avPlayerUtil?.playerStateControl(); }) RelatedList({ diff --git a/features/videoPlayer/src/main/ets/view/VideoPlayer.ets b/features/videoPlayer/src/main/ets/view/VideoPlayer.ets index 9b48022..398fe7a 100644 --- a/features/videoPlayer/src/main/ets/view/VideoPlayer.ets +++ b/features/videoPlayer/src/main/ets/view/VideoPlayer.ets @@ -26,19 +26,17 @@ export struct VideoPlayer { @StorageLink('currentWidthBreakpoint') currentWidthBreakpoint: string = BreakpointConstants.BREAKPOINT_LG; @StorageLink('currentHeightBreakpoint') currentHeightBreakpoint: string = BreakpointConstants.BREAKPOINT_LG; @StorageLink('creaseRegion') creaseRegion: number[] = []; - @StorageLink('updateTime') updateTime: number = 0; @StorageLink('currentTime') currentTime: string = CommonConstants.INITIAL_TIME; @StorageLink('totalTime') totalTime: string = CommonConstants.INITIAL_TIME; @StorageLink('progress') progress: number = 0; - @StorageLink('fullScreenPlayState') fullScreenPlayState: boolean = true; + @StorageLink('avplayerState') avplayerState: string = ''; @StorageLink('isHalfFolded') isHalfFolded: boolean = false; @State isShowingSideBar: boolean = false; @State foldStatus: display.FoldStatus = display.getFoldStatus(); @Consume('pageInfo') pageInfo: NavPathStack; private windowUtil?: WindowUtil; - private avPlayerUtil: AvPlayerUtil = new AvPlayerUtil(); + private avPlayerUtil?: AvPlayerUtil; private xComponentController: XComponentController = new XComponentController(); - private surfaceId: string = ''; private onFoldStatusChange: Callback = (data: display.FoldStatus) => { this.foldStatus = data; if (data === display.FoldStatus.FOLD_STATUS_EXPANDED) { @@ -61,7 +59,11 @@ export struct VideoPlayer { }; aboutToAppear() { + this.avPlayerUtil = AvPlayerUtil.getInstance(); this.windowUtil = WindowUtil.getInstance(); + if (this.avplayerState === CommonConstants.AV_PLAYER_PAUSED_STATE) { + this.avPlayerUtil?.playerStateControl(); + } if (this.windowUtil !== undefined) { /** * In any windowSize of 2ini, the systemBar doesn't need to hide. @@ -87,11 +89,13 @@ export struct VideoPlayer { } else { Logger.info(`Full-screen display in portrait mode`); } - this.avPlayerUtil.setStartTime(this.updateTime); } - aboutToDisappear() { - this.avPlayerUtil.release(); + async aboutToDisappear() { + this.avPlayerUtil?.setSurfaceId(AppStorage.get('detailSurfaceId')); + if (this.avplayerState === CommonConstants.AV_PLAYER_PAUSED_STATE) { + this.avPlayerUtil?.playerStateControl(); + } if (this.windowUtil !== undefined) { /** * When step out the fullScreen VideoPlay, any device need to show systemBar except 2ini. @@ -128,8 +132,7 @@ export struct VideoPlayer { controller: this.xComponentController }) .onLoad(() => { - this.surfaceId = this.xComponentController.getXComponentSurfaceId(); - this.avPlayerUtil.createAvPlayer(this.surfaceId, true); + this.avPlayerUtil?.setSurfaceId(this.xComponentController.getXComponentSurfaceId()); }) .aspectRatio(CommonConstants.VIDEO_ASPECT_RATIO) } @@ -155,7 +158,7 @@ export struct VideoPlayer { Slider({ min: 0, max: CommonConstants.PROGRESS_HUNDRED, step: 1, value: this.progress }) .onChange((value: number, mode: SliderChangeMode) => { - this.avPlayerUtil.sliderChange(value, mode); + this.avPlayerUtil?.sliderChange(value, mode); }) .layoutWeight(1) .selectedColor($r('app.color.selected_color')) @@ -172,12 +175,13 @@ export struct VideoPlayer { Row() { Row() { - Image(this.fullScreenPlayState ? $r('app.media.ic_public_pause') : $r('app.media.ic_public_play')) + Image(this.avplayerState === CommonConstants.AV_PLAYER_PLAYING_STATE ? $r('app.media.ic_public_pause') + : $r('app.media.ic_public_play')) .height($r('app.float.icon_size')) .width($r('app.float.icon_size')) .margin({ left: $r('app.float.icon_margin') }) .onClick(() => { - this.avPlayerUtil.playerStateControl(); + this.avPlayerUtil?.playerStateControl(); }) ImgIcon({ img: $r('app.media.ic_public_play_next') }) ImgIcon({ img: $r('app.media.ic_public_view_list_white') }) @@ -253,10 +257,8 @@ export struct VideoPlayer { } catch (exception) { Logger.error('Failed to register callback. Code: ' + JSON.stringify(exception)); } - this.avPlayerUtil.onTimeUpdate(); }) .onHidden(() => { - this.avPlayerUtil.offTimeUpdate(); display.off('foldStatusChange'); }) } -- Gitee From 5cf385d1fad40c6458ff9e1c9224870f402b9c14 Mon Sep 17 00:00:00 2001 From: lon9 <815882449@qq.com> Date: Tue, 22 Oct 2024 10:21:08 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=92=AD=E6=94=BE=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E9=87=8D=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/src/main/ets/utils/AvPlayerUtil.ets | 59 +++++-------------- 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/commons/base/src/main/ets/utils/AvPlayerUtil.ets b/commons/base/src/main/ets/utils/AvPlayerUtil.ets index 9d8c5af..4af06ae 100644 --- a/commons/base/src/main/ets/utils/AvPlayerUtil.ets +++ b/commons/base/src/main/ets/utils/AvPlayerUtil.ets @@ -28,20 +28,12 @@ export class AvPlayerUtil { private sliderBegin: number = 0; private onError: (err: BusinessError) => void = (err: BusinessError) => { Logger.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - this.avPlayer.reset(); + this.avPlayer?.reset(); } private onTimeUpdateFunction: (updateTime: number) => void = (updateTime: number) => { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } AppStorage.setOrCreate(CommonConstants.AV_PLAYER_CURRENT_TIME, this.formatTime(updateTime)); AppStorage.setOrCreate(CommonConstants.AV_PLAYER_UPDATE_TIME, updateTime); - AppStorage.setOrCreate(CommonConstants.AV_PLAYER_PROGRESS, updateTime / this.avPlayer.duration * + AppStorage.setOrCreate(CommonConstants.AV_PLAYER_PROGRESS, updateTime / this.avPlayer!.duration * CommonConstants.PROGRESS_HUNDRED); } private onStateChange: (state: media.AVPlayerState) => void = async (state: media.AVPlayerState) => { @@ -90,6 +82,7 @@ export class AvPlayerUtil { break; case CommonConstants.AV_PLAYER_STOPPED_STATE: Logger.info('AVPlayer state stopped called.'); + this.avPlayer.prepare(); break; case CommonConstants.AV_PLAYER_RELEASE_STATE: Logger.info('AVPlayer state released called.'); @@ -131,41 +124,25 @@ export class AvPlayerUtil { } setAVPlayerCallback(): void { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - this.avPlayer.on('error', this.onError); + this.avPlayer?.on('error', this.onError); this.onTimeUpdate(); this.setStateChange(); } onTimeUpdate(): void { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - this.avPlayer.on('timeUpdate', this.onTimeUpdateFunction); + this.avPlayer?.on('timeUpdate', this.onTimeUpdateFunction); } offTimeUpdate(): void { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } try { - this.avPlayer.off('timeUpdate'); + this.avPlayer?.off('timeUpdate'); } catch (exception) { Logger.error('Failed to unregister callback. Code: ' + JSON.stringify(exception)); } } setStateChange(): void { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - this.avPlayer.on('stateChange', this.onStateChange) + this.avPlayer?.on('stateChange', this.onStateChange) } release(): void { @@ -185,27 +162,23 @@ export class AvPlayerUtil { sliderChange(value: number, mode: SliderChangeMode): void { let seekType: media.SeekMode = value > this.sliderBegin ? media.SeekMode.SEEK_PREV_SYNC : media.SeekMode.SEEK_NEXT_SYNC; - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } switch (mode) { case SliderChangeMode.Begin: Logger.info(`AvPlayer SliderChangeMode Begin`); this.sliderBegin = value; - this.avPlayer.pause(); + this.avPlayer?.pause(); break; case SliderChangeMode.Moving: Logger.info(`AvPlayer SliderChangeMode Moving`); - this.avPlayer.seek(value / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); + this.avPlayer?.seek(value / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); break; case SliderChangeMode.End: Logger.info(`AvPlayer SliderChangeMode End`); - this.avPlayer.play(); + this.avPlayer?.play(); break; case SliderChangeMode.Click: Logger.info(`AvPlayer SliderChangeMode Click`); - this.avPlayer.seek(this.sliderBegin / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); + this.avPlayer?.seek(this.sliderBegin / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); break; default: break; @@ -213,15 +186,11 @@ export class AvPlayerUtil { } playerStateControl(): void { - if (this.avPlayer === undefined) { - Logger.info(`AvPlayer is undefined`); - return; - } - if (this.avPlayer.state === CommonConstants.AV_PLAYER_STOPPED_STATE) { + if (this.avPlayer?.state === CommonConstants.AV_PLAYER_STOPPED_STATE) { this.avPlayer.prepare(); - } else if (this.avPlayer.state === CommonConstants.AV_PLAYER_PAUSED_STATE) { + } else if (this.avPlayer?.state === CommonConstants.AV_PLAYER_PAUSED_STATE) { this.avPlayer.play(); - } else if (this.avPlayer.state === CommonConstants.AV_PLAYER_PLAYING_STATE) { + } else if (this.avPlayer?.state === CommonConstants.AV_PLAYER_PLAYING_STATE) { this.avPlayer.pause(); } } -- Gitee From 3dcbf0f47d83ece021bbe8970695b765763e3dab Mon Sep 17 00:00:00 2001 From: lon9 <815882449@qq.com> Date: Tue, 22 Oct 2024 10:58:26 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=85=A8=E5=B1=8F=E9=A1=B5=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E5=AE=8C=E6=88=90=E5=90=8E=E7=82=B9=E5=87=BB=E9=87=8D?= =?UTF-8?q?=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commons/base/src/main/ets/utils/AvPlayerUtil.ets | 4 ++-- .../videoDetail/src/main/ets/view/VideoDetail.ets | 4 ++++ .../videoPlayer/src/main/ets/view/VideoPlayer.ets | 11 ++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/commons/base/src/main/ets/utils/AvPlayerUtil.ets b/commons/base/src/main/ets/utils/AvPlayerUtil.ets index 4af06ae..fc6d739 100644 --- a/commons/base/src/main/ets/utils/AvPlayerUtil.ets +++ b/commons/base/src/main/ets/utils/AvPlayerUtil.ets @@ -82,7 +82,6 @@ export class AvPlayerUtil { break; case CommonConstants.AV_PLAYER_STOPPED_STATE: Logger.info('AVPlayer state stopped called.'); - this.avPlayer.prepare(); break; case CommonConstants.AV_PLAYER_RELEASE_STATE: Logger.info('AVPlayer state released called.'); @@ -106,6 +105,7 @@ export class AvPlayerUtil { } setSurfaceId(surfaceId: string | undefined) { + this.surfaceId = surfaceId!; this.avPlayer!.surfaceId = surfaceId; } @@ -142,7 +142,7 @@ export class AvPlayerUtil { } setStateChange(): void { - this.avPlayer?.on('stateChange', this.onStateChange) + this.avPlayer?.on('stateChange', this.onStateChange); } release(): void { diff --git a/features/videoDetail/src/main/ets/view/VideoDetail.ets b/features/videoDetail/src/main/ets/view/VideoDetail.ets index 71ac728..d6e9e0e 100644 --- a/features/videoDetail/src/main/ets/view/VideoDetail.ets +++ b/features/videoDetail/src/main/ets/view/VideoDetail.ets @@ -26,6 +26,7 @@ export struct VideoDetail { @StorageLink('currentWidthBreakpoint') currentWidthBreakpoint: string = BreakpointConstants.BREAKPOINT_LG; @StorageLink('windowWidth') windowWidth: number = 0; @StorageLink('isHalfFolded') isHalfFolded: boolean = false; + @StorageLink('avplayerState') avplayerState: string = ''; @Consume('pageInfo') pageInfo: NavPathStack; @State commentImgHeight: string = DetailConstants.INITIAL_COMMENT_IMAGE_HEIGHT; @State commentImgWidth: string = DetailConstants.INITIAL_COMMENT_IMAGE_WIDTH; @@ -181,6 +182,9 @@ export struct VideoDetail { } catch (exception) { Logger.error('Failed to register callback. Code: ' + JSON.stringify(exception)); } + if (this.avplayerState !== CommonConstants.AV_PLAYER_PLAYING_STATE) { + this.avPlayerUtil?.playerStateControl(); + } if (this.windowUtil === undefined) { return; } diff --git a/features/videoPlayer/src/main/ets/view/VideoPlayer.ets b/features/videoPlayer/src/main/ets/view/VideoPlayer.ets index 398fe7a..dd473cf 100644 --- a/features/videoPlayer/src/main/ets/view/VideoPlayer.ets +++ b/features/videoPlayer/src/main/ets/view/VideoPlayer.ets @@ -61,9 +61,6 @@ export struct VideoPlayer { aboutToAppear() { this.avPlayerUtil = AvPlayerUtil.getInstance(); this.windowUtil = WindowUtil.getInstance(); - if (this.avplayerState === CommonConstants.AV_PLAYER_PAUSED_STATE) { - this.avPlayerUtil?.playerStateControl(); - } if (this.windowUtil !== undefined) { /** * In any windowSize of 2ini, the systemBar doesn't need to hide. @@ -93,9 +90,6 @@ export struct VideoPlayer { async aboutToDisappear() { this.avPlayerUtil?.setSurfaceId(AppStorage.get('detailSurfaceId')); - if (this.avplayerState === CommonConstants.AV_PLAYER_PAUSED_STATE) { - this.avPlayerUtil?.playerStateControl(); - } if (this.windowUtil !== undefined) { /** * When step out the fullScreen VideoPlay, any device need to show systemBar except 2ini. @@ -189,7 +183,7 @@ export struct VideoPlayer { .margin({ top: this.currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_SM ? '0' : $r('app.float.icon_row_top'), bottom: this.currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_SM ? - $r('app.float.icon_row_bottom_sm') : $r('app.float.icon_row_bottom') + $r('app.float.icon_row_bottom_sm') : $r('app.float.icon_row_bottom') }) Blank() @@ -252,6 +246,9 @@ export struct VideoPlayer { } .hideTitleBar(true) .onShown(() => { + if (this.avplayerState !== CommonConstants.AV_PLAYER_PLAYING_STATE) { + this.avPlayerUtil?.playerStateControl(); + } try { display.on('foldStatusChange', this.onFoldStatusChange); } catch (exception) { -- Gitee From c0ddc3ae2b344b49705a0f4d31819c0147e40c2d Mon Sep 17 00:00:00 2001 From: lon9 <815882449@qq.com> Date: Tue, 22 Oct 2024 11:48:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=E6=BB=91=E5=8A=A8=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=9D=A1=E5=8D=A1=E4=BD=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commons/base/src/main/ets/utils/AvPlayerUtil.ets | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/commons/base/src/main/ets/utils/AvPlayerUtil.ets b/commons/base/src/main/ets/utils/AvPlayerUtil.ets index fc6d739..409f2a2 100644 --- a/commons/base/src/main/ets/utils/AvPlayerUtil.ets +++ b/commons/base/src/main/ets/utils/AvPlayerUtil.ets @@ -26,6 +26,7 @@ export class AvPlayerUtil { private url: resourceManager.RawFileDescriptor | null = null; private surfaceId: string = ''; private sliderBegin: number = 0; + private isMoving: boolean = false; private onError: (err: BusinessError) => void = (err: BusinessError) => { Logger.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); this.avPlayer?.reset(); @@ -170,10 +171,14 @@ export class AvPlayerUtil { break; case SliderChangeMode.Moving: Logger.info(`AvPlayer SliderChangeMode Moving`); - this.avPlayer?.seek(value / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); + this.isMoving = true; break; case SliderChangeMode.End: Logger.info(`AvPlayer SliderChangeMode End`); + if (this.isMoving) { + this.avPlayer?.seek(value / CommonConstants.PROGRESS_HUNDRED * this.avPlayer.duration, seekType); + this.isMoving = false; + } this.avPlayer?.play(); break; case SliderChangeMode.Click: -- Gitee