WebRTC和WebKit
WebRTC是基于瀏覽器的實(shí)時(shí)通信接口,主要支持通過(guò)瀏覽器進(jìn)行點(diǎn)對點(diǎn)的音頻以及視頻通信。WebRTC規范由W3C和IETF共同制定。通過(guò)這些API,Web開(kāi)發(fā)者可以通過(guò)標準的JavaScript API在網(wǎng)頁(yè)中嵌入視頻、音頻通信功能。
WebKit是一個(gè)開(kāi)源的瀏覽器引擎,它由WebCore排版引擎、JSCore JavaScript引擎和各種平臺移植代碼組成。WebKit目前缺乏對WebRTC標準的支持,因此開(kāi)發(fā)者構建了webrtcinwebkit.org網(wǎng)站,開(kāi)始在WebKit上加入對WebRTC的支持。最初,該項目在WebKit的GTK移植中使用OpenWebRTC增加對WebRTC支持,后續的支持,將會(huì )逐漸放入到WebCore中,這樣基于WebKit的所有移植環(huán)境就能方便的使用。同時(shí),該項目未來(lái)還將接入更多的WebRTC實(shí)現后段,比如webrtc.org等。
這些工作會(huì )使蘋(píng)果公司更容易的在Safari上實(shí)現WebRTC功能。
蘋(píng)果公司做了什么?
WebKit只是一個(gè)瀏覽器引擎,每個(gè)使用它的瀏覽器,都是一個(gè)移植版本(port)。webrtcinwebkit項目,最早在WebKit的GTK移植上進(jìn)行了測試,在7月的時(shí)候,Linux版瀏覽器實(shí)現了對getUserMedia接口的支持。
針對不同瀏覽器針對WebRTC協(xié)議棧的實(shí)現,可以參見(jiàn)這個(gè)幻燈片。作為背景知識,它介紹了不同瀏覽器如何將WebRTC實(shí)現融合到自己的架構中去。
對于蘋(píng)果公司,mac平臺上的Safari和iOS平臺上的Safari是獨立的WebKit移植版本。它們沒(méi)法直接使用之前為GTK移植版本上使用的WebRTC接入代碼。因此蘋(píng)果公司需要單獨為這兩個(gè)移植版本實(shí)現WebRTC的接入。
截至8月底,通過(guò)的git倉庫的提交記錄的篩選,蘋(píng)果公司的主要改動(dòng)有:
針對mac和iOS平臺上的改動(dòng)
- /platform/mediastream/mac
- /platform/mac-mavericks/
- /platform/mac-yosemite/
針對AVFoundation接口的修改(AVVideoCaptureSource.h)
針對蘋(píng)果平臺構建文件的修改(WebCore.xcodeproj/project.pbxproj)
從改動(dòng)來(lái)看,目前蘋(píng)果已經(jīng)實(shí)現了對GetUserMedia和MediaStream接口在mac和iOS兩個(gè)平臺上的支持。進(jìn)而支持了對音頻、視頻設備的列舉和選擇,支持視頻、音頻流作為audio和video兩個(gè)標簽的輸入來(lái)源,支持視頻抓取等等功能。
不過(guò),和webrtcinwebkit項目最初實(shí)現一樣,這些代碼改動(dòng)主要在mac系統移植部分。這是由于WebRTC中的很多功能,涉及到平臺相關(guān)硬件設備交互、媒體流等需要在標簽頁(yè)之間共享,使得改動(dòng)主要針對渲染層。
希望這些修改能夠讓我們能夠盡快的在Safari或者iOS的WebView中看見(jiàn)效果。