HarmonyOS 6.0 视频播放组件使用教程

今天咱们用最接地气的方式,手把手教你在HarmonyOS 6.0里用ArkTS+ArkUI做一个视频播放器------不用复杂概念,看完就能上手!

核心知识点先唠唠

HarmonyOS 6.0的ArkUI提供了Video组件,这是官方封装好的视频播放"工具",咱们只需要给它传视频地址、设置点样式,就能实现播放、暂停、进度条这些核心功能。

先明确几个关键概念:

  • 视频源:可以是本地文件(比如手机里的视频)、网络视频(HTTP/HTTPS地址);
  • 控制器:Video组件自带播放控制栏(暂停、进度、音量),也能自定义;
  • ArkTS:就是咱们写逻辑的代码,比如点击按钮暂停、监听播放状态。

第一步:准备环境

确保你的DevEco Studio是最新版(支持HarmonyOS 6.0),新建一个Stage模型的ArkTS工程(新手选这个就对了)。

第二步:最简版视频播放器(5行核心代码)

先从最简单的开始,实现"能播放视频"这个核心需求。

代码示例

typescript 复制代码
// index.ets
@Entry
@Component
struct VideoPlayerPage {
  build() {
    Column() {
      // 核心:Video组件
      Video({
        src: 'https://www.w3school.com.cn/i/movie.mp4', // 网络测试视频地址
        controller: new VideoController() // 控制器,用来控制播放/暂停等
      })
      .width('100%') // 宽度占满屏幕
      .height(300) // 高度设为300vp
      .controls(true) // 显示系统默认控制栏
      .autoPlay(false) // 不自动播放(避免用户反感)
    }
    .padding(20)
    .width('100%')
    .height('100%')
    .backgroundColor('#f5f5f5')
  }
}

代码解释

  • src:视频地址,这里用了一个公开的测试地址,你也可以换成自己的本地视频路径(比如dataability:///com.example.myapplication/files/video.mp4);
  • VideoController():控制器对象,后续用来手动控制播放/暂停;
  • controls(true):显示系统自带的控制栏(包含播放、暂停、进度条、音量、全屏);
  • autoPlay(false):默认不自动播放,符合大多数App的设计习惯。

运行效果

点击运行到模拟器/真机,就能看到一个视频区域,点击控制栏的播放按钮,视频就会开始播放啦!

第三步:进阶玩法(自定义控制+监听状态)

系统默认的控制栏不够个性?咱们自己加播放/暂停按钮,再监听视频播放状态(比如播放中、暂停、结束)。

完整代码

typescript 复制代码
// index.ets
@Entry
@Component
struct CustomVideoPlayer {
  // 1. 定义控制器和状态变量
  private videoController: VideoController = new VideoController()
  @State isPlaying: boolean = false // 是否正在播放
  @State currentTime: number = 0 // 当前播放进度(秒)
  @State duration: number = 0 // 视频总时长(秒)

  build() {
    Column() {
      // 视频播放区域
      Video({
        src: 'https://www.w3school.com.cn/i/movie.mp4',
        controller: this.videoController
      })
      .width('100%')
      .height(300)
      .controls(false) // 隐藏系统控制栏,自定义
      .autoPlay(false)
      // 2. 监听视频状态变化
      .onPlay(() => {
        this.isPlaying = true
        console.log('视频开始播放啦')
      })
      .onPause(() => {
        this.isPlaying = false
        console.log('视频暂停了')
      })
      .onEnded(() => {
        this.isPlaying = false
        this.currentTime = 0
        console.log('视频播放结束了')
      })
      .onUpdate((e) => {
        // 实时更新播放进度
        this.currentTime = e.time
        this.duration = e.duration
      })

      // 自定义控制区域
      Row() {
        // 播放/暂停按钮
        Button(this.isPlaying ? '暂停' : '播放')
          .onClick(() => {
            if (this.isPlaying) {
              this.videoController.pause() // 暂停
            } else {
              this.videoController.play() // 播放
            }
          })
          .margin(10)

        // 播放进度显示
        Text(`${Math.floor(this.currentTime)}/${Math.floor(this.duration)}秒`)
          .fontSize(14)

        // 重新播放按钮
        Button('重新播放')
          .onClick(() => {
            this.videoController.seek(0) // 跳转到0秒
            this.videoController.play() // 播放
          })
          .margin(10)
      }
      .justifyContent(FlexAlign.Center)
      .marginTop(20)
    }
    .padding(20)
    .width('100%')
    .height('100%')
    .backgroundColor('#f5f5f5')
  }
}

关键功能解释

  1. 自定义控制按钮 :隐藏系统控制栏(controls(false)),自己做播放/暂停/重新播放按钮;
  2. 状态监听
    • onPlay:视频开始播放时触发;
    • onPause:暂停时触发;
    • onEnded:播放结束时触发;
    • onUpdate:实时获取播放进度和总时长;
  3. 控制器方法
    • play():播放;
    • pause():暂停;
    • seek(0):跳转到指定秒数(这里0就是重新播放)。

第四步:本地视频播放(重要!)

如果想播放手机本地的视频,需要先配置权限,再写正确的路径:

1. 配置权限

module.json5文件里添加文件访问权限:

json 复制代码
{
  "module": {
    // 其他配置...
    "requestPermissions": [
      {
        "name": "ohos.permission.READ_MEDIA_VIDEO" // 读取视频权限
      },
      {
        "name": "ohos.permission.WRITE_MEDIA_VIDEO" // 写入视频权限(可选)
      }
    ]
  }
}

2. 本地视频路径写法

  • 应用沙箱内的视频 (比如放在entry/src/main/resources/rawfile目录下):

    typescript 复制代码
    src: 'rawfile:///test.mp4' // rawfile目录下的test.mp4
  • 手机相册/存储的视频 (需要先获取文件路径):

    typescript 复制代码
    // 假设已经获取到本地文件路径
    src: 'file:///storage/emulated/0/DCIM/Camera/test.mp4'

常见问题&避坑指南

  1. 网络视频播放失败

    • 检查网络是否正常;
    • 确保视频地址是HTTP/HTTPS,且HarmonyOS 6.0允许非HTTPS(或配置网络安全策略);
    • 视频格式支持:MP4、MKV、AVI等主流格式都支持,优先用MP4。
  2. 本地视频找不到

    • 权限一定要配!运行时要手动授权;
    • 路径别写错,rawfile目录下的文件不需要后缀以外的路径。
  3. 控制器没效果

    • 确保Video组件和控制器是同一个对象(比如示例中都是this.videoController);
    • 别重复创建控制器(比如在build里new VideoController(),会导致控制失效)。

总结

HarmonyOS 6.0的Video组件用起来超简单:

  1. 基础用法:给src和控制器,开控制栏就能播;
  2. 进阶用法:隐藏系统控制栏,自定义按钮+监听状态;
  3. 本地视频:配权限+写对路径。

如果大家想考取鸿蒙开发者认证的,欢迎加入我的专属考试链接中:https://developer.huawei.com/consumer/cn/training/classDetail/6ce9d5a998724a849ec634f318107d37?type=1?ha_source=hmosclass\&ha_sourceId=89000248

新手先从最简版开始,跑通后再加自定义控制,一步步来,很快就能掌握啦!如果想加全屏、倍速这些功能,评论区说,咱们再补~

相关推荐
大土豆的bug记录4 小时前
鸿蒙权限授权弹窗(推荐)
华为·harmonyos
音视频牛哥4 小时前
从“十五五”到数字化转型:音视频技术在未来产业中的关键作用
人工智能·深度学习·计算机视觉·音视频·十五五规划音视频低延迟方案·十五五规划低空经济低延迟方案·rtsp rtmp播放器
马剑威(威哥爱编程)4 小时前
【鸿蒙开发案例篇】基于MindSpore Lite的端侧人物图像分割案例
华为·harmonyos
IT·小灰灰4 小时前
AI学会理解物理法则:OpenAI Sora 2如何重塑视频生成新范式
人工智能·python·深度学习·机器学习·数据挖掘·音视频
L、2185 小时前
Flutter + OpenHarmony + 区块链:构建去中心化身份认证系统(DID 实战)
flutter·华为·去中心化·区块链·harmonyos
QT 小鲜肉6 小时前
【孙子兵法之终篇】《孙子兵法》真人阅读、朗读、讲解的视频链接
网络·笔记·音视频·读书·孙子兵法
遇到困难睡大觉哈哈6 小时前
Harmony os —— Data Augmentation Kit 知识问答实战全流程(流式 RAG 问答踩坑记录)
harmonyos·鸿蒙
路溪非溪7 小时前
音频相关基础知识2
音视频
L、2187 小时前
Flutter + OpenHarmony 全栈实战:打造“鸿蒙智联”智能家居控制中心(系列终章)
flutter·华为·智能手机·electron·智能家居·harmonyos