本文详细介绍如何使用百家云 C++ SDK 订阅和取消订阅远端音视频。相关函数接口在 c++-sdk 2.5.5 及以上版本支持。
您可以通过调用 BRTC 中的 setDefaultStreamRecvMode 接口设置订阅模式,需要在进入房间 enterRoom 前调用该接口,设置才能生效。BRTC 提供了两种订阅模式:
需要您注意的是,如果您不调用 setDefaultStreamRecvMode 也是没有关系的,SDK 的默认行为是自动订阅。但如果您希望设置为手动订阅,请务必注意 setDefaultStreamRecvMode 只有在 enterRoom 之前调用才有效果。
您可以通过调用接口 muteRemoteAudio 来静音远端用户的声音,之后也可以通过调用接口 muteRemoteAudio 来解除对他的静音。
// 静音指定用户 userId 的音频 m_pBrtc->muteRemoteAudio(userId, true); // 恢复指定用户 userId 的音频播放 m_pBrtc->muteRemoteAudio(userId, false); // 静音所有远端用户的音频流 m_pBrtc->muteAllRemoteAudio(true); // 恢复播放所有远端用户的音频流 m_pBrtc->muteAllRemoteAudio(false);
您可以通过调用接口 startRemoteView 来显示远端用户的视频画面,但前提是您需要传递给 SDK 一个 view 对象,用来作为承载该用户的视频画面的渲染控件。
startRemoteView 的第一个参数是远端用户的 userId,第二个参数是远端用户的流类型,第三个参数则是您需要传递的 view 对象。其中第二个参数 streamType(流类型) 有三个可选的值,分别是:
注意事项
// 指定渲染远端用户的大流画面 m_pBrtc->setRemoteVideoStreamType(userId, BRTCVideoStreamTypeBig); BRTCRenderParams remoteRenderParams; // 适配长边模式,短边区域填充黑色 remoteRenderParams.fillMode = BRTCVideoFillMode_Fit; // 画面不旋转 remoteRenderParams.rotation = BRTCVideoRotation_0; // 摄像头画面不镜像 remoteRenderParams.mirrorType = BRTCVideoMirrorTypeDisable; // 设置远端视频渲染参数 m_pBrtc->setRemoteRenderParams(userId, BRTCVideoStreamTypeBig, remoteRenderParams); // 播放 userId 的主画面 m_pBrtc->startRemoteView(userId, BRTCVideoStreamTypeBig, view); // 播放 userId 的低分辨率画面(主画面和低分辩率画面只能二选一) // m_pBrtc->startRemoteView(userId, BRTCVideoStreamTypeSmall, view); // 播放 userId 的屏幕分享画面,如果和主画面同时显示,需要配置不同的View对象 // m_pBrtc->startRemoteView(userId, BRTCVideoStreamTypeSub, view); // 开始接收指定用户的远端视频流 m_pBrtc->muteRemoteVideoStream(userId, false);
通过调用 stopRemoteView 接口,您可以停止播放某一个远端用户的视频。
m_pBrtc->muteRemoteVideoStream(userId, true); m_pBrtc->stopRemoteView(userId, BRTCVideoStreamTypeBig);
通过调用 updateRemoteView 接口,您可以在播放中变更 view 对象,这在切换视频渲染控件时非常有用。 通过 setRemoteRenderParams 您可以设置画面的填充模式、旋转角度和镜像模式。
// 将 userId 的主路画面切换到一个悬浮的窗口中(假定该小窗口为 floatingView) m_pBrtc->updateRemoteView(userId, BRTCVideoStreamTypeBig,floatingView); BRTCRenderParams remoteRenderParams; // 适配长边模式,短边区域填充黑色 remoteRenderParams.fillMode = BRTCVideoFillMode_Fit; // 画面不旋转 remoteRenderParams.rotation = BRTCVideoRotation_0; // 前后置摄像头画面均不镜像 remoteRenderParams.mirrorType = BRTCVideoMirrorTypeDisable; // 设置远端视频渲染参数 m_pBrtc->setRemoteRenderParams(userId, BRTCVideoStreamTypeBig, remoteRenderParams);
您可以控制对远端用户的声音和视频的播放,需要通过如下接口获取房间中推流的用户信息、推流的摄像头和麦克风设备状态:
视频状态变化通知
屏幕共享流可用状态通知
class BRTCCore : public BRTCCallback, public BRTCAudioFrameCallback { public: // interface BRTCCallback void onEnterRoom(int result) override; void onExitRoom(uint32_t reason) override; void onUserAudioAvailable(const char* userId, bool available) override; void onUserVideoAvailable(const char* userId, bool available) override; void onStatistics(const BRTCStatistics& statistics) override; void onError(BRTCAVError errCode, const char* errMsg, void* extraInfo) override; //... // interface BRTCAudioFrameCallback void onCapturedRawAudioFrame(BRTCAudioFrame* frame) override; void onLocalProcessedAudioFrame(BRTCAudioFrame* frame) override; void onCustomAudioRenderingFrame(BRTCAudioFrame* frame) override; private: BRTC* m_pBrtc = nullptr; } void BRTCCore::onRemoteUserEnterRoom(const char* userId) { LOG(INFO) << "a member enter, uid[" << userId << "]"; // 添加远端用户进入房间处理逻辑 } void BRTCCore::onRemoteUserLeaveRoom(const char* userId, uint32_t reason) { LOG(INFO) << "a member exit, uid[" << userId << "], reason[" << reason << "]"; // 添加远端用户退出房间处理逻辑 } void BRTCCore::onUserAudioAvailable(const char* userId, bool available) { LOG(INFO) << "uid[" << userId << "], audio available[" << available << "]"; // 添加用户音频可用/不可用处理逻辑 } void BRTCCore::onUserVideoAvailable(const char* userId, bool available) { LOG(INFO) << "uid[" << userId << "], video available[" << available << "]"; // 添加用户视频可用/不可用处理逻辑 } void BRTCCore::onUserSubStreamAvailable(const char* userId, bool available) { LOG(INFO) << "uid[" << userId << "], screen share available[" << available << "]"; // 添加用户屏幕共享可用/不可用处理逻辑 }
随着您的业务需求不断深入,您会发现有三种不同的“静音”,虽然他们都叫“静音”,但是实现机制和效果完全不同
订阅音视频流
本文详细介绍如何使用百家云 C++ SDK 订阅和取消订阅远端音视频。
相关函数接口在 c++-sdk 2.5.5 及以上版本支持。
设定订阅模式
您可以通过调用 BRTC 中的 setDefaultStreamRecvMode 接口设置订阅模式,需要在进入房间 enterRoom 前调用该接口,设置才能生效。BRTC 提供了两种订阅模式:
需要您注意的是,如果您不调用 setDefaultStreamRecvMode 也是没有关系的,SDK 的默认行为是自动订阅。但如果您希望设置为手动订阅,请务必注意 setDefaultStreamRecvMode 只有在 enterRoom 之前调用才有效果。
音频流的播放
您可以通过调用接口 muteRemoteAudio 来静音远端用户的声音,之后也可以通过调用接口 muteRemoteAudio 来解除对他的静音。
视频流的播放
您可以通过调用接口 startRemoteView 来显示远端用户的视频画面,但前提是您需要传递给 SDK 一个 view 对象,用来作为承载该用户的视频画面的渲染控件。
startRemoteView 的第一个参数是远端用户的 userId,第二个参数是远端用户的流类型,第三个参数则是您需要传递的 view 对象。其中第二个参数 streamType(流类型) 有三个可选的值,分别是:
注意事项
视频流停止播放
通过调用 stopRemoteView 接口,您可以停止播放某一个远端用户的视频。
设置播放参数
通过调用 updateRemoteView 接口,您可以在播放中变更 view 对象,这在切换视频渲染控件时非常有用。 通过 setRemoteRenderParams 您可以设置画面的填充模式、旋转角度和镜像模式。
感知房间中远端用户的音视频状态
您可以控制对远端用户的声音和视频的播放,需要通过如下接口获取房间中推流的用户信息、推流的摄像头和麦克风设备状态:
视频状态变化通知
屏幕共享流可用状态通知
三种不同的静音
随着您的业务需求不断深入,您会发现有三种不同的“静音”,虽然他们都叫“静音”,但是实现机制和效果完全不同