本示例主要展示了网络视频播放的相关功能。使用@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);
不涉及
本示例仅支持标准系统上运行。
本示例为Stage模型,支持API11版本SDK,SDK版本号(API Version 11 beta1),镜像版本号(4.1 beta1)
本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。
本示例需全程联网。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。