WebRTC 在 W3C 與 IETF 標準化的進展

之前裕波在問我 HTML5 有沒有涉及流媒體的部份,其實 WHATWG 的 HTML5 裡面有
點對點傳輸(PeerConnection)已經很久了,剛好幾天前 Mozilla 與 Cisco 合作
推出了一份新的 API,在這裡稍微整理一下各種進展。請參考:

http://www.w3.org/html/ig/zh/wiki/WebRTC

有規範等等的連結。

目前有兩份 API 的提案,基本上差距比起之前提到 Google 跟 Mozilla 的兩個
Audio API 的差距[1]比起來可以說不是很大,幾項比較大的差異包括:

* 當從遠端(PeerConnection)或是從自己的攝影機(getUserMedia)取得一個
stream 之後,用 <video> 顯示的方式。

Google 版:
video.src = window.URL.getObjectURL(stream);

Mozilla/Cisco 版:
video.stream = stream;

我個人是支持 Moziila/Cisco 版的,因為比較好懂而且老實說 window.URL 看起
來真的不太順眼。另一方的講法是這重複了 File API 的模式
(window.URL.getObjectURL)不需要新屬性或是定義同時有 src 跟 stream 情形
處理方式的必要。

另外,Mozilla/Cisco 版的 stream 屬性還可以用來取得 <video> 、<audio> 跟
<canvas>(!)的串流,<canvas> + PeerConnection 就可以做沒有伺服器端的多
人遊戲了,十分令人興奮。請參考 Mozilla/Cisco 版規範例子「Simulcast
Video」的程式碼。

Google 版的規範好像沒有從元素讀出 stream 的方法(有錯請更正),我想可能
是該編輯(Hixie)希望先把最基本的使用案例—視訊會議—搞穩定,那份規範也比
Moziila/Cisco 版的詳細很多。

* 多人 PeerConnection 的連線方式

Moziila/Cisco 的 PeerConnection 的 API 是用類似 Socket 的 open()
listen() accept() 模式,可以 accept() 很多使用者一次廣播。Google 版的則
是一個 PeerConnection 就是一對一,也就是要建立一對多連線就需要建立多個
PeerConnection,Hixie 的解釋是 WebRTC 協定用的 ICE 不支援一對多,另外就
是他的設計裡面哪邊是開啟連線方,哪邊是接受連線方是自動判定的。(但是目前
還看不懂,徵求對 ICE、TURN、STUN、SDP 這些東西熟的朋友們解惑一下~~)

* 其他還有像是一些小差異像是語法不同

Google: new PeerConection("audio, video") 跟
Mozilla/Cisco: new PeerConnection({audio: {}, video: {}})

等等,完整把的請參考[2]的討論。

這裡有幾件事情是中文興趣小組可以做的:

* 確定一下翻譯

「Web Real-Time Communication」翻成「Web/互聯網實時通訊」可以嗎?

台灣這邊好像不太常聽到「實時」這個字眼,不過翻成「即時」好像是「即時通
(Instant Messenger)」的 instant 不太對。

* 大家可以一起來翻譯在 IETF 的 WebRTC 使用案例文檔

這份文件提到了一些使用 WebRTC 的協定跟 API 的情節,翻譯這份文件有助於了
解未來這個 API 的潛力,並且可以看看這些情節在中文世界是不是不適用。我已
經開了一個翻譯的地盤,仍然在我們的 wiki[3] 上,文檔的結構基本上跟 HTML5
很類似,就是醜了一點 :p 裕波,你說要找人翻譯流媒體相關的那就來翻這個吧!

* 幫忙互相解惑一下,下面提一些我的問題。也歡迎多提一些更這個最新標準相關
的問題。

[1] http://lists.w3.org/Archives/Public/public-html-ig-zh/2011Apr/0064
[2] http://lists.w3.org/Archives/Public/public-webrtc/2011Jul/0012
[3]
http://www.w3.org/html/ig/zh/wiki/Draft-ietf-rtcweb-use-cases-and-requirements

== WebRTC 問題 ==

* PeerConnection.send() 的作用是?所謂的 out-of-band signaling 是什麼?

(這可能是很基本的問題,不過如果有人能為我解惑則感激不盡)

* 這個 API 可以拿來做點對點 IM 嗎?

感覺好像可以,雖然 PeerConnection.send() 是 UDP 應該不能做 IM,不過如果
用 STUNS 的話好像是 TLS-over-TCP 所以資料不會漏?

另一種可能性,有人提議 PeerConnection 裡面的參數最終會變成一個 TURN 的
URL,像是:new Connection("turn:xxx.xxx.xx..."),那以後是不是以後有可能
可以直接 new WebSocket("turn:xxx.xxx.xx..")?

* MediaStreamRecorder.getRecordedData 會得到的是該物件從出生到呼叫這個方
法為止的串流資料。我沒看到銷毀一個 MediaStreamRecorder 的方法,那不是代
表瀏覽器要一直記錄這個串流?這真的有辦法實作嗎?

* 如果我沒搞錯的話,Google 版 2.5 節[4]之前的例
子,local.signalingChannel 應該是 local.processSignalingChannel 才對

[4]
http://www.whatwg.org/specs/web-apps/current-work/webrtc.html#the-data-stream

== 其他討論區 ==

* W3C WebRTC 工作組郵件群[5]
* IETF rtcweb 工作組郵件群[6]
* WHATWG 的郵件群[7]討論過很多次[8]

[5] http://lists.w3.org/Archives/Public/public-webrtc/
[6] http://www.ietf.org/mail-archive/web/rtcweb/current/maillist.html 點
"rtcweb List Information" 即可訂閱
[7] http://lists.whatwg.org/pipermail/whatwg-whatwg.org/
[8]
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-March/thread.html#30873
    
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-March/thread.html#30941
     直接在 [7] 的搜尋條搜索 "peer" 可以得到多年的結果


此致

呂 康豪(Kenny), 中文興趣小組W3C連絡人
推特: http://twitter.com/kanghaolu
Google+: https://plus.google.com/112088462407783855918/posts
新浪微博: http://t.sina.com.cn/1950042164

Received on Saturday, 16 July 2011 05:31:43 UTC