通话过程控制
本章节介绍音视频通话过程中网易云信提供的各种控制功能。包括点对点通话的控制、多人会议的控制和通用控制。 点对点通话的控制包括发送通话控制信息、设置静音、切换通话模式等 多人会议的控制包括改变自己在会议中的角色(互动者/观众) 通用控制包括是否接收某用户的音频或视频数据等
重连接口
API介绍
在通话过程中,主动重连通话。在通话过程中有效
API原型
C++
static void Relogin(const std::string& session_id, OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void NIMVChatRelogin(string sessionid, NIMVChatOptHandler cb)
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_relogin(const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
json_extension | string | Json string 扩展,kNIMVChatSessionId |
cb | function | 回调函数 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
调用结果返回见回调函数,连接结果监听connect回调
示例
C++
void OnOptCallback(bool ret, int code, const char *json_extension) { ... } void foo(const std::string& session_id) { nim::VChat::Relogin(session_id, &OnOptCallback); }
C#
NIMVChatOptHandler _relogin_cb = null; _relogin_cb = new NIMVChatOptHandler((ret, code, json_extension) => { if (ret) { ... } }); VChatAPI.NIMVChatRelogin(session_id,_relogin_cb);
C
void OnOptCallback(bool ret, int code, const char *json_extension, const void *user_data) { if (user_data) { ... } } typedef void(*nim_vchat_relogin)(const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_relogin func = (nim_vchat_relogin) GetProcAddress(hInst, "nim_vchat_relogin"); func("", &OnOptCallback, nullptr); }
点对点通话的控制
发送通话控制信息
API介绍
音视频通话控制,异步回调nim_vchat_cb_func见nim_vchat_def.h。
API原型
C++
static bool Control(uint64_t channel_id, NIMVChatControlType type)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static bool ChatControl(long channel_id, NIMVChatControlType type)
Namespace: NIM
Class: VChatAPI
C
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 | long long | 音视频通话通道id。 |
type | enum | 音视频通话控制类型,见NIMVChatControlType。 |
json_extension(C) | string | 无效的扩展字段。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
调用成功返回true,调用失败返回false。
示例
C++
void foo(int64_t channel_id) { nim::VChat::Control(channel_id, nim::kNIMTagControlOpenAudio); }
C#
void foo(long channel_id) { NIM.VChatAPI.ChatControl(channel_id, NIM.NIMVChatControlType.kNIMTagControlOpenAudio); }
C
typedef bool(*nim_vchat_control)(__int64 channel_id, NIMVChatControlType type, const char* json_extension, const void *user_data); void foo(int64_t channel_id) { nim_vchat_control func = (nim_vchat_control) GetProcAddress(hInst, "nim_vchat_control"); func(channel_id, nim::kNIMTagControlCloseAudio, "", nullptr); }
收到通话控制信息回调
API介绍
收到别人通话控制操作的通知,通话控制操作类型见NIMVChatControlType。
API原型
C#
NIMVChatSessionStatus.onSessionControlNotify
public delegate void onSessionControlNotifyHandler(long channel_id,string uid, int type)
Namespace:NIM
C++/C
typedef void (*nim_vchat_cb_func)(enum NIMVideoChatSessionType type, int64 channel_id, int code, const char *json_extension, const void *user_data)
NIMVideoChatSessionType::kNIMVideoChatSessionTypeControlNotify
File:nim_vchat_def.h
参数说明
- C#
参数 | 类型 | 说明 |
---|---|---|
channel_id | long | 频道id。 |
uid | string | 对方uid。 |
type | int | 通话控制操作类型。 |
- C++/C
参数 | 类型 | 说明 |
---|---|---|
type | enum | 回调类型kNIMVideoChatSessionTypeControlNotify。 |
channel_id | int64 | 频道id。 |
code | int | 无效错误码。 |
json_extension | string | Json string 扩展,kNIMVChatUid对应操作者id,kNIMVChatType对应通话控制类型NIMVChatControlType。 |
user_data | void* | 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理。 |
示例
C#
private static void OnSessionControlNotify(long channel_id, string uid, int type) { if (Enum.IsDefined(typeof(NIM.NIMVChatControlType),type)) { NIM.NIMVChatControlType control_type = (NIM.NIMVChatControlType)type; switch(control_type) { case NIMVChatControlType.kNIMTagControlOpenAudio: break; case NIMVChatControlType.kNIMTagControlCloseAudio: break; case NIMVChatControlType.kNIMTagControlOpenVideo: break; case NIMVChatControlType.kNIMTagControlCloseVideo: break; case NIMVChatControlType.kNIMTagControlAudioToVideo: break; case NIMVChatControlType.kNIMTagControlAgreeAudioToVideo: break; case NIMVChatControlType.kNIMTagControlRejectAudioToVideo: break; case NIMVChatControlType.kNIMTagControlVideoToAudio: break; case NIMVChatControlType.kNIMTagControlBusyLine: { NIM.VChatAPI.End(); } break; case NIMVChatControlType.kNIMTagControlCamaraNotAvailable: break; case NIMVChatControlType.kNIMTagControlEnterBackground: break; case NIMVChatControlType.kNIMTagControlReceiveStartNotifyFeedback: break; case NIMVChatControlType.kNIMTagControlMp4StartRecord: break; case NIMVChatControlType.kNIMTagControlMp4StopRecord: break; } } } static NIM.NIMVChatSessionStatus _vchatHandlers; _vchatHandlers.onSessionControlNotify = OnSessionControlNotify;
C++/C
void VChatCb(nim::NIMVideoChatSessionType type, __int64 channel_id, int code, const char *json, const void*) { switch (type) { case nim::kNIMVideoChatSessionTypeControlNotify: { Json::Value valus; Json::Reader reader; if (reader.parse(json, valus)) { std::string uid = valus[nim::kNIMVChatUid].asString(); NIMVChatControlType control_type = (NIMVChatControlType)valus[nim::kNIMVChatType].asInt(); ... } } break; } } nim::VChat::SetCbFunc(&VChatCb);
将自己静音
API介绍
将自己静音:设置是否发送本地音频流数据。全局有效,重新发起会话时也生效。此开关打开音频只发静音包。
获取音频静音状态。
API原型
C++
static void SetAudioMuted(bool muted)
static bool GetAudioMuteEnabled()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetAudioMute(bool muted)
static bool GetAudioMuteEnabled()
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_set_audio_mute(bool muted)
NIM_SDK_DLL_API bool nim_vchat_audio_mute_enabled()
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
muted | bool | SetAudioMuted(C/C#) nim_vchat_set_audio_mute(C) |
true静音,false不静音。 |
返回值说明
设置静音接口无返回值。
获取静音状态接口返回静音状态。
示例
C++
void foo() { nim::VChat::SetAudioMuted(true); bool mute = nim::VChat::GetAudioMuteEnabled(); }
C#
void foo() { NIM.VChatAPI.SetAudioMute(true); bool mute = NIM.VChatAPI.GetAudioMuteEnabled(); }
C
typedef void(*nim_vchat_set_audio_mute)(bool muted); typedef bool(*nim_vchat_audio_mute_enabled)(); void foo() { nim_vchat_set_audio_mute func1 = (nim_vchat_set_audio_mute) GetProcAddress(hInst, "nim_vchat_set_audio_mute"); nim_vchat_audio_mute_enabled func2 = (nim_vchat_audio_mute_enabled) GetProcAddress(hInst, "nim_vchat_audio_mute_enabled"); func1(true); bool mute = func2(); }
静音所有远端音频
API介绍
静音所有远端音频:设置是否播放所有远端用户的音频流数据。全局有效,重新发起会话时也生效。此开关打开音频只发静音包。只针对sdk中播放远端声音静音,不影像数据接收和录制功能。
获取音频播放静音状态。
API原型
C++
static void SetAudioPlayMuted(bool muted)
static bool GetAudioMutePlayEnabled()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void NIMVChatSetAudioPlayMuted(bool muted)
static bool NIMVChatAudioMutePlayEnabled()
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_set_audio_play_mute(bool muted)
NIM_SDK_DLL_API bool nim_vchat_audio_play_mute_enabled()
File: nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
muted | bool | true静音,false不静音。 |
返回值说明
设置静音接口无返回值。
获取静音状态接口返回静音状态。
示例
C++
void foo() { nim::VChat::SetAudioPlayMuted(true); bool mute = nim::VChat::GetAudioMuteEnabled(); }
C#
void foo() { NIM.VChatAPI.NIMVChatSetAudioPlayMuted(true); bool mute = NIM.VChatAPI.NIMVChatAudioPlayMuteEnabled(); }
C
typedef void(*nim_vchat_set_audio_play_mute)(bool muted); typedef bool(*nim_vchat_audio_play_mute_enabled)(); void foo() { nim_vchat_set_audio_play_mute func1 = (nim_vchat_set_audio_play_mute) GetProcAddress(hInst, "nim_vchat_set_audio_play_mute"); nim_vchat_audio_play_mute_enabled func2 = (nim_vchat_audio_play_mute_enabled) GetProcAddress(hInst, "nim_vchat_audio_play_mute_enabled"); func1(true); bool mute = func2(); }
切换通话模式
API介绍
设置通话模式,在更改通话模式后,通知底层。
API原型
C++
static bool SetTalkingMode(NIMVideoChatMode mode, const std::string& json_extension)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static bool SetMode(NIMVideoChatMode mode)
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API bool nim_vchat_set_talking_mode(enum NIMVideoChatMode mode, const char *json_extension)
File: nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
mode | enum | 音视频通话类型,见NIMVideoChatMode。 |
json_extension(C/C++) | string | 无效的扩展字段。 |
返回值说明
调用成功返回true,调用失败返回false。
示例
C++
void foo() { nim::VChat::SetTalkingMode(nim::kNIMVideoChatModeVideo, ""); }
C#
void foo() { NIM.VChatAPI.SetMode(NIM.NIMVideoChatMode.kNIMVideoChatModeAudio); }
C
typedef bool(*nim_vchat_set_talking_mode)(NIMVideoChatMode mode, const char* json_extension); void foo() { nim_vchat_set_talking_mode func = (nim_vchat_set_talking_mode) GetProcAddress(hInst, "nim_vchat_set_talking_mode"); func(nim::kNIMVideoChatModeVideo, ""); }
多人通话的控制
改变自己在会议中的角色
API介绍
设置观众模式(多人模式下),全局有效(重新发起时也生效),观众模式能减少运行开销。
获取当前是否是观众模式。
API原型
C++
static void SetViewerMode(bool viewer)
static bool GetViewerMode()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetViewerMode(bool viewer)
static bool GetViewerMode()
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_set_viewer_mode(bool viewer)
NIM_SDK_DLL_API bool nim_vchat_get_viewer_mode()
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
viewer | bool | SetViewerMode(C/C#) nim_vchat_set_viewer_mode(C) |
是否设为观众模式。 |
返回值说明
Set函数无返回值。
Get函数返回当前是否为观众模式。
示例
C++
void foo() { nim::VChat::SetViewerMode(true); bool view = nim::VChat::GetViewerMode(); }
C#
void foo() { NIM.VChatAPI.SetViewerMode(true); bool view = NIM.VChatAPI.GetViewerMode(); }
C
typedef void(*nim_vchat_set_viewer_mode)(bool viewer); typedef bool(*nim_vchat_get_viewer_mode)(); void foo() { nim_vchat_set_viewer_mode func1 = (nim_vchat_set_viewer_mode) GetProcAddress(hInst, "nim_vchat_set_viewer_mode"); nim_vchat_get_viewer_mode func2 = (nim_vchat_get_viewer_mode) GetProcAddress(hInst, "nim_vchat_get_viewer_mode"); func1(true); bool view = func2(); }
通用控制
指定某用户设置是否接收其音视频数据
API介绍
设置单个成员的音频黑名单或视频黑名单状态,使得自己能接收或不接收其音频数据或视频数据。当前通话有效(只能设置进入过房间的成员)。 当设置对方音频黑名单时,即静音指定用户音频:设置是否播放某个远端用户的音频流数据。
API原型
C++
static void SetMemberBlacklist(const std::string& uid, bool add, bool audio, const std::string& json_extension, OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetMemberInBlackList(string uid, bool add, bool audio, string json_extension, NIMVChatOptHandler cb)
Namespace: NIM
Class: VChatAPI
C
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 | string | 对方账号。 |
add | bool | true表示添加到黑名单,false表示从黑名单移除。 |
audio | bool | true表示音频黑名单,false表示视频黑名单。 |
json_extension | string | 无效扩展字段。 |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。 |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
返回值说明
无返回值。
示例
C++
void OnOptCallback(bool ret, int code, const char *json_extension) { ... } void foo() { nim::VChat::SetMemberBlacklist("uid", true, false, "", &OnOptCallback); }
C#
NIMVChatOptHandler _vediosetblacklistop = null; _vediosetblacklistop = new NIMVChatOptHandler((ret, code, json_extension) => { if (ret) { ... } }); VChatAPI.SetMemberInBlackList(id, !muted, false, "", _vediosetblacklistop);
C
void OnOptCallback(bool ret, int code, const char *json_extension, const void *user_data) { if (user_data) { ... } } typedef 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); void foo() { nim_vchat_set_member_in_blacklist func = (nim_vchat_set_member_in_blacklist) GetProcAddress(hInst, "nim_vchat_set_member_in_blacklist"); func("uid", true, true, "", &OnOptCallback, nullptr); }
自动旋转对方画面
API介绍
设置不自动旋转对方画面,默认打开,全局有效(重新发起时也生效)。
获取自动旋转对方画面设置状态。
API原型
C++
static void SetRotateRemoteVideo(bool rotate)
static bool IsRotateRemoteVideo()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void SetRotateRemoteVideo(bool rotate)
static bool IsRotateRemoteVideo()
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_set_rotate_remote_video(bool rotate)
NIM_SDK_DLL_API bool nim_vchat_rotate_remote_video_enabled()
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
rotate | bool | SetRotateRemoteVideo(C++/C#) nim_vchat_set_rotate_remote_video(C) |
true自动旋转,false不自动旋转。 |
返回值说明
设置接口无返回值。
获取接口返回true表示自动旋转对方画面,false表示不自动旋转对方画面。
示例
C++
void foo() { nim::VChat::SetRotateRemoteVideo(true); bool rotate = nim::VChat::IsRotateRemoteVideo(); }
C#
void foo() { NIM.VChatAPI.SetRotateRemoteVideo(true); bool rotate = NIM.VChatAPI.IsRotateRemoteVideo(); }
C
typedef void(*nim_vchat_set_rotate_remote_video)(bool rotate); typedef bool(*nim_vchat_rotate_remote_video_enabled)(); void foo() { nim_vchat_set_rotate_remote_video func1 = (nim_vchat_set_rotate_remote_video) GetProcAddress(hInst, "nim_vchat_set_rotate_remote_video"); nim_vchat_rotate_remote_video_enabled func2 = (nim_vchat_rotate_remote_video_enabled) GetProcAddress(hInst, "nim_vchat_rotate_remote_video_enabled"); func1(true); bool rotate = func2(); }