介绍
本示例主要展示了网络视频播放的相关功能。使用@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);
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册