diff --git a/src/call/callmanager.cpp b/src/call/callmanager.cpp index 4419be0f2..80347d3c9 100644 --- a/src/call/callmanager.cpp +++ b/src/call/callmanager.cpp @@ -277,9 +277,7 @@ void CallManager::acceptCall() updateTurnServers(); // TODO wait until candidates are here - // TODO make video configurable - // change true to false if you don't have a camera - m_session = CallSession::acceptCall(true, m_incomingSdp, m_incomingCandidates, m_cachedTurnUris, m_remoteUser->id(), this); + m_session = CallSession::acceptCall(m_incomingSdp, m_incomingCandidates, m_cachedTurnUris, m_remoteUser->id(), this); m_participants->clear(); connect(m_session, &CallSession::stateChanged, this, [this] { Q_EMIT stateChanged(); @@ -350,7 +348,7 @@ void CallManager::ignoreCall() setRemoteUser(nullptr); } -void CallManager::startCall(NeoChatRoom *room, bool sendVideo) +void CallManager::startCall(NeoChatRoom *room) { if (m_session) { // Don't start calls if there already is one @@ -363,7 +361,7 @@ void CallManager::startCall(NeoChatRoom *room, bool sendVideo) return; } - auto missingPlugins = m_session->missingPlugins(sendVideo); + auto missingPlugins = m_session->missingPlugins(); if (!missingPlugins.isEmpty()) { qCCritical(voip) << "Missing GStreamer plugins:" << missingPlugins; Q_EMIT Controller::instance().errorOccured("Missing GStreamer plugins."); @@ -377,6 +375,7 @@ void CallManager::startCall(NeoChatRoom *room, bool sendVideo) updateTurnServers(); setCallId(generateCallId()); + setPartyId(generatePartyId()); for (const auto &user : m_room->users()) { auto participant = new CallParticipant(m_session); @@ -384,7 +383,7 @@ void CallManager::startCall(NeoChatRoom *room, bool sendVideo) m_participants->addParticipant(participant); } - m_session = CallSession::startCall(sendVideo, m_cachedTurnUris, this); + m_session = CallSession::startCall(m_cachedTurnUris, this); setGlobalState(OUTGOING); connect(m_session, &CallSession::stateChanged, this, [this] { Q_EMIT stateChanged(); @@ -393,7 +392,6 @@ void CallManager::startCall(NeoChatRoom *room, bool sendVideo) } }); - qWarning() << "waiting for createoffer"; connectSingleShot(m_session, &CallSession::offerCreated, this, [this](const QString &_sdp, const QVector &candidates) { const auto &[uuids, sdp] = mangleSdp(_sdp); QVector> msidToPurpose; @@ -415,10 +413,11 @@ void CallManager::startCall(NeoChatRoom *room, bool sendVideo) msidToPurpose += {uuid, "m.usermedia"}; // TODO } QJsonObject json{ - {QStringLiteral("lifetime"), 6000}, + {QStringLiteral("lifetime"), 60000}, {QStringLiteral("version"), 1}, {QStringLiteral("description"), QJsonObject{{QStringLiteral("type"), QStringLiteral("answer")}, {QStringLiteral("sdp"), _sdp}}}, - {QStringLiteral("party_id"), "todopartyid"}, + {QStringLiteral("party_id"), m_partyId}, + {QStringLiteral("call_id"), m_callId}, }; QJsonObject metadata; for (const auto &[stream, purpose] : msidToPurpose) { @@ -608,7 +607,7 @@ QString CallManager::partyId() const bool CallManager::checkPlugins() const { - auto missingPlugins = m_session->missingPlugins(true); + auto missingPlugins = m_session->missingPlugins(); if (!missingPlugins.isEmpty()) { qCCritical(voip) << "Missing GStreamer plugins:" << missingPlugins; Q_EMIT Controller::instance().errorOccured("Missing GStreamer plugins."); diff --git a/src/call/callmanager.h b/src/call/callmanager.h index c5a9d94c0..ba1ddfcee 100644 --- a/src/call/callmanager.h +++ b/src/call/callmanager.h @@ -74,7 +74,7 @@ public: void handleCallEvent(NeoChatRoom *room, const RoomEvent *event); - Q_INVOKABLE void startCall(NeoChatRoom *room, bool camera); + Q_INVOKABLE void startCall(NeoChatRoom *room); Q_INVOKABLE void acceptCall(); Q_INVOKABLE void hangupCall(); Q_INVOKABLE void ignoreCall(); diff --git a/src/call/callsession.cpp b/src/call/callsession.cpp index bc371be07..b8143ca08 100644 --- a/src/call/callsession.cpp +++ b/src/call/callsession.cpp @@ -509,7 +509,7 @@ void CallSession::renegotiateOffer(const QString &_offer, const QString &userId) g_signal_emit_by_name(webrtcbin, "create-answer", nullptr, promise); } -void CallSession::acceptOffer(bool sendVideo, const QString &sdp, const QVector remoteCandidates, const QString &userId) +void CallSession::acceptOffer(const QString &sdp, const QVector remoteCandidates, const QString &userId) { Q_ASSERT(!sdp.isEmpty()); Q_ASSERT(!remoteCandidates.isEmpty()); @@ -539,7 +539,7 @@ void CallSession::acceptOffer(bool sendVideo, const QString &sdp, const QVector< gst_webrtc_session_description_free(offer); return; } - startPipeline(sendVideo); + startPipeline(); QThread::msleep(1000); // ? @@ -550,14 +550,14 @@ void CallSession::acceptOffer(bool sendVideo, const QString &sdp, const QVector< gst_webrtc_session_description_free(offer); } -void CallSession::createCall(bool sendVideo) +void CallSession::createCall() { qCDebug(voip) << "Creating call"; m_isOffering = true; - startPipeline(sendVideo); + startPipeline(); } -void CallSession::startPipeline(bool sendVideo) +void CallSession::startPipeline() { qCDebug(voip) << "Starting Pipeline"; if (m_state != CallSession::DISCONNECTED) { @@ -566,7 +566,7 @@ void CallSession::startPipeline(bool sendVideo) m_state = CallSession::INITIATING; Q_EMIT stateChanged(); - createPipeline(sendVideo); + createPipeline(); auto webrtcbin = binGetByName(m_pipe, "webrtcbin"); Q_ASSERT(webrtcbin); @@ -633,7 +633,7 @@ void CallSession::end() } } -void CallSession::createPipeline(bool sendVideo) +void CallSession::createPipeline() { qCWarning(voip) << "Creating Pipeline"; auto device = AudioSources::instance().currentDevice(); @@ -677,9 +677,9 @@ void CallSession::createPipeline(bool sendVideo) return; } - if (sendVideo) { - addVideoPipeline(); - } + // if (sendVideo) { + // TODO where? addVideoPipeline(); + // } } void CallSession::toggleCamera() @@ -822,7 +822,7 @@ void CallSession::acceptCandidates(const QVector &candidates) } } -QStringList CallSession::missingPlugins(bool video) const +QStringList CallSession::missingPlugins() const { GstRegistry *registry = gst_registry_get(); static const QVector videoPlugins = { @@ -847,7 +847,7 @@ QStringList CallSession::missingPlugins(bool video) const QStringLiteral("webrtc"), }; QStringList missingPlugins; - for (const auto &pluginName : video ? videoPlugins + audioPlugins : audioPlugins) { + for (const auto &pluginName : videoPlugins + audioPlugins) { auto plugin = gst_registry_find_plugin(registry, pluginName.toLatin1().data()); if (!plugin) { missingPlugins << pluginName; @@ -883,25 +883,21 @@ bool CallSession::muted() const return muted; } -CallSession *CallSession::acceptCall(bool sendVideo, - const QString &sdp, - const QVector &candidates, - const QStringList &turnUris, - const QString &userId, - QObject *parent) +CallSession * +CallSession::acceptCall(const QString &sdp, const QVector &candidates, const QStringList &turnUris, const QString &userId, QObject *parent) { auto instance = new CallSession(parent); instance->setTurnServers(turnUris); - instance->acceptOffer(sendVideo, sdp, candidates, userId); + instance->acceptOffer(sdp, candidates, userId); return instance; } -CallSession *CallSession::startCall(bool sendVideo, const QStringList &turnUris, QObject *parent) +CallSession *CallSession::startCall(const QStringList &turnUris, QObject *parent) { auto instance = new CallSession(parent); instance->setTurnServers(turnUris); - instance->createCall(sendVideo); + instance->createCall(); return instance; } diff --git a/src/call/callsession.h b/src/call/callsession.h index 6e7cb48f2..621fe5c3c 100644 --- a/src/call/callsession.h +++ b/src/call/callsession.h @@ -53,23 +53,19 @@ public: Q_PROPERTY(bool muted READ muted WRITE setMuted NOTIFY mutedChanged) // For outgoing calls - static CallSession *startCall(bool sendVideo, const QStringList &turnUris, QObject *parent = nullptr); + static CallSession *startCall(const QStringList &turnUris, QObject *parent = nullptr); void acceptAnswer(const QString &sdp, const QVector &candidates, const QString &parent); // For incoming calls - static CallSession *acceptCall(bool sendVideo, - const QString &sdp, - const QVector &candidates, - const QStringList &turnUris, - const QString &userId, - QObject *parent = nullptr); + static CallSession * + acceptCall(const QString &sdp, const QVector &candidates, const QStringList &turnUris, const QString &userId, QObject *parent = nullptr); void end(); void renegotiateOffer(const QString &offer, const QString &userId); void setTurnServers(QStringList servers); - QStringList missingPlugins(bool video) const; + QStringList missingPlugins() const; CallSession::State state() const; @@ -93,12 +89,12 @@ Q_SIGNALS: private: CallSession(QObject *parent = nullptr); - void acceptOffer(bool sendVideo, const QString &sdp, const QVector remoteCandidates, const QString &userId); - void createCall(bool sendVideo); + void acceptOffer(const QString &sdp, const QVector remoteCandidates, const QString &userId); + void createCall(); void setRemoteDescription(GstWebRTCSessionDescription *remote, const QString &userId, GstPromise *promise = nullptr); - void startPipeline(bool sendVideo); - void createPipeline(bool sendVideo); + void startPipeline(); + void createPipeline(); bool addVideoPipeline(); void setState(CallSession::State state);