鸿蒙Video组件的使用(非常详细,附带实例)
Video 组件用于播放视频文件并控制其播放状态,广泛应用于短视频和应用内部视频列表页面。当视频完全加载时,它会自动开始播放;当用户点击视频区域时,视频暂停播放,同时显示播放进度条,用户可以通过拖动进度条来指定视频播放的具体位置。
Video 组件支持加载本地视频和网络视频。

图 1 本地视频存放位置
示例代码如下:

图 2 使用资源访问符$rawfile()引用视频资源的播放效果
示例代码如下:

图 3 带事件调用的视频播放

图 4 带视频播放控制的视频播放效果
示例代码如下:

图 5 使用自定义控制器的视频播放显示效果
注意,Video 组件已经封装好了视频播放的基础功能,开发者无须进行视频实例的创建和视频信息的获取,只需设置数据源以及基础信息即可播放视频。因此其相对扩展能力较弱。
创建Video组件
Video 组件通过调用接口来创建,接口调用形式如下:Video(value: VideoOptions)VideoOptions 对象包含参数 src、currentProgressRate、previewUri、controller:
- src 用于指定视频播放源的路径;
- currentProgressRate 用于设置视频播放倍速;
- previewUri 用于指定视频未播放时的预览图片路径;
- controller 用于设置视频控制器,以自定义控制视频。
Video 组件支持加载本地视频和网络视频。
1) 加载本地视频
加载本地视频时,首先在本地 rawfile 目录指定对应的文件,如下图所示,再使用资源访问符 $rawfile() 引用视频资源。
图 1 本地视频存放位置
示例代码如下:
@Entry
@Component
struct VideoPlayer{
private controller:VideoController | undefined;
private previewUris: Resource = $r ("app.media.preview1");
private innerResource: Resource = $rawfile('VideoDemo.mp4')
build(){
Column() {
Video({
src: this.innerResource,
previewUri: this.previewUris,
controller: this.controller
})
}
}
}
播放页效果如下图所示:
图 2 使用资源访问符$rawfile()引用视频资源的播放效果
2) 加载网络视频
加载网络视频时,需要申请权限 ohos.permission.INTERNET。此时,Video 的 src 属性为网络视频的链接。示例代码如下:
@Entry
@Component
struct VideoPlayer{
private controller:VideoController | undefined;
private previewUris: Resource = $r ('app.media.preview1');
// 使用时请替换为实际视频加载网址
private videoSrc: string= 'https://www.w3school.com.cn/i/movie.mp4'
build(){
Column() {
Video({
src: this.videoSrc,
previewUri: this.previewUris,
controller: this.controller
})
}
}
}
添加Video属性
Video 组件的属性主要用于设置视频的播放形式。例如,设置视频播放时是否静音,播放时是否显示控制条等。
@Component
export struct VideoPlayer {
private controller: VideoController | undefined;
build() {
Column() {
Video({
controller: this.controller
})
.muted(false) // 设置是否静音
.controls(false) // 设置是否显示默认控制条
.autoPlay(false) // 设置是否自动播放
.loop(false) // 设置是否循环播放
.objectFit(ImageFit.Contain) // 设置视频适配模式
}
}
}
Video事件调用
Video 组件的回调事件主要包括播放开始、暂停、结束、失败、停止和视频准备以及操作进度条等事件。除此之外,Video 组件还支持通用事件的调用,如点击、触摸等事件的调用。示例代码如下:
@Entry
@Component
struct VideoPlayer {
private controller: VideoController = new VideoController();
private previewUris: Resource = $r('app.media.preview1');
private innerResource: Resource = $rawfile('videoDemo.mp4');
build() {
Column() {
Video({
src: this.innerResource,
previewUri: this.previewUris,
controller: this.controller
})
.onUpdate(() => {
// 更新事件回调
console.info('video update.');
})
.onPrepared(() => {
// 准备事件回调
console.info('video prepared.');
})
.onError(() => {
// 失败事件回调
console.info('video error.');
})
.onStop(() => {
// 停止事件回调
console.info('video stopped.');
});
}
}
}
显示效果如下图所示:
图 3 带事件调用的视频播放
Video控制器的使用
Video 控制器主要用于控制视频的状态,包括播放、暂停、停止以及设置进度等。1) 默认控制器
默认的控制器支持视频开始、视频暂停、进度调整、全屏显示四项基本功能。示例代码如下:
@Entry
@Component
struct VideoGuide {
@State videoSrc: Resource = $rawfile('videoDemo.mp4');
@State previewUri: string = 'common/preview.png';
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X;
build() {
Row() {
Column() {
Video({
src: this.videoSrc,
previewUri: this.previewUri,
currentProgressRate: this.curRate
})
}
.width('100%')
}
.height('100%');
}
}
显示效果如下图所示:
图 4 带视频播放控制的视频播放效果
2) 自定义控制器
要使用自定义的控制器,需先将默认控制器关闭,之后使用 button 以及 slider 等组件进行自定义的控制与显示,适合在自定义较强的场景下使用。示例代码如下:
@Entry
@Component
struct VideoSample {
// 设置视频资源
@State videoSrc: Resource = $rawfile('videoDemo.mp4');
// 设置预览图片
@State previewUri: string = 'common/preview.png';
// 设置回放速度为1.0倍
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X;
// 设置是否自动播放:true
@State isAutoPlay: boolean = true;
// 设置是否显示控制工具:true
@State showControls: boolean = true;
// 设置当前进度时长
@State currentTime: number = 0;
// 设置视频总时长
@State durationTime: number = 0;
// 视频控制器
controller: VideoController = new VideoController();
build() {
Column() {
// 视频组件
Video({
src: this.videoSrc,
// 设置视频源文件
previewUri: this.previewUri,
// 设置视频预览的图片
currentProgressRate: this.curRate,
// 设置视频播放的当前进度
controller: this.controller
// 设置视频播放控制器实例
})
.controls(this.showControls)
.autoPlay(this.isAutoPlay)
.onPrepared((event) => {
// 在onPrepared中,读取视频的时长
if (event) {
this.durationTime = event.duration;
}
})
.onUpdate((event) => {
// 在onUpdate中,读取视频当前播放到的时长
if (event) {
this.currentTime = event.time;
}
});
Row() {
// 当前播放到的位置
Text(JSON.stringify(this.currentTime) + 's');
// 滑块
Slider({
// 设置当前滑块的位置
value: this.currentTime,
// 设置最小值
min: 0,
// 设置最大值
max: this.durationTime
})
.onChange((value: number, mode: SliderChangeMode) => {
// 更新播放进度
this.controller.setCurrentTime(value);
})
.width('90%');
// 显示结束的时长
Text(JSON.stringify(this.durationTime) + 's');
}
.opacity(0.8)
.width('100%');
}
.width('100%')
.height('100%');
}
}
显示效果如下图所示:
图 5 使用自定义控制器的视频播放显示效果
注意,Video 组件已经封装好了视频播放的基础功能,开发者无须进行视频实例的创建和视频信息的获取,只需设置数据源以及基础信息即可播放视频。因此其相对扩展能力较弱。
ICP备案:
公安联网备案: