菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# 实现多方通话

本章将介绍如何实现多方音视频通话,多方音视频通话的 API 调用时序见下图: mult_video

# 获取设备权限

使用 reqPermissionsFromUser 方法,获取设备的麦克风和相机使用权限。

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';

const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE', 'ohos.permission.CAMERA'];

async aboutToAppear() {
    ...
    // 获取设备权限
    reqPermissionsFromUser(permissions,this.context)
}
/*申请权限*/
static reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext | undefined): void {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    let grantStatus: Array<number> = data.authResults;
    let length: number = grantStatus.length;
    for (let i = 0; i < length; i++) {
      if (grantStatus[i] === 0) {
        // 用户授权,可以继续访问目标操作
        console.log('授权成功');
      } else {
        // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
        console.log('授权失败');
        return;
      }
    }
    // 授权成功
  }).catch((err: BusinessError) => {
    console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
  })
}

# 初始化

调用 JCMediaDevice.create (opens new window)JCMediaChannel.create (opens new window) 以初始化实现多方通话需要的模块。

export class JCManager implements JCMediaChannelCallback, JCMediaDeviceCallback {
    // 声明对象
    public mediaDevice: JCMediaDevice | undefined;
    public mediaChannel: JCMediaChannel | undefined;

    // 初始化函数
    initialize(context: Context, createParam: CreateParam): boolean {
       //1. 媒体类
      this.mediaDevice = JCMediaDevice.create(this.client, this);

      //2. 媒体通道类
      this.mediaChannel = JCMediaChannel.create(this.client, this.mediaDevice, this);
      ...
    }
     // 所有多方接口回调的实现
    ...
     // 所有媒体接口回调的实现
    ...
}

# 加入频道

  1. 调用 enableUploadAudioStream (opens new window) 开启音频流。
    this.mediaChannel?.enableUploadAudioStream(true);
    
  2. 调用 join (opens new window),创建并加入频道。需要传入 channelIdOrUri 和 JoinParam (opens new window)
  • channelId:媒体频道标识。
  • JoinParam:加入参数,没有则填 NULL。
 this.mediaChannel?.join("222", null);
  1. 加入频道后自身会收到 onJoin (opens new window) 回调。其他成员会收到 onParticipantJoin (opens new window) 回调。
onJoin(result: boolean, reason: number, channelId: string): void {
    if (result) {
    // 加入频道成功
    } else {
    // 加入频道失败
    }
   }
onParticipantJoin(participant: JCMediaChannelParticipant): void {
    }

# 离开频道

调用 leave (opens new window) 方法可以离开当前频道。

this.mediaChannel?.leave()

离开频道后,自身收到 onLeave (opens new window) 回调,其他成员同时收到 onParticipantLeft (opens new window) 回调。

# 解散频道

如果想解散频道,可以调用下面的接口,此时所有成员都将被退出。

// 结束频道
this.mediaChannel?.stop()

解散频道后,发起结束的成员收到 onStop (opens new window) 回调,其他成员同时收到 onLeave (opens new window) 回调。 解散失败原因枚举值请参考 MediaChannelReason (opens new window)

onStop(result: boolean, reason: number): void {
}
最后更新时间: 2025-5-13 6:06:58 ├F10: PM┤