HarmonyOS鸿蒙Next中视频直播类app接入avsession

HarmonyOS鸿蒙Next中视频直播类app接入avsession 视频直播类app接入avsession怎么配置,比如 createAVSession还有setAVPlaybackState等等的一些配置怎么写

4 回复

【背景知识】 AVSession Kit是系统提供的音视频管控服务,用于统一管理系统中所有音视频行为,帮助开发者快速构建音视频统一展示和控制能力。AVSession Kit提供的能力范围包括:

  • 提供音视频统一管控能力,音视频应用接入AVSession后,可以发送应用的数据(比如正在播放的歌曲、歌曲的播放状态等)到系统播控中心。用户可以通过播控中心、语音助手等系统应用切换多个应用、多个设备播放。
  • AVSession Kit提供音频后台约束能力,应用接入AVSession(媒体会话)后,可以进行后台音频播放。通过系统播控中心,应用后台播放可见可控,音视频应用可统一控制。此功能需要同时申请后台任务。

【解决方案】 音视频应用接入AVSession分为以下几个基本步骤:

  1. 确认会话类型创建并激活媒体会话(需要注意,创建AVSession后,请先注册应用支持的控制命令,再激活AVSession)。
  2. 设置必要的元数据
  3. 设置播放相关状态
  4. 设置被媒体会话控制方拉起的UIAbility。
  5. 按需注册不同的播控命令
  6. 应用退出或无对应业务时,注销会话。

音视频应用接入AVSession的具体步骤可参考:应用接入AVSession场景介绍。 针对不同的业务场景对照应用接入播控自检表及各检查项对应的详细说明进行自检。

更多关于HarmonyOS鸿蒙Next中视频直播类app接入avsession的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


直播开播端方案主要是基于系统提供的Audio KitCamera KitAVCodec Kit以及ArkGraphics 2D等能力实现开播端高清录制、音频播放、音视频编码和纹理渲染等功能。

previewableImage

参考地址

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-hmos-live-stream-solution

在HarmonyOS Next中,视频直播类App接入AVSession需使用AVSession Kit。首先创建AVSession实例并设置会话属性,如媒体类型为视频。通过AVMetadata设置媒体元数据,如标题、封面。使用AVPlaybackState管理播放状态,包括播放、暂停等。通过AVSessionController控制会话,并监听状态变化。在UI上同步显示媒体信息和控制按钮。确保正确处理生命周期,及时释放资源。

在HarmonyOS Next中,视频直播类App接入AVSession进行媒体播放控制,核心在于正确创建会话、管理播放状态与元数据,以便与系统控制中心等组件交互。以下是关键配置步骤:

1. 创建AVSession 在Ability生命周期(如onForeground)中创建会话,需指定会话类型(AVSession.AVSessionType.AUDIOVIDEO)和标签:

import avSession from '@ohos.multimedia.avsession';

let session: avSession.AVSession | null = null;
try {
  session = await avSession.createAVSession(context, 'MyLiveSession', avSession.AVSessionType.VIDEO);
} catch (err) {
  console.error(`创建AVSession失败: ${err.message}`);
}

2. 设置播放状态 通过setAVPlaybackState配置当前播放状态,直播场景通常设置为播放状态:

import avSession from '@ohos.multimedia.avsession';

let playbackState: avSession.AVPlaybackState = {
  state: avSession.PlaybackState.PLAYING, // 直播常为PLAYING
  speed: 1.0, // 播放速度
  position: { elapsedTime: 0 }, // 直播可从0开始或当前时间戳
  bufferedTime: 0, // 直播可能不需要缓冲时间
  loopMode: avSession.LoopMode.LOOP_MODE_NONE, // 直播通常无循环
  isFavorite: false // 是否收藏
};
if (session) {
  try {
    await session.setAVPlaybackState(playbackState);
  } catch (err) {
    console.error(`设置播放状态失败: ${err.message}`);
  }
}

3. 设置媒体元数据 通过setAVMetadata配置直播信息(如标题、主播):

import avSession from '@ohos.multimedia.avsession';

let metadata: avSession.AVMetadata = {
  assetId: 'live_001',
  title: '直播间标题',
  artist: '主播名称',
  album: '直播平台名称',
  writer: '制作方',
  composer: '作曲者',
  duration: 0, // 直播可设为0或预计时长
  mediaImage: '像素图资源', // 直播封面
  subtitle: '直播副标题',
  description: '直播描述',
  lyric: '歌词文件路径', // 如有
  previousAssetId: '',
  nextAssetId: ''
};
if (session) {
  try {
    await session.setAVMetadata(metadata);
  } catch (err) {
    console.error(`设置元数据失败: ${err.message}`);
  }
}

4. 注册控制命令监听 处理系统控制中心发送的播放控制命令(如播放/暂停):

if (session) {
  session.on('play', () => {
    // 执行播放逻辑
    console.info('收到播放命令');
  });
  session.on('pause', () => {
    // 直播可能不支持暂停,可忽略或提示
    console.info('收到暂停命令');
  });
  session.on('destroy', () => {
    // 清理会话
    session = null;
  });
}

5. 激活与释放会话 前台时激活会话,后台或退出时释放:

// 激活会话
if (session) {
  await session.activate();
}

// 释放会话
if (session) {
  await session.deactivate();
  session.destroy();
  session = null;
}

注意事项:

  • 直播场景的position(播放位置)可根据开播时间计算,duration(时长)通常设为0。
  • 若直播不支持暂停/跳转,可在监听器中忽略相关命令或返回错误。
  • 确保会话生命周期与Ability一致,避免资源泄漏。

以上配置可使直播App接入系统媒体控制,实现基本播放信息展示与控制功能。

回到顶部