介绍
本示例主要展示了网络视频播放的相关功能。使用 @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下
DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到以下内容:
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
应用的初始化相关操作
- 链接变量
使用@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);