視頻編碼----從攝像頭到客戶端


2019.12.19  15:14    開個大坑  從入門到放棄的那種  記錄好時間  看看多久能填完


先簡單瞭解一些概念

H.264:  當今流行的一種視頻編碼/壓縮方式

GB28181:  國家標準協議  《anq視頻監控聯網系統信息傳輸、交換、控制技術要求》

RTMP:(Real Time Messaging Protocol)實時消息傳輸協議,工作在TCP之上

SIP:(Session Initiation Protocol)會話初始化協議,用於信令交流

RTP:(Real-time Transport Protocol)實時傳輸協議,通常使用UDP來傳送流數據

RTCP:(Real-time Transport Control Protocol)實時傳輸控制協議,RTP的好兄弟,用於保證RTP的可靠性

RFC4571:GB28181規定的TCP上的流傳輸協議,是對RTP多一層封裝


先說說音視頻流傳輸的主要流程:

攝像頭/麥克風→(壓縮)→(組格式)→(組協議)→網絡傳輸→(解協議)→(解格式)→(解壓)→播放出來

必須壓縮,不然會很大,很難傳輸。若有 1080P 的一個直播,若不壓縮,若每秒60幀,則:

1920*1080(個像素點)*3(每個像素點3B)*60(每秒60幀)=364500KB≈355MB

龜龜,我 可能 不配看這個直播。那麼壓縮後呢?可能2M/秒的網速就能看這個直播了。詳情以後再談,現在先有個概念。

H.264 也就是常說的裸流 是(壓縮)這步的產物,雖然以後會被H.265(HEVC)取代,但現在依舊用途最廣。音頻同理,壓縮後叫AAC,MP3等。

有了這倆壓縮包就得想辦法把他們按照某種規定組合在一起。然後就進行(組格式),產物是FLV,MP4,TS,PS等等的音視頻格式。至於爲什麼還要組格式、有什麼好處,後面看看這些格式裏面都包含啥字段、都有啥功能就能明白了。

有了音視頻包了,那就要考慮咋傳輸了,那麼就該“組協議”了。例如GB28181,它裏面規定了很多東西,也是我國現在通用協議之一。比如我手上這個  GB/T 28181-2016 規定了會話通道(傳控制信令等,例如開始播放、暫停、刷新之類指令)和流媒體通道(就是傳視音頻流的)這兩條路。以及它們要怎樣的協議去傳,例如會話的SIP,媒體流的RTP等(這裏RTP可以理解成一個載體,他負載着各種各樣格式的流,如MP4、PS甚至是H.264等)。還規定了很多很多東西,想基於國標開發的同學,這個協議必須看(兩百多頁,很重要)。

至此,就可以將直播之類的流傳向客戶端了,客戶端反着操作一番就能播放了。這裏要說下:普遍的,我們從攝像頭得到的流都是經過壓縮的,如H.264,AAC。視頻壓縮這一步是最難的,畢竟壓縮算法很難,這步大多被諸如海康、大華這種“平臺”所完成。他們也都有相應的SDK,可以直接取到某個設備的流。音頻壓縮相對簡單一點,而且貌似到達了瓶頸?相關設備的廠家也會有相應的SDK供你使用。然後說下“播放”這一步,很多播放器自己就能支持很多種格式,如FLV,MP4等等,因此複雜的解碼這塊我們也可以不用做,像bilibili的開源播放器之類,或是FFmpeg等。除非你想自己開發一個播放器,甚至自己去編碼一個自己的壓縮格式(例如YY123之類,貌似不大可能,只能YY下,笑~)。所以,說了這麼多,我們需要做的事情其實並沒那麼複雜,核心便是取流發流、信令交互,流從別人平臺取,往別人開發的播放器發。聽着很簡單不是嗎?(開發者的demo永遠都很簡單,自己用起來永遠都很難:<    自己的程序的demo、開發文檔也都很簡單不是嗎:>    )

 

H.264 (簡單瞭解)

關鍵字:碼率、幀率、分辨率; I幀、P幀、B幀; IDR幀、GOP; NALU;

視頻壓縮往往都是想要使用更低的數據量來達到更高的質量。

其中,數據量指的就是碼率,碼率指單位時間內碼流的數據量大小,通常單位爲 kbps 千位每秒(注意不是字節)。幀率指單位時間內畫面的個數,通常單位爲 Hz 赫茲。分辨率指顯示的每張圖的像素個數,通常有 1920x1080 (1080p) 等。幀率和分辨率影響着視頻的質量,碼率影響着視頻的大小。三者可以理解成:幀率x分辨率→碼率。

爲了更高的壓縮比,視頻壓縮一般都會採用幀間壓縮。

當你把一個視頻以幀爲單位來觀看的時候,你會發現在絕大多數情況下,當前幀與上一幀的變化並不大,很多地方都是相同的畫面,那麼我們就沒必要對這些相同的畫面再編碼一次,使用上一幀的碼不就好了嗎?既然如此,也沒必要對“運動”的圖像再次編碼了,只需要記住它的運動矢量就行了。這就是幀間壓縮的思路,記錄差值消除冗餘。

這時候就有問題了,如果前後兩幀差異巨大,例如場景切換或一些動作鏡頭,僅記錄差異必然不可取。因此存在I幀,

更詳細的請看這裏《入門理解H264編碼》  《H264視頻壓縮算法》(原文沒圖片)


2020.1.21  先到這吧,往後慢慢更,格式啥的都沒搞,湊活着看吧

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