HarmonyOS: 鸿蒙开发视频播放器【华为根技术】

举报
tea_year 发表于 2025/10/31 20:57:43 2025/10/31
【摘要】 以下是鸿蒙开发中Video组件的详细使用,涵盖核心API、常用方法、属性配置及示例代码,综合最新文档(截至2025年5月)整理:一、Video组件基础1. 组件定义与功能作用:用于播放视频文件并控制播放状态,支持本地/网络视频、倍速播放、预览图等功能 。API版本:从API Version 4开始支持,部分特性需更高版本(如倍速控制需API 8+)。权限要求:// module.json5中...

以下是鸿蒙开发中Video组件的详细使用,涵盖核心API、常用方法、属性配置及示例代码,综合最新文档(截至2025年5月)整理:

一、Video组件基础


1. 组件定义与功能
作用:用于播放视频文件并控制播放状态,支持本地/网络视频、倍速播放、预览图等功能 。
API版本:从API Version 4开始支持,部分特性需更高版本(如倍速控制需API 8+)。
权限要求:

// module.json5中申请网络权限
"requestPermissions": [{
  "name": "ohos.permission.INTERNET",
  "reason": "加载网络视频"
}]


2. 创建Video组件

Video({
  src: string | Resource,                // 视频源路径
  currentProgressRate?: number | string, // 播放倍速(API 8+)
  previewUri?: string | PixelMap,       // 预览图
  controller?: VideoController          // 控制器
})


示例:

@Entry
@Component
struct VideoPlayer {
  private controller: VideoController = new VideoController();
  @State videoSrc: Resource = $rawfile('video.mp4'); // 本地资源
  @State previewImg: Resource = $r('app.media.poster');
 
  build() {
    Column() {
      Video({
        src: this.videoSrc,
        previewUri: this.previewImg,
        controller: this.controller
      })
    }
  }
}


二、核心API与属性


1. 视频源类型
类型    示例代码    说明
本地资源    $rawfile('video.mp4')    需放在resources/rawfile目录
网络资源    'https://example.com/video.mp4'    需网络权限 
沙箱路径    'file:///data/storage/files/video.mp4'    需文件读写权限 
Data Ability    'dataability://com.example.provider/video'    需配置Data Ability 
2. 常用属性
属性名    类型    默认值    说明
muted    boolean    false    是否静音播放
autoPlay    boolean    false    是否自动播放(注意:预览器无效,需在模拟器测试) 
controls    boolean    true    是否显示默认控制栏(设为false可自定义UI) 
objectFit    ImageFit    Cover    视频缩放模式(Contain/Cover/Fill等)
loop    boolean    false    是否循环播放
3. VideoController控制器
方法    参数    说明
start()    -    开始播放
pause()    -    暂停播放
stop()    -    停止播放(重置进度)
setCurrentTime()    time: number (秒)    跳转到指定时间
requestFullscreen()    isFullscreen: boolean    切换全屏模式
示例:

// 控制视频跳转到10秒位置
this.controller.setCurrentTime(10, SeekMode.Accurate); // API 12+支持精准跳转


三、事件监听

示例:

Video({ /*...*/ })
  .onPrepared((event) => {
    console.log(`视频时长:${event.duration}秒`);
  })
  .onUpdate((event) => {
    this.currentTime = event.time; // 更新当前播放时间
  })



四、进阶功能


1. 自定义控制栏
通过隐藏默认控制栏(controls(false)),结合Slider和Button组件实现:

@Component
struct CustomControls {
  @Link isPlaying: boolean;
  @Link currentTime: number;
  @Link duration: number;
  private controller: VideoController;
 
  build() {
    Row() {
      Button(this.isPlaying ? '暂停' : '播放')
        .onClick(() => {
          this.isPlaying ? this.controller.pause() : this.controller.start();
          this.isPlaying = !this.isPlaying;
        })
      Slider({
        value: this.currentTime,
        max: this.duration
      }).onChange((value) => {
        this.controller.setCurrentTime(value);
      })
    }
  }
}

2. 多实例协同播放
使用AVPlayer(Native API)实现复杂场景(如画中画、后台播放):

import media from '@ohos.multimedia.media';
const avPlayer = media.createAVPlayer();
avPlayer.url = 'https://example.com/video.mp4';
avPlayer.surfaceId = xComponentController.getXComponentSurfaceId(); // 绑定渲染表面
avPlayer.play();


使用video组件,实现本地视频和在线视频播放,可以实现状态栏显示,横屏全屏播放,显示播放时间和总时间,点击屏幕实现暂停和播放。

实现思路

添加一个video组件用于视频播放的操作,设置屏幕显示的宽高,设置全屏播放,通过点击事件设置视频的播放和暂停。

代码解析

1、hml文件

(1)添加视频播放组件video

(2)src设置视频路径 可以是本地也可以是在线

(3)autoplay设置视频默认是否播放

(4)设置视频播放的事件:播放,暂停,完成,错误,拖动等

import prompt from '@system.prompt';
export default {
    data: {
        title: 'World',
        isStart: true,
    },
    onprepared(e){ // 视频准备完成时触发该事件
        prompt.showToast({
            message:"准备就绪:"+e.duration,
            duration:3000
        })
    },
    onstart(){ // 播放时触发该事件
        prompt.showToast({
            message:"播放开始",
            duration:3000
        })
    },
    onpause(){ // 暂停时触发该事件
        prompt.showToast({
            message:"播放暂停",
            duration:3000
        })
    },
    onfinish(){ // 播放结束时触发该事件
        prompt.showToast({
            message:"播放结束",
            duration:3000
        })
    },
    onerror(){ // 播放失败时触发该事件
        prompt.showToast({
            message:"播放失败",
            duration:3000
        })
    },
    onseeking(e){ // 操作进度条过程时上报时间信息
        prompt.showToast({
            message:"onseeking 拖动时间:" + e.currenttime,
            duration:3000
        })
    },
    onseeked(e){ // 操作进度条完成后,上报播放时间信息
        prompt.showToast({
            message:"onseeked 时间:" + e.currenttime,
            duration:3000
        })
    },
    ontimeupdate(e){ // 播放进度变化时触发该事件
    },
    change_start_pause: function() {
        if(this.isStart) {
            this.$element('videoId').pause();
            this.isStart = false;
        } else {
            this.$element('videoId').start();
            this.isStart = true;
        }
    },
}

总结

video 视频播放组件

属性

1、muted 视频是否静音播放。,

2、src 播放视频内容的路径。

3、autoplay 视频是否自动播放。,

4、controls 控制视频播放的控制栏是否显示,如果设置为false,则不显示控制栏。默认为true,由系统决定显示或隐藏控制栏。

5、object-fit 视频源的缩放类型,如果poster设置了值,那么此配置还会影响视频海报的缩放类型,可选值参考表 object-fit 类型说明。object-fit 类型说明 fill 不保持宽高比进行放大缩小,使得图片填充满显示边界。

事件

1、prepared 视频准备完成时触发该事件,通过duration可以获取视频时长,单位为s。

2、start 播放时触发该事件。

3、pause 暂停时触发该事件。,

4、finish 播放结束时触发该事件。

5、error 播放失败时触发该事件。,

6、seeking 操作进度条过程时上报时间信息,单位为s。,

7、seeked 操作进度条完成后,上报播放时间信息,单位为s。

8、timeupdate 播放进度变化时触发该事件,单位为s,更新时间间隔为250ms。

方法

1、start 请求播放视频。,

2、pause 请求暂停播放视频。

3、setCurrentTime 指定视频播放的进度位置,单位为s。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。