ApsaraVideo for Live技術之iOS端推流

來源:互聯網
上載者:User

標籤:相關   推出   ios端   環境   變化   高斯模糊   toolbox   最好   媒體伺服器   

隨著網路基礎建設的發展和資費的下降,在這個內容消費升級的時代,文字、圖片無法滿足人們對視覺的需求,因此ApsaraVideo for Live應運而生。承載了即時性Real-Time和互動性的直播雲端服務是直播覆蓋各行各業的新動力。網易雲信推出一系列文章,對ApsaraVideo for Live技術進行深入講解,本篇文章將向大家介紹iOS端的推流技術。

 

相關閱讀推薦

ApsaraVideo for Live:Windows中各類畫面源的截取和合成方法總結 《ApsaraVideo for Live關鍵技術:流暢、擁塞和延時追趕》

《短視頻技術詳解:Android端的短視頻開發技術》

 

直播架構

想必瞭解過直播的人都清楚直播主要分為3部分:推流->流媒體伺服器->拉流。

而我們今天需要講的就是推流這部分,它主要包括音視頻採集,音視頻前處理,音視頻編碼,推流和傳輸4個方面。但是由於網路的複雜性和大資料的統計,推流還需要有全域負載平衡調度GSLB(Global Server Load Balance),以及即時的統計資料上報伺服器,包括提供頻道管理給使用者運營,因此推流SDK需要接入GSLB中心調度,統計伺服器,心跳伺服器,用於推流分配到網路最好的節點,有大資料的統計和分析。

涵蓋了直播相關的所有服務,紅色小標的線條代表指令流向,綠色小標的線條代表資料流向。

 

直播技術點

音視頻採集

採集是所有環節中的第一環,我們使用的系統原生架構AVFoundation採集資料。通過iPhone網路攝影機(AVCaptureSession)採集視頻資料,通過麥克風(AudioUnit)採集音頻資料。目前視頻的採集源主要來自網路攝影機採集、螢幕錄製(ReplayKit)、從視頻檔案讀取推流。

音視頻都支援參數配置。音頻可以設定採樣率、聲道數、幀大小、音頻碼率、是否使用外部採集、是否使用外部音頻前處理;視頻可以設定幀率、碼率、解析度、前後網路攝影機、網路攝影機採集方向、視頻端顯示比例、是否開啟網路攝影機閃光燈、是否開啟網路攝影機響應變焦、是否鏡像自拍預覽、是否鏡像自拍編碼、是否開啟濾鏡功能、濾鏡類型、是否開啟浮水印支援、是否開啟QoS功能、是否輸出RGB資料、是否使用外部視頻採集。

 

音視頻處理

前處理模組也是主觀影響主播觀看效果最主要的環節。目前iOS端比較知名的是GPUImage,提供了豐富的預先處理效果,我們也在此基礎上進行了封裝開發。視頻前處理包含濾鏡、美顏、浮水印、塗鴉等功能,同時在Face Service和特效方面接入了第三方廠商FaceU。SDK內建4款濾鏡黑白、自然、粉嫩、懷舊;支援16:9裁剪;支援磨皮和美白(高斯模糊加邊緣檢測);支援靜態浮水印,動態浮水印,塗鴉等功能。音頻前處理則包括回聲抑制、嘯叫、增益控制等。音視頻都支援外部前處理。

音視頻編碼

編碼最主要的兩個痛點是:

1 處理硬體相容性問題

2 在高FPS、低bitrate和音質畫質之間找個一個平衡點

由於iOS端硬體相容性比較好,因此可以採用硬編。SDK目前支援軟體編碼openH264,硬體編碼VideoToolbox。而音頻支援軟體編碼FDK-AAC和硬體編碼AudioToolbox。

視頻編碼的核心思想就是去除冗餘資訊:

空間冗餘:映像相鄰像素之間有較強的相關性。

時間冗餘:視頻序列的相鄰映像之間內容相似。

編碼冗餘:不同像素值出現的機率不同。

視覺冗餘:人的視覺系統對某些細節不敏感。

 

音視頻發送

推流SDK使用的流媒體協議是RTMP(RealTime Messaging Protocol)。而音視頻發送最困難的就是針對網路的頻寬評估。由於從直播端到RTMP伺服器的網路情況複雜,尤其是在3G和頻寬較差的Wifi環境下,網路丟包、抖動和延遲經常發生,導致直播推流不暢。RTMP基於TCP進行傳輸,TCP自身實現了網路擁塞下的處理,內部的機制較為複雜,而且對開發人員不可見,開發人員無法根據TCP協議的資訊判斷當時的網路情況,導致發送碼率大於實際網路頻寬,造成比較嚴重的網路擁塞。因此我們自研開發了一款即時根據網路變化的QoS演算法,用於即時調節碼率、幀率、解析度,同時將資料即時上報統計平台。

 

模組設計&執行緒模式

模組設計

鑒於推流的主流程分為上述描述的4個部分:音視頻採集、音視頻前處理、音視頻編碼、音視頻發送。因此將推流SDK進行模組劃分為LSMediacapture層(對外API+伺服器互動)、視頻融合模組(視頻採集+視頻前處理)、音頻融合模組(音頻採集+音頻前處理)、基礎服務模組、音視頻編碼模組、網路發送模組。

執行緒模式

推流SDK總共含有10個線程。視頻包含AVCaptureSession的原始採集線程、前處理線程、硬體編碼線程、資料流向定義的採集線程、編碼線程、發送線程。音頻包含AudioUnit包含的原始採集線程、資料流向定義的採集線程、編碼線程、發送線程。在資料流向定義的採集線程、編碼線程、發送線程之間會建立2個bufferQueue,用於緩衝音視頻資料。採集編碼隊列可以有效控制編碼碼率,編碼發送隊列可以有效自適應網路推流。

QoS&跳幀

是直播的主要流程,使用者初始化SDK,建立線程,開始直播,音視頻資料擷取,編碼,發送。在發送線程下,音視頻資料發送,QoS開啟,根據網路即時評估頻寬,調整幀率,碼率控制編碼器參數,同時觸發跳幀,調整解析度控制採集解析度參數。使用者停止直播,反初始化SDK,銷毀線程。QoS&跳幀可以有效解決使用者在網路不好的情況下,直播卡頓的問題。在不同的碼率和解析度情況下,都能夠做到讓使用者流暢地觀看ApsaraVideo for Live。

以上就是iOS端推流技術的詳細講解。

另外,想要閱讀更多關於ApsaraVideo for Live技術的文章,可以移步網易雲信部落格。

 

 

網易雲信(NeteaseYunXin)是集網易18年IM以及音視頻技術打造的PaaS服務供應項目,來自網易核心技術架構的通訊與視頻雲端服務,穩定易用且功能全面,致力於提供全球領先的技術能力和情境化解決方案。開發人員通過整合用戶端SDK和雲端OPEN API,即可快速實現包含IM、音視訊通話、直播、點播、互動白板、簡訊等功能。

 

ApsaraVideo for Live技術之iOS端推流

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.