介绍
本示例主要展示了网络视频播放的相关功能。使用@ohos.multimedia.avsession等接口实现视频播放的功能。
效果预览
主页 |
---|
使用说明
- 点击播放按钮,应用的播放状态发生变化。
- 点击暂停按钮,应用的播放状态开始变化。
- 点击上一个按钮,界面展示播放列表中的上一个视频的信息。
- 点击下一下按钮,界面展示播放列表中的下一个视频的信息。
工程目录
给出项目中关键的目录结构并描述它们的作用,示例如下:
entry/src/main/ets/
|---common // 方法封装
|---|---AudioFrameworkTest.ets
|---|---AudioUtils.ets // 控制器封装
|---|---CommonUtils.ets // 格式化时间封装
|---|---Constants.ets // 媒体资源信息
|---|---Log.ets // 日志封装
|---|---PermissionUtils.ets // 权限封装
|---entryability
|---|---EntryAbility.ets
|---pages
|---|---Index.ets // 界面实现
|---|---components
|---|---|---SongItem.ets // 视频列表组件
具体实现
-
界面相关的实现都封装在pages/Index.ets下,源码参考:pages/Index.ets
-
使用
@State
来设置与逻辑代码同步更新的变量,当逻辑代码中对应的变量更新时,界面会同步的刷新。 -
通过引入逻辑代码对应的类,创建出对象,实现对onClick事件的响应,关键代码段:
import media from '@ohos.multimedia.media'; // 引入
this.avPlayer = await media.createAVPlayer(); // 创建对象
this.controller = await this.session.getController(); // 通过类的对象来调用逻辑代码
- 逻辑相关的实现都封装在common/MediaController.ets下,源码参考:common/AudioUtils.ets
应用的初始化相关操作
- 链接变量
使用@State
来设置与逻辑代码同步更新,关键代码段:
@State session: avSession.AVSession = null;
@State controller: avSession.AVSessionController = null;
private avPlayer: media.AVPlayer;
@State @Watch('playInfoUpdated') currentPlayInfo: avSession.AVMediaDescription = undefined;
this.currentPlayInfo = temp;
this.avPlayer = await this.audioUtils.init();
- 获取当前设备中会话并创建Controller
通过接口audioUtils.init()
获取当前设备中的媒体会话;
通过接口session.getController()
创建媒体会话对应的控制器;
通过接口on(play | pause | stop | playNext | playPrevious | seek)
开启对远程以及播控中心提供方发送事件的监听,对事件进行处理;
应用在运行中相关的操作
- 从远程以及播控中心获取基础控制命令
基础控制命令可以通过监听事件setListenerForMesFromController()
。本示例中,从媒体控制方到媒体提供方的基础控制命令主要包括play, pause, playPrevious, playNext
。发送命令的参考代码如下:
let command : AVSessionManager.AVControlCommand = {
command : 'play',
parameter : undefined
} // 构造AVControlCommand参数
async setListenerForMesFromController(); // 媒体会话控制器与媒体会话一一对应
- 获取自定义会话数据(以获取视频为例)
说明:
本示例中,用户点击“下一个视频”的命令,会在将视频信息更新。
视频使用接口switchToNextByLoopMode()
更新视频信息,示例代码如下:
this.currentIndex = this.currentIndex === this.songList.length - 1 ? 0 : this.currentIndex + 1;
this.updateCurrentPlayInfo(this.songList[this.currentIndex], this.audioType);
码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线。大家可以进行参考学习:https://qr21.cn/FV7h05
①全方位,更合理的学习路径:
路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块,六大实战项目贯穿始终,由浅入深,层层递进,深入理解鸿蒙开发原理!②多层次,更多的鸿蒙原生应用:
路线图将包含完全基于鸿蒙内核开发的应用,比如一次开发多端部署、自由流转、元服务、端云一体化等,多方位的学习内容让学生能够高效掌握鸿蒙开发,少走弯路,真正理解并应用鸿蒙的核心技术和理念。③实战化,更贴合企业需求的技术点:
学习路线图中的每一个技术点都能够紧贴企业需求,经过多次真实实践,每一个知识点、每一个项目,都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果,注重对学生的细致教学,每一步都确保学生能够真正理解和掌握。
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:https://qr21.cn/FV7h05
如何快速入门:
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05
大厂鸿蒙面试题::https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向