么么直播的音視頻技術實踐和優化
2018年3月31日,「ZEGO Meetup 視頻直播+的技術實踐之道」第三期在上海成功舉辦,現場吸引了滿堂的直播行業從業者到場聆聽。會上,如預期一樣,么么直播前端團隊負責人黃銘新、即構科技資深技術專家和架構師冼牛、滬江CCTalk 音視頻架構師武海濱和塗圖TuSDK 研發技術總監王勝,這4位直播行業大咖給大家做了精彩分享。其中,么么直播前端團隊負責人黃銘新老師主要給我們分享了么么直播這4年來,在移動端和Web端兩大平台上踩過的坑以及優化經驗。本文是對他演講內容的整理。
嘉賓簡介:曾就職於天天動聽、英語流利說,現在么么直播負責前端開發團隊的team leader相關工作。技術上主要偏向於JS、Node全棧式開發,主要負責公司內的主站、內部服務和部分微服務的開發和管理。
-------------------------------------------正文-----------------------------------------------
么么直播團隊是在2012年底進入直播行業的,那時直播還處於混沌期,不像現在有這麼多第三方直播技術解決方案商。么么直播平台一切從零開始,和很多C端廠商一起,一點點地研究一步步地推演直播技術,走了很多彎路。
近兩年直播火爆後,湧現出了非常多的第三方直播解決方案。有些廠商專註於做類似雲端的解決方案,提供一些比較好的伺服器和演算法,來提高流傳輸的速度;還有一些是只做客戶端的SDK,幫助企業更快速地接入到直播業務中去;還有像即構科技這樣的廠商,把兩部分結合在一起,推出一整套解決方案,讓想立即接入視頻直播這個行業的公司和項目可以迅速啟動。
會上,黃銘新重點與我們分享了么么直播在移動端和Web端推拉流研發中踩過的坑和優化經驗。
移動端平台的實踐與優化
移動端推流step1
早期安卓手機整體性能偏弱,么么直播在移動端採用的是硬體編碼+rtmp dump的推流方式。
硬體編碼啟用了GPU,解放了部分CPU的計算能力,能夠支持業務上的計算,同時還降低了整個手機的發熱量,間接延長了整個APP的使用時長,當時效果不錯。但隨著深入使用和測試,么么直播和其他競品比較還存在以下問題:
1)畫面比較模糊。
2)碼率偏大。
為了解決這一問題也進行了很多嘗試,但效果不甚理想,後來發現在Android內部,Google強制使用baseline的編碼方式,調整效果不好。
3) 硬體的兼容性差。
Android上的MediaCodec編碼器在不同手機和晶元平台上的表現略有差異,各個硬體廠商對它的支持也不盡相同,導致兼容非常費時費力,而iOS就相對沒有這樣的問題。
4) 網路推流不穩定。
針對直播端推流經常斷和觀眾端出現卡頓等問題,么么直播也做了一些優化。例如,當推流網路堵塞時,會把還未發送的隊列內數據進行丟棄,以保證整體的延遲不會太大,同時也對播放器的緩存大小進行調整,以減小網路不穩定造成的影響。
當時么么直播沒有專門從事音視頻研究的研發人員,做的以上努力使得性能效率有所提升,但和其他競品相比還是存在差距。
在那段時間,直播行業開始爆發性增長,慢慢湧現了一批第三方解決方案,么么直播決定去嘗試一些第三方的方案,希望能夠解決一些痛點。
移動端推流step2
在找尋第三方解決方案的過程中,么么直播團隊發現第三方提供商的一個共通點是——他們大部分採用軟體編碼+硬體編碼的解決思路。么么直播內部也開始按照這樣的思路進行嘗試,嘗試了一段時間後,整體性能有所提升,同時也發現了兩個問題:
1)低端機器的整體性能偏弱,導致視頻下載幀率不太穩定,沒有辦法穩定在20、30幀,有時候直接跳到100或個位數;
2) 採用了軟體編碼後,低端機器的發熱量大。
「我們嘗試了軟體編碼+硬體編碼的這個解決方案,但發現這個方案也不成熟,然後我們遇到了即構科技的方案。我們在直播行業的前一到兩年里摸爬滾打了很久,也嘗試了很多方案,可是畢竟沒有專門的音視頻人員去深入地研究音視頻技術的性能問題,市面上一般的解決方案也常是東補一塊牆、西補一塊牆,很難全面的解決問題。在接觸到即構科技後,我們發現即構可以完善地解決之前碰到的問題,無論是在畫質、兼容性、卡頓頻率,還是在載入速度、視頻的穩定程度上,直播的性能都得到了非常大的提升,的確做到了業界領先的水平。」么么直播前端技術負責人黃銘新如是說。
移動端拉流
移動端的拉流相對簡單。么么直播早期使用的是Ijkplayer進行視頻流的播放,基本穩定,不需折騰,使用起來也正常。但隨著各家直播平台性能的提升,么么直播的首屏載入時間相比較長,體驗差。在同樣接入幾個機型對比後發現,么么直播發現在拉相同流的情況下,即構的播放器載入速度更快一些。所以最後,無論是推流還是拉流,么么直播平台都替換成了即構的解決方案。
美顏
現在,美顏是直播平台必備的功能。么么直播最早在開發美顏功能時,並沒有那麼順利。起初即構的SDK並沒有把視頻流的原始數據開放出來,而美顏的SDK需要使用視頻流原始數據,然後進行再加工,所以最初碰到了整合的問題。通過溝通,即構決定開放他們的視頻流原始數據,提供內存和textureID兩種形式暴露數據,而市面上大部分的美顏相關的SDK都支持這兩種方式,所以美顏問題也得到了順利解決。
Web端平台的實踐與優化
Web端推流
web上主要有兩種推流方式,直接使用flash開播或者使用OBS軟體開播。么么直播沒有對OBS進行二次開發,所以在有限帶寬內,會給主播提供幾個碼率、解析度的配置,依據不同的網路環境自行進行調整,可是主播相對來說不願使用。
黃銘新表示,很多平台已經不太使用flash這種開播方式,但flash的推流方案在么么直播平台是很多主播的選擇。么么直播平台的主要業務集中在美女直播,相對鬥魚和其他遊戲平台所需帶寬的量小一些。這種情況下,flash有先天優勢。它最主要的優點是方便,主播不需要進行額外的學習,直接上手,瀏覽器支持flash打開頁面就能用。不過這也帶來了另外的幾個問題:
1)flash自身的缺陷——對系統資源的消耗較大
2)flash不支持AAC編碼,只有Nelly Moser 和Speex 兩種音頻編碼格式,所以在同等的音視頻質量下,推流所需的帶寬較高。
針對這些問題,么么直播做了如下一些嘗試:
1、開發桌面端插件。簡單地說,就是開發一個第三方插件,主播開播的時候不走flash的推流流程,而是直接通過插件進行推流。這在一定程度上能解決上面的問題,但是不同PC的兼容性問題、開發成本以及主播的主觀能動性都使這一方案沒有繼續使用。
2、開發單獨的推流軟體。這點很多平台都有在做。獨立的推流軟體穩定性高、性能好,並且可定製化程度也比較好,但是需要的研發資源和人力比較高,受制於當時團隊內部沒有這麼多的人力開發,最終否掉了這個方案。
3、服務端轉碼。在服務端對現有的流進行轉碼,這個其實已經應用得比較廣泛了。最常見的就是將一路高清或者大碼率的流進行轉碼,然後拆分出幾路低清的流,上來的是非AAC的流,通過轉碼最終下行拉流的時候拉取的是AAC流。目前我們也是使用服務端轉碼的解決方案。
Web端拉流
H5上使用的是hls進行拉流,通過轉碼就能夠做到。由於hls的特性,需要切片,所以延遲相對高。
pc端主要是使用rtmp和flv兩種流格式,么么直播平台rtmp使用flash進行播放,flv使用js進行播放。
使用flash播放rtmp的流時,涉及到視頻的秒開時間、flash載入速度兩大性能指標。么么直播首先通過精簡播放器的體積,使其從原來的600多K減小到現在的19K;然後在前端頁面上採取分塊載入的策略,優先載入和播放相關的代碼或者文件。進行了這兩方面的處理後,視頻的秒開時間從原先的3-4秒降到了2秒內。
flv使用的是純前端js播放,通過使用最新的Media Source ExtensionsAPI,可以把flv的視頻流通過前端轉碼,直接在頁面上通過video標籤進行播放,使其無需flash。
rtmp跟flv流的性能相當,由於flv捨棄了flash,整體CPU消耗比原先降低了5%—10%左右,所以使用flv整體性能提升是較大的。並且,相對小的性能消耗可以得到和flash一樣的直播播放體驗。
關於即構ZEGO
即構科技於2015年由QQ前總經理林友堯創立,A輪獲得IDG投資,核心團隊來自騰訊QQ,匯聚了來自YY和華為等廠商的頂尖語音視頻人才。即構ZEGO致力於提供全球最清晰最穩定的實時語音視頻雲服務,助力企業業務創新,改變用戶線上溝通方式。即構ZEGO深耕視頻直播、視頻社交、遊戲語音、線上抓娃娃和在線教育等領域,贏得了映客、花椒直播、一直播、喜馬拉雅FM、陌陌遊戲、自由之戰2、和好未來等頂級廠商託付和信賴。
推薦閱讀:
※毛豆故事 | 我們為誰做產品,做什麼樣的產品?
※京廣華夏簡介
※怎樣可以延長投影機的壽命?
※視頻技術總覽
TAG:音視頻 |