int VideoCallRtcEngineWrap::initAndJoinRTCRoom() {
// Initialize the RTC Video object
video_engine_(nullptr,[](bytertc::IRTCVideo* self) {
bytertc::destroyRTCVideo();}),
video_engine_.reset(bytertc::createRTCVideo(app_id.c_str(), this, ""));
// Initialize the RTC Room object
rtcRoom_ = std::shared_ptr<bytertc::IRTCRoom>(
video_engine_->createRTCRoom(room_id.c_str()),
[=](bytertc::IRTCRoom* room) { room->destroy(); });
// 根据预览页配置开启/关闭相机采集和视频流推送
//Enable/disable video capture and push stream according to the preview page configuration
if (DataMgr::instance().camera_on) {
video_engine_->startVideoCapture();
rtcRoom->publishStream(bytertc::MediaStreamType::kMediaStreamTypeVideo);
video_engine_->stopVideoCapture();
rtcRoom_ ->unpublishStream(bytertc::MediaStreamType::kMediaStreamTypeVideo);
//Enable/disable audio capture and push stream according to the preview page configuration
if (DataMgr::instance().mic_on) {
video_engine_->startAudioCapture();
rtcRoom->publishStream(bytertc::MediaStreamType::kMediaStreamTypeAudio);
video_engine_->stopAudioCapture();
rtcRoom_ ->unpublishStream(bytertc::MediaStreamType::kMediaStreamTypeAudio);
//Turn on/off speaker volume keying
bytertc::AudioPropertiesConfig config;
video_engine_->enableAudioPropertiesReport(config);
//加入房间,开始连麦,需要申请AppId和Token
//Join the room, start connecting the microphone, you need to apply for AppId and Token
auto userName = videocall::DataMgr::instance().user_name();
auto userId = videocall::DataMgr::instance().user_id()
extra_info["user_id"] = QString::fromStdString(userId);
extra_info["user_name"] = QString::fromStdString(userName);
auto infoStr = QString(QJsonDocument(extra_info).toJson());
auto infoStdString = std::string(infoStr.toUtf8());
bytertc::UserInfo user = {uid.c_str(), infoStdString.c_str()};
bytertc::RTCRoomConfig config;
config.room_profile_type = bytertc::RoomProfileType::kRoomProfileTypeCommunication;
// enable automatic push(defult enabled)
config.is_auto_publish= true;
// Enable automatic subscription of audio and video(defult enabled)
config.is_auto_subscribe_audio= true;
config.is_auto_subscribe_video= true;
rtcRoom_.joinRoom(token, user, config);