音視頻採集封裝到直播推流的簡單原理

那麼今天要分享的主要是兩個內容,第一個是對硬件採集的資源怎麼做一個打包封裝,另一個是處理完成的資源如何直播,作爲在日常業務測試線的一個業務邏輯擴展,純粹個人理解,所以不會有一些深入的講解,畢竟網上的文章夠多了。

直接用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都支持的,兩者相差不大。

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