H264關於RTP協議的實現

2021-03-03 23:52:30 字數 3717 閱讀 6509

2010-07-22 13:35

完整的c/s架構的基於rtp/rtcp的h.264**傳輸方案。此方案中,在伺服器端和客戶端分別進行了功能模組設計。伺服器端:

rtp封裝模組主要是對h.264碼流進行打包封裝;rtcp分析模組負責產牛和傳送rtcp包並分析接收到的rtcp包;qos反饋控制模組則根據rr報文反饋資訊動態的對傳送速率進行調整;傳送緩衝模組則設定埠傳送rtp、rtcp包。客戶端:rtp 模組對接收到的rtp包進行解析判斷;rtcp模組根據sr報文統計關鍵資訊,產牛並傳送rr包。

然後,在vc++6.0下用socket程式設計,完成基於rtp/udp/ip的h.264**傳輸,並在區域網內執行較好。

基於rtp/udp/lp的h.264**傳輸結構設計

對於h.264**的實時傳輸應用來說,tcp的重傳機制引入的時延和抖動是無法容忍的,因此我們採用udp傳輸協議。但是udp協議本身是面向無連線的,不能提供質量保證。而基於udp之上的高層協議rtp/rtcp可以一起提供流量控制和擁塞控**務。

圖給出了基於rtp/udp/ip的h.264**傳輸的框架。

h.264**流的rtp封裝策略

從圖4—1可以看出,h.264**資料首先經rtp進行封裝,打包成適合網路傳輸的資料報才能進行傳輸。所以,如何設計合適的rtp封裝策略對h.264**資料進行封裝是十分重要的。一般來說,在h.264中,rtp封裝應該遵循幾個設計原則:

1、較低的開銷,因此mtu的尺寸應該限制在100—64k位元組範圍內。

2、易於區分分組的重要性,而不必對分組內的資料解碼。

3、應能檢測到資料的型別,而不需解碼整個資料流,並能根據編碼流之間的相關性丟棄無用資料,如閘道器應能檢測a型分割的丟失,並能丟棄相應的b型和c型分割。

4、應支援將乙個nalu拆分為若干個rtp包:不同大小的輸入**決定了nalu的長度可能會大於mtu,只有拆分後才會避免ip層在傳輸時出現分片。

5、支援將多個nalu匯集在乙個rtp分組中,即在乙個rtp包中傳輸超過乙個nalu,當多個**的編碼輸出小於m1iu時就考慮此模式,以提高網路傳輸效率。

rtp載荷封裝設計

本文的網路傳輸是基於ip協議,所以最大傳輸單元(mtu)最大為節,在使用ip/udp/rtp的協議層次結構的時候,這其中包括至少20位元組的ip頭,8位元組的udp頭,以及12位元組的rtp頭。這樣,頭資訊至少要占用40個位元組,那麼rtp 載荷的最大尺寸為節。

一方面,如果每個ip分組都填滿節,那麼協議頭的開銷為2.7%,如果rtp載荷的長度為節,協議頭的開銷仍達到5.3%,而假設rtp載荷的長度不到40位元組,那麼將有50%的開銷用於頭部,這將對網路造成嚴重資源浪費。另一方面,如果將要封裝進rtp載荷的資料大於節,並且我們沒有在應用層資料裝載迸rtp包之前進行載荷分割,將會產生大於mtu的包。在ip層其將會被分割成幾個小於mtu尺寸的包,這樣將會無法檢測資料是否丟失。

因為ip和udp協議都沒有提供分組到達的檢測,如果分割後第乙個包成功接收而後續的包丟失,由於只有第乙個包中包含有完整的rtp頭資訊,而rtp頭中沒有關於載荷長度的標識,因此判斷不出該rtp包是否有分割丟失,只能認為完整的接收了。並且在ip層的分割無法在應用層實現保護從而降低了非平等包含方案的效果。由於udp資料分組小於64k位元組,而且乙個片的長度對某些應用場合來說有點太小,所以應用層的打包也是rtp打包機制的乙個必要部分。

最新的rfc3984標準中提供了針對h.246**流的rtp負載格式,主要有三種:

單個nal單元分組、聚合分組、片分組。

nal單元單一打包

將乙個nal單元封裝進乙個包中,也就是說rtp負載中只包含乙個nal單元,nal 頭部兼作rtp頭部。rtp頭部型別即nal單元型別1-23,如下圖所示:

nal單元的重組

此分組型別用於將多個nal單元聚合在乙個rtp分組中。一些h.264的nal 單元的大小,如sei nal單元、引數集等都非常小,有些只有幾個位元組,因此

應該把它們組合到乙個rtp包中,將會有利於減小頭標(rtp/udp/ip)的開銷。目前存在著兩種型別聚合分組:

nal單元的分割

將乙個nal單元分割,使用多個rtp分組進行傳輸。共有兩個型別fu—a和fu—b,單元型別中分別為28和29。根據ip層mtu的大小,對大尺寸的nalu 必須要進行分割,可以在分別在兩個層次上進行分割:

1)**編碼層vcl上的分割

為了適應網路mtu的尺寸,可以使用編碼器來選擇編碼slice nalu的大小,從而使其提供較好的效能。一般是對編碼slice的大小進行調整,使其小於節,以免ip層的分割。

2)網路提取層nal上的分割

在網路提取層上對nalu的分割主要是採用分片單元方案,h.264標準中提出了分割機制,可以使nal單元的尺寸小於節。注意:此方式是針對同乙個nal單元進行分割的,不適用於聚合分組。

乙個nal單元採用分割分組後,每個rtp分組序列號依次遞增l,rtp時間戳相同且惟一。nal單元的分割是rtp打包機制的乙個重要環節,總結其分割機制主要有如下幾個特點:

①分割nalu時,是以rtp次序號公升序進行傳輸。在序列號不迴圈的前提下,屬於前一幀影象的所有影象片包以及a/b/c資料分割包的序列號要小於後幀影象中的影象片及資料分割包的序列號。

②乙個符號機制來標記乙個分割的nalu是第乙個還是最後乙個nal單元。

3.存在另外乙個符號機制用來檢測是否有丟失的分塊。

④輔助增強資訊包和頭資訊包可以任意時間傳送。

⑤同一幀影象中的影象片可以以任意順序傳送,但是對於低時延要求的網路系統,最好是以他們原始的編碼順序來傳送。

1)單一時間聚合分組(stap):包括單一時間聚合分組a(stap—a)和單一時間聚合分組b(stap—b),按時間戳進行組合,他們的nal單元具有相同的時間戳,一般用於低延遲環境。stap—astap—b的單元型別分別為24和25。

2)多時間聚合分組(mtap):包括16位元偏移多時間聚合分組(mtapl6)和24

位元偏移多時間聚合分組(mtap24)不同時間戳也可以組合,一般用於高延遲

的網路環境,比如流**應用.它的打包方案相對複雜,但是大大增強了基於流**的h.264的效能。mtapl6 mtap24的單元型別分別為26和27。rtp包的封裝流程設計

根據h.264nal單元的分割重組的性質以及rtp打包規則,本文實行的對rtp 打包的設計如下:

1、若接收到的nal單元小於max—size(此時max-size為設定的最大傳輸單元),則對它進行單一打包,也就是將此nal單元直接放進rtp包的載荷部分,生成乙個rtp包。

2、若接收到的nal單元大於max—size位元組,則對它進行分割,然後對分割後的nal單元進行步驟1方式打包。分割方案如下:

其中nsize是分割前的nal單元大小,n是分割後nal單元的大小。k分割後的單元數。分割後最後乙個單元的大小可能會小於n,這時必須使用rtp載荷填充是其同前面的分塊大小相同,此時rtp頭中的填充標識位值為1。

3、對sei,引數集等小nal單元重組,將它們合併到乙個rtp包中。雖然步驟3中的重組方案可以減小ip/udp/rtp頭部開銷,但是對於包丟失率比較高的網路環境,這意味著乙個rtp包的丟失可能會導致多片的丟失,往往乙個片中就有乙個p影象,解碼後的**質量必然會嚴重下降。因此,在丟失率的網路中可以採用nal單元的重組方案,而在高丟失率的網路環境中採用nal單元重組時要進行有效的差錯控制.在本文中不使用重組方案。

rtp/rtcp包的封裝實現

rtp包封裝設計

rtcp包的封裝設計

rtcp報文封裝在udp資料報中進行傳輸,傳送時使用比它所屬的rtp 流的埠號大1的協議號(rtp使用偶數號,rtcp使用奇數號)。以下是rtcp 頭部資料結構:

h264實時編碼及nalu,rtp傳輸(zz)

2010-07-25 11:46

關於多功能垃圾桶的設計r

附表一湖北民族學院 大學生創新專案申請書 專案名稱多功能垃圾桶的設計 申請人李傳海 所在院部 理學院創新實踐基地專業機械電子工程 聯絡 159 指導教師 呂俊職稱助教 187 申報日期 2012 年 3 月 23 日 湖北民族學院教務處制 填表說明 一 填寫立項申請書前,請先諮詢指導教師或有關專業教...

關於「一類居住用地」 R1 和「二類居住用地」 R2 的說明

關於 一類居住用地 r1 和 二類居住用地 r2 的說明 1 關於 一類居住用地 r1 和 二類居住用地 r2 的說明 一類居住用地 和 二類居住用地 主要是城市居民住宅用地,屬於國有土地,由城市居民區的業主共有居住區的土地使用權。從住宅的建築形式區分,現在建設的城市居民住宅又包括獨立式住宅和普通單...

民生銀行關於刊發H股網上預覽集的公告

簡稱 簡稱 民生銀行民生銀行 600016600016編號編號編號 臨20092009 046046 中國民生銀行股份 中國民生銀行股份 關於刊發h 股網上預覽資料集的公告股網上預覽資料集的公告 本公司董事會及全體董事保證本公告內容不存在任何虛假記載 誤導性陳述或者重大遺漏,並對其內容的真實性 準確...