快速开始
1、初始化连麦相关对象
调用 QNRTCEngine
接口进行全局初始化:
QNRTCEngine::Init();
// 配置日志输出等级、目录及文件名,不调用 = 不输出
QNRTCEngine::SetLogParams(qiniu::LOG_INFO, "rtc-log", "rtc.log");
创建房间 QNRTCRoom
实例(全局唯一):
QNRTCRoom* _rtc_room_interface = QNRTCRoom::ObtainRoomInterface();
获取连麦音频 QNRTCAudio
接口实例指针,连麦视频 QNRTCVideo
接口实例指针:
QNRTCAudio* _rtc_audio_interface = _rtc_room_interface->ObtainAudioInterface();
QNRTCVideo* _rtc_video_interface = _rtc_room_interface->ObtainVideoInterface();
设置房间回调、音频回调以及视频回调:
// this 为实现了所有回调接口类的对象指针
_rtc_room_interface->SetRoomListener(this);
_rtc_audio_interface->SetAudioListener(this);
_rtc_video_interface->SetVideoListener(this);
其中各个 listener (QNRTCRoom::QNRTCRoomListener
、QNRTCAudio::QNRTCAudioListener
以及QNRTCVideo::QNRTCVideoListener
)的回调相关说明,详见【代理回调】。
2、设置摄像头相关参数
设置视频采集、预览、发布等相关参数
CameraSetting camera_setting;
camera_setting.render_hwnd = GetDlgItem(IDC_STATIC_VIDEO_PREVIEW)->m_hWnd;
camera_setting.device_name = unicode2utf(cur_dev_name.GetBuffer());
camera_setting.device_id = cur_dev_id;
camera_setting.width = std::get<0>(tuple_size);
camera_setting.height = std::get<1>(tuple_size);
camera_setting.max_fps = 15;
camera_setting.bitrate = 500000;
3、加入房间
_rtc_room_interface->JoinRoom(_room_token);
此处 _room_token
需要 App 从 App Server 中获取,App Server 如何生成 token 可查阅文档。
4、发布本地音/视频流
当 enable_audio_
为 true
时可发布音频,而 enable_video_
为 true
时则可发布视频。
_rtc_room_interface->Publish(true, true);
5、订阅远端用户音视频流
在远端用户发布媒体流的回调通知中订阅该用户
void CRtcXXX::OnRemotePublish(const std::string& user_id_, bool has_audio_, bool has_video_){
// itor->second.render_wnd_ptr->m_hWnd 为渲染视频的窗口句柄
_rtc_room_interface->Subscribe(user_id_, itor->second.render_wnd_ptr->m_hWnd);
}
也可以在远端发布后,根据产品需求在合适的时机通过调用如下的方法来订阅:
virtual int Subscribe(const std::string& user_id_, void* render_hwnd_) = 0;
注:用于渲染视频的窗口句柄,在 MFC 中直接使用窗口类的 m_hWnd 成员变量获取,Qt 中通过窗口类的 winId() 方法进行获取。