2016-06-09 67 views
1

使用本機Android webRTC應用程序並嘗試從包含組合音頻/視頻的媒體流中刪除視頻軌道(例如localMS.addTrack( peerConnectionFactory.createVideoTrack(「ARDAMSv0」,videoSource));和localMS.addTrack(peerConnectionFactory.createAudioTrack(「ARDAMSa0」,audioSource));),視頻流仍然被髮送到遠端,並且沒有產生'onrenegotiation ' 回電話。webRTC刪除媒體軌道不會生成重新協商並且不會停止媒體

關於removetrack與之前的刪除功能(例如,請參閱https://bugs.chromium.org/p/webrtc/issues/detail?id=5265#c4https://bugs.chromium.org/p/webrtc/issues/detail?id=2136)有很多討論,另外還討論了一些解決方法,例如刪除流,然後從流中刪除音軌並添加在創建新報價之前再次流回。在W3C標準(見http://w3c.github.io/mediacapture-main/#dfn-settings)中,似乎沒有真正表明應該發生重新談判。

我試圖解決的問題如下: 這是刪除視頻軌道的正確方法(即在媒體流上調用removetrack)嗎?

爲什麼onrenegotiation不會發生?並且如果它不應該在什麼時候發出新報價?

爲什麼調用removestream不會實際上阻止流傳輸? (只有收件人在該媒體組件的sdp中有一個recv_only)傳輸新報價本身似乎不會對傳輸流產生任何影響。

對此任何想法將不勝感激,我會發布我遇到的任何更新和工作解決方案一旦解決。

感謝

+0

請問[此答案](http://stackoverflow.com/a/35515536​​/918910)有幫助嗎? – jib

回答

0

不知道關於Android的WebRTC,但在瀏覽器的WebRTC(這應該是相似的),你需要調用stop()在賽道上真正停止它。或完全關閉連接。

您首先添加曲目或新流,然後創建報價並開始重新協商流程 - 它不會自動啓動。

+0

謝謝。在Android本地webrtc(JNI MediaStreamTrackInterface)中,我們啓用/禁用軌道(但不停止),這會導致向遠程發送普通流或黑色流。如果我禁用軌道然後調用刪除,我不確定軌道是否被刪除,因爲黑屏仍然顯示 - 但會測試和更新)。關於所需的談判,根據W3C規範(4.8節),似乎應該在正軌上添加或停止。不清楚爲什麼移除軌道實際上不會導致軌道從流中被移除,無論是否停止。 – SBG

+0

此外,將升級到最新的libjingle版本(目前從2015年8月開始),其中可能會解決這個問題 - 在整個webrtc期間需要花費幾天時間進行多項更改 – SBG