• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3532

entry/06-May-2025-2,1461,971

hvigor/06-May-2025-3332

.gitignoreD06-May-2025119 1111

README.mdD06-May-20254.5 KiB12081

build-profile.json5D06-May-20251.2 KiB5150

hvigorfile.tsD06-May-2025822 225

hvigorwD06-May-20251.9 KiB6455

hvigorw.batD06-May-20252.1 KiB8061

oh-package.json5D06-May-2025825 2826

ohosTest.mdD06-May-2025941 1412

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| ![Index](screenshots/device/index.jpeg) |
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