音視訊採集封裝到直播推流的簡單原理
阿新 • • 發佈:2019-01-06
那麼今天要分享的主要是兩個內容,第一個是對硬體採集的資源怎麼做一個打包封裝,另一個是處理完成的資源如何直播,作為在日常業務測試線的一個業務邏輯擴充套件,純粹個人理解,所以不會有一些深入的講解,畢竟網上的文章夠多了。
直接用visio花了一張圖:
一、採集 && 封裝
針對手機外接硬體的一個音視訊採集,採集到的都是原始資料,那麼這些資料經過一系列的處理,封裝成使用者可以直接播放的檔案,比如mp4、mkv等等。
原始視訊的格式一般是YUV和RGB等等,那麼常用的就是yuv420,原始音訊格式一般是PCM、FLTP等(這裡只列出來了專案中用到的兩個),特點就是很大。
壓縮編碼的意思,就是對原始音視訊資源進行壓縮和編碼,涉及到的編碼標準常用的就是h264以及acc。
封裝的意思就是把經過壓縮編碼的音視訊和一些meatadata標籤資訊,一起打包成可供播放的資原始檔,類似mp4這種。
上面這幾部的資訊可以通過ffmpeg -i 你的資源這條命令檢視,比如我隨便找了我電腦上的一個mp4檔案:
可以看到還是比較全的,下面來看看:
Metadata:可以讀到封包的一些資訊、資源建立時間、長度啊等等,如果會安卓開發的話可以發現android提供了一個類MediaMetadataReceiver,專門用來存這些資訊的。
Stream:這個是一些壓縮編碼的資訊了,可以看到音訊是用了acc編碼的,視訊用的是h246編碼的,以及編碼時候的位元速率,解析度這些資訊,嗯,後面還帶有音視訊流的一些metadata資訊。
那麼第一部分就說完了。
二、接下來第二部分,是直播的一個原理。
那麼經過採集封裝後的資源,就需要經過推流到伺服器,然後播放器再去接收伺服器給的地址實現直播播放,這裡要了解的是推流協議和流媒體協議。
推流協議一般都是rtmp,沒什麼說的,然後直播流媒體協議主要是下面4個:
- 列表內容
- RTMP:延遲低,用的最多,是基於tcp的
- HDL(HTTP_FLV):延遲同樣低,用的也挺多,不同rtmp,這貨是基於http的
- HLS:延遲高,因為要分段去下載接收,但是支援h5,易於傳播易於觀看
- RTP:實時傳輸,常用在視訊會議
RTMP和HDL兩個協議至少我們公司是同時RTMP和HDL都支援的,兩者相差不大。