[经验分享] 拆·应用丨第2期:基于开源鸿蒙的AVPlayer视频播控开发样例

开源鸿蒙知行录 显示全部楼层 发表于 2026-1-21 17:28:27

【拆·应用】是为开源鸿蒙应用开发者打造的技术分享平台,是汇聚开发者的技术洞见与实践经验、提供开发心得与创新成果的展示窗口。诚邀您踊跃发声,期待您的真知灼见与技术火花!

样例简介

在开源鸿蒙生态建设中,多媒体能力是构建丰富用户体验的核心要素。本开发样例基于 AVPlayer实现,AvPlayer支持流媒体和本地资源解析、媒体资源解封装、视频解码和渲染功能,适用于对媒体资源进行端到端播放的场景,可直接播放mp4、mkv等格式的视频文件,为开发者提供标准化视频功能实现路径,助力构建高性能、可定制的多媒体应用。

使用说明

操作面板唤起:首页点击播放按钮,视频开始播放;再次点击画面进入全屏模式点击视频界面,唤起视频操作面板,再次点击操作面板消失,如果不做任何操作,操作界面会5s自动消失。

1.png

视频播控:点击暂停/播放按钮,控制视频暂停播放。

2.png

滑动进度条:视频跳转到指定位置播放,在中间区域显示时间进度。

3.png

倍速切换:可以选择1.0、1.25、1.75、2.0进行倍速调节。

4.png

视频切换:连接网络能在本地视频和网络视频进行切换。

注意network是网络视频,检测到没有连接网络会退出应用。

5.png

音轨切换:点击 AudioTrack音轨列表选择框,可以选择音轨进行切换。

6.png

缩略图获取:点击进入获取缩略图界面,可以获取视频的缩略图。 7.png

外挂字幕:点击 Subtitle开关列表选择框,可以切换外挂字幕是否显示。 8.png

样例代码拆解

下面是各个功能模块代码逻辑详细分解。可在此处下载样例源码

播控模块:包括视频播放、暂停、定点播放、倍速播放等。

  1. 视频播放
  • 视频播放窗口在 CoverXComponent自定义组件中实现。9.png
  • CoverXComponent中创建 XComponent组件,并在 onLoad中初始化视频。 10.png
  • 初始化视频中创建视频播放器,并监听播放状态变化。 11.png
  • 在监听播放状态中,等到达 prepared状态时,调用 avPlayer.play()播放视频 12.png
  1. 视频暂停
  • 暂停按钮绘制在 VideoOperate组件中。 13.png
  • 使用 Image组件绘制播放、暂停按钮图标,点击调用视频暂停、播放接口。 14.png
  1. 视频定点播放
  • 使用 Slider组件绘制视频进度条,并设置拖动或点击时触发事件回调。 15.png
  • 在回调事件中,调用 avPlayer.seek接口进行视频定点播放。 16.png
  1. 视频倍速设置
  • 使用 Button组件作为倍速选择按钮,点击后打开倍速选择弹框。 17.png
  • 通过 CustomDialogController自定义弹框实现倍速选择。 18.png
  • SpeedDialog组件中通过 List实现1.0X、1.25X、1.75X、2.0X倍速选择。 19.png
  • List点击事件中,设置视频播放具体倍速。 20.png
  • 调用 avPlayer.setSpeed()设备倍速。
  • 21.png
  • 22.png

视频切换:设备联网后,本地视频和网络视频都可以播放。

  • 首先是 Row容器组件,组件中包含列表图标,播放的视频名称,和列表下拉图标。并在点击事件中设置 isShow为true或false,控制视频列表 VideoPanel是否展示。 23.png

  • 通过 VideoPanel绘制视频列表,点击切换视频。 24.png

  • VideoPanel中通过 List组件绘制视频列表,包括视频名称、是否当前播放,点击后调用 VideoChoose切换视频播放。 25.png

  • 如下图所示,VideoChoose中调用 videoReset,即 avPlayer.reset重置视频。 26.png

    27.png

音轨切换:视频音轨切换,即视频有多种语言配音可进行音轨切换。

  • 通过 Select组件绘制,并通过 onSelect调用 setAudioTrack接口设置音轨。 28.png
  • setAudioTrack中,通过 deselectTrackselectTrack进行音轨切换。 29.png

字幕展示:设备联网后,点击字幕开,在视频下方展示外挂字幕。

  • 通过 Select组件绘制,并在 onSelect调用 setSubtitleState打开、关闭字幕。 30.png

  • setSubtitleState中设置当前的字幕状态。 31.png

  • 通过 Text组件显示字幕。 32.png

    33.png

  • this.text是监听 subtitleUpdate获取的字幕内容。 34.png

缩略图获取:视频跳转到指定位置播放,在中间区域显示时间进度。

  • 通过 createAVMetadataExtractor从媒体资源中提取元数据,作为缩略图。通过 createAVImageGenerator从视频资源中获取指定时间的缩略图。 35.png

结语

以上是本次样例具体功能模块的实现,通过本样例让开发者们了解到如何使用 AVPlayer开发视频播放功能,包括创建 AVPlayer、设置播放资源和窗口、设置播放倍速、播放控制(播放/暂停/跳转/停止)、重置销毁资源、字幕展示等;除此之外,开源鸿蒙也提供了丰富的基础组件和其他功能模块,依托开源特性可灵活定制底层功能,借助分布式架构实现 “一次开发,多端部署”,大幅降低跨设备协同开发成本,一系列配套的开发工具和教程可让开发者快速上手,欢迎更多的开发者加入到开源鸿蒙应用开发中,创造更多奇思妙想的应用。

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 | 京公网安备11030102011662号 |技术支持 Discuz!

返回顶部