diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.cpp b/Telegram/SourceFiles/calls/group/calls_group_call.cpp index f7f056bb2..f01dfcba3 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_call.cpp @@ -93,6 +93,9 @@ struct JoinVideoEndpoint { }; struct JoinBroadcastStream { + bool rtmp = false; + QString rtmpUrl; + QString rtmpKey; }; using JoinClientFields = std::variant< @@ -114,7 +117,11 @@ using JoinClientFields = std::variant< return {}; } if (document.object().value("stream").toBool()) { - return JoinBroadcastStream{}; + return JoinBroadcastStream{ + .rtmp = document.object().value("rtmp").toBool(), + .rtmpUrl = document.object().value("rtmp_stream_url").toString(), + .rtmpKey = document.object().value("rtmp_stream_key").toString(), + }; } const auto video = document.object().value("video").toObject(); return JoinVideoEndpoint{ @@ -575,6 +582,8 @@ GroupCall::GroupCall( , _joinAs(info.joinAs) , _possibleJoinAs(std::move(info.possibleJoinAs)) , _joinHash(info.joinHash) +, _rtmpUrl(info.rtmpUrl) +, _rtmpKey(info.rtmpKey) , _canManage(Data::CanManageGroupCallValue(_peer)) , _id(inputCall.c_inputGroupCall().vid().v) , _scheduleDate(info.scheduleDate) @@ -1855,12 +1864,18 @@ void GroupCall::handlePossibleCreateOrJoinResponse( data.vparams().match([&](const MTPDdataJSON &data) { const auto json = data.vdata().v; const auto response = ParseJoinResponse(json); + const auto stream = std::get_if(&response); const auto endpoint = std::get_if(&response); - if (v::is(response)) { + if (stream) { if (!_broadcastDcId) { LOG(("Api Error: Empty stream_dc_id in groupCall.")); _broadcastDcId = _peer->session().mtp().mainDcId(); } + if (stream->rtmp) { + _rtmp = true; + _rtmpUrl = stream->rtmpUrl; + _rtmpKey = stream->rtmpKey; + } setInstanceMode(InstanceMode::Stream); } else { setInstanceMode(InstanceMode::Rtc); diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.h b/Telegram/SourceFiles/calls/group/calls_group_call.h index b58d74461..c6896c627 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.h +++ b/Telegram/SourceFiles/calls/group/calls_group_call.h @@ -236,6 +236,9 @@ public: [[nodiscard]] bool emptyRtmp() const; [[nodiscard]] rpl::producer emptyRtmpValue() const; + [[nodiscard]] QString rtmpUrl() const; + [[nodiscard]] QString rtmpKey() const; + [[nodiscard]] Data::GroupCall *lookupReal() const; [[nodiscard]] rpl::producer> real() const; @@ -592,6 +595,9 @@ private: int64 _serverTimeMs = 0; crl::time _serverTimeMsGotAt = 0; + QString _rtmpUrl; + QString _rtmpKey; + rpl::variable _muted = MuteState::Muted; rpl::variable _canManage = false; rpl::variable _videoIsWorking = false; diff --git a/Telegram/SourceFiles/calls/group/calls_group_common.h b/Telegram/SourceFiles/calls/group/calls_group_common.h index d31a2b582..8899ebc6a 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_common.h +++ b/Telegram/SourceFiles/calls/group/calls_group_common.h @@ -51,6 +51,7 @@ struct JoinInfo { not_null joinAs; std::vector> possibleJoinAs; QString joinHash; + QString rtmpUrl, rtmpKey; TimeId scheduleDate = 0; bool rtmp = false; }; diff --git a/Telegram/SourceFiles/calls/group/calls_group_rtmp.cpp b/Telegram/SourceFiles/calls/group/calls_group_rtmp.cpp index d6e76c117..6b63dc8c0 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_rtmp.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_rtmp.cpp @@ -271,7 +271,10 @@ void StartRtmpProcess::processUrl(Data data) { void StartRtmpProcess::finish(JoinInfo info) { const auto done = std::move(_request->done); const auto box = _request->box; + const auto current = _request->data.current(); _request = nullptr; + info.rtmpUrl = current.url; + info.rtmpKey = current.key; done(std::move(info)); if (const auto strong = box.data()) { strong->closeBox();