摘要:目前視頻的采集源主要來自攝像頭采集屏幕錄制從視頻文件讀取推流。音視頻處理前處理模塊也是主觀影響主播觀看效果最主要的環節。用戶停止直播,反初始化,銷毀線程。跳幀可以有效的解決用戶在網絡不好的情況下,直播卡頓的問題。
隨著網絡基礎建設的發展和資費的下降,在這個內容消費升級的時代,文字、圖片無法滿足人們對視覺的需求,因此視頻直播應運而生。承載了實時性Real-Time和交互性的直播云服務是直播覆蓋各行各業的新動力。
直播想必了解過直播的人都清楚直播主要分為3部分:推流->流媒體服務器->拉流。
而我們今天需要講的就是推流這部分,它主要包括音視頻采集,音視頻前處理,音視頻編碼,推流和傳輸4個方面。但是由于網絡的復雜性和大數據的統計,推流還需要有全局負載均衡調度 GSLB(Global Server Load Balance),以及實時的統計數據上報服務器,包括提供頻道管理給用戶運營,因此推流 SDK 需要接入 GSLB 中心調度,統計服務器,心跳服務器,用于推流分配到網絡最好的節點,有大數據的統計和分析。
下圖涵蓋了直播相關的所有服務,紅色小標的線條代表指令流向,綠色小標的線條代表數據流向。
直播技術點音視頻采集
采集是所有環節中的第一環,我們使用的系統原生框架 AVFoundation 采集數據。通過 iPhone 攝像頭(AVCaptureSession)采集視頻數據,通過麥克風(AudioUnit)采集音頻數據。目前視頻的采集源主要來自攝像頭采集、屏幕錄制(ReplayKit)、從視頻文件讀取推流。
音視頻都支持參數配置。音頻可以設置采樣率、聲道數、幀大小、音頻碼率、是否使用外部采集、是否使用外部音頻前處理;視頻可以設置幀率、碼率、分辨率、前后攝像頭、攝像頭采集方向、視頻端顯示比例、是否開啟攝像頭閃光燈、是否打開攝像頭響應變焦、是否鏡像前置攝像頭預覽、是否鏡像前置攝像頭編碼、是否打開濾鏡功能、濾鏡類型、是否打開水印支持、是否打開 QoS 功能、是否輸出 RGB 數據、是否使用外部視頻采集。
音視頻處理
前處理模塊也是主觀影響主播觀看效果最主要的環節。目前 iOS 端比較知名的是 GPUImage,提供了豐富的預處理效果,我們也在此基礎上進行了封裝開發。視頻前處理包含濾鏡、美顏、水印、涂鴉等功能,同時在人臉識別和特效方面接入了第三方廠商 FaceU。SDK 內置 4 款濾鏡黑白、自然、粉嫩、懷舊;支持 16:9 裁剪;支持磨皮和美白(高斯模糊加邊緣檢測);支持靜態水印,動態水印,涂鴉等功能。音頻前處理則包括回聲抑制、嘯叫、增益控制等。音視頻都支持外部前處理。
音視頻編碼
編碼最主要的兩個難點是:
處理硬件兼容性問題
在高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+ 服務器交互)、視頻融合模塊(視頻采集+視頻前處理)、音頻融合模塊(音頻采集+音頻前處理)、基礎服務模塊、音視頻編碼模塊、網絡發送模塊。
QoS&跳幀
下圖是直播的主要流程,用戶初始化 SDK,創建線程,開始直播,音視頻數據采集,編碼,發送。在發送線程下,音視頻數據發送,QoS 開啟,根據網絡實時評估帶寬,調整幀率,碼率控制編碼器參數,同時觸發跳幀,調整分辨率控制采集分辨率參數。用戶停止直播,反初始化 SDK,銷毀線程。QoS &跳幀可以有效的解決用戶在網絡不好的情況下,直播卡頓的問題。在不同的碼率和分辨率情況下,都能夠做到讓用戶流暢地觀看視頻直播。
隨著音頻處理和壓縮技術的不斷發展,效果更好、適用范圍更廣、性能更高的算法和新的技術必將不斷涌現,如果你有好的技術或者分享,歡迎關注網易 MC 官方博客以及微信公眾號:**
關注更多技術干貨內容:網易云信博客
歡迎關注網易云信 GitHub
歡迎關注網易云信官網官網微信公眾號:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11049.html
摘要:在這種場景下網易云信可以在接收的終端上通過超分辨率技術,恢復視頻質量,極大地提升了移動端用戶的體驗。云信通過人工智能深度學習將低分辨率視頻重建成高分辨率視頻模糊圖像視頻瞬間變高清,為移動端為用戶帶來極致視頻體驗。 泛娛樂應用成為主流,社交與互動性強是共性,而具備這些特性的產品往往都集中在直播、短視頻、圖片分享社區等社交化娛樂產品,而在這些產品背后的黑科技持續成為關注重點,網易云信在網易...
摘要:線上服務的有效監控和數據收集,一直是后端服務離不開的話題。在這個大數據時代,有了數據卻不做事情,等同于浪費。而南京移動的用戶量較大,也說明南京地區應該增設服務點。 線上服務的有效監控和數據收集,一直是后端服務離不開的話題。直播作為一種經典的分布式系統,監控以及數據收集更是必不可少的工作。如何對海量的服務集群有效的監控和保活,又如何抓取集群中的碎片數據中來優化服務?網易云信音視頻研發工程...
摘要:線上服務的有效監控和數據收集,一直是后端服務離不開的話題。在這個大數據時代,有了數據卻不做事情,等同于浪費。而南京移動的用戶量較大,也說明南京地區應該增設服務點。 線上服務的有效監控和數據收集,一直是后端服務離不開的話題。直播作為一種經典的分布式系統,監控以及數據收集更是必不可少的工作。如何對海量的服務集群有效的監控和保活,又如何抓取集群中的碎片數據中來優化服務?網易云信音視頻研發工程...
閱讀 2288·2023-04-25 14:22
閱讀 3733·2021-11-15 18:12
閱讀 1293·2019-08-30 15:44
閱讀 3215·2019-08-29 15:37
閱讀 638·2019-08-29 13:49
閱讀 3454·2019-08-26 12:11
閱讀 866·2019-08-23 18:28
閱讀 1581·2019-08-23 14:55