基于IP的H.264關鍵技術

一、 引言
H.264是ITU-T最新的視頻編碼標準,被稱作ISO/IEC14496-10或MPEG-4 AVC,是由運動圖像專家組(MPEG)和ITU的視頻編碼專家組共同開發的新產品。H.264分兩層結構,包括視頻編碼層和網絡適配層。視頻編碼層處理的是塊、宏塊和片的數據,并盡量做到與網絡層獨立,這是視頻編碼的核心,其中包含許多實現錯誤恢復的工具;網絡適配層處理的是片結構以上的數據,使H.264能夠在基于RTP/UDP/IP、H.323/M、MPEG-2傳輸和H.320協議的網絡中使用。
二、 IP網絡對視頻壓縮的限制
  1. H.264的應用場合?? < type="text/javascript"> < type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">?
  在討論基于IP的H.264之前,有必要先闡述一下H.264與IP網絡有關的應用場合及其對傳輸和編解碼器的要求。下面介紹對話應用、下載服務和流媒體應用三種場合。
  對話應用,比如像視頻電話和視頻會議,有嚴格的時延限制,要求端到端時延小于1s,最好小于100ms。編解碼器的參數能實時調整,錯誤恢復機制要根據實際網絡變化而改變。編解碼的復雜度不能很高,比如雙向預測的模式就不能被采用。
  下載服務,可使用可靠的傳輸協議如FTP和HTTP將數據全部傳輸。由于這種應用的非實時性,編碼器可以通過優化進行高效編碼,而且對時延和錯誤恢復機制沒有要求。
  流媒體服務應用,對時延要求介于上面兩者之間,初始化時延是10s以內。與實時編碼相比對時延要求降低,編碼器可以進行優化實現高效編碼(比如雙向預測)。然而通常流媒體服務使用不可靠的傳輸協議,所以編碼時要進行差錯控制并進行信道糾錯編碼。
  本文主要討論對話應用和流媒體應用,這兩種應用基于IP網絡。IP網絡又可分為三種類型:不可控IP網絡(如Internet)、可控IP網絡(廣域網)和無線IP網絡(如3G網絡)。這三種IP網絡有不同的最大傳輸單元尺寸(MTUsize)、比特出錯概率和TCP使用標記。最大傳輸單元尺寸是網絡層最大的分組長度,H.264編碼時要使片的長度小于MTU尺寸,這樣可避免在網絡層再進行一次數據的分割。兩個IP節點之間的MTU尺寸是動態變化的,通常假定有線IP網絡的MTU尺寸是1.5千字節,無線網絡的MTU尺寸是100字節。可見要適用于無線網絡的H.264必須采用數據分割技術使得片的長度小于MTU尺寸。TCP傳輸控制協議能夠解決網絡擁塞引起的分組丟失問題,而在無線網絡中,分組丟失是由于鏈路層錯誤引起的,TCP并非很好的解決辦法,要采用差錯控制協議。
  2. H.264使用的協議環境
  對話應用和流媒體應用使用同一協議組,下面進行討論。
  網絡層協議:使用IP(網際協議)。每個IP分組單獨從發方出發,經過一系列的路由器到達收方。IP將大于MTU尺寸的分組進行數據分割、重組。每個分組的傳輸時間都有所不同。IP頭20個字節由校驗碼來保證,但數據沒有保護。IP分組最大值為64千字節,但由于MTU尺寸的限制,一般沒有這么大。
  傳輸層協議:主要有兩個協議,TCP和UDP。TCP提供面向字節的可靠傳輸服務,以重傳和超時等機制作為差錯控制的基礎。由于對時延的不可預測,并不適用于實時通信傳輸。UDP提供不可靠的數據報傳輸業務。UDP頭包含的校驗數(8字節)可以發現和去掉含有比特錯誤的分組。UDP允許分組傳輸過程中出現丟失、復制、改序等。使用UDP協議時,高層必須使用錯誤恢復協議。
  應用層傳輸協議:使用RTP(實時傳輸協議)。該協議和IP/UDP結合使用,是面向會話的協議。每個RTP分組包含RTP頭標,載荷頭標(可選)和載荷本身。RTP頭標的內容見圖1,基本選項占用12字節,標記位標記有同一時間戳的一組分組的結束。RTP協議使發送方將數據分為大小合理的分組,并將解碼方觀察到的網絡特征反饋給發送方,使發送方可以動態調整比特率和抗誤碼機制。RTP分組和RTP載荷規范在第四部分討論。
應用層控制協議:有H.245協議、SIP和SDP,或RTSP。這些協議可以實現流媒體的控制,收發方的協商和控制動態會話層。
三、H.264的錯誤恢復工具
  錯誤恢復的工具隨著視頻壓縮編碼技術的提高在不斷改進。舊的標準(H.261、H263、MPEG-2的第二部分)中,使用片和宏塊組的劃分、幀內編碼宏塊、幀內編碼片和幀內編碼圖像來防止錯誤的擴散。之后改進的標準(H.263+、MPEG-4)中,使用多幀參考和數據分割技術來恢復錯誤。H.264標準在以前的基礎上提出了三種關鍵技術:(1)參數集合,(2) 靈活的宏塊次序(FMO),(3)冗余片(RS)來進行錯誤的恢復。
  1. 幀內編碼
  H.264中幀內編碼的技術和以前標準一樣,值得注意的是:
  (1)H.264中的幀內預測編碼宏塊的參考宏塊可以是幀間編碼宏塊,幀內預測宏塊并不像H.263中的幀內編碼一樣,而采用預測的幀內編碼比非預測的幀內編碼有更好的編碼效率,但減少了幀內編碼的重同步性能,可以通過設置限制幀內預測標記來恢復這一性能。
  (2)只包含幀內宏塊的片有兩種,一種是幀內片(Islice),一種是立即刷新片(IDRslice),立即刷新片必存在于立即刷新圖像(IDRpicture)中。與短期參考圖像相比,立即刷新圖像有更強壯的重同步性能。
  在無線IP網絡環境下,為了提高幀內圖像的重同步性能,要采用率失真優化編碼和設置限制幀內預測標記。
  2. 圖像的分割
  H.264支持一幅圖像劃分成片,片中宏塊的數目是任意的。在非FMO模式下,片中的宏塊次序是同光柵掃描順序,FMO模式下比較特殊。片的劃分可以適配不同的MTU尺寸,也可以用來交織分組打包。
  3. 參考圖像選擇
  參考圖像數據選擇,不論是基于宏塊、基于片,還是基于幀,都是錯誤恢復的有效工具。對于有反饋的系統,編碼器獲得傳輸中丟失圖像區域的信息后,參考圖像可以選擇解碼已經正確接收的圖像對應的原圖像區域作參考。在沒有反饋的系統中,將會使用冗余的編碼來增加錯誤恢復性能。
  4. 數據的劃分
  通常情況下,一個宏塊的數據是存放在一起而組成片的,數據劃分使得一個片中的宏塊數據重新組合,把宏塊語義相關的數據組成一個劃分,由劃分來組裝片。在H.264中有三種不同的數據劃分。 (1)頭信息劃分:包含片中宏塊的類型,量化參數和運動矢量,是片中最重要的信息。 (2)幀內信息劃分:包含幀內CBPs和幀內系數,幀內信息可以阻止錯誤的蔓延。 (3)幀間信息劃分:包含幀間CBPs和幀間系數,通常比前兩個劃分要大得多。
  幀內信息劃分結合頭信息解出幀內宏塊,幀間信息劃分結合頭信息解出幀間宏塊。幀間信息劃分的重要性最低,對重同步沒有貢獻。當使用數據劃分時,片中的數據根據其類型被保存到不同的緩存,同時片的大小也要調整,使得片中最大的劃分小于MTU尺寸。
  解碼端若獲得所有的劃分,就可以完整重構片;解碼端若發現幀內信息或幀間信息劃分丟失,可用的頭信息仍然有很好的錯誤恢復性能。這是因為宏塊類型和宏塊的運動矢量含有宏塊的基本特征。
  5. 參數集的使用
  序列的參數集(SPS)包括了一個圖像序列的所有信息,圖像的參數集(PPS)包括了一個圖像所有片的信息。多個不同的序列和圖像參數集經排序存放在解碼器。編碼器參考序列參數集設置圖像參數集,依據每一個已編碼片的片頭的存儲地址選擇合適的圖像參數集來使用。對序列的參數和圖像的參數進行重點保護才能很好地增強H.264錯誤恢復性能。
  在差錯信道中使用參數集的關鍵是保證參數集及時、可靠地到達解碼端。例如,在實時信道中,編碼器用可靠控制協議及早將他們以帶外傳輸的方式發送,使控制協議能夠在引用新參數的第一個片到達之前把它們發給解碼器;另外一個辦法就是使用應用層保護,重發多個備份文件,確保至少有一個備份數據到達解碼端;第三個辦法就是在編解碼器的硬件中固化參數集設置。
  6. 靈活的宏塊次序(FMO)
  靈活的宏塊次序是H.264的一大特色,通過設置宏塊次序映射表(MBAmap)來任意地指配宏塊到不同的片組,FMO模式打亂了原宏塊順序,降低了編碼效率,增加了時延,但增強了抗誤碼性能。FMO模式劃分圖像的模式各種各樣,重要的有棋盤模式、矩形模式等。當然FMO模式也可以使一幀中的宏塊順序分割,使得分割后的片的大小小于無線網絡的MTU尺寸。經過FMO模式分割后的圖像數據分開進行傳輸,以棋盤模式為例,當一個片組的數據丟失時可用另一個片組的數據(包含丟失宏塊的相鄰宏塊信息)進行錯誤掩蓋。實驗數據顯示,當丟失率為(視頻會議應用時)10%時,經錯誤掩蓋后的圖像仍然有很高的質量。
  7. 冗余片方法
前邊提到了當使用無反饋的系統時,就不能使用參考幀選擇的方法來進行錯誤恢復,應該在編碼時增加冗余的片來增強抗誤碼性能。要注意的是這些冗余片的編碼參數與非冗余片的編碼參數不同,也就是用一個模糊的冗余片附加在一個清晰的片之后。在解碼時先解清晰的片,如果其可用就丟棄冗余片;否則使用冗余模糊片來重構圖像。
?
四、H.264中實時傳輸協議(RTP)
  1. RTP載荷規范
  在第二部分已經對H.264的網絡協議環境作了闡述,這里要詳細討論RTP的載荷規范和抗誤碼性能。RTP通過發送冗余信息來減少接收端的丟包率,會增加時延,與冗余片不同的是它增加的冗余信息是個別重點信息的備份,適合于應用層的非等重保護。下邊闡述與多媒體傳輸有關的3個規范。
  (1)分組復制多次重發,發送端對最重要的比特信息分組進行復制重發,使得保證接收端能至少正確接收到一次,同時接收端要丟棄已經正確接收的分組的多余備份。
  (2)基于分組的前向糾錯,對被保護的分組進行異或運算,將運算結果作為冗余信息發送到接收方。由于時延,不用于對話型應用,可用于流媒體。
  (3)音頻冗余編碼,可保護包括視頻在內的任何數據流。每個分組由頭標、載荷以及前一分組的載荷組成,H.264中可與數據分割一起使用。
  2. H.264 NAL單元的概念
  H.264 NAL單元對編碼數據進行打包,NAL單元由1字節的頭,3個定長的字段和一個字節數不定的編碼段組成。
  頭標的語法:NALU類型(5bit)、重要性指示位(2bit)、禁止位(1bit)。
  NALU類型:1~12由H.264使用,24~31由H.264以外的應用使用。
  重要性指示:標志該NAL單元用于重建時的重要性,值越大,越重要。
  禁止位:網絡發現NAL單元有比特錯誤時可設置該比特為1,以便接收方丟掉該單元。
  3. 分組打包的規則
  (1)額外開銷要少,使MTU尺寸在100~64k字節范圍都可以;
  (2)不用對分組內的數據解碼就可以判別該分組的重要性;
  (3)載荷規范應當保證不用解碼就可識別由于其他的比特丟失而造成的分組不可解碼;
  (4)支持將NALU分割成多個RTP分組;
  (5)支持將多個NALU匯集在一個RTP分組中。
  RTP的頭標可以是NALU的頭標,并可以實現以上的打包規則。
  4. 簡單打包
  一個RTP分組里放入一個NALU,將NALU(包括同時作為載荷頭標的NALU頭)放入RTP的載荷中,設置RTP頭標值。為了避免IP層對大分組的再一次分割,片分組的大小一般都要小于MTU尺寸。由于包傳送的路徑不同,解碼端要重新對片分組排序,RTP包含的次序信息可以用來解決這一問題。
  5. NALU分割
  對于預先已經編碼的內容,NALU可能大于MTU尺寸的限制。雖然IP層的分割可以使數據塊小于64千字節,但無法在應用層實現保護,從而降低了非等重保護方案的效果。由于UDP數據包小于64千字節,而且一個片的長度對某些應用場合來說太小,所以應用層打包是RTP打包方案的一部分。
  新的討論方案(IETF)應當符合以下特征:
  (1)NALU的分塊以按RTP次序號升序傳輸;
  (2)能夠標記第一個和最后一個NALU分塊;
  (3)可以檢測丟失的分塊。
  6. NALU合并
  一些NALU如SEI、參數集等非常小,將它們合并在一起有利于減少頭標開銷。已有兩種集合分組:
  (1)單一時間集合分組(STAP),按時間戳進行組合;
(2)多時間集合分組(MTAP),不同時間戳也可以組合。
五、結束語
  本文重點講述了在IP網絡的限制條件下H.264進行錯誤恢復的幾種有力工具,但在不同的IP網絡中要組合使用各種工具才能實現高效率編碼和傳輸。因為目前無線網絡對MTU尺寸和時延的限制,所以錯誤恢復工具可以結合使用圖像的分割、數據的劃分和RTP分組技術,避免使用冗余信息和反饋來提高錯誤恢復性能;另外高效率的FMO編碼模式可以大大提高編碼的抗分組丟失性能。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/fengyv/archive/2006/05/09/714972.aspx

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455986.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“光伏進社區” 應及早謀劃布局

所謂“光伏進社區”就是全國城鄉居民家庭大批量的利用家庭光伏系統&#xff0c;甚至出現光伏的社區化聯網交換、合作等更深入的活動。雖然“光伏進社區”還有很長的路要走&#xff0c;但“光伏進社區”的各種經濟、技術、社會條件正越來越向有利方向發展。 城鄉居民集聚社區是光…

python中的裝飾器和抽象類

裝飾器和抽象類 裝飾器就是對函數或者方法或者類進行修飾 #第一步&#xff1a;創建一個普通函數 def laxi():print(噗哧噗哧噗哧噗哧&#xff5e;&#xff5e;&#xff5e;)#調用函數 laxi() laxi()#第二步&#xff1a;擴展函數的功能(不是裝飾器) #聲明一個擴展函數 def deco…

eigen庫安裝_OpenCV+Eigen上位機程序移植(七十一)

1、給硬盤分區現在小伙伴們對于給電腦硬盤分區想必比較頭疼&#xff0c;給電腦硬盤分區分為兩種情況&#xff0c;一是在安裝系統之前給系統硬盤分區&#xff0c;二是在安裝系統之后給硬盤分區&#xff0c;我們現在購買的品牌機和筆記本的用戶比較多&#xff0c;而且筆記本和品牌…

【實戰操作】使用FFmpeg將一個視頻文件中音頻合成到另一個視頻中 只需三秒

直接進入主題 主要參數&#xff1a; -i——設置輸入文件名。-f——設置輸出格式。-y——若輸出文件已存在時則覆蓋文件。-fs——超過指定的文件大小時則結束轉換。-t——指定輸出文件的持續時間&#xff0c;以秒為單位。-ss——從指定時間開始轉換&#xff0c;以秒為單位。-t從…

蘋果依舊強大 物聯網領域舉足輕重

近幾天科技界最火爆的話題就是蘋果和谷歌兩家公司&#xff0c;一是蘋果發布財報&#xff0c;二是谷歌人工智能圍棋戰勝歐洲冠軍以及谷歌母公司Alphabet或將超越蘋果&#xff0c;成為世界上市值最大的公司。而在我眼里&#xff0c;未來五年內依然屬于蘋果。回顧下蘋果公司公布的…

linux之SQL語句簡明教程---SUBSTRING

SQL 中的 substring 函數是用來抓出一個欄位資料中的當中一部分。這個函數的名稱在不同的資料庫中不全然一樣&#xff1a; MySQL: SUBSTR( ), SUBSTRING( )Oracle: SUBSTR( )SQL Server: SUBSTRING( )最經常使用到的方式例如以下 (在這里我們用 SUBSTR( ) 為例)&#xff1a; SU…

H.264/AVC技術進展及其務實發展策略思考

隨著NGN、3G及3G演進和NGBW等對視頻、多媒體業務與網絡應用的飛速發展需求&#xff0c;作為視頻業務及存儲應用核心技術的高效率 視頻數字壓縮編(譯碼)技術&#xff0c;愈來愈引起人們的關注&#xff0c;成為目前廣播、視頻與多媒體通信領域中的亮點與熱點。制定視頻編碼標準的…

python中錯誤和異常處理

錯誤和異常處理 在python中一共有2種錯誤&#xff1a;一種是語法錯誤&#xff0c;另外一種是異常。 語法錯誤 語法錯誤也叫做解析錯誤&#xff0c;是指python無法正確的識別代碼的造成的。根本原因在于人的行為&#xff1a;手殘&#xff0c;腦殘和眼殘的行為。 解決方法&#x…

listview 每行后面的小箭頭_主臥帶小衣帽裝修,這幾個裝修方案,你喜歡哪個?...

南京裝修交流圈 - 知乎?www.zhihu.com現在大部分人購買的房子面積還是普遍偏小的&#xff0c;每行每業都有自己的服裝講究&#xff0c;不同的場地、見不同的人等等。家中能有一個衣帽間自然也就是心中所向往和追求的。能夠有獨立的一個房間來做衣帽間當然更好&#xff0c;今天…

【養成好習慣】使用pipreqs導出本項目使用的環境

pipreqs pipreqs可以幫你找到當前項目的所有組件及其版本。就是當別人給你一個程序的時候&#xff0c;你要在自己電腦上運行起來&#xff0c;就需要安裝程序所依賴的組件&#xff0c;總不能自己一個一個找吧。 # 安裝 pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl…

開放醫療交通大數據技術 服務于公共便民領域

孫丕恕還建議&#xff0c;交通擁堵的數據也可以開放&#xff0c;孫丕恕介紹&#xff0c;目前已有導航軟件有部分數據&#xff0c;但還有些滯后&#xff0c;如果能夠做到實時更新數據&#xff0c;那么也可以為出行者避開擁堵&#xff0c;節約時間。此外&#xff0c;如果二手車的…

Nagios_在不同平臺下的安裝

Nagios 是一款開源的免費網絡監視工具&#xff0c;致力于打造符合行業標準的 IT 基礎架構的監控系統。Nagios 提供了服務器、網絡和應用的完整的 IT 監控和報警&#xff0c;可以有效監控 Windows、Linux 和 Unix 的主機狀態&#xff0c;以及交換機、路由器、打印機等網絡設備。…

python中的模塊和包

模塊和包 一個模塊就是一個包含python代碼的文件。一個文件就是一個模塊 為什么要使用模塊 1.現在程序開發文件比較大&#xff0c;都放在一個文件中維護不方便&#xff0c;拆分成多個文件方便維護與管理 2.模塊可以增加代碼的重用率 3.模塊可以當作命名空間如何定義自己的模塊 …

2005年全球H.264編解碼器薈萃

2005年全球H.264編解碼器薈萃videosky.9126.com Peter Lee 2005-0920【摘要】H.264/AVC作為最新的視頻編碼標準&#xff0c;研究領域和產業界都非常看好該標準。尤其是產業界&#xff0c;針對H.264的軟硬件編解碼器可謂是百花齊放、百家爭鳴。本文中&#xff0c;筆者對2005年全…

【Tensorflow】基于卷積神經網絡實現車牌的識別

引言&#xff1a; 過去幾周我一直在涉足深度學習領域&#xff0c;尤其是卷積神經網絡模型。最近&#xff0c;谷歌圍繞街景多位數字識別技術發布了一篇不錯的paper。該文章描述了一個用于提取街景門牌號的單個端到端神經網絡系統。然后&#xff0c;作者闡述了基于同樣的網絡結構…

腳本啟動顯示查詢頻繁被服務器防御_面對CC攻擊,該如何進行防御

網站被攻擊是一件十分讓人惱火的事情&#xff0c;不僅僅是讓網站速度變慢、訪問異常&#xff0c;導致用戶體驗變差&#xff0c;用戶大量流失&#xff0c;而且還會導致網站關鍵詞排名下降甚至被降權&#xff0c;極大干擾了網站的正常穩定運行。那面對CC攻擊&#xff0c;該如何進…

面對SDN/NFV部署挑戰 網絡廠商能做什么?

近年來&#xff0c;隨著云計算的不斷發展&#xff0c;網絡虛擬化受到廣泛關注&#xff0c;而作為網絡虛擬化的實現方式&#xff0c;SDN自誕生之日起就擔負著網絡變革的使命。那么&#xff0c;SDN技術的驅動力是什么&#xff1f;SDN在引入現網的過程中&#xff0c;如何實現平滑無…

python中的tkinter模塊

tkinter介紹 tkinter是python自帶的GUI庫&#xff0c;是對圖形庫TK的封裝 tkinter是一個跨平臺的GUI庫&#xff0c;開發的程序可以在win&#xff0c;linux或者mac下運行 除此之外還存在很多圖形庫&#xff0c;例如 pythonWin 僅適合window的界面編程庫 wxPython 第三方界面編…

PAT甲題題解-1011. World Cup Betting (20)-誤導人的水題。。。

題目不嚴謹啊啊啊啊式子算出來結果是37.975樣例輸出的是37.98我以為是四舍五入的啊啊啊&#xff0c;所以最后輸出的是sum0.005結果告訴我全部錯誤啊結果直接保留兩位小數就可以了啊啊啊啊 水題也不要這么坑人啊啊啊啊 #include <iostream> #include <algorithm> #i…

【Django】文件上傳以及celery的使用

上傳文件、異步、初始化腳本 面試題&#xff1a; 項目中的靜態文件處理&#xff08;JS/CSS/image&#xff09; 自己在機房內優化的方法&#xff1a;1. Nginx/lighttpd(lighty-douban)&#xff1a;Nginx 處理靜態資源速度非常快&#xff0c;并且自身還帶有緩存。2. 80: Nginx -&…