getUserMedia目前可以在Chrome瀏覽器中直接使用,此外還有Opera、Firefox Nightly構建版、Aurora瀏覽器(儘管在Firefox中需要設定喜好設定)。可以看一看simpl.info/gum上getUserMedia跨瀏覽器的示範,以及Chris Wilson使用getUserMedia來進行網路音頻輸入的驚人示範。 Chrome穩定版已經支援webkitRTCPeerConnection,並且無須在about:flgas裡設定。Chrome24及以上版本已經支援TURN伺服器(TURN協議允許NAT或者防火牆後面的對象可以通過TCP或者UDP接收到資料。這在使用了對稱式的NAT或者防火牆的網路中尤其具有實用價值)。在simpl.info/pc上有一個Chrome RTCPeerConnection非常簡單的示範,以及在apprtc.appspot.com上有一個超棒的視訊交談應用。(關於命名的解釋:經過幾次迭代,目前API的命名為webkitRTCPeerConnection。其他名稱及實現已被廢棄。當W3C標準已經穩定時,webkit首碼將被刪除。) 案頭版Firefox Nightly和Aurora瀏覽器也已經支援WebRTC,而在iOS和Android上可以通過愛立信Bowser瀏覽器支援。 DATACHANNEL DataChannel是用於任意資料高效能、低延時、點對點通訊的WebRTC API。這個API非常簡單,類似於WebSocket,但是它的通訊是直接發生在瀏覽器之間的,所以DataChannel的速度遠遠超過WebSocket,即便我們還需要一個中繼(TURN)伺服器(用“TCP/UDP打孔”的方式來穿越防火牆和防止網路位址轉譯失敗)。 Chrome 25計劃支援DataChannel,需要通過about:flags啟用-儘管它可能會錯過這個版本。這將僅用於實驗,可能不會充分發揮全部的作用,而且無法和Firefox進行通訊。DataChannel在以後的版本中會更加穩定,並且可以和Firefox互連。 Firefox Nightly構建版和Aurora支援mozGetUserMedia、mozRTCPeerConnection和DataChannel(但是不要忘記在about:flags中設定參數!) 在Firefox中運行DataChannel的如下: 下面是代碼片斷: [html] pc1.onconnection = function() { log("pc1 onConnection "); dc1 = pc1.createDataChannel("This is pc1",{}); // reliable (TCP-like) dc1 = pc1.createDataChannel("This is pc1",{outOfOrderAllowed: true, maxRetransmitNum: 0}); // unreliable (UDP-like) log("pc1 created channel " + dc1 + " binarytype = " + dc1.binaryType); channel = dc1; channel.binaryType = "blob"; log("pc1 new binarytype = " + dc1.binaryType); // Since we create the datachannel, don't wait for onDataChannel! channel.onmessage = function(evt) { if (evt.data instanceof Blob) { fancy_log("*** pc2 sent Blob: " + evt.data + ", length=" + evt.data.size,"blue"); } else { fancy_log('pc2 said: ' + evt.data, "blue"); } } channel.onopen = function() { log("pc1 onopen fired for " + channel); channel.send("pc1 says Hello..."); log("pc1 state: " + channel.state); } channel.onclose = function() { log("pc1 onclose fired"); }; log("pc1 state:" + channel.readyState); } hacks.mozilla.org部落格上有更多Firefox實現的資訊和示範。2013年初Firefox 18將會提供WebRTC基礎功能的支援,並且附加功能在支援計劃中,包括getUserMedia和createOffer/應答限制,以及TURN(允許瀏覽器在防火牆後進行互相通訊)。 WebRTC的更多資訊,請參閱WebRTC入門。這裡甚至還有一本正在印刷中的WebRTC書籍,目前以電子書格式提供。 解析度限制 Chrome 24及以上版本已經實現了解析度限制功能。它可用於為getUserMedia()和RTCPeerConnection的addStream()調用設定視頻的解析度。 在simpl.info/getusermedia/constraints上有一個樣本,通過設定一個斷點和改變參數值展示不同的限制,。 這裡有幾個陷阱。在一個瀏覽器標籤中設定getUserMedia的解析度限制會影響所有的標籤。設定不允許限制解析度會出現一個非常奇怪的錯誤資訊: [html] navigator.getUserMedia error: NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1} 如果你在本地而不是伺服器上使用getUserMedia,會出現和上面一樣的錯誤。