移動端直播應用的開發流程

移動端直播應用的開發流程

Part 1. 推流端

推流,就是將採集到的音頻,視頻數據經過流媒體協議發送到流媒體服務器。git

1、選擇流媒體協議

如今直播應用,採用RTMP協議居多,也有部分使用HLS協議。github

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

採用HLS協議,由於涉及到切片,延時會比較大,須要瞭解TS流。框架

2、採集音視頻數據

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

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

3、硬編碼,軟編碼音視頻數據

軟編碼就是利用CPU資源來壓縮音視頻數據,硬編碼與之相反。spa

軟編碼的話,如今普遍採用FFmpeg庫結合編碼庫來實現,FFmpeg+X624來編碼視頻數據YUV/RGB輸出H264數據,
FFmpeg+fdk_aac來編碼音頻數據PCM輸出AAC數據。視頻

4、根據所選流媒體協議封包音視頻數據

將音頻,視頻打包成packet。資源

5、與服務器交互發送封包數據

根據所選流媒體協議,發送相應指令鏈接服務器,鏈接服務器成功後,就能夠發送packet數據了。開發

Part 2. 拉流端

拉流,就是從流媒體服務器獲取音頻,視頻數據。

1、解析協議

播放器端根據URL解析所用的流媒體協議(RTMP,HLS)。

2、解封裝

解封裝,就是demux的過程,從容器格式(FLV,TS)中,分離出音視頻數據。

3、解碼

解碼,就是把獲取到的數據解壓縮,恢復成原始數據。解碼就是將H264變成YUV,AAC變成PCM。

解碼能夠使用軟解碼,硬解碼。

軟解碼就是利用CPU資源去解壓縮數據,採用的方式是FFmpeg解碼。

硬解碼,對於iOS平臺來講,能夠使用VideoToolbox.Framework(該框架只能在iOS 8.0及以上系統使用)
硬解碼視頻數據。Android平臺上,能夠使用MediaCodec來硬解碼視頻數據。

4、渲染數據

採用OpenGL渲染YUV數據,呈現視頻畫面。將PCM送入設備的硬件資源播放,產生聲音。

iOS播放流式音頻,使用Audio Queue 的方式,即,利用AudioToolbox.Framework 框架。

相關文章
相關標籤/搜索