| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| AppScope/ | 06-May-2025 | - | 35 | 32 | ||
| entry/ | 06-May-2025 | - | 2,154 | 1,993 | ||
| hvigor/ | 06-May-2025 | - | 19 | 19 | ||
| screenshots/device/ | 06-May-2025 | - | ||||
| .gitignore | D | 06-May-2025 | 119 | 11 | 11 | |
| README.md | D | 06-May-2025 | 4.5 KiB | 120 | 81 | |
| build-profile.json5 | D | 06-May-2025 | 1.2 KiB | 51 | 50 | |
| hvigorfile.ts | D | 06-May-2025 | 230 | 7 | 5 | |
| hvigorw | D | 06-May-2025 | 1.4 KiB | 49 | 28 | |
| hvigorw.bat | D | 06-May-2025 | 1.5 KiB | 65 | 47 | |
| oh-package.json5 | D | 06-May-2025 | 825 | 28 | 26 | |
| ohosTest.md | D | 06-May-2025 | 954 | 14 | 12 |
README.md
1# 视频播放 2 3### 介绍 4 5本示例主要展示了网络视频播放的相关功能。使用[@ohos.multimedia.avsession](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-avsession.md)等接口实现视频播放的功能。 6 7### 效果预览 8 9| 主页 | 10|-------------------------------- | 11|  | 12 13#### 使用说明 14 151. 点击播放按钮,应用的播放状态发生变化。 162. 点击暂停按钮,应用的播放状态开始变化。 173. 点击上一个按钮,界面展示播放列表中的上一个视频的信息。 184. 点击下一下按钮,界面展示播放列表中的下一个视频的信息。 19 20### 工程目录 21 22给出项目中关键的目录结构并描述它们的作用,示例如下: 23 24``` 25entry/src/main/ets/ 26|---common // 方法封装 27|---|---AudioFrameworkTest.ets 28|---|---AudioUtils.ets // 控制器封装 29|---|---CommonUtils.ets // 格式化时间封装 30|---|---Constants.ets // 媒体资源信息 31|---|---Log.ets // 日志封装 32|---|---PermissionUtils.ets // 权限封装 33|---entryability 34|---|---EntryAbility.ets 35|---pages 36|---|---Index.ets // 界面实现 37|---|---components 38|---|---|---SongItem.ets // 视频列表组件 39``` 40 41### 具体实现 42 43* 界面相关的实现都封装在pages/Index.ets下,源码参考:[pages/Index.ets](./entry/src/main/ets/pages/Index.ets) 44 * 使用`@State`来设置与逻辑代码同步更新的变量,当逻辑代码中对应的变量更新时,界面会同步的刷新。 45 46 * 通过引入逻辑代码对应的类,创建出对象,实现对onClick事件的响应,关键代码段: 47 ```js 48 49 import media from '@ohos.multimedia.media'; // 引入 50 51 this.avPlayer = await media.createAVPlayer(); // 创建对象 52 53 this.controller = await this.session.getController(); // 通过类的对象来调用逻辑代码 54 55 ``` 56 57* 逻辑相关的实现都封装在common/MediaController.ets下,源码参考:[common/AudioUtils.ets](./entry/src/main/ets/common/AudioUtils.ets) 58 59 应用的初始化相关操作 60 61 * 链接变量 62 63 使用`@State`来设置与逻辑代码同步更新,关键代码段: 64 65 ```ets 66 @State session: avSession.AVSession = null; 67 @State controller: avSession.AVSessionController = null; 68 private avPlayer: media.AVPlayer; 69 @State @Watch('playInfoUpdated') currentPlayInfo: avSession.AVMediaDescription = undefined; 70 this.currentPlayInfo = temp; 71 this.avPlayer = await this.audioUtils.init(); 72 ``` 73 74 * 获取当前设备中会话并创建Controller 75 76 通过接口`audioUtils.init()`获取当前设备中的媒体会话; 77 78 通过接口`session.getController()`创建媒体会话对应的控制器; 79 80 通过接口`on(play | pause | stop | playNext | playPrevious | seek)`开启对远程以及播控中心提供方发送事件的监听,对事件进行处理; 81 82 应用在运行中相关的操作 83 84 * 从远程以及播控中心获取基础控制命令 85 86 基础控制命令可以通过监听事件`setListenerForMesFromController()`。本示例中,从媒体控制方到媒体提供方的基础控制命令主要包括`play, pause, playPrevious, playNext`。发送命令的参考代码如下: 87 ```ets 88 let command : AVSessionManager.AVControlCommand = { 89 command : 'play', 90 parameter : undefined 91 } // 构造AVControlCommand参数 92 async setListenerForMesFromController(); // 媒体会话控制器与媒体会话一一对应 93 ``` 94 95 * 获取自定义会话数据(以获取视频为例) 96 97 > 说明: 98 > 99 > 本示例中,用户点击“下一个视频”的命令,会在将视频信息更新。 100 101 视频使用接口`switchToNextByLoopMode()`更新视频信息,示例代码如下: 102 ```ets 103 this.currentIndex = this.currentIndex === this.songList.length - 1 ? 0 : this.currentIndex + 1; 104 this.updateCurrentPlayInfo(this.songList[this.currentIndex], this.audioType); 105 ``` 106 107### 相关权限 108 109不涉及 110 111### 约束与限制 112 1131. 本示例仅支持标准系统上运行。 114 1152. 本示例为Stage模型,支持API11版本SDK,SDK版本号(API Version 11 beta1),镜像版本号(4.1 beta1) 116 1173. 本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。 118 1194. 本示例需全程联网。 120