# 频道管理

本文将介绍视频双录中频道管理的相关功能。

# 查询频道

如需查询频道相关信息,例如频道名称、是否存在、成员名、成员数,可以调用 query (opens new window) 接口进行查询操作。

/**
 *  @brief              查询媒体频道相关信息,例如是否存在,人数等
 *  @param channelId    媒体通道标识
 *  @return             返回操作id,与 onQuery 回调中的 operationId 对应
 */
-(int)query:(NSString*)channelId;

示例代码:

[mediaChannel query:@"channelId"];

查询操作发起后,UI通过以下方法监听查询的结果:

/**
 *  @brief                  查询媒体频道信息结果回调
 *  @param operationId      操作id,由 query 接口返回
 *  @param result           true 表示查询成功,false 表示查询失败
 *  @param reason           查询失败原因 当 result 为 false 时该值有效
 *  @param queryInfo        查询到的信息
 *  @see JCMediaChannelReason
 */
-(void)onQuery:(int)operationId result:(bool)result reason:(JCMediaChannelReason)reason queryInfo:(JCMediaChannelQueryInfo*)queryInfo mediaChannel:(JCMediaChannel *)mediaChannel;

示例代码:

-(void)onQuery:(int)operationId result:(bool)result reason:(JCMediaChannelReason)reason queryInfo:(JCMediaChannelQueryInfo *)queryInfo mediaChannel:(JCMediaChannel *)mediaChannel{
    // 查询成功
   if (result) {
        // 查询频道标识
        NSString* channelId = queryInfo.channelId;
        // 查询频道号
        int number = queryInfo.number;
        // 查询频道成员数
        int clientCount = queryInfo.clientCount;
        // 查询频道成员列表
        NSMutableArray *members = queryInfo.members;
   } else {
        // 查询失败
   }
}

# 发送消息

如果想在频道中给其他成员发送消息,可以调用 sendMessage (opens new window) 接口。

/**
 * @brief 发送消息
 *
 * @param type       消息类型
 * @param content    消息内容,当 toUserId 不为 nil 时,content 不能大于 4k
 * @param toUserId   接收者id,null则发给频道所有人员
 * @return           返回 true 表示成功,false表示失败
 */
-(bool)sendMessage:(NSString *)type content:(NSString *)content toUserId:(NSString *)toUserId;

其中,消息类型(type)为自定义类型。

示例代码:

-(void)onJoin:(bool)result reason:(JCMediaChannelReason)reason channelId:(NSString*)channelId mediaChannel:(JCMediaChannel *)mediaChannel{
    // 发送给所有成员
    [mediaChannel sendMessage:@"text" content:@"content" toUserId:nil];
    // 发送给某个成员
    [mediaChannel sendMessage:@"text" content:@"content" toUserId:@"接收者id"];
}

当频道中的其他成员收到消息时,会收到 onMessageReceive (opens new window) 回调。

/**
 * @brief                接收频道消息的回调
 *
 * @param type           消息类型
 * @param content        消息内容
 * @param fromUserId     消息发送成员的userId
 */
- (void)onMessageReceive:(NSString *)type content:(NSString *)content fromUserId:(NSString *)fromUserId mediaChannel:(JCMediaChannel *)mediaChannel;

# 双会议模式

双会议模式目前主要是为了服务器录制为四分屏,即两方屏幕共享,两方视频画面。 一般第二个会议不开启音视频流上传。

创建双会议模式示例代码如下:

JCMediaChannel firstMediaChannel = [JCMediaChannel create:_client mediaDevice:_mediaDevice callback:self];
JCMediaChannel secondMediaChannel = [JCMediaChannel create:_client mediaDevice:_mediaDevice callback:self];

处理callback示例代码如下:

-(void)onJoin:(bool)result reason:(JCMediaChannelReason)reason channelId:(NSString*)channelId mediaChannel:(JCMediaChannel *)mediaChannel {
    if (mediaChannel == firstMediaChannel) {
        //处理第一个会议
    } else if (jcMediaChannel == secondMediaChannel) {
        //处理第二个会议
    }
}

# 自定义流水号

自定义流水号 SerialNumber 是针对每一通通话的自定义的全局唯一标识符。

JCMediaChannel 创建会议时作为 JCMediaChannelJoinParam (opens new window) 参数传入。

示例代码:

// 根据房间号加入到会议中
JCMediaChannelJoinParam *param = [[JCMediaChannelJoinParam alloc] init];
param.SerialNumber = false;
[_mediaChannel join:_roomTextField.text joinParam:param];

# 获取统计信息

以Json字符串形式返回,其中包含 "Config", "Network","Transport" 和 "Participants" 4个节点

/**
 * 获取统计信息
 * 以Json字符串形式返回,其中包含 "Config", "Network","Transport" 和 "Participants" 4个节点
 * @return 统计信息
 */
- (NSString* __nullable)getStatistics;

# 获取mid

/**
 * mid
 */
@property (nonatomic, readonly, copy) NSString *mid;