通话过程控制

本章节介绍音视频通话过程中网易云提供的各种控制功能。包括点对点通话的控制、多人会议的控制和通用控制。 点对点通话的控制包括发送通话控制信息、设置静音、切换通话模式等 多人会议的控制包括改变自己在会议中的角色(互动者/观众) 通用控制包括是否接收某用户的音频或视频数据等

点对点通话的控制

发送通话控制信息

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);
}