通话过程控制
本章节介绍音视频通话过程中网易云信提供的各种控制功能。包括点对点通话的控制、多人会议的控制和通用控制。 点对点通话的控制包括发送通话控制信息、设置静音、切换通话模式等 多人会议的控制包括改变自己在会议中的角色(互动者/观众) 通用控制包括是否接收某用户的音频或视频数据等
点对点通话的控制
发送通话控制信息
API介绍
音视频通话控制,点对点通话有效,异步回调nim_vchat_cb_func 见nim_vchat_def.h
API原型
NIM_SDK_DLL_API bool nim_vchat_control(int64_t channel_id,enum NIMVChatControlType type, const char *json_extension, const void *user_data);
File:nim_vchat.h
参数说明
|参数|类型|说明| |channel_id|int64_t|音视频通话通道id| |type|enum|音视频通话控制类型 | |json_extension|char*|无效的扩展字段| |user_data|void*|无效的扩展字段|
/** @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_, kNIMTagControlAudioToVideo, "", NULL);
//视频切音频
nim_vchat_control(channel_id_, kNIMTagControlVideoToAudio, "", NULL);
//同意从音频切到视频
nim_vchat_control(channel_id_, kNIMTagControlAgreeAudioToVideo, "", NULL);
//拒绝从音频切到视频
nim_vchat_control(channel_id_, kNIMTagControlRejectAudioToVideo, "", NULL);
收到通话控制信息回调
API介绍
收到对方发过来的通话控制信息,在nim_vchat_set_cb_func接口设置的回调中返回,类型为kNIMVideoChatSessionTypeControlNotify
API原型
typedef void (*nim_vchat_cb_func)(enum NIMVideoChatSessionType type, int64_t channel_id, int code, const char *json_extension, const void *user_data)
NIMVideoChatSessionType::类型为kNIMVideoChatSessionTypeControlNotify
File:nim_vchat_def.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | enum | 回调类型kNIMVideoChatSessionTypeControlNotify |
channel_id | int64_t | 频道id |
code | int | 无效 |
json_extension | char* | Json char* 扩展,返回kNIMVChatUid发起者,kNIMVChatType对应NIMVChatControlType |
user_data | void* | 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理 |
示例
void nim_vchat_cb(enum NIMVideoChatSessionType type, int64_t channel_id, int code, const char *json_extension, const void *user_data)
{
if (code == 200)
{
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 kNIMVideoChatSessionTypeInfoNotify: //实时状态
break;
case kNIMVideoChatSessionTypeVolumeNotify: //音量状态
break;
default:
break;
}
}
}
设置静音
API介绍
设置音频静音
API原型
NIM_SDK_DLL_API void nim_vchat_set_audio_mute(bool muted);
File:nim_vchat.h
参数说明
|参数|类型|说明| |muted|bool|true 静音,false 不静音|
示例
void test_set_audio_mute(bool mute)
{
nim_vchat_set_audio_mute(mute);
test_mute_enabled();
}
获取音频静音状态
API介绍
获取音频静音状态
API原型
**NIM_SDK_DLL_API bool nim_vchat_audio_mute_enabled(); File:nim_vchat.h
示例
void test_mute_enabled()
{
bool muted = nim_vchat_audio_mute_enabled();
printf("nim_vchat_audio_mute_enabled->%d\n", muted);
}
切换通话模式
API介绍
设置通话模式,在更改通话模式后,通知底层
API原型
NIM_SDK_DLL_API bool nim_vchat_set_talking_mode(enum NIMVideoChatMode mode, const char *json_extension);
File:nim_vchat.h
参数说明
|参数|类型|说明| |mode|NIMVideoChatMode|音视频通话类型 见nim_vchat_def.h| |json_extension|char*|无效的扩展字段|
返回值说明
bool true 调用成功,false 调用失败
示例
void demo_test_nim_vchat_set_talking_mode(int mode)
{
nim_vchat_set_talking_mode(mode,"");
}
多人通话的控制
改变自己在会议中的角色
API介绍
设置观众模式(多人模式下),全局有效(重新发起时也生效),观众模式能减少运行开销
API原型
NIM_SDK_DLL_API void nim_vchat_set_viewer_mode(bool viewer);
File:nim_vchat.h
参数说明
|参数|类型|说明| |viewer|bool|viewer 是否观众模式.true为是。
示例
void demo_nim_vchat_set_viewer_mode(bool viewer)
{
nim_vchat_set_viewer_mode(viewer);
}
获取当前是否是观众模式
API介绍
获取当前是否是观众模式
API原型
NIM_SDK_DLL_API bool nim_vchat_get_viewer_mode();
File:nim_vchat.h
示例
void test_viewer_enabled()
{
bool viewer = nim_vchat_get_viewer_mode();
printf("nim_vchat_get_viewer_mode->%d\n", viewer);
}
通用控制
指定某用户设置是否对其静音,是否接收视频数据
API介绍
API原型
NIM_SDK_DLL_API void nim_vchat_set_member_in_blacklist(const char *uid, bool add, bool audio, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data);
File:nim_vchat.h
参数说明
|参数|类型|说明| |uid|char*|成员account| |add|bool|true表示添加到黑名单,false表示从黑名单移除| |audio|bool|true表示音频黑名单,false表示视频黑名单| |json_extension|char*|无效扩展字段| |cb|nim_vchat_opt_cb_func| cb 结果回调见nim_vchat_def.h,返回的json_extension无效| |user_data|void*|APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理|
示例
void set_member_in_blacklist_callback(bool ret, int code, const char *json_extension, const void *user_data)
{
printf("demo_test_nim_vchat_set_member_in_blacklist ret->%d,code->%d,json_extension->%s\n", ret, code, json_extension);
}
void demo_test_nim_vchat_set_member_in_blacklist(char* uid,bool add,bool audio)
{
nim_vchat_set_member_in_blacklist(uid, add, audio, NULL, set_member_in_blacklist_callback, NULL);
}