2017-03-04 101 views
3

我正在使用webRTC並使用帶有websockets的SIP的自我實現進行對等連接。是否可以使用webRTC跨瀏覽器?

當我測試流程時,我能夠在每個對等體上流式傳輸並查看遠程和本地流。此測試在每個對等設備的相同瀏覽器上有不同的選項卡。在Firefox和Chrome中成功完成測試

當我測試Firefox中的一個對等和Chrome中的另一個對等時,反之亦然,則我無法看到本地流,但我可以使用遠程。

控制檯中不顯示任何異常或錯誤。 在哪些情況下,當在不同瀏覽器中使用一個對等方和其他對等方時流失敗,但是在同一瀏覽器中使用它們時會失敗?

我能做些什麼來調試呢?

+1

從使用adapter.js開始 - 這個東西現在對於WebRTC來說實際上是強制使用的(https://github.com/webrtc/adapter)。另外爲什麼不使用SIP.js?它出什麼問題了? –

+0

你在只有一個攝像頭的機器上測試嗎?然後,Chrome瀏覽器無法在Firefox正在使用時訪問網絡攝像頭。 最簡單的選擇是通過創建一個新的首選項來連接另一個攝像頭或更改Firefox來使用假設備media.navigator.streams.fake在about:config中設置爲true config: –

+0

@PhilippHancke感謝這些信息,您可以幫我一個許多。 –

回答

0

我敢打賭,當您在實現中將它作爲SIP over websocket嘗試時,瀏覽器之間存在SDP兼容性問題。你必須嘗試開源的庫,如SIPjs,JSsip,SIPml5,它已經通過websocket進行了SIP操作。

控制檯中不顯示異常或錯誤。

確保您在訪問webRTC API時已將日誌記錄添加到所有可能的失敗案例catch(err)中。

JSsip https://tryit.jssip.net/的WebRTC的

+0

我的webscoket服務器只將SDP(在每個瀏覽器上生成)從一個對等傳遞給另一個對等。它只是在不修改它的情況下中繼這些信息。這兩個SDP都會被傳遞到peerconnection實例的構造函數中,即使發生錯誤也不會出錯。 –

+0

@DidacHerrera嘗試https://apprtc.appspot.com/params。HTML只在音頻模式下使用FireFox和Chrome來看音頻作品 –

+0

Debuggin我發現當被調用者(因此其他瀏覽器上的調用者已經將流激活並顯示在視頻元素上)即將獲得本地媒體時,該對象已創建,但屬性active = false。這就是爲什麼對等連接成功創建沒有錯誤,但我看不到被調用者流...此屬性是隻讀的,所以我不能強制它。它會是誰?爲什麼當一個對等體中的一個流處於活動狀態時,另一個對等體會創建一個不活動的媒體流對象 –

0

在線演示是在Chrome和Firefox的使用,但某些API是不同的。 您需要編寫適配器或使用現有的WebRTC適配器庫來實現這兩者之間的兼容性。

例如,一個簡單的適配器會是這個樣子:

var MediaStream = $window.webkitMediaStream || $window.MediaStream; 
var PeerConnection = $window.mozRTCPeerConnection || $window.webkitRTCPeerConnection || $window.RTCPeerConnection; 
var IceCandidate = $window.mozRTCIceCandidate || $window.webkitRTCIceCandidate || $window.RTCIceCandidate; 
var SessionDescription = $window.mozRTCSessionDescription || $window.webkitRTCSessionDescription || $window.RTCSessionDescription; 

我會強烈建議使用適配器庫像https://github.com/webrtc/adapter,這樣你就不必手動處理所有的邊緣情況。

希望這會有所幫助。

+0

請注意'msRTCPeerConnection'和'msRTCSessionDescription'不是一件事情。從來沒有。我也懷疑「webkitRTCSessionDescription」曾經存在過。 – jib

+0

感謝您指出@jib,我的自定義適配器相當老舊。目前我正在使用https://github.com/webrtc/adapter上的WebRTC適配器。 –

+0

@jib我正在使用adapter.js才能這樣做。我的JavaScript,相同的腳本,在Firefox和Chrome上都能很好地工作,而不需要修改它。當一個對象在Chrome中,另一個對象在Firefox時,問題就出現了,遠程流盡管正在接收,但沒有顯示出來。當遠程數據流到達時,onaddstream被觸發,但在分配給它的html視頻元素上沒有顯示。我試圖調試,但沒有顯示錯誤。我使用的是適配器,當兩個對等體位於同一個瀏覽器中時,這種方式運行良好,但當對等體(調用者或被調用者)與另一個對等體位於不同的瀏覽器中時,則不會。 –

相關問題