HarmonyOS 视频播放无缝切换

视频播放由竖屏,切换为横屏全屏,想要无缝切换。A页面有一个列表,列表中有一个视频组件,当点击全屏播放时,携带当前播放索引,播放url等参数,跳转B页面同时旋转屏幕,在新的B页面创建了新的Video组件,然后seek到指定索引,并播放。但是这种切换形式不够。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可以参考如下demo:

import { window } from '@kit.ArkUI';

@Entry
@Component
struct ListExample {
  controller0: VideoController = new VideoController();
  controller1: VideoController = new VideoController();
  @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  @State fullHeight: Length = 300
  @State isFullVertical: boolean = false
  @State isFullHorizontal: boolean = false
  onPageHide(): void {
    this.handlerOrientation(window.Orientation.PORTRAIT)
  }

  handlerOrientation(type: number) {
    window.getLastWindow(getContext(this), (err, win) => {
      win.setPreferredOrientation(type)
    })
  }

  build() {
    Column() {
      List({ space: 20, initialIndex: 0 }) {
        // ForEach(this.arr, (item: number,index:number) => {
        ListItem() {
          Stack({ alignContent: Alignment.Bottom }) {
            Video({
              src: $rawfile('videoTest.mp4'),
              previewUri: $r('app.media.app_icon'),
              currentProgressRate: this.curRate,
              controller: this.controller0
            })
              .width('100%')
              .height(this.fullHeight)
              .loop(false)
              .objectFit(ImageFit.Contain)
              .autoPlay(false)
              .controls(false)
              .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
            Row() {
              Text('播放').onClick(() => {
                this.controller0.start() // 开始播放
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('暂停').onClick(() => {
                this.controller0.pause() // 暂停播放
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('0.75X').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_0_75_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('1.0X').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_1_00_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('2.0').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_2_00_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text(this.isFullVertical ? '退出竖屏' : '竖屏')
                .margin(5)
                .fontSize(12)
                .onClick(() => {
                  if (this.isFullVertical) {
                    this.fullHeight = 600
                  } else {
                    this.fullHeight = '100%'
                  }
                  this.isFullVertical = !this.isFullVertical
                }).fontColor(Color.White)
              Text(this.isFullHorizontal ? '退出横屏' : '横屏')
                .fontSize(12)
                .onClick(() => {
                  this.isFullHorizontal = !this.isFullHorizontal
                  if (this.isFullHorizontal) {
                    this.handlerOrientation(window.Orientation.LANDSCAPE_INVERTED)
                    this.fullHeight = '100%'
                  } else {
                    this.handlerOrientation(window.Orientation.PORTRAIT)
                    this.fullHeight = 600
                  }
                }).fontColor(Color.White)
            }
            .zIndex(1)
          }
        }

        ListItem() {
          Stack({ alignContent: Alignment.Bottom }) {
            Video({
              src: $rawfile('videoTest.mp4'),
              previewUri: $r('app.media.app_icon'),
              currentProgressRate: this.curRate,
              controller: this.controller1
            })
              .width('100%')
              .height(this.fullHeight)
              .loop(false)
              .objectFit(ImageFit.Contain)
              .autoPlay(false)
              .controls(false)
              .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
            Row() {
              Text('播放').onClick(() => {
                this.controller1.start() // 开始播放
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('暂停').onClick(() => {
                this.controller1.pause() // 暂停播放
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('0.75X').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_0_75_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('1.0X').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_1_00_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text('2.0').onClick(() => {
                this.curRate = PlaybackSpeed.Speed_Forward_2_00_X
              }).margin(5).fontColor(Color.White).fontSize(12)
              Text(this.isFullVertical ? '退出竖屏' : '竖屏')
                .margin(5)
                .fontSize(12)
                .onClick(() => {
                  if (this.isFullVertical) {
                    this.fullHeight = 600
                  } else {
                    this.fullHeight = '100%'
                  }
                  this.isFullVertical = !this.isFullVertical
                }).fontColor(Color.White)
              Text(this.isFullHorizontal ? '退出横屏' : '横屏')
                .fontSize(12)
                .onClick(() => {
                  this.isFullHorizontal = !this.isFullHorizontal
                  if (this.isFullHorizontal) {
                    this.handlerOrientation(window.Orientation.LANDSCAPE_INVERTED)
                    this.fullHeight = '100%'
                  } else {
                    this.handlerOrientation(window.Orientation.PORTRAIT)
                    this.fullHeight = 600
                  }
                }).fontColor(Color.White)
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 视频播放相关
70浏览 • 1回复 待解决
HarmonyOS 视频后台播放问题
25浏览 • 1回复 待解决
HarmonyOS 视频列表播放问题
75浏览 • 1回复 待解决
HarmonyOS 列表视频滚动播放
424浏览 • 1回复 待解决
HarmonyOS XComponent播放视频问题
35浏览 • 1回复 待解决
HarmonyOS 播放flv文件视频
27浏览 • 1回复 待解决
HarmonyOS AvPlayer视频播放速度问题
492浏览 • 1回复 待解决
HarmonyOS 需要视频小窗播放功能
31浏览 • 1回复 待解决
HarmonyOS 音频播放设备的切换
290浏览 • 1回复 待解决
AVPlayer实现视频播放
1071浏览 • 1回复 待解决