通话过程控制

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

点对点通话的控制

发送通话控制信息

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