1. 程式人生 > >展望2018:WebRTC技術現狀、應用開發與前景

展望2018:WebRTC技術現狀、應用開發與前景

2017年,蘋果宣佈將在iOS 11中支援WebRTC,至此完成了主流PC瀏覽器、移動端的全覆蓋,而其提供了一整套完備的音視訊通訊方案,這給開發者帶來了巨大利好。英特爾協同通訊解決方案架構師段先德針對WebRTC的能力、優勢與不足、開發要點及未來發展幾方面進行分析。本文是『WebRTC-網際網路音視訊新標準?』系列的第一篇,如果您對WebRTC技術的未來有分析和洞見,歡迎聯絡 [email protected]

文 / 段先德

策劃 / LiveVideoStack

2017年,隨著微軟和蘋果表態在其瀏覽器或系統產品中對WebRTC技術的支援,以及WebRTC 1.0標準的定案,WebRTC的話題越來越多地出現在廣大網際網路行業開發人員的視野中。很多同學對WebRTC的背景、目的、意義以及限制其實並不明白,加上媒體上各種吹捧和質疑的聲音互相摻雜,對WebRTC這項技術的應用前景和開發難度沒有切實的判斷。本文希望通過對WebRTC技術的粗淺梳理,為大家提供參考。

WebRTC是什麼?能做什麼?

很多人期望WebRTC是一個“拿來即用”的“端到端解決方案”,只需要在web端寫幾行JavaScript呼叫甚至不需要程式設計就能實現瀏覽器之間的實時音視訊通訊。也有很多人把WebRTC等同於Google在其Chromium工程中的開源實現。其實這都是誤解。WebRTC並不是一個“解決方案”,也不囿於某一種實現的程式碼庫。WebRTC是終端的音視訊媒體訪問(輸入輸出)介面在類似web環境下的標準化抽象,以及用於實時通訊的會話的建立過程、終端音視訊媒體(或其他資料)編碼格式、傳輸方式和引數的描述和協商規範。既然是一種標準規範,那麼無論具體實現方式如何,只要該實現符合該標準規範就應該可以互聯互通、擁有實時通訊的能力,這也是WebRTC最本質的意義。

WebRTC雖然冠以“web”之名,但並不受限於傳統網際網路應用或瀏覽器的終端執行環境。實際上無論終端執行環境是瀏覽器、桌面應用、移動裝置(Android或iOS)還是IoT裝置,只要IP連線可到達且符合WebRTC規範就可以互通。這一點釋放了大量智慧終端(或執行在智慧終端上的app)的實時通訊能力,打開了許多對於實時互動性要求較高的應用場景的想象空間,譬如線上教育、視訊會議、視訊社交、遠端協助、遠端操控等等都是其合適的應用領域。

WebRTC有什麼優勢和不足?

很長時間以來,實時通訊能力一直是電信類專用裝置(如電話、手機)的專有屬性。隨著各種網際網路應用和移動網際網路應用的層出不窮,特別是隨著使用者接入頻寬條件的不斷改善,許多新的應用都對實時通訊服務有著切實的需求,希望能夠把實時通訊能力整合到應用程式中。其實很多終端裝置都具有實時通訊的潛力的,但是在WebRTC之前,沒有一個統一的工業標準來描述一個裝置的實時通訊能力和連線建立過程。在對實時通訊能力的需求特別迫切的應用(如微信、WhasApp、FaceTime、Messenger等等)中,大家各做一套,“七國八制”,完全不能互通。

WebRTC最大的優勢就是“標準化”,它解決的問題就是給所有需要進行實時通訊的終端提供一套統一的、開放的實時通訊能力描述和連線建立標準。只要符合WebRTC的規範,通訊終端的形態和執行環境就是透明的(看不見也不關心),大家都可以用同一種“語言”進行“交談”。WebRTC對音視訊的編碼格式(codec)、傳輸方式和協商過程做出了明確的規定,原則上所有支援WebRTC的終端,在互操作性上將不存在障礙。目前各大瀏覽器廠商都積極參與到WebRTC技術的生態中,從web應用開始,WebRTC將成為基於網頁的音視訊實時通訊技術規範將。之後,在web應用於移動終端應用的互動需求驅動下,越來越多的移動應用的音視訊服務也將採用WebRTC的技術規範。

要說不足之處,一個就是目前WebRTC標準剛剛塵埃落定,在2018年以及今後的一段時間內,還存在各家瀏覽器廠商的現有WebRTC實現與規範不完全相符的情況,會多少存在某些應用場景下互聯互通的問題,亟待各家瀏覽器廠商將持續完善現有實現以向標準看齊。另一個很大的不足(遺憾)可能是Android和iOS系統原生支援WebRTC標準的願景目前還不明確,需要通過在app中整合客戶端SDK來實現。不過向來技術標準的發展和與工業界的應用普及是相互激勵的,我們也可以說這是WebRTC標準發展的一個巨大空間。

怎麼做基於WebRTC的應用開發?

首先當然要讓終端具備WebRTC能力。如果終端執行環境是瀏覽器,目前絕大部分瀏覽器都已經實現了對WebRTC的支援(其中Safari和Edge的支援還在持續完善中),雖然彼此有一些差異,但是可以藉助adapter.js等適配層遮蔽掉這些差異。如果終端執行環境不是瀏覽器,則可以採用其他的開源SDK或商業SDK,將其整合在終端應用程式中。當然也可以基於Google的開源WebRTC實現的Native程式碼進行裁剪或移植。值得一提的是Google的開源WebRTC程式碼庫中有大量的終端多媒體問題和傳輸問題的應對方案的實現,包括音視訊的編解碼、同步、頻寬預測、QoS,AEC等,都是做終端(特別是IoT裝置或桌面環境應用)開發時很好的參考。

終端實現了WebRTC只是表示它具備了實時通訊的能力,但各個終端任然是孤立的,需要將各個終端的SDP進行交換才能讓它們完成媒體和傳輸的協商才能讓各個終端之間真正通起來。WebRTC並未就各個實現之間交換SDP的傳輸方式以及終端的“定址”方式做出規定,這跟具體應用場景和其實現方式高度相關。因此要實現基於WebRTC的應用還需要一些“額外”的工作,通過一個各個終端都“認識”並能“找到”的“中間人”來進行SDP交換。譬如最簡單的“1對1”呼叫的場景,這個“中間人”就是信令伺服器,這種WebRTC的信令伺服器可以基於任何訊息系統構建,有很多開源實現可以利用或參考,自研開發也並不複雜。

如果要基於WebRTC做“1對多”或者“多對多”的實時通訊應用,則情況要複雜一些,具體的做法也會因實際應用場景而不同,根據通訊終端之間的媒體流拓撲結構,大體上可以分為Peer2Peer(終端點對點連線)模式、SFU(Selective Forwarding Unit,伺服器選擇性轉發)模式和MCU(MultipointControl Unit,伺服器混音混流)模式。

Peer2Peer模式(所有參與方均需與其他所有參與方通訊的情景又叫Mesh模式)的特徵是呼叫中每兩個需要進行通訊的參與者之間都建立起點對點的媒體連線(PeerConnection),所有的媒體連線都是終端之間的(有可能通過TURN伺服器進行NAT穿越,但不影響本質流拓撲),伺服器側不參與。Peer2Peer模式的優點是媒體拓撲去中心化,伺服器側實現簡單,只需要將各個終端之間的信令交換送達即可;缺點是終端需要受理多路媒體流的收發,隨著呼叫中參與方數的增加,媒體連線數會階乘函式式增長,無論對終端的編解碼計算力還是頻寬資源都會帶來巨大的壓力。如果一個呼叫中引數方數很少(譬如大多數時間2方偶爾3方),則可以考慮選用Peer2Peer模式的伺服器側實現方案。

SFU模式的特徵是呼叫中所有的參與者都與伺服器側的媒體伺服器建立媒體連線,把媒體流傳送到媒體伺服器,媒體伺服器把媒體流(根據需要)選擇性轉發給需要接收該媒體流的所有參與者。SFU模式的優點是終端編碼運算和上行網路頻寬消耗大大減少,並且媒體伺服器可以根據要求將媒體流(需支援SVC)的不同分層選擇性地傳送給接收者,適當減少接收者側下行網路頻寬的消耗並提供一定的“可定製性”使用者體驗。缺點(或“代價”)是媒體伺服器需要受理所有媒體連線請求,接收所有參與者釋出的流並轉發給所有訂閱者,產生伺服器側運營壓力。

MCU模式的特徵是呼叫中所有的參與者都與伺服器側的媒體伺服器建立媒體連線並把媒體流傳送到媒體伺服器,媒體伺服器把所有收到的媒體流進行混流混音後傳送給所有需要接收的參與者。MCU模式相對SFU模式的優點是終端解碼運算和下行網路頻寬消耗進一步減少,並且天然具有轉碼能力,可以放寬終端採用音視訊編解碼格式的限制,使終端可以選擇對自身最友好的編解碼格式,大大提高終端生存能力。並且由於將所有終端的媒體混合在一起,可以實現伺服器側所見即所得的錄製和向外部流媒體伺服器推流。MCU的缺點(或“代價”)是媒體伺服器需要實時將所有接收的媒體流解碼混合再編碼,會帶來更大的計算力開銷。

在基於WebRTC的應用的實際開發中,大多數時候服務整合商並不需要從頭自研一套SFU或MCU系統,而是在市面上可用的開源或商業方案中進行選擇。在進行方案選擇時需要考慮的是,如果:

  1. 希望客戶端側擁有更多的顯示佈局的靈活性且下行頻寬夠大夠穩定;

  2. 呼叫中釋出媒體流的參與方數較少(譬如不多於6方);

  3. 無異種終端接入需求也不需要轉碼,則可以選擇SFU模式。

否則,如果:

  1. 客戶端對下行資料量有苛刻的要求而對聚合畫面佈局沒有差異化要求;

  2. 所有參與方(或很多參與方)都有釋出媒體流的需求(視訊會議的情景);

  3. 有異種終端(譬如SIP終端、IPCamera)的接入需求或轉碼需求;

  4. 有伺服器側(雲端)錄製和推流到CDN的需求,則或許MCU模式更適合。除去所述這些情況以外的應用場景,則需要在各種需求的矛盾中權衡輕重得失以做出選擇了。

不過其實SFU模式和MCU模式並不是絕對互斥的,有的解決方案(例如Intel CS for WebRTC及其商業化版本)是將這兩種模式整合在一起的,服務整合商可以根據具體的應用場景進行靈活配置。

WebRTC發展前景如何?

作為終端技術規範,雖然WebRTC只是實時通訊解決方案中的一部分,但是是最貼近使用者的一部分,也許也是最重要的一部分。終端技術規範的標準化,是一個很好的開始。連一向以封閉的技術生態聞名的Apple都擁抱WebRTC了,將促進WebRTC技術的發展和普及,會有越來越多的網際網路(和移動網際網路)應用基於WebRTC構建其實時通訊服務。

進入2018年,在網際網路快速發展的當下和將來,WebRTC將極大啟用人與人、人與物、物與物(IoT)之間的資訊紐帶,移除掉通訊終端之間的時間(實時)和空間(基於網際網路)的障礙,成為應用場景創新的一道強大的技術保障。同時,類似VR、AR、自動駕駛等新的應用場景的出現也會給WebRTC技術帶來新的需求和動力,應用場景的商業化成功也將給技術發展持續注入活力和物質資源。譬如近年來直播連麥、網上課堂、遠端控制(抓娃娃機)等基於網際網路的視訊應用的猛烈發展和火熱,一次次催動著基於網際網路的的實時音視訊通訊技術的發展,呼喚著WebRTC這樣的統一、開放、透明的標準規範成熟和落地。

想象一下,在基於WebRTC構建的世界裡,所有通訊終端的媒體描述和連線建立過程都是一致的,只要終端之間開放媒體協商的通道,就可以建立起實時通訊,“微信”與“WhatsApp”能建立視訊通話,就像你在中國用手機跟美國的朋友家中的座機打電話一樣。那多美好!推動這一天的早日到來難道不也是我們網際網路音視訊通訊工作者們的歷史責任嗎?

相關推薦

展望2018WebRTC技術現狀應用開發前景

2017年,蘋果宣佈將在iOS 11中支援WebRTC,至此完成了主流PC瀏覽器、移動端的全覆蓋,而其提供了一整套完備的音視訊通訊方案,這給開發者帶來了巨大利好。英特爾協同通訊解決方案架構師

2018年機器視覺產業技術現狀發展趨勢分析及發展前景預測

機器視覺的界定以及構成 機器視覺就是用機器來代替人眼做測量和判斷的系統,它通過光學裝置和非接觸感測器自動獲取目標物件的影象,並由影象處理裝置根據所得影象的畫素分佈、亮度和顏色等資訊進行各種運算處理和判別分析,以提取所需的特徵資訊或根據判別分析結果對某些現場裝置進行運動控制。機器視覺系統中的影象處

基礎架構四-APP1使用程式碼倉庫應用倉庫yum本地源完成CICD

  前言: 經前面三篇,我們搭建了基於docker和centos7的基礎應用架構:程式碼倉庫、應用倉庫、yum本地源,本篇用一個python flask-uwsgi-nginx環境開發的學籍查詢系統,來演示使用gitlab、registry、yum本地源完成持續整合與釋出的過程

一文看懂 BDTC 2018探祕大資料新應用(附 PPT 下載)

12 月 8 日,北京新雲南皇冠假日酒店,由中國計算機學會主辦,CCF 大資料專家委員會承辦,CSDN、中科天璣資料科技股份有限公司協辦的 2018 中國大資料技術大會(BDTC)圓滿落下帷幕。 從 2008 第一屆 Hadoop 沙龍,到 2018 的千人大會,活動已

一文看懂BDTC 2018探祕大資料新應用(附PPT下載)

12 月 8 日,北京新雲南皇冠假日酒店,由中國計算機學會主辦,CCF 大資料專家委員會承辦,CSDN、中科天璣資料科技股份有限公司協辦的 2018 中國大資料技術大會(BDTC)圓滿落下帷幕。 從 2008 第一屆 Hadoop 沙龍,到 2018 的千人大會,活動已

乾貨 | 區塊鏈快速通道技術原理到應用落地

2018年開始,好像所有的人都在談論區塊鏈,資本、精英、草根不斷進場投身到區塊鏈的浪潮之中。在外圍觀望的你或許懂技術而對區塊鏈一知半解,或許有場景與創意卻礙於其研發門檻,或許是已身處於行業卻難於前行。區塊鏈是機遇也是挑戰,如何在這風起雲湧的區塊鏈世界裡獲得加速卡實現彎道超車?

《Flask Web開發基於Python的Web應用開發實戰》筆記二

客戶端 正則表達式驗證 結束 comm ash red 單選 接受 boolean 第三章、模板 ?視圖函數作用即生成請求的響應,如果把業務邏輯和表現邏輯混在一起會導致代碼難以理解和維護。吧表現邏輯轉移到模板中能夠提升程序的可維護性。?模板是一個響應文本的文件,其中包含用

技術三板斧關於技術規劃管理架構的思考

阿里妹導讀:實踐需要理論的指導,理論從實踐中來。作為技術工程師,要不斷地從事件中反思經驗、總結規律,才能避免踏入同一個坑,才

進擊的Python【第九章】paramiko模塊線程進程各種線程鎖queue隊列生產者消費者模型

password locking form maxsize 廁所 sorted [0 hostname nbsp 一、paramiko模塊 他是什麽東西?   paramiko模塊是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連

電子書 flaskweb開發基於Python的Web應用開發實戰.pdf

商業 機器 免費 影評 而且 視頻軟件 python程序 規範 初級 作為PythonWeb開發的微框架,Flask獨樹一幟。它不會強迫開發者遵循預置的開發規範,為開發者提供了自由度和創意空間。   《圖靈程序設計叢書·Flask Web開發:基於Python的Web應用開

FlaskWeb開發基於Python的Web應用開發實戰pdf

數據庫查詢 各類 啟動服務 管理 jin 軟件 請求 服務 inter 下載地址:網盤下載 內容簡介 · · · · · ·本書不僅適合初級Web開發人員學習閱讀,更是Python程序員用來學習高級Web開發技術的優秀參考書。? 學習Flask應用的基本結構,編寫示例應

《Flask Web開發基於Python的Web應用開發實戰》pdf 免費下載

需求 png 入行 14. 導入 框架 錯誤 pla 引用 《Flask Web開發:基於Python的Web應用開發實戰》pdf 免費下載鏈接: https://u253469.ctfile.com/fs/253469-292665036 第一部分 Flask

《Flask Web開發基於Python的Web應用開發實戰》pdf 完整版免費下載

項目 工廠 技術分享 各類 視圖 第2章 靜態文件 閱讀 擁有 《Flask Web開發:基於Python的Web應用開發實戰》.pdf pdf 完整版免費下載: https://u253469.ctfile.com/fs/253469-292665036 更多電子書下

Linux應用程序基礎 1應用程序系統命令的關系 文件位置 主要用途

soft sock efi 地址欄 -h sha 包安裝 文檔 -a 一、Linux應用程序基礎1、應用程序與系統命令的關系文件位置主要用途使用環境運行格式2、Linxu下軟件包的類型rpmdeb源代碼包自帶安裝程序的軟件包免安裝的軟件包 二、使用RPM包管理工具1、RPM

Python從菜鳥到高手(8)print函數賦值代碼塊

images rec 控制臺輸出 error enter sam 運算 賦值 編程語言 1.神奇的print函數 ??print函數相信讀者一定對它不陌生,因為在前面的章節,幾乎每個例子都使用了print函數,這個函數的功能就是在控制臺輸出文本。不過print在輸出文本時還

R vs Python構建data.frame讀取csv統計描述

一、Python   資料框就是典型的關係型資料庫的資料儲存形式,每一行是一條記錄,每一列是一個屬性,最終構成表格的形式,這是資料科學家必須熟悉的最典型的資料結構。 1.構建資料框 import pandas as pd data = {'year':[2010, 2011, 2012, 201

C++11右值引用移動語意完美轉發

在C++11之前我們很少聽說左值、右值這個叫法,自從C++11支援了右值引用之後,大多數人會像我一樣疑惑:啥是右值? 準確的來說: 左值:擁有可辨識的記憶體地址的識別符號便是一個左值。 右值:非左值。 左值引用:左值識別符號的一個別名,簡稱引用

[分享]《Flask Web開發基於Python的Web應用開發實戰(第2版)》中文PDF+源代碼

全面介紹 flask 技術 ESS nfs 圖片 ges web應用開發 復制粘貼 下載:Flask Web開發第二版《Flask Web開發:基於Python的Web應用開發實戰》第二版中文PDF,324頁,帶目錄和書簽,文字能夠復制粘貼;配套源代碼;經典書籍第二版,講解