iOS直播APP流程和相關技術介紹

直播APP流程技術

在這裏插入圖片描述
把主播錄製的視頻,推送到服務器,在由服務器分發給觀衆觀看。

推流端(採集、美顏處理、編碼、推流)、服務端處理(轉碼、錄製、截圖、鑑黃)、播放器(拉流、解碼、渲染)、互動系統(聊天室、禮物系統、贊)

1.音視頻採集

在這裏插入圖片描述
AVFoundation:是用來播放和創建實時的視聽媒體數據的框架,同時提供Objective-C接口來操作這些視聽數據,比如編輯,旋轉,重編碼

CCD:圖像傳感器: 用於圖像採集和處理的過程,把圖像轉換成電信號。

拾音器:聲音傳感器: 用於聲音採集和處理的過程,把聲音轉換成電信號。

音頻採樣數據:一般都是PCM格式

視頻採樣數據: 一般都是YUV,或RGB格式,採集到的原始音視頻的體積是非常大的,需要經過壓縮技術處理來提高傳輸效率

2.視頻過濾

在這裏插入圖片描述
metal是iOS 的底層框架。GPUImage支持100多種濾鏡,如果項目需要的濾鏡,它沒有。第三方框架不支持的時候,就需要自研或者基於GPUImage去自定義。
視頻處理原理:因爲視頻最終也是通過GPU,一幀一幀渲染到屏幕上的,所以我們可以利用OpenGL ES,對視頻幀進行各種加工,從而視頻各種不同的效果,就好像一個水龍頭流出的水,經過若干節管道,然後流向不同的目標。

現在的各種美顏和視頻添加特效的app都是利用GPUImage這個框架實現的。
GPU主要是做一些複雜的大量的並行運算。
CPU主要是在邏輯運算上佔優勢。
在這裏插入圖片描述
視頻處理的框架

GPUImage : GPUImage是一個基於OpenGL ES的一個強大的圖像/視頻處理框架,封裝好了各種濾鏡同時也可以編寫自定義的濾鏡,其本身內置了多達120多種常見的濾鏡效果。

OpenGL:OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言、跨平臺的編程接口的規格,它用於三維圖象(二維的亦可)。OpenGL是個專業的圖形程序接口,是一個功能強大,調用方便的底層圖形庫。

OpenGL ES:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式設備而設計。

openGL主要做圖像處理。openCV主要做圖像識別。

3.音視頻編碼

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
直播APP(實時播放)是不能用到B幀,但是小視頻(下載完成後播放)的開發可以用到B幀,
硬編碼:最主流的方式,硬件加速器。比如玩遊戲特別需要好的顯卡,顯卡又分爲獨立顯卡和集成顯卡->GPU芯片
視頻壓縮編碼標準:
對視頻進行壓縮(視頻編碼)或者解壓縮(視頻解碼)的編碼技術,比如MPEG,H.264,這些視頻編碼技術是壓縮編碼視頻的

MPEG:一種視頻壓縮方式,它採用了幀間壓縮,僅存儲連續幀之間有差別的地方 ,從而達到較大的壓縮比

H.264/AVC:一種視頻壓縮方式,採用事先預測和與MPEG中的P-B幀一樣的幀預測方法壓縮,它可以根據需要產生適合網絡情況傳輸的視頻流,還有更高的壓縮比,有更好的圖象質量

H.265/HEVC:一種視頻壓縮方式,基於H.264,保留原來的某些技術,同時對一些相關的技術加以改進,以改善碼流、編碼質量、延時和算法複雜度之間的關係,達到最優化設置。

音頻編碼技術
AAC,mp3:這些屬於音頻編碼技術,壓縮音頻用

碼率控制

多碼率:觀衆所處的網絡情況是非常複雜的,有可能是WiFi,有可能4G、3G、甚至2G,那麼怎麼滿足多方需求呢?多搞幾條線路,根據當前網絡環境自定義碼率。

視頻封裝格式

TS : 一種流媒體封裝格式,流媒體封裝有一個好處,就是不需要加載索引再播放,大大減少了首次載入的延遲,如果片子比較長,mp4文件的索引相當大,影響用戶體驗

FLV: 一種流媒體封裝格式,由於它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成爲可能,因此FLV格式成爲了當今主流視頻格式

4.音視頻推流

在這裏插入圖片描述
推流,就是將採集到的音頻,視頻數據通過流媒體協議發送到流媒體服務器。

選擇流媒體協議

現在直播應用,採用RTMP協議居多,也有部分使用HLS協議。

採用RTMP協議,就要看下它與流媒體服務器交互的過程,RTMP協議的默認端口是1935,採用TCP協議。並且需要了解FLV的封裝格式。

採用HLS協議,因爲涉及到切片,延時會比較大,需要了解TS流。

採集音視頻數據

做直播,數據的來源不可缺少,就是採集攝像頭,麥克風的數據。

iOS平臺上採集音視頻數據,需要使用AVFoundation.Framework框架,從captureSession會話的回調中獲取音頻,視頻數據。

5.流媒體處理數據

在這裏插入圖片描述
常用服務器

SRS:一款國人開發的優秀開源流媒體服務器系統

BMS:也是一款流媒體服務器系統,但不開源,是SRS的商業版,比SRS功能更多

nginx:免費開源web服務器,常用來配置流媒體服務器

6.拉流

在這裏插入圖片描述
直播協議選擇:

即時性要求較高或有互動需求的可以採用RTMP,RTSP

對於有回放或跨平臺需求的,推薦使用HLS

HLS:由Apple公司定義的用於實時流傳輸的協議,HLS基於HTTP協議實現,傳輸內容包括兩部分,一是M3U8描述文件,二是TS媒體文件。可實現流媒體的直播和點播,主要應用在iOS系統

7.音視頻解碼

在這裏插入圖片描述
使用相關硬件或軟件對接收到的編碼後的音視頻數據進行解碼,得到可以直接顯示的圖像/聲音

涉及技術或協議:

一般對應的編碼器都會帶有相應的解碼器,也有一些第三方解碼插件等

8.播放

在這裏插入圖片描述
ijkplayer:一個基於FFmpeg的開源Android/iOS視頻播放器

API易於集成;

編譯配置可裁剪,方便控制安裝包大小;

支持硬件加速解碼,更加省電

簡單易用,指定拉流URL,自動解碼播放.

9.聊天互動

在這裏插入圖片描述
IM:(InstantMessaging)即時通訊:是一個實時通信系統,允許兩人或多人使用網絡實時的傳遞文字消息、文件、語音與視頻交流.

IM在直播系統中的主要作用是實現觀衆與主播、觀衆與觀衆之間的文字互動.

第三方SDK

騰訊雲:騰訊提供的即時通訊SDK,可作爲直播的聊天室

融雲:一個比較常用的即時通訊SDK,可作爲直播的聊天室

流媒體知識核心概念

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章