webrtc在远程助手应用的实践
遠(yuǎn)程助手
它是一個(gè)1對(duì)1的提供遠(yuǎn)程協(xié)助的一個(gè)解決方案,具有一下特點(diǎn):
1)實(shí)時(shí)遠(yuǎn)程桌面
2)實(shí)時(shí)語(yǔ)音交互
3)實(shí)時(shí)遠(yuǎn)程控制
發(fā)展歷程
站在WebRTC的肩膀上
WebRTC是由W3C,IETF等組織定義的一套實(shí)時(shí)音視頻通信標(biāo)準(zhǔn)和技術(shù)規(guī)范。也是google的一個(gè)開(kāi)源項(xiàng)目,提供了實(shí)時(shí)音視頻通信的核心技術(shù),包括音視頻采集,編解碼,網(wǎng)絡(luò)傳輸,顯示等,支持跨平臺(tái)提供了多個(gè)平臺(tái)的版本,有很多極具價(jià)值的技術(shù),解決了很多實(shí)際問(wèn)題。基于這些,構(gòu)建了我們的產(chǎn)品和服務(wù)。
主要瀏覽器對(duì)webrtc的支持情況和market share
WebRTC優(yōu)缺點(diǎn)
SFU&MCU
從理論到實(shí)踐,從Demo到產(chǎn)品
1.服務(wù)框架
2.端框架Android,Browser
3.挑戰(zhàn)
4.質(zhì)量保證
5.運(yùn)維
1.服務(wù)框架
webserver:賬號(hào)服務(wù)器,房間服務(wù)器,后臺(tái)監(jiān)控服務(wù)
信令服務(wù)器:信令通道采用websocket,用來(lái)交換sdp/ice options
房間服務(wù)器,信令服務(wù)器采用go語(yǔ)言實(shí)現(xiàn),基于beego構(gòu)建,它簡(jiǎn)化了數(shù)據(jù)庫(kù)操作,同源策略等的處理
STUN/Turn服務(wù)器:coturn + TURN RESET API + bandwidth monitor
Nginx:load balance
昂貴的backbone
1對(duì)1不需要SFU/MCU
資源限制,優(yōu)化手段有限
2.端框架Android,Browser
android端使用的java api,Browser端使用javascript api
RoomManager:與房間服務(wù)器通信,管理房間信息等
Websocket:信令通道,與信令服務(wù)器通信的,主要交換SDP/ICE options,在peerconnection建立之前可以用于傳遞一些輔助信息(夾帶私貨)
EventManager:按鍵,屏幕觸控,鼠標(biāo)等信息的獲取,坐標(biāo)轉(zhuǎn)換,封裝,以及注入等管理,事件通過(guò)datachannel傳輸
PeerConnection:webrtc的入口,負(fù)責(zé)p2p連接的建立,成功后,video channel, voice channel, data channel可用
AudioRecord/AudioTrack:android平臺(tái)音頻的輸入和輸出
MediaProjection+virtualdisplay:屏幕數(shù)據(jù)的抓取
3.挑戰(zhàn)
3.1.實(shí)時(shí)音視頻通信的調(diào)優(yōu),端到端的優(yōu)化
3.2.webrtc代碼的坑
3.3.客戶端的適配
3.1.實(shí)時(shí)音視頻通信的調(diào)優(yōu),端到端的優(yōu)化
什么是好的實(shí)時(shí)音視頻通信?主觀上
1)視頻,畫面清晰正確,延遲低,無(wú)卡頓,帶寬占用低
2)音頻,聲音清晰正確,無(wú)丟失,無(wú)噪音,無(wú)回聲,延遲低,無(wú)卡頓,帶寬占用低
主觀上,音視頻的評(píng)價(jià)標(biāo)準(zhǔn)很相似,但是涉及到的技術(shù)手段有共同點(diǎn)也有不同的地方,要分開(kāi)來(lái)看
影響實(shí)時(shí)音視頻質(zhì)量的因素:
1)碼率?視頻,受編碼壓縮率,I幀頻率,分辨率,幀率,編碼碼率等影響,編碼碼率影響QP?音頻,受編碼壓縮率,采樣率和位寬的影響,采樣率和位寬會(huì)影響音質(zhì)
2)編碼算法
3)丟包,一般發(fā)生在網(wǎng)絡(luò)很差的情況下,會(huì)采用丟包重傳做補(bǔ)償,音頻對(duì)丟包更敏感
4)抖動(dòng),丟包重傳會(huì)造成抖動(dòng)問(wèn)題,引入了jitter buffer解決這個(gè)問(wèn)題
5)帶寬,實(shí)際可用帶寬取決于網(wǎng)絡(luò)擁塞情況
6)延時(shí),帶寬一定的情況下,高碼率會(huì)帶來(lái)高延時(shí),丟包重傳也會(huì)帶來(lái)延時(shí),編碼時(shí)使用B幀也會(huì)引入延時(shí),jitter buffer設(shè)置不合理同樣引入延時(shí)
7)回聲消除,AEC
8)自動(dòng)增益,AGC
9)噪音抑制,NS
解決這個(gè)問(wèn)題,需要一套組合拳
設(shè)置最大上行帶寬:
1)合理利用上行帶寬
2)移動(dòng)流量可控
3)轉(zhuǎn)發(fā)服務(wù)器流量可控
H264 vs VP8:
1)在編碼壓縮率和編碼質(zhì)量上H264均優(yōu)于VP8
2)色彩復(fù)雜度高界面VP8發(fā)生了失真
3)支持VP9,H265的平臺(tái)較少
Video engine初始設(shè)置:
1)Codec
2)設(shè)置合適的I幀頻率
(1).太大,碼率變大,帶寬負(fù)擔(dān)增加
(2).太小,參考幀離的太遠(yuǎn)容易出現(xiàn)花屏且不能很快恢復(fù)
3)設(shè)置最佳分辨率,兼顧清晰度和帶寬使用,450x800
4)編碼使用Baseline profile避免B幀
5)設(shè)置幀率為15fps
6)調(diào)整jitter buffer
7)指定對(duì)應(yīng)分辨率最佳編碼碼率/QP
H264各分辨率對(duì)應(yīng)編碼碼率:
擁塞控制GCC:
1)帶寬利用上不去?check delay based bitrate bps
2)設(shè)置最大編碼碼率
(1).降低不必要的帶寬流消耗
(2).碼率達(dá)到一定值后,繼續(xù)增加作用不明顯
3)設(shè)置最小碼率,保證用戶體驗(yàn)
too low bitrate, mess
遠(yuǎn)程助手用戶場(chǎng)景下視頻特點(diǎn):
一動(dòng):用戶在操作,滑動(dòng)桌面或列表,在尋找目標(biāo)
一不動(dòng):用戶基本找到目標(biāo),不需要或很少需要滑動(dòng),畫面變化很慢,主要是講解觀察
針對(duì)這兩個(gè)特點(diǎn)引入了兩個(gè)技術(shù)qulaity scaler和動(dòng)態(tài)幀率,來(lái)根據(jù)實(shí)際需求平衡帶寬占用
Quality scaler:
1)Quality scaler—scaled resolution—>Encoder
2)丟幀率高于閥值30%,降低分辨率,說(shuō)明帶寬緊張
3)隱含意思,丟幀率低于閥值,說(shuō)明帶寬還可以
4)QP高于高閥值37(h264),降低分辨率
5)QP低于低閥值24(h264),升高分辨率
6)隱含意思,QP介于高QP和低QP之間時(shí),分辨率保持不變
7)隱含意思,QP升高是由于編碼需要,比如運(yùn)動(dòng)畫面,QP降低也是由于編碼需要,比如靜態(tài)畫面
8)增強(qiáng):
(1).設(shè)置分辨率scale上限
(2).設(shè)置分辨率scale下限
(3).平滑的scale梯度
帶寬低時(shí),繼續(xù)降低帶寬使用,帶寬還可以時(shí),保證運(yùn)動(dòng)畫面的流暢度,保證靜態(tài)畫面的清晰度
動(dòng)態(tài)幀率:
1)屏幕刷新率從1~60fps波動(dòng)
2)0 < frame rate <15fps
3)界面變化快,刷新率高時(shí),流暢度優(yōu)先,增加幀率提升流暢度體驗(yàn),帶寬占比增大
4)界面變化慢,刷新率低時(shí),清晰度優(yōu)先,降低幀率,釋放帶寬占比
opus,高音質(zhì),低延遲:
1)6 kb /秒到510 kb / s的比特率
2)采樣率從8 kHz(窄帶)到48 kHz(全頻)
3)幀大小從2.5毫秒到60毫秒
4)支持恒定比特率(CBR)和可變比特率(VBR)
5)從窄帶到全頻段的音頻帶寬
6)支持語(yǔ)音和音樂(lè)穩(wěn)定性,內(nèi)存使用,功耗等
7)支持單聲道和立體聲
8)可動(dòng)態(tài)調(diào)節(jié)比特率,音頻帶寬和幀大小
9)良好的魯棒性丟失率和數(shù)據(jù)包丟失隱藏(PLC)
采用16k采樣率,保證音質(zhì),降低帶寬使用:
1)原來(lái)采用48k或44.1k,android音頻框架mix輸出的采樣率
2)low latency audio sample rate 真的low latency嗎?
3)經(jīng)測(cè)試,延時(shí)不在重新采樣,在于碼率,尤其是在低帶寬的情況下
4)應(yīng)用場(chǎng)景主要是通話交流,人聲頻率100hz~10kHz,人耳20hz~20khz
48khz vs 16khz
人聲頻率沒(méi)有損失
回聲消除:
1)回聲是如何產(chǎn)生的
2)回聲造成的聲音問(wèn)題
自動(dòng)增益:
1)手機(jī)通話的正確姿勢(shì)?
2)距離產(chǎn)生的不是美,是聽(tīng)不清你說(shuō)啥
3.2.webrtc代碼的坑
3.3.客戶端的適配
Android
1)不同平臺(tái)硬件編解碼器?MTK,Samsung,Hisilicon,Qualcom
2)低端平臺(tái)帶來(lái)的性能問(wèn)題
3)分辨率720p~2k
4)特殊場(chǎng)景動(dòng)畫需求導(dǎo)致的屏幕刷新不均勻引發(fā)的卡頓問(wèn)題(視覺(jué)上)
瀏覽器:
1)用adapter.js不同瀏覽器版本webrtc接口實(shí)現(xiàn)不一樣
2)getUserMedia權(quán)限問(wèn)題
3)同源策略
4)https和http共存
4.質(zhì)量保證
4.1.開(kāi)發(fā)測(cè)試環(huán)境,線上環(huán)境,隔離
4.2.服務(wù)端壓力測(cè)試,jmeter
4.3.實(shí)時(shí)音視頻通信評(píng)估標(biāo)準(zhǔn)和實(shí)驗(yàn)環(huán)境
4.4.端測(cè)試用例
4.5場(chǎng)測(cè),跨地區(qū),跨運(yùn)營(yíng)商
4.6Android APP質(zhì)量體系
4.3.實(shí)時(shí)音視頻通信評(píng)估標(biāo)準(zhǔn)和實(shí)驗(yàn)環(huán)境
主觀客觀相結(jié)合的方法,制定了一套標(biāo)準(zhǔn)文檔和配套方法:
實(shí)時(shí)音視頻硬件實(shí)驗(yàn)環(huán)境的搭建是非常昂貴的,利用現(xiàn)有的一切資源
網(wǎng)損模擬,facebook ATC:
視頻延時(shí)測(cè)量,雙向延時(shí):
1)60fps 錄屏
2)ms=(n-m)/frame_rate*1000
屏幕快照 2018-08-09 下午2.57.36
視頻延時(shí)測(cè)量,單向延時(shí):
1)高速攝像機(jī)
2)精確到毫秒秒表
3)ms=00:01:19:155-00:01:18:938
音頻延時(shí)測(cè)量:
音頻半回路
其他測(cè)量方法:
1)視頻平滑度,勻速自轉(zhuǎn)的地球儀
2)幀率,幀間隔計(jì)算工具
3)video dump工具
4)audio dump工具
主要技術(shù)指標(biāo)項(xiàng):
橫向和自身對(duì)比,縱向和竟品對(duì)比,客觀評(píng)價(jià)優(yōu)化效果
5.運(yùn)維
5.1.日志系統(tǒng)
1).優(yōu)化log系統(tǒng)
2).統(tǒng)一各服務(wù)器log時(shí)間到毫秒
5.2.后臺(tái)管理,大數(shù)據(jù)
1).連接成功率
2).p2p打通率
3).連接時(shí)長(zhǎng)分布
4).通話的體驗(yàn),綜合延遲,丟包率,帶寬,碼率等情況
5.3.用戶反饋
1).增加反饋入口
2).周統(tǒng)計(jì)
WebRTC走向展望
1)WebRTC已經(jīng)定版,后續(xù)主要發(fā)力優(yōu)化,應(yīng)用場(chǎng)景支持
2)新一代編碼技術(shù)H265,AVS2,AV1,VP9等得到廣泛支持
3)視頻,圖像增強(qiáng)技術(shù),降低帶寬
4)AR
5)AI,對(duì)優(yōu)化策略參數(shù)進(jìn)行決策
總結(jié)
以上是生活随笔為你收集整理的webrtc在远程助手应用的实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hadoop学习笔记-目录
- 下一篇: SharePoint 2013 术语和术