2016-06-09 25 views
1

Mit einer nativen Android webRTC-Anwendung arbeiten und versuchen, die Videospur aus dem Medienstream zu entfernen, der ein kombiniertes Audio/Video enthält (z. B. localMS.addTrack (peerConnectionFactory.createVideoTrack ("ARDAMSv0", videoSource)) und localMS.addTrack (peerConnectionFactory.createAudioTrack ("ARDAMSa0", audioSource));), wird der Videostream immer noch an das entfernte Ende gesendet, und es gibt keine Generierung des 'onrenegotiation ' Rückrufen.webRTC remove media track erzeugt keine Neuverhandlung und stoppt keine Medien

Es gibt viele Diskussionen über den Removetrack im Vergleich zur früheren Remastream - Funktionalität (siehe zB https://bugs.chromium.org/p/webrtc/issues/detail?id=5265#c4 oder https://bugs.chromium.org/p/webrtc/issues/detail?id=2136), zusätzlich werden einige Workarounds besprochen, wie Entfernen des Streams, Entfernen des Tracks aus dem Stream und Hinzufügen des zurückströmen, bevor Sie ein neues Angebot erstellen. In den W3C-Standards (siehe http://w3c.github.io/mediacapture-main/#dfn-settings) scheint es keinen wirklichen Hinweis darauf zu geben, dass eine Neuverhandlung stattfinden sollte.

Die Fragen, die ich versuche zu lösen, sind die folgenden: Ist dies der richtige Weg, um eine Videospur zu entfernen (d. H. Removetrack auf dem MediaStream aufrufen)?

Warum tritt die Onrenegotiation nicht auf? und wenn es nicht auftritt, wann sollte ein neues Angebot verschickt werden?

Warum stoppt das Aufrufen des Remotestreams den Stream nicht tatsächlich? (Die Übertragung eines neuen Angebots selbst scheint keine Auswirkungen auf die Übertragung des Streams zu haben, nur dass der Empfänger eine recv_only im sdp für diese Medienkomponente hat).

Irgendwelche Gedanken zu irgendwelchen davon würden sehr geschätzt werden, und ich werde alle Updates posten, auf die ich gestoßen bin, und eine funktionierende Lösung einmal aufgelöst.

dank

+0

Hilft [diese Antwort] (http://stackoverflow.com/a/35515536/918910)? – jib

Antwort

0

Nicht sicher Android WebRTC, aber in Browser WebRTC (die ähnlich sein sollen), müssen Sie stop() auf der Strecke nennen tatsächlich, ihn zu stoppen. Oder schließen Sie die Verbindung ganz.

Zuerst fügen Sie den Track oder einen neuen Stream hinzu, erstellen dann das Angebot und starten den Neuverhandlungsprozess - es wird nicht automatisch gestartet.

+0

Danke. In Android nativem webrtc (JNI MediaStreamTrackInterface) haben wir die Aktivierung/Deaktivierung eines Tracks (aber kein Stopp), was dazu führt, dass ein normaler oder schwarzer Stream an den Remote gesendet wird. Wenn ich den Track deaktiviere und dann den Remove rufe, bin ich mir noch nicht sicher, dass der Track entfernt wird, da der schwarze Bildschirm immer noch angezeigt wird - aber getestet und aktualisiert wird. In Bezug auf die erforderliche Verhandlung, laut der W3C-Spezifikation (Abschnitt 4.8) scheint es, dass auf Spur hinzugefügt oder gestoppt werden sollte. Unklar für mich, warum das Entfernen eines Tracks nicht dazu führt, dass der Track aus dem Stream entfernt wird, unabhängig davon, ob er gestoppt wurde oder nicht. – SBG

+0

Auch wird auf die neueste libjingle-Version (derzeit ab August 2015) aktualisiert, in der dies behoben sein kann - das wird einige Tage dauern, da mehrere Änderungen in webrtc vorgenommen werden – SBG