HarmonyOS ArkTS中视频播放Video组件实现竖屏到横屏切换

在开发HarmonyOS应用时,视频播放是一个常见的需求。ArkTS提供了Video组件来满足这一需求。本文将介绍如何使用ArkTS的Video组件,并实现视频播放时从竖屏切换到横屏的功能。

视频播放组件简介

Video组件是ArkTS中用于播放视频的内置组件,它支持多种功能,包括自动播放、静音、循环播放等。通过Video组件,开发者可以方便地在应用中集成视频播放功能。

实现步骤

1. 导入必要的模块

首先,我们需要导入VideoItemwindowcommon模块:

javascript 复制代码
import { VideoItem } from "../../common/bean/apiTypes";
import { window } from "@kit.ArkUI";
import { common } from "@kit.AbilityKit";

2. 定义视频播放组件

接下来,我们定义一个VideoPlayer组件,并在组件中使用Video组件来播放视频:

javascript 复制代码
@Component
struct VideoPlayer {
  @State title: string = ''
  private controller: VideoController | undefined;
  @State previewUri: Resource = $r('app.media.play_circle_fill');
  @State videoSrc: string = 'http://staticvip.iyuba.cn/video/small/202412/1009544_c.mp4' // 使用时请替换为实际视频加载网址

  aboutToAppear() {
    // 获取视频播放参数
    interface params {
      item: VideoItem;
    }
    let ctx = getContext(this) as common.UIAbilityContext;
    let par = ctx.pathInfo.param as params;
    this.videoSrc = par.item.srtEngVideo;
    this.title = par.item.title;
  }

  private changeOrientation(isLandscape: boolean) {
    let context = getContext(this) as common.UIAbilityContext;
    window.getLastWindow(context).then((lastWindow) => {
      lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT);
    });
  }

  build() {
    NavDestination() {
      Column() {
        Stack() {
          Video({
            src: this.videoSrc,
            previewUri: this.previewUri,
            controller: this.controller
          })
            .width('100%')
            .muted(false) // 设置是否静音
            .controls(true) // 设置是否显示默认控制条
            .autoPlay(true) // 设置是否自动播放
            .loop(false) // 设置是否循环播放
            .objectFit(ImageFit.Contain) // 设置视频适配模式
            .onError(() => {          // 失败事件回调
              console.info("Video error.");
            })
            .onFullscreenChange(event => {
              if (event.fullscreen) {
                this.changeOrientation(true);
              } else {
                this.changeOrientation(false);
              }
            })
            .zIndex(1)

          Text(this.title)
            .fontColor(Color.White)
            .alignSelf(ItemAlign.Center)
            .margin({ bottom: 280 })
            .zIndex(2)
        }
      }.width('100%')
    }
    .width("100%")
    .height("100%")
    .onReady(ctx => {
      interface params {
        item: VideoItem;
      }
      let par = ctx.pathInfo.param as params;
      this.videoSrc = par.item.srtEngVideo;
      this.title = par.item.title;
    })
    .onShown(() => {
      console.info('VideoPlayer onShown');
    })
  }
}

3. 处理全屏事件

Video组件的onFullscreenChange事件中,我们根据视频是否进入全屏来切换屏幕方向:

javascript 复制代码
.onFullscreenChange(event => {
  if (event.fullscreen) {
    this.changeOrientation(true);
  } else {
    this.changeOrientation(false);
  }
})

4. 切换屏幕方向

changeOrientation方法用于设置屏幕的方向:

javascript 复制代码
private changeOrientation(isLandscape: boolean) {
  let context = getContext(this) as common.UIAbilityContext;
  window.getLastWindow(context).then((lastWindow) => {
    lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT);
  });
}

注意事项

  1. 视频源:确保使用的视频源URL是有效的,并且网络可以访问。
  2. 权限:确保应用具有必要的权限来请求设备信息和访问网络。

结论

通过本文的介绍,您已经掌握了如何在HarmonyOS ArkTS中使用Video组件,并实现视频播放时从竖屏切换到横屏的功能。这一功能的实现可以提升用户体验,使视频观看更加方便。希望本文对您有所帮助。

作者介绍

作者:csdn猫哥

原文链接:https://blog.csdn.net/yyz_1987/article/details/144553700

团队介绍

坚果派团队由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉等相关内容,团队成员聚集在北京、上海、南京、深圳、广州、宁夏等地,目前已开发鸿蒙原生应用和三方库60+,欢迎交流。

版权声明

本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

相关推荐
攻城狮在此1 小时前
华为汇聚交换机DHCP中继配置
网络·华为
互联网散修1 小时前
鸿蒙应用开发:图片渐进式加载Canvas渲染案例分享
harmonyos·渐进式加载图片
Swift社区3 小时前
鸿蒙游戏里的 AI Agent 设计
人工智能·游戏·harmonyos
亚历克斯神3 小时前
Flutter 组件 t_stats 的适配 鸿蒙Harmony 实战 - 驾驭高性能统计学运算、实现鸿蒙端海量数据实时态势感知与工业级描述性统计方案
flutter·harmonyos·鸿蒙·openharmony·t_stats
键盘鼓手苏苏3 小时前
Flutter 组件 angel3_orm_mysql 的适配 鸿蒙Harmony 实战 - 驾驭专业 ORM 映射引擎、实现鸿蒙端与 MySQL 数据库的透明映射与高性能 SQL 审计方案
flutter·harmonyos·鸿蒙·openharmony·angel3_orm_mysql
左手厨刀右手茼蒿3 小时前
Flutter 组件 serverpod_swagger 的适配 鸿蒙Harmony 实战 - 驾驭 API 文档自动化、实现鸿蒙端全栈联调与 Swagger UI 动态审计方案
flutter·harmonyos·鸿蒙·openharmony·serverpod_swagger
钛态3 小时前
Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座
flutter·harmonyos·鸿蒙·openharmony·discord_interactions
加农炮手Jinx3 小时前
Flutter 组件 dascade 的适配 鸿蒙Harmony 实战 - 驾驭级联式异步数据流、实现鸿蒙端响应式 UI 状态泵与复杂业务逻辑解耦方案
flutter·harmonyos·鸿蒙·openharmony
国医中兴3 小时前
Flutter 组件 r_flutter 的适配 鸿蒙Harmony 实战 - 驾驭资源映射自动化、实现鸿蒙端资产强类型引用与资产冲突静态校验方案
flutter·r语言·harmonyos
里欧跑得慢3 小时前
Flutter 组件 postgres_crdt 的适配 鸿蒙Harmony 实战 - 驾驭分布式无冲突复制数据类型、实现鸿蒙端高性能离线对等同步架构方案
flutter·harmonyos·鸿蒙·openharmony·postgres_crdt