HarmonyOS: 鸿蒙开发视频播放器【华为根技术】
以下是鸿蒙开发中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。
- 点赞
- 收藏
- 关注作者
评论(0)