WSL的WebRTC開發環境(四)

WebRTC(Web Real-Time Communication,網頁即時通信),是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術,目的是無插件實現web端的實時通信的能力。WebRTC提供了視頻會議的核心技術,包括音視頻的採集、編解碼、網絡傳輸、展示等功能,並且還支持跨平臺,包括linux、windows、mac、android等。


WSL的WebRTC開發環境(四)

WebRTC

2010 年 Google 以 6820 萬美元收購 VoIP 軟件開發商 Global IP Solutions 的 GIPS 引擎,在經過收購之後沒多久,Google 將該引擎改名為“WebRTC”,並宣佈向開發者們開源了源代碼。

2012 年,Google 將 WebRTC 集成到 Chrome 瀏覽器中。隨後, Mozilla、Opera、Ericsson 等 PC 瀏覽器以及手機瀏覽器均開始支持 WebRTC 技術。

2017 年,蘋果在 WWDC17 上正式宣佈其瀏覽器內核 WebKit 也正式支持 WebRTC。

基於 Chromium 的新版 Edge 現在可在預覽版中使用。新版本的 Edge 提供了 WebRTC 開發者常用的許多功能,如支持數據通道、RTCPeerConnection 中的 Strem、VP9 編解碼器和 MediaStream Recording。

在 Discord、Google Hangouts 和 Facebook Messenger 等一些國內的多媒體網絡應用中,也都需要 WebRTC 才能實現。

但是,WebRTC 的發展還面臨著諸多的挑戰:

瀏覽器面臨的主要挑戰是完成 WebRTC 1.0 API 的實現,以及消除實現差異。WebRTC API 在其歷史中經歷了三次主要迭代,需要實現互操作性、改進測試覆蓋率等方面的標準。W3C 在實現這一目標方面一直在穩步前進,但還未成熟。

前實時音視頻通信領域,也並不只有 WebRTC 一種可供選擇的技術,專有的自研協議和 WebRTC 的互操作性通常使用網關實現。

WebRTC協議介紹:https://www.cnblogs.com/SingleCat/p/11315349.html

基於Webrtc、Kurento的一種低延遲架構實現:https://www.jianshu.com/p/ac307371def4

WebRTC的開源實現:

1、Jitsi Videobridge

Jitsi是一個SFU開源框架,由Atlassian維護,被集成到HipChat中。

Jitsi是一個處理XMPP信號流的SFU,適用於SIP/XMPP視頻通話,會議,聊天,桌面共享,文件傳輸。如果你不需要SFU或者使用其他信號協議,最好還是使用其他項目。但由於Jitsi項目的簡單明瞭,很多外包供應商很喜歡使用Jitsi,將它集成到自己的項目案例當中。

Github項目地址:https://github.com/jitsi/jitsi

2、Kurento

Kurento 是一個 WebRTC 流媒體服務器以及一些客戶端API,可以實現webrtc mcu、sfu等功能。2016年被Twilio收購,Kurento目前推進到6.13版本。nubomedia 開源框架是基於kurento開發的官方paas 平臺,提高了穩定性,但是並不推薦學習使用。它可以實現的功能包括

  • 網絡流媒體協議,包括HTTP、RTP和WebRTC
  • 群組通信(group communications,包括MCU和SFU功能),支持媒體流的轉碼、錄製、廣播、路由、混流。
  • 高級媒體處理特性,包括:機器視覺、視頻索引、增強現實、語音分析。
  • Media storage that supports writing operations for WebM and MP4 and playing in all formats supported by GStreamer.
  • Automatic media transcoding between any of the codecs supported by GStreamer, including VP8, H.264, H.263, AMR, OPUS, Speex, G.711, and more.


WSL的WebRTC開發環境(四)

Kurento服務器實現的功能

官網地址:http://www.kurento.org

2019年12月發佈的最新的6.13版本的文檔:https://doc-kurento.readthedocs.io/en/6.13.0/project/relnotes/v6_13_0.html

由於Kurento開源服務只有Ubuntu的版本,所以在WSL的UBUNTU上安裝Kurento服務器是再適合不過了。建議安裝Kurento的6.11版本,因為最新的版本並不支持kms-datachannelexample等組件,無法運行顯示字幕等實例,如果只是學習WebRTC,可以無視。

6.11版本的文檔https://doc-kurento.readthedocs.io/en/6.11.0/user/about.html

WSL上的安裝:

1、 在Ubuntu子系統內確認安裝GnuPG

<code>sudo apt-get update && sudo apt-get install --no-install-recommends --yes \\
gnupg/<code>


WSL的WebRTC開發環境(四)

在Ubuntu子系統內確認安裝GnuPG

2、 在16.04的Ubuntu子系統,執行:

<code>     DISTRO="xenial"  # KMS for Ubuntu 16.04 (Xenial)
    DISTRO="bionic"  # KMS for Ubuntu 18.04 (Bionic)
 /<code>

在18.04的Ubuntu子系統,執行

<code>DISTRO="bionic"  # KMS for Ubuntu 18.04 (Bionic)/<code>

3、下面兩條指令指令增加Kurento倉庫到系統配置中:

<code>sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
       sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.13.0 $DISTRO kms6
EOF
/<code>


WSL的WebRTC開發環境(四)

增加Kurento倉庫到系統配置

4、 安裝Kurento服務KMS

<code>sudo apt-get update && sudo apt-get install --yes kurento-media-server/<code>

安裝過程中下載較慢,特別是下載GStream組件的時候,如果下載速度降到很低,可以中斷重新下載,具備斷點重傳。

5、安裝完成後,可以用下面的指令啟動服務,或者停止服務

<code>sudo service kurento-media-server start
sudo service kurento-media-server stop/<code>


WSL的WebRTC開發環境(四)

啟動KMS服務

KMS會在Ubuntu子系統本地生成一個端口在8888的服務,可以通過/etc/kurento/kurento.conf.json進行KMS的詳細配置。


WSL的WebRTC開發環境(四)

KMS服務的配置

6、可以在/var/log /kurento-media-server/下查看KMS的日誌信息


WSL的WebRTC開發環境(四)

KMS的日誌信息

7、如果需要在遠程服務器上部署KMS服務,則需要繼續安裝STUN或者TURN服務器,來穿透NAT牆。可以參照該網文來安裝Docker設置,https://blog.csdn.net/XRRRICK/article/details/85010829

8、之後可以繼續下載Kurento的示例代碼來安裝運行,有SpringBoot、NodeJS等版本的程序供選擇。我這裡用SpringBoot就是Java的例程:Kurento Java Tutorial - Hello World

(1) 運行以下命令來下載Java實例代碼、設置6.11分支,打包運行SpringBoot項目:

<code>git clone https://github.com/Kurento/kurento-tutorial-java.git
cd kurento-tutorial-java/kurento-hello-world
git checkout 6.11.0
mvn -U clean spring-boot:run -Dkms.url=ws://localhost:8888/kurento/<code>


WSL的WebRTC開發環境(四)

啟動Hello World的SpringBoot項目

這裡的-Dkms.url=ws://localhost:8888/kurento是本地KMS服務提供的路徑,如果端口沒有什麼變化,可以省略不寫。

(2) 如果啟動沒有什麼錯誤的話,就可以在WebRTC兼容的瀏覽器(Chrome、Edge、360瀏覽器等)輸入以下地址(注意是https協議):https://localhost:8443/,這個Helloworld實例是將本地攝像頭採集到的音視頻流發送到KMS服務器後,又回送到瀏覽器,左邊的Video組件是顯示本地的視頻,右邊的Video組件是顯示回送的視頻。

可以看到界面:

WSL的WebRTC開發環境(四)

Helloworld示例

在界面的console裡你可以看到整個瀏覽器客戶端與應用服務器(SpringBoot創建的8433端口的Web服務)的消息協商過程。

如果在Chrome瀏覽器中,可以在瀏覽器的另一個標籤裡打開:chrome://webrtc-internals/,可以看到Google瀏覽器提供的對WebRTC數據的統計。


WSL的WebRTC開發環境(四)

Chrome瀏覽器裡的WebRTC統計信息


有興趣的同學可以摘取其中的靜態JS文件和庫文件,組合到自己的應用裡。

  • 示例中的WebRTC Media Player可以修改為遠程流媒體播放。
  • 示例中的WebRTC recording可以修改為流媒體錄像
  • 示例中的WebRTC One-To-Many broadcast可以修改為一對多的直播
  • 示例中的WebRTC Many-To-Many video call (Group Call) 可以修改為多對多的視頻會議系統

可以在我的網站rtc目錄下訪問這個helloworld示例,rtc/hello.html


分享到:


相關文章: