新的Azure通信服务(ACS)如何实现WebRTC?
正文字?jǐn)?shù):3144 ?閱讀時(shí)長(zhǎng):4分鐘
本文來(lái)自Housepaty的軟件工程師Gustavo Garcia,他對(duì)Azure通信服務(wù)(ACS)進(jìn)行了全面的評(píng)估,包括從瀏覽器兼容性、編解碼器到帶寬估計(jì)算法…..與主要對(duì)手相比成熟度還有差距。
文?/?Gustavo Garcia
譯?/?Helen Lyu
原文鏈接 /?https://webrtchacks.com/how-does-azure-communication-services-implement-webrtc-gustavo-garcia/
我們?cè)诜治鍪褂肳ebRTC的主要服務(wù)方面有著悠久的傳統(tǒng)。在網(wǎng)頁(yè)即時(shí)通信處于成功狀態(tài)后,我們跟不上列表增長(zhǎng)的速度。幸運(yùn)的是,我們最喜歡的作家之一Gustavo Garcia Bernardo最近找到了時(shí)間來(lái)審查新的Microsoft Azure通信服務(wù)。他發(fā)現(xiàn)了一些有趣的結(jié)果,我們很高興在這里展示。Gustovo在實(shí)時(shí)通信方面有著深厚的職業(yè)經(jīng)驗(yàn),并且自WebRTC成立之初就一直密切參與著。
每當(dāng)有1.6萬(wàn)億美元的公司進(jìn)行產(chǎn)品發(fā)布時(shí),通常都是一件大事,尤其是對(duì)于那些定期處理通訊API的人而言。微軟和WebRTC有著悠久而獨(dú)特的歷史,因此我們特別想知道(微軟)如何將WebRTC用作此新產(chǎn)品的一部分。
如你所見,這也有一些有趣的特性。幾周前,Microsoft宣布了Azure通信服務(wù)(ACS)。他們的云服務(wù)目錄中的此新產(chǎn)品提供聊天,SMS,PSTN呼叫和視頻通信。
它在通信平臺(tái)即服務(wù)(CPaaS)類別中與Vonage,Twilio,Agora等主要參與者競(jìng)爭(zhēng),并與Zoom或Amazon的視頻API產(chǎn)品競(jìng)爭(zhēng)。這款微軟的產(chǎn)品與其競(jìng)爭(zhēng)對(duì)手沒有太大的不同。這篇文章將重點(diǎn)介紹語(yǔ)音和視頻部分。這些基于WebRTC。
如在后面顯示的詳細(xì)信息中所見,它重用了很大一部分現(xiàn)有的Microsoft基礎(chǔ)結(jié)構(gòu)(來(lái)自Skype和/或Microsoft Teams)。在較高級(jí)別上,有2種API:
1. 管理API –包括用于創(chuàng)建用戶和訪問令牌的服務(wù)器端SDK
2. 客戶端SDK –適用于Web,Android和iOS,可將端點(diǎn)連接到通信服務(wù)器,以發(fā)送和接收來(lái)自PSTN和Microsoft Teams的音頻/視頻/屏幕共享以及媒體。
API和它提供的功能
客戶端API中有兩個(gè)基本原語(yǔ):呼叫和房間。使用“呼叫”界面,您可以呼叫連接到系統(tǒng)的任何其他用戶。使用“房間”原語(yǔ),您可以加入房間。(客戶端API)對(duì)身份和呼叫的支持比其他平臺(tái)更強(qiáng),這可能是因?yàn)榛A(chǔ)結(jié)構(gòu)被重用并且該功能提供了與Teams平臺(tái)的集成。
房間訪問權(quán)限的缺乏很有意思,(因?yàn)?#xff09;如果知道房間ID,則每個(gè)訪問令牌顯然都具有加入每個(gè)房間的權(quán)限。
在客戶端,除了一些音頻和視頻設(shè)備管理API之外,還提供了基本的呼叫控制操作(靜音/取消靜音,保持/取消保持,屏幕共享),以簡(jiǎn)化系統(tǒng)配置。
WebRTC合規(guī)
作為總結(jié),讓我們比較一下Azure在這種情況下使用的地方與WebRTC標(biāo)準(zhǔn)(W3C或各種IETF草案)有何不同:
客戶端SDK
該客戶端SDK適用于Web,iOS和Android。目前,瀏覽器支持有限。它僅包括Chrome,對(duì)Safari的部分有限支持(僅接收),以及僅基于Windows的新款基于Chromium的Edge。
在測(cè)試Web和Android SDK時(shí),值得注意的是它們?nèi)匀恍枰倪M(jìn)。例如,瀏覽器日志顯示了非常冗長(zhǎng)的控制臺(tái),以及與統(tǒng)計(jì)信息或某些請(qǐng)求失敗有關(guān)的常見警告,盡管這對(duì)于第一個(gè)版本是預(yù)期的。
服務(wù)器端管理SDK
Microsoft提供了用于創(chuàng)建用戶和令牌的管理SDK,以支持C#,Python,Java和Node.js。這些SDK將在受信任的應(yīng)用程序中運(yùn)行,并且需要在Azure控制臺(tái)中創(chuàng)建的訪問密鑰。Microsoft通過(guò)支持主訪問密鑰和輔助訪問密鑰來(lái)支持訪問密鑰旋轉(zhuǎn)而獲得加分。
其他特性
其他一些高級(jí)功能:
1. PSTN呼叫:專用預(yù)覽版不允許我們對(duì)此進(jìn)行測(cè)試,但是根據(jù)文檔(里面講述的),它支持1:1呼叫和組呼叫。
2. SMS –如上所述,我們無(wú)法對(duì)此進(jìn)行測(cè)試,但是發(fā)送和聊天也是Azure通信產(chǎn)品的一部分。
3. Teams集成:這也是Private Preview中的功能,但隨著當(dāng)今Teams產(chǎn)品的普及,該新的通訊平臺(tái)可能會(huì)受到最初的關(guān)注,這是一種使用案例。
在文檔或SDK中沒有提及記錄或廣播功能,也沒有與Azure流處理功能(如文本到語(yǔ)音或視覺API)進(jìn)行任何集成。
發(fā)信號(hào)
信令基于HTTP請(qǐng)求。
人們可以在信號(hào)中看到許多對(duì)Skype域的引用,這些信號(hào)表明如何在Microsoft生態(tài)系統(tǒng)的其他現(xiàn)有部分之上使用此產(chǎn)品。
實(shí)際上,甚至Azure Comms Services的JWT令牌內(nèi)的用戶標(biāo)識(shí)符稱為skypeids:
以下是當(dāng)您使麥克風(fēng)靜音/取消靜音時(shí)基于HTTP的自定義JSON格式的專有信令示例:
對(duì)于1:1呼叫,系統(tǒng)使用直接的P2P WebRTC連接.在“房間”模式下,ACS使用SFU在不同參與者之間轉(zhuǎn)發(fā)音頻和視頻數(shù)據(jù)包。這些SFU位于不同的區(qū)域。就我而言(在歐洲),我在考試期間被分配到都柏林的一個(gè)(SFU)。
SDP和媒體
對(duì)等連接計(jì)劃
客戶端SDK使用單個(gè)WebRTC PeerConnection來(lái)發(fā)送和接收多個(gè)流。這是最高效,最現(xiàn)代的機(jī)制,但并非所有平臺(tái)都使用。不利的一面是,它使用原始的Plan-B語(yǔ)義而不是新的Unified Plan語(yǔ)義。考慮到Plan-B的存在,這并不是非典型的。(直到)今天,許多最大的多方應(yīng)用程序仍在使用Plan-B。
交互式連接建立(ICE)
在媒體連接方面,ACS同時(shí)使用STUN和TURN TCP服務(wù)器。
令人驚訝的是,(它并)未包括TURN TLS –這可能會(huì)限制ACS在受限企業(yè)環(huán)境中進(jìn)行連接的能力。
http://localhost:5000/, { iceServers: [turn:52.158.34.11:3478?transport=udp, turn:52.158.34.11:443?transport=tcp], iceTransportPolicy: all, bundlePolicy: max-bundle, rtcpMuxPolicy: require, iceCandidatePoolSize: 0, sdpSemantics: "plan-b" }, {advanced: [{enableDtlsSrtp: {exact: false}}, {googCpuOveruseDetection: {exact: false}}]}
為了直接連接到SFU,它使用典型的ICE UDP候選對(duì)象,但也使用端口3478中的ICE TCP候選對(duì)象。ICE的支持不是ice-lite,而是full ice在帶有公共IP的SFU中,這不是很常見,因?yàn)樗茈y實(shí)現(xiàn)。Full ICE并沒有提供很多優(yōu)勢(shì),但也沒有任何負(fù)面影響。
加密
WebRTC要求的加密是基于SRTP。但是,SFU /房間密鑰交換使用的是SDES,而不是標(biāo)準(zhǔn)的DTLS協(xié)議。這樣比較簡(jiǎn)單,可以提供更快的建立速度,但僅Chrome支持。由于該標(biāo)準(zhǔn)明確禁止SDES,因?yàn)樗蝗鐦?biāo)準(zhǔn)DTLS要求安全,因此可能會(huì)在某個(gè)時(shí)候?qū)⑵鋭h除。
Codecs
G.722用于音頻編解碼器。對(duì)于WebRTC平臺(tái),這確實(shí)不常見,但是鑒于PSTN互操作性的需求和現(xiàn)有Microsoft基礎(chǔ)結(jié)構(gòu)的重用,這并不令人驚訝。這是帶有音頻通道信息的SDP答案的一部分:
m=audio 3480 RTP/SAVPF 9 0 8 13 101
c=IN IP4 40.113.83.182
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:101 telephone-event/8000
The video codec selected in H.264.
在H.264中選擇的視頻編解碼器。它使用RTX重傳來(lái)確保可靠性。ACS不包括聯(lián)播支持,以使視頻質(zhì)量適應(yīng)會(huì)議室中不同參與者的需求。同樣至少在我測(cè)試的示例中,比特率非常低。你可以從發(fā)送者參數(shù)的下一個(gè)捕獲中看到如何將其配置為以200kbps使用H264。
RTCP
RTP / RTCP級(jí)別上的其他一些細(xì)節(jié)是大多數(shù)平臺(tái)中也使用了bundle,rtcp-mux和rtcp-rsize的用法。它還為每個(gè)流(1501、1551…)保留50 ssrc,并且在呼叫的初始建立期間,在遠(yuǎn)程SDP中為將來(lái)的參與者預(yù)分配了8個(gè)遠(yuǎn)程流。
帶寬估算(BWE)
對(duì)于帶寬估計(jì),它使用接收方支持(基于REMB),而不是更現(xiàn)代,更優(yōu)化的發(fā)送方帶寬估計(jì)(基于傳輸反饋)。
其他身份不明的東西
SDP中還存在非標(biāo)準(zhǔn)擴(kuò)展。我懷疑它們是否會(huì)產(chǎn)生影響,并且可能會(huì)繼承自其他應(yīng)用程序。例如:
a=x-mediabw:applicationsharing-video send=8000;recv=8100
a=x-source-streamid:19
a=x-signaling-fb:* x-message app send:dsh
a=x-signaling-fb:* x-message app send:src,csrc,vc recv:src
結(jié)論
Azure Communication Services具有一個(gè)簡(jiǎn)單的API。一切工作都符合預(yù)期并且很輕松。該文檔很好,交互式示例確實(shí)很有幫助。它還保證了一種易于理解和具有競(jìng)爭(zhēng)力的定價(jià)模型。另一方面,這仍然是Beta產(chǎn)品它不會(huì)像已經(jīng)存在多年的競(jìng)爭(zhēng)對(duì)手提供的那樣成熟。如果要認(rèn)真考慮ACS,Microsoft必須將支持?jǐn)U展到其他瀏覽器,并清除現(xiàn)有的Web支持
此外,缺少一些視頻質(zhì)量技術(shù)(主要是聯(lián)播)和缺乏對(duì)較新編解碼器(特別是Opus)的支持是在預(yù)期以外的,希望Microsoft即將發(fā)布的版本可以解決這些問題。
對(duì)于許多流行的用例來(lái)說(shuō),缺少記錄也是一個(gè)很大的差距。在我看來(lái),最有希望的部分是與Azure生態(tài)系統(tǒng)潛在集成的功能,如推送通知,文本到語(yǔ)音轉(zhuǎn)換,計(jì)算,發(fā)布訂閱...例如,擁有發(fā)布訂閱支持音頻/視頻會(huì)非常有用,但是 目前僅適用于SMS。
我也很期待人們可以使用Teams集成來(lái)構(gòu)建什么,但是我無(wú)法在這些測(cè)試中評(píng)估這些。
LiveVideoStackCon 2020 SFO(線上峰會(huì))
我們提出了一種稱為“視頻矢量化”的新型視頻壓縮算法。
視頻矢量化將視頻轉(zhuǎn)碼為一個(gè)矢量圖形格式,并利用SVG和OpenGL等開放標(biāo)準(zhǔn)和現(xiàn)有標(biāo)準(zhǔn)在用戶設(shè)備上進(jìn)行渲染。
這樣做可以使用開放標(biāo)準(zhǔn)和現(xiàn)有標(biāo)準(zhǔn)以便壓縮動(dòng)畫和截屏視頻內(nèi)容十倍。
LiveVideoStackCon 2020?美國(guó)舊金山站
北京時(shí)間:2020年12月11日-12月13日
點(diǎn)擊【閱讀原文】訪問直播頁(yè)面
總結(jié)
以上是生活随笔為你收集整理的新的Azure通信服务(ACS)如何实现WebRTC?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准常有,VVC不常有
- 下一篇: 旧金山站线上峰会24h倒数