发布及订阅
本章节介绍音视频通话中音视频数据的发布及订阅控制。该功能暂时不对点对点通话开放
自动发布及订阅
API介绍
设置通话中自动订阅对端新加入成员音视频数据,及通话开启后自动发布视频数据的逻辑;音频发布由sdk控制,如果要不发音频单独使用静音接口。该接口仅限于多人通话模式,且需要在通话前设置,通话中设置失败。
API原型
C++
static bool SetAutoPublish(bool auto_pub, bool auto_sub)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API bool nim_vchat_set_auto_publish(bool auto_pub, bool auto_sub)
File: nim_vchat.h
参数说明
参数 | 类型 | 说明 |
---|---|---|
auto_pub | bool | 是否自动发布视频数据,默认开启;其中音频不支持设置自动发布功能,强制发布。自动发布时,nim_vchat_unpublish_video、nim_vchat_publish_video接口会调用失败。 |
auto_sub | bool | 是否自动订阅音视频数据,默认开启;自动订阅时nim_vchat_subscribe_video、nim_vchat_unsubscribe_video、nim_vchat_subscribe_audio会调用失败。 |
返回值说明
返回是否调用成功
是否自动发布视频
API介绍
获取通话设置中是否自动发布视频数据
API原型
C++
static bool IsAutoPublishVideo()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API bool nim_vchat_is_auto_publish_video()
File: nim_vchat.h
返回值说明
返回是否自动发布视频
是否自动订阅视频
API介绍
获取通话设置中是否自动订阅视频数据
API原型
C++
static bool IsAutoSubscribeVideo()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API bool nim_vchat_is_auto_subscribe_video()
File: nim_vchat.h
返回值说明
返回是否自动订阅对端视频
是否自动订阅音频
API介绍
获取通话设置中是否自动订阅音频数据
API原型
C++
static bool IsAutoSubscribeAudio()
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API bool nim_vchat_is_auto_subscribe_audio()
File: nim_vchat.h
返回值说明
返回是否自动订阅音频数据
设置发布视频流模式
API介绍
设置通话的视频流模式,当前可选单流或者双流模式。必须在通话开启钱设置,否则设置无效。
API原型
C++
static bool SetLocalVideoSimulcastMode(NIMVChatPublishVideoStreamMode video_stream_mode);
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API bool nim_chat_set_local_video_simulcast_mode(enum NIMVChatPublishVideoStreamMode video_stream_mode);
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
video_stream_mode | NIMVChatPublishVideoStreamMode | 发布的视频流模式 |
返回值说明
返回是否调用成功
发布视频
API介绍
通话中设置自己的视频数据发布接口。该接口仅限于多人通话模式,且通话未发起时设置失败。自动发布模式下操作返回失败。
回调结果只代表本地的操作结果,远端是否成功等对应的通知kNIMVChatNotifyPublishVideoRet
API原型
C++
static void PublishVideo(OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_publish_video(const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
json_extension | string | 无效扩展字段。 | |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。错误码见NIMVChatPubSubErrorCode | |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
取消发布视频
API介绍
通话中设置自己的视频数据发布接口。该接口仅限于多人通话模式,且通话未发起时设置失败。自动发布模式下操作返回失败。
回调结果只代表本地的操作结果,远端是否成功等对应的通知kNIMVChatNotifyUnpublishVideoRet
API原型
C++
static void UnpublishVideo(OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_unpublish_video(const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
json_extension | string | 无效扩展字段。 | |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。错误码见NIMVChatPubSubErrorCode | |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
订阅视频
API介绍
通话中设置订阅某一方的视频数据,该接口仅限于多人通话模式,且通话未发起时设置失败。自动订阅模式下操作返回失败。
回调结果只代表本地的操作结果,远端是否成功等对应的通知kNIMVChatNotifySubscribeVideoRet
API原型
C++
static void SubscribeVideo(const std::string& uid,OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_subscribe_video(const char *uid, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
uid | string | 对端用户账号 | |
json_extension | string | 无效扩展字段。 | |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。错误码见NIMVChatPubSubErrorCode | |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
取消订阅视频
API介绍
通话中设置订阅某一方的视频数据,该接口仅限于多人通话模式,且通话未发起时设置失败。自动订阅模式下操作返回失败。
回调结果只代表本地的操作结果,远端是否成功等对应的通知kNIMVChatNotifyUnsubscribeVideoRet
API原型
C++
static void UnsubscribeVideo(const std::string& uid, OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_unsubscribe_video(const char *uid, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
uid | string | 对端用户账号 | |
sub | bool | 是否订阅视频数据 | |
json_extension | string | 无效扩展字段。 | |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。错误码见NIMVChatPubSubErrorCode | |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
订阅音频
API介绍
通话中设置订阅音频数据,默认自动订阅。音频数据没有单独订阅某一成员的接口。通话未发起时设置失败。
回调结果只代表本地的操作结果,远端是否成功等对应的通知kNIMVChatNotifySubscribeAudioRet及kNIMVChatNotifyUnsubscribeAudioRet
API原型
C++
static void SubscribeAudio(bool sub, OptCallback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C
NIM_SDK_DLL_API void nim_vchat_subscribe_audio(bool sub, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
sub | bool | 是否订阅视频数据 | |
json_extension | string | 无效扩展字段。 | |
cb | function | 结果回调,见nim_vchat_def.h,返回的json_extension无效。错误码见NIMVChatPubSubErrorCode | |
user_data(C) | void* | APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理! |
发布订阅相关通知回调
API介绍
返回远端发布状态及本地订阅及发布的结果通知。改回调基于视频通话回调中的NIMVideoChatSessionType::kNIMVideoChatSessionTypePubSubNotify
API原型
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::kNIMVideoChatSessionTypePubSubNotify
File:nim_vchat_def.h
参数说明
参数 | 类型 | 所在函数 | 说明 |
---|---|---|---|
type | enum | kNIMVideoChatSessionTypePubSubNotify | |
channel_id | int64 | 频道id。 | |
code | int | 见NIMVChatPubSubErrorCode | |
json_extension | string | Json string 扩展,kNIMVChatType(NIMVChatPubSubNotifyType) 远端视频额外带有kNIMVChatUid对应对端用户账号,订阅和发布视频、远端发布视频额外带有回调对应的是kNIMVChatVideoSimulcastResList | |
user_data | void* | 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理。 |
- NIMVChatPubSubNotifyType 订阅及发布相关通知类型
通知类型 | 值 | 说明 |
---|---|---|
kNIMVChatNotifyPublishVideoRet | 0 | 本地视频发布操作的结果返回通知 |
kNIMVChatNotifyUnpublishVideoRet | 1 | 本地取消视频发布操作的结果返回通知 |
kNIMVChatNotifyRemotePublishVideo | 2 | 远端视频发布通知 |
kNIMVChatNotifyRemoteUnpublishVideo | 3 | 远端视频停止发布通知 |
kNIMVChatNotifySubscribeVideoRet | 4 | 本地订阅远端视频操作的结果返回通知 |
kNIMVChatNotifyUnsubscribeVideoRet | 5 | 本地取消订阅远端视频操作的结果返回通知 |
kNIMVChatNotifySubscribeAudioRet | 6 | 本地订阅远端音频操作的结果返回通知 |
kNIMVChatNotifyUnsubscribeAudioRet | 7 | 本地取消订阅远端音频操作的结果返回通知 |
错误码
名称 | 错误码 | 说明 |
---|---|---|
kNIMVChatPSErrCodeSuccess | 0 | 成功 |
kNIMVChatPSErrCodeFail | -1 | 失败 |
kNIMVChatPSErrCodeViewerMode | -200 | 发布操作失败,当前为观众模式 |
kNIMVChatPSErrCodeAudioMode | -300 | 视频发布操作失败,当前为音频模式 |
kNIMVChatPSErrCodeOptBusy | -400 | 操作繁忙 |
kNIMVChatPSErrCodeAutoMode | -500 | 模式互斥 (当前是自动发布) |
kNIMVChatPSErrCodeForbid | -600 | 操作无效,对点对模式不支持订阅相关功能 |
kNIMVChatPSErrCodeSubscribed | -700 | 操作无效,视频类型冲突,需要取消之前订阅的流 |