145 Star 1.4K Fork 1.7K

OpenHarmony/applications_app_samples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

视频播放

介绍

本示例主要展示了网络视频播放的相关功能。使用@ohos.multimedia.avsession等接口实现视频播放的功能。

效果预览

主页
Index

使用说明

  1. 点击播放按钮,应用的播放状态发生变化。
  2. 点击暂停按钮,应用的播放状态开始变化。
  3. 点击上一个按钮,界面展示播放列表中的上一个视频的信息。
  4. 点击下一下按钮,界面展示播放列表中的下一个视频的信息。

工程目录

给出项目中关键的目录结构并描述它们的作用,示例如下:

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);
      

相关权限

不涉及

约束与限制

  1. 本示例仅支持标准系统上运行。

  2. 本示例为Stage模型,支持API11版本SDK,SDK版本号(API Version 11 beta1),镜像版本号(4.1 beta1)

  3. 本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。

  4. 本示例需全程联网。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony/applications_app_samples.git
git@gitee.com:openharmony/applications_app_samples.git
openharmony
applications_app_samples
applications_app_samples
master

搜索帮助