2015-05-18 45 views
1

我知道adapter.js,它試圖:從規格變化和前綴不同我在哪裏可以找到WebRTC API的官方和最新文檔?

絕緣。應用程序。

但adpater.js只包含非常基本的WebRTC API。我將以setRemoteDescription爲例。

2013它被稱爲是這樣的:

pc.setRemoteDescription(offer); 

https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection,目前API是什麼?

pc.setRemoteDescription(new RTCSessionDescription(offer), function() { 
    pc.createAnswer(function(answer) { 
     pc.setLocalDescription(new RTCSessionDescription(answer), function() { 
     // send the answer to a server to be forwarded back to the caller (you) 
     }, error); 
    }, error); 
    }, error); 

而且我目前正在讀an article from 2015它似乎是:

pc2.setRemoteDescription(pc1_offer).then(step3, failed); 
  • 我在哪裏可以找到最新的和「官方」的文檔,以實現WebRTC API的?
  • 你如何跟上這些頻繁的變化?

編輯

http://www.w3.org/TR/webrtc/已經不遠了,但我寧願找一些地方Firefox的和Chrome的API的目前的執行情況可以遵循(會,是如果這是有道理的)。

+0

WebRTC API的官方文檔可在W3C網站上找到:[here](http://www.w3.org/TR/webrtc/)。 但是,一直在進行修改。 –

+0

啊是的。我應該詢問瀏覽器供應商的「當前」API狀態。我已經更新了這個問題。 – wpp

+0

我不認爲有像你想要的東西。你需要一個官方文檔,但它應該包含chrome和firefox的實現,這些實現在某些方面與官方規範不同。這兩個條件不能同時滿足。 – Kevin

回答

2

的WebRTC仍然在發展,所以現在有沒有更好的資源比規範,以跟上最新的變化給它最好的地方是:http://w3c.github.io/webrtc-pc

當涉及到個人的瀏覽器,並且實施了什麼,這變得更加困難。請看:http://iswebrtcreadyyet.com

您在問題中觀察到的主要API差異是2014年對promises的支持。所有異步方法現在都會返回Promise,而不是採用一對成功和失敗回調。 Chrome並沒有實現這一點,但Firefox的確如此。

下面是一個完整的WebRTC呼叫在Firefox中工作(注:使用arrow functions):

var pc1 = new mozRTCPeerConnection(), pc2 = new mozRTCPeerConnection(); 
 

 
pc1.onicecandidate = e => !e.candidate || 
 
    pc2.addIceCandidate(e.candidate).catch(failed); 
 
pc2.onicecandidate = e => !e.candidate || 
 
    pc1.addIceCandidate(e.candidate).catch(failed); 
 
pc2.onaddstream = e => v2.mozSrcObject = e.stream; 
 

 
function start() { 
 
    navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 
 
    .then(stream => pc1.addStream(v1.mozSrcObject = stream)) 
 
    .then(() => pc1.createOffer()) 
 
    .then(offer => pc1.setLocalDescription(offer)) 
 
    .then(() => pc2.setRemoteDescription(pc1.localDescription)) 
 
    .then(() => pc2.createAnswer()) 
 
    .then(answer => pc2.setLocalDescription(answer)) 
 
    .then(() => pc1.setRemoteDescription(pc2.localDescription)) 
 
    .then(() => log("Connected!")) 
 
    .catch(failed); 
 
} 
 

 
var log = msg => div.innerHTML += "<p>" + msg + "</p>"; 
 
var failed = e => log(e.name +": "+ e.message +" line "+ e.lineNumber);
<video id="v1" height="120" width="160" autoplay></video> 
 
<video id="v2" height="120" width="160" autoplay></video><br> 
 
<button onclick="start()">Start!</button><div id="div"></div>

這20行代碼,比其他版本中,你可能會小不少看到。

如果它看起來很神祕,不要失望,因爲承諾和箭頭功能是一些需要習慣的新概念,特別是當像這樣組合使用時。我建議使用上面的鏈接分別閱讀它們。

舊的回調版本仍可用於所有RTCPeerConnection方法,因此使用promise是可選的。Chrome支持瀏覽器中的承諾(不適用於WebRTC),但不支持箭頭功能,因此在上述情況變得普遍之前可能需要一段時間。

除了這個差異,Chrome和Firefox在高級呼叫設置,甚至重新協商方面都相當穩定。規格中仍在改變的區域必須與新的低級控制面(如RTCRtpSender)以及從指定流到指定軌道(使用addTrack而不是addStream等)重新聚焦。

不幸的是,我知道沒有好的瀏覽器特定的文檔鏈接。正如您指出MDN鏈接已過時(儘管最近更新了getUserMedia的MDN鏈接,所以希望這會改變)。我發現查看工作演示和示例仍然是弄清楚不同瀏覽器支持哪些內容的最有用的方法。

一些分歧,我知道的:

  • getUserMedia constaints - 鉻實現規範大約2013這裏,而Firefox的實施規範(但不限於寬/高/幀率和facingMode)。 Chrome的實現雖然比較成熟,但並不標準,而Firefox實現了這個規範(但僅限於rtp/rtcp,ice候選和其他一些東西)。
  • RTCOfferOptions - 鉻扼流圈在這些,所以而不是例如。 { offerOptions: true }使用較舊的{ mandatory: OfferOptions: true }(注意區分'o'與'O'),因爲這兩種瀏覽器都可以使用。
  • addTrack/removeTrack現在堅持到addStream(stream)(儘管Firefox沒有執行removeStream,所以在那裏使用removeTrack)。

由於前綴和其他差異,您仍然需要adapter.js,但是有更多的adapter.js可以並且應該做。希望它的更新版本可以通過爲上述一些差異提供一個polyfill來進一步縮小這個差距。

我對Firefox的瞭解比Chrome好,所以如果我錯過了某些東西,我很抱歉。

我希望有一些幫助。

+0

非常感謝你的徹底解答。 iswebrtcreadyet和specs的組合是我真正想到的。不幸的是,似乎沒有這樣的資源。 (我會在幾天後接受你的回答,以防有人證明我們錯了:))。 – wpp

相關問題