跳转至

呼叫信令

产品概述

提供基于 TCP 协议的消息通道,兼容主流音视频 SDK,支持离线推送和自定义消息。信令消息不丢、不乱序、稳定可靠。

支持平台:

支持 iOS、Android、Web、Mac、Windows、Linux,并支持平台间互通。

注:Mac、Windows、Linux 版本可基于 Electron 开发实现,暂不支持 C++ 版本的原生 Mac、Windows、Linux 版本 SDK。

前期准备

  1. 了解融云 IM 即时通讯的基本概念和架构

  2. 注册融云开发者账号并创建应用

  3. 下载融云 IMLib SDK

  4. 了解如何集成融云 IMLib SDK,相关文档如下:

集成流程

  1. 初始化融云 SDK

  2. 获取 Token

  3. 设置消息监听

  4. 连接服务器

  5. 发送信令消息

  6. 基于信令消息与主流音视频 SDK 对接

集成指南

目前已提供的音视频通讯信令消息如下:

消息类型 描述 类名
RC:VCInvite 用于主动邀请用户进行实时音视频通话 RCCallInviteMessage
RC:VCAccept 用户收到邀请信息,接受邀请时可向邀请用户发送此消息,表示同意接听 RCCallAcceptMessage
RC:VCHangup 实时音视频通话结束挂断时,发送此消息 RCCallHangupMessage
RC:VCModifyMedia 音视频通话过程中,切换通话类型(音频/视频)时发送此条消息 RCCallMediaModifyMessage
RC:VCModifyMem 实时音视频通话过程中发生人员变化时,发送此条通知消息 RCCallMemberModifyMessage
RC:VCRinging 实时音视频响铃 RCCallRingingMessage

注:融云内置信令消息支持离线通知,用户上线后可接收到离线期间的信令消息。

呼叫邀请

市场上的音视频通讯服务基本上是基于房间逻辑,使用发布订阅逻辑进行音视频通话,因此要实现呼叫功能必须发起方和被呼叫方在同一个房间中,二者均发布资源和互相订阅对方的资源,多方通话的流程和二人通话的流程类似,二人通话时直接把信令消息发送给对方即可。

呼叫功能需要实现以下流程:

  1. 加入房间,
  2. 设置音视频参数,
  3. 发布资源,
  4. 邀请用户(呼叫),中间有一步失败都会面临失败

邀请用户进行通话时,可通过发送融云 RCCallInviteMessage 信令消息,目标用户收到此消息后,可进行接受/拒绝操作处理。

信令消息结构:

{
  "callId":"3211",
  "mediaType":“Audio”,
  "mediaId":"3231",
  "inviteUserIds":"123"
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId
mediaType 音视频类型:音频、视频
mediaId 媒体 ID,根据业务需要可选择进行设置
inviteUserIds 邀请目票用户列表

邀请信令消息通过 VoIP Push 方法发送,用户如未在线时,将会收到 VoIP 远程推送通知,详细发送方法文档如下:

接听呼叫

接收到邀请信令消息后,如用户接受邀请需要向对方回复 RCCallAcceptMessage 信令消息,对方收到接受信令消息后可加入通话。

信令消息结构:

{
"callId":"Xcdsklloeeedsdccddd"
"mediaType":"video"
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId
mediaType 接听时选择的媒体类型

挂断通话

通话结束后,需要发送挂断信令消息 RCCallHangupMessage 通知对方该用户已退出。

信令消息结构:

{
"callId":"Xcdsklloeeedsdccddd"
"reason":"busy"
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId
reason 挂断原因

拒绝邀请

接收到邀请信令消息后,如拒绝接听时,可通过发送挂断信令消息方式实现,需要向对方回复 RCCallHangupMessage 消息,对方收到拒绝信令消息后结束邀请。

如需要区分挂断和拒绝信令状态,可自定义拒绝信令消息,通过自定义消息方式实现。

自定义消息文档如下:

成员变化通知

通话过程中,如发生成员变化时(增加/减少),需要发送成员变化信令消息 RCCallMemberModifyMessage 通知当前房间中正在通话的其他成员。

信令消息结构:

{
"callId":"Xcdsklloeeedsdccddd"
"modifyMemType":"add"
"caller":"Xclldooddfas"
"mediaType":"audio"
"extra":""
"inviteUserIds":["xdsdsd","dsafdsfdsfd"],
"existedMemberStatusList":["sdiafjaodis","dfasiodf"]
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId
modifyMemType 成员修改类型,添加或删除
caller 由谁发起
mediaType 媒体类型
extra 其他消息
inviteUserIds 邀请用户列表
existedMemberStatusList 已存在的用户列表

媒体类型修改

通话过程中,如切换当前通话类型时(如视频通话切换为音频通话),需要发送切换通话类型信令消息 RC:VCModifyMedia 通知对方切换展示方式。

信令消息结构:

{
"callId":"Xcdsklloeeedsdccddd"
"mediaType":"video"
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId
mediaType 修改之后的媒体类型

响铃通知

邀请某用户进行音视频通话时,如用户未接听正在响铃中状态可选择发送此信令消息,用于标识目标用户在线正在响铃中状态。

信令消息结构:

{
"callId":"Xcdsklloeeedsdccddd"
}
名称 说明
callId 当前音视频呼叫 ID,一般为音视频房间的 ID 或者 channalId

自定义信令消息

如提供的信令消息,无法满足客户的业务需求时,可通过自定义消息的方式,自定义通话信令发送。融云自定义消息文档如下:

消息发送说明

发送信令消息的说明文档如下:

Android 消息发送

通过 option 设置此消息是否发启 VoIP Push 通知,目前仅支持设置 isVoIPPush,如果对端设备是 iOS,设置 isVoIPPush 为 True,则会发送 VoIP Push,如对端为 Android 设备则正常发送此消息。

注:发送邀请信令消息时需要将 isVoIPPush 设置为 True

/**
 * <p>发送消息。
 * 通过 {@link io.rong.imlib.IRongCallback.ISendMessageCallback} 中的方法回调发送的消息状态及消息体。</p>
 *
 * @param message     将要发送的消息体。
 * @param pushContent 当下发 push 消息时,在通知栏里会显示这个字段。
 *                    如果发送的是自定义消息,该字段必须填写,否则无法收到 push 消息。
 *                    如果发送 sdk 中默认的消息类型,例如 RC:TxtMsg, RC:VcMsg, RC:ImgMsg,则不需要填写,默认已经指定。
 * @param pushData    push 附加信息。如果设置该字段,用户在收到 push 消息时,能通过 {@link io.rong.push.notification.PushNotificationMessage#getPushData()} 方法获取。
 * @param option      发送消息附加选项,目前仅支持设置 isVoIPPush,如果对端设备是 iOS,设置 isVoIPPush 为 True,会走 VoIP 通道推送 Push,如对端为 Android 设备则正常发送此消息。
 * @param callback    发送消息的回调,参考 {@link io.rong.imlib.IRongCallback.ISendMessageCallback}。
 */
public void sendMessage(final Message message, final String pushContent, final String pushData, final SendMessageOption option, final IRongCallback.ISendMessageCallback callback) {
}

iOS 消息发送

通过 option 设置此消息是否发启 VoIP Push 通知,目前仅支持设置 isVoIPPush,设置 isVoIPPush 为 YES,则对端为 iOS 时会发送 VoIP Push,默认为 NO,则不会发送 VoIP Push。如对端为 Android 设备则正常发送此消息。

注:发送邀请信令消息时需要将 isVoIPPush 设置为 YES

/*!
 发送消息
 
 @param conversationType    发送消息的会话类型
 @param targetId            发送消息的目标会话ID
 @param content             消息的内容
 @param pushContent         接收方离线时需要显示的远程推送内容
 @param pushData            接收方离线时需要在远程推送中携带的非显示数据
 @param option              消息的相关配置
 @param successBlock        消息发送成功的回调 [messageId:消息的ID]
 @param errorBlock          消息发送失败的回调 [nErrorCode:发送失败的错误码,
 messageId:消息的ID]
 @return                    发送的消息实体
 
 @discussion 当接收方离线并允许远程推送时,会收到远程推送。
 远程推送中包含两部分内容,一是pushContent,用于显示;二是pushData,用于携带不显示的数据。
 
 SDK内置的消息类型,如果您将pushContent和pushData置为nil,会使用默认的推送格式进行远程推送。
 自定义类型的消息,需要您自己设置pushContent和pushData来定义推送内容,否则将不会进行远程推送。
 
 如果您使用此方法发送图片消息,需要您自己实现图片的上传,构建一个RCImageMessage对象,
 并将RCImageMessage中的imageUrl字段设置为上传成功的URL地址,然后使用此方法发送。
 
 如果您使用此方法发送文件消息,需要您自己实现文件的上传,构建一个RCFileMessage对象,
 并将RCFileMessage中的fileUrl字段设置为上传成功的URL地址,然后使用此方法发送。
 
 @warning 如果您使用IMLib,可以使用此方法发送消息;
 如果您使用IMKit,请使用RCIM中的同名方法发送消息,否则不会自动更新UI。
 */
- (RCMessage *)sendMessage:(RCConversationType)conversationType
                  targetId:(NSString *)targetId
                   content:(RCMessageContent *)content
               pushContent:(NSString *)pushContent
                  pushData:(NSString *)pushData
                    option:(RCSendMessageOption *)option
                   success:(void (^)(long messageId))successBlock
                     error:(void (^)(RCErrorCode nErrorCode, long messageId))errorBlock;

信令消息离线说明

融云内置信令消息支持离线通知,默认存储 7 天,用户上线后可接收到离线期间的所有信令消息。

如业务需要发送不支持离线的信令消息,可通过自定义消息方式实现,设置该自定义信令消息为不存储即可。