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

# 初始化 调用 JCMediaDevice

create (opens new window)

和 JCMediaChannel

create (opens new window)

以初始化实现多方通话需要的模块。

//初始化

-(bool)initialize {

//1. 媒体类

JCMediaDevice *mediaDevice = [JCMediaDevice create:client callback:self];

//2. 媒体通道类

JCMediaChannel *mediaChannel = [JCMediaChannel create:client mediaDevice:mediaDevice callback:self];

...

}

其中:

JCMediaDevice create 方法中的 callback 为

JCMediaDeviceCallback (opens new window)

协议的代理对象,该协议用于将媒体设备相关的事件通知给上层。因此需要先指定 callback 的代理对象,然后在该代理对象中实现

JCMediaDeviceCallback 的方法。 JCMediaDeviceCallback 中的主要方法如下

//摄像头变化

-(void)onCameraUpdate;

//音频输出变化

-(void)onAudioOutputTypeChange:(NSString*)audioOutputType;

//声音中断恢复

-(void)onAudioInerruptAndResume:(BOOL)interrupt;

JCMediaChannel create 方法中的 callback 为

JCMediaChannelCallback (opens new window)

协议的代理对象,该协议用于将频道中的相关事件通知给上层。因此需要先指定 callback 的代理对象,然后在该代理对象中实现

JCMediaChannelCallback 的方法。 JCMediaChannel 中的主要方法如下

//自身状态变化回调

-(void)onMediaChannelStateChange:(JCMediaChannelState)state oldState:(JCMediaChannelState)oldState;

//加入频道结果回调

-(void)onJoin:(bool)result reason:(JCMediaChannelReason)reason channelId:(NSString*)channelId;

//离开频道结果回调

-(void)onLeave:(JCMediaChannelReason)reason channelId:(NSString*)channelId;

//解散频道结果回调

-(void)onStop:(bool)result reason:(JCMediaChannelReason)reason;

//新成员加入回调

-(void)onParticipantJoin:(JCMediaChannelParticipant*)participant;

//成员离开回调

-(void)onParticipantLeft:(JCMediaChannelParticipant*)participant;

//成员更新回调

-(void)onParticipantUpdate:(JCMediaChannelParticipant*)participant participantChangeParam:(JCMediaChannelParticipantChangeParam *)participantChangeParam;

//成员声音变化

-(void)onParticipantVolumeChange:(JCMediaChannelParticipant*)participant;

# 加入频道 1. 调用

JCMediaChannel (opens new window)

中的

enableUploadAudioStream (opens new window)

开启音频流。返回 true 表示正常执行调用流程,false 表示调用异常。

// 1. 开启音频流

[mediaDeviceChannel enableUploadAudioStream:true];

调用

join (opens new window)

方法创建并加入频道。您需要在该方法中传入如下参数: channelId:媒体频道标识。

joinParam:加入参数,没有则填 nil。 详见

JCMediaChannelJoinParam (opens new window)

对象。

// 加入频道

[mediaChannel join:@"222" joinParam:nil];

加入频道后自身会收到 onJoin (opens new window) 回调。其他成员会收到 onParticipantJoin (opens new window) 回调。

// 加入频道结果回调

-(void)onJoin:(bool)result reason:(JCMediaChannelReason)reason channelId:(NSString*)channelId

{

if (result) {

// 加入成功

} else {

// 加入失败

}

}

# 离开频道 调用

leave (opens new window)

方法可以离开当前频道。

[mediaChannel leave];

离开频道后,自身收到

onLeave (opens new window)

回调,其他成员同时收到

onParticipantLeft (opens new window)

回调。

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

// 结束频道

[mediaChannel stop];

解散频道后,发起结束的成员收到

onStop (opens new window)

回调,其他成员同时收到

onLeave (opens new window)

回调。 解散失败原因枚举值请参考

JCMediaChannelReason (opens new window)