日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

视频直播技术之iOS端推流

發布時間:2025/3/8 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 视频直播技术之iOS端推流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

相關閱讀推薦

視頻直播:Windows中各類畫面源的截取和合成方法總結》

《視頻直播關鍵技術:流暢、擁塞和延時追趕》

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

?

直播架構

想必了解過直播的人都清楚直播主要分為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+服務器交互)、視頻融合模塊(視頻采集+視頻前處理)、音頻融合模塊(音頻采集+音頻前處理)、基礎服務模塊、音視頻編碼模塊、網絡發送模塊。

    線程模型

    推流SDK總共含有10個線程。視頻包含AVCaptureSession的原始采集線程、前處理線程、硬件編碼線程、數據流向定義的采集線程、編碼線程、發送線程。音頻包含AudioUnit包含的原始采集線程、數據流向定義的采集線程、編碼線程、發送線程。在數據流向定義的采集線程、編碼線程、發送線程之間會創建2個bufferQueue,用于緩存音視頻數據。采集編碼隊列可以有效的控制編碼碼率,編碼發送隊列可以有效自適應網絡推流。

    QoS&跳幀

    下圖是直播的主要流程,用戶初始化SDK,創建線程,開始直播,音視頻數據采集,編碼,發送。在發送線程下,音視頻數據發送,QoS開啟,根據網絡實時評估帶寬,調整幀率,碼率控制編碼器參數,同時觸發跳幀,調整分辨率控制采集分辨率參數。用戶停止直播,反初始化SDK,銷毀線程。QoS&跳幀可以有效的解決用戶在網絡不好的情況下,直播卡頓的問題。在不同的碼率和分辨率情況下,都能夠做到讓用戶流暢地觀看視頻直播。

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

    另外,想要關于視頻直播技術的文章,可以移步網易云信博客

    ?

    總結

    以上是生活随笔為你收集整理的视频直播技术之iOS端推流的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。