通话过程控制
本章节介绍音频通话过程中网易云信提供的各种控制功能。包括点对点通话的控制、多人会议的控制和通用控制。 点对点通话的控制包括发送通话控制信息、设置静音、切换通话模式等 多人会议的控制包括改变自己在会议中的角色(互动者/观众) 通用控制包括是否接收某用户的音频或视频数据等
点对点通话的控制
发送通话控制信息
API介绍
音频通话控制,点对点通话有效,异步回调SessionStatusCallback 见nim_cpp_vchat.h
API原型
static bool Control(uint64_t channel_id, NIMVChatControlType type);
File:nim_cpp_vchat.h
参数说明
|参数|类型|说明| |channel_id|int64_t|音频通话通道id| |type|enum|音视频通话控制类型,注意视频相关控制操作暂不支持 |
/** @enum NIMVChatControlType 音视频通话控制类型 */
enum NIMVChatControlType
{
kNIMTagControlOpenAudio = 1, /**< 打开音频 */
kNIMTagControlCloseAudio = 2, /**< 关闭音频 */
kNIMTagControlOpenVideo = 3, /**< 打开视频 */
kNIMTagControlCloseVideo = 4, /**< 关闭视频 */
kNIMTagControlAudioToVideo = 5, /**< 请求从音频切换到视频 */
kNIMTagControlAgreeAudioToVideo = 6, /**< 同意从音频切换到视频 */
kNIMTagControlRejectAudioToVideo = 7, /**< 拒绝从音频切换到视频 */
kNIMTagControlVideoToAudio = 8, /**< 从视频切换到音频 */
kNIMTagControlBusyLine = 9, /**< 占线 */
kNIMTagControlCamaraNotAvailable = 10, /**< 告诉对方自己的摄像头不可用 */
kNIMTagControlEnterBackground = 11, /**< 告诉对方自已处于后台 */
kNIMTagControlReceiveStartNotifyFeedback = 12, /**< 告诉发送方自己已经收到请求了(用于通知发送方开始播放提示音) */
};
示例
////占线
nim::VChat::Control(channel_id, kNIMTagControlBusyLine);
收到通话控制信息回调
API介绍
收到对方发过来的通话控制信息,在SetCbFunc接口设置的回调中返回,类型为kNIMVideoChatSessionTypeControlNotify
API原型
typedef std::function<void(enum NIMVideoChatSessionType type, int64_t channel_id, int code, const std::string json_extension)> SessionStatusCallback;
NIMVideoChatSessionType::类型为kNIMVideoChatSessionTypeControlNotify
File:nim_cpp_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 回调类型kNIMVideoChatSessionTypeControlNotify |
channel_id | int64_t | 频道id |
code | int | 无效 |
json_extension | string | Json string 扩展,返回kNIMVChatUid发起者,kNIMVChatType对应NIMVChatControlType |
示例
void VChatSessionCb(NIMVideoChatSessionType type, std::uint64_t channel_id, int code, const std::string json_extension)
{
switch (type)
{
case kNIMVideoChatSessionTypeStartRes: /**< 创建通话结果 */
break;
case kNIMVideoChatSessionTypeInviteNotify: /**< 通话邀请 */
break;
case kNIMVideoChatSessionTypeCalleeAckRes: /**< 确认通话,接受拒绝结果 */
break;
case kNIMVideoChatSessionTypeCalleeAckNotify: /**< 确认通话,接受拒绝通知 */
break;
case kNIMVideoChatSessionTypeControlRes: /**< NIMVChatControlType 结果 */
break;
case kNIMVideoChatSessionTypeControlNotify: /**< NIMVChatControlType 通知 */
break;
case kNIMVideoChatSessionTypeConnect: /**< 通话中链接状态通知 */
break;
case kNIMVideoChatSessionTypePeopleStatus: /**< 通话中成员状态 */
break;
case kNIMVideoChatSessionTypeNetStatus: /**< 通话中网络状态 */
break;
case kNIMVideoChatSessionTypeHangupRes: /**< 通话挂断结果 */
break;
case kNIMVideoChatSessionTypeHangupNotify: /**< 通话被挂断通知 */
break;
case kNIMVideoChatSessionTypeSyncAckNotify: /**< 通话接听挂断同步通知 */
break;
case kNIMVideoChatSessionTypeMp4Notify: /**< 通知MP4录制状态,包括开始录制和结束录制 */
break;
case kNIMVideoChatSessionTypeInfoNotify: /**< 通知实时音频数据状态 */
break;
case kNIMVideoChatSessionTypeVolumeNotify: /**< 通知实时音频发送和混音的音量状态 */
break;
case kNIMVideoChatSessionTypeAuRecordNotify: /**< 通知音频录制状态,包括开始录制和结束录制 */
break;
}
}
设置静音
API介绍
设置音频静音
API原型
static void SetAudioMuted(bool muted);
File:nim_cpp_vchat.h
参数说明
|参数|类型|说明| |muted|bool|true 静音,false 不静音|
示例
void test_set_audio_mute(bool mute)
{
nim::VChat::SetAudioMuted(mute);
}
获取音频静音状态
API介绍
获取音频静音状态
API原型
static bool GetAudioMuteEnabled();
File:nim_cpp_vchat.h
示例
void test_mute_enabled()
{
bool muted = nim::VChat::GetAudioMuteEnabled();
}
多人通话的控制
改变自己在会议中的角色
API介绍
设置观众模式(多人模式下),全局有效(重新发起时也生效),观众模式能减少运行开销
API原型
static void SetViewerMode(bool viewer);
File:nim_cpp_vchat.h
参数说明
|参数|类型|说明| |viewer|bool|viewer 是否观众模式.true为是。
示例
void demo_nim_vchat_set_viewer_mode(bool viewer)
{
nim::VChat::SetViewerMode(viewer);
}
获取当前是否是观众模式
API介绍
获取当前是否是观众模式
API原型
static bool GetViewerMode();
File:nim_cpp_vchat.h
示例
void test_viewer_enabled()
{
bool viewer=nim::VChat::GetViewerMode();;
}
通用控制
指定某用户设置是否对其静音,是否接收视频数据
API介绍
API原型
static void SetMemberBlacklist(const std::string& uid, bool add, bool audio, const std::string& json_extension, OptCallback cb);
File:nim_cpp_vchat.h
参数说明
|参数|类型|说明| |uid|string|成员account| |add|bool|true表示添加到黑名单,false表示从黑名单移除| |audio|bool|true表示音频黑名单,false表示视频黑名单,暂时只支持音频| |json_extension|string|无效扩展字段| |cb|OptCallback| cb 结果回调见nim_cpp_vchat.h,返回的json_extension无效|
示例
void demo_test_nim_vchat_set_member_in_blacklist(string uid,bool add,bool audio)
{
auto cb = [=](bool ret, int code, const std::string& json_extension)
{
};
nim::VChat::SetMemberBlacklist(uid, add, audio, json_extension, cb);
}