流媒體技術筆記(視頻編碼相關)


一、視頻編碼原理
視頻圖像數據有極強的相關性,也就是說有大量的冗余信息。其中冗余信息可分為空域冗余信息和時域冗余信息。壓縮技術就是將數據中的冗余信息去掉(去除數據之間的相關性),壓縮技術包含幀內圖像數據壓縮技術、幀間圖像數據壓縮技術和熵編碼壓縮技術。
去時域冗余信息
使用幀間編碼技術可去除時域冗余信息,它包括以下三部分:
—— 運動補償:
運動補償是通過先前的局部圖像來預測、補償當前的局部圖像,它是減少幀序列冗余信息的有效方法。
—— 運動表示
不同區域的圖像需要使用不同的運動矢量來描述運動信息。運動矢量通過熵編碼進行壓縮。
—— 運動估計
運動估計是從視頻序列中抽取運動信息的一整套技術。
注:通用的壓縮標准都使用基於塊的運動估計和運動補償。

去空域冗余信息
主要使用幀內編碼技術和熵編碼技術:
—— 變換編碼
幀內圖像和預測差分信號都有很高的空域冗余信息。變換編碼將空域信號變換到另一正交矢量空間,使其相關性下降,數據冗余度減小。
—— 量化編碼
經過變換編碼后,產生一批變換系數,對這些系數進行量化,使編碼器的輸出達到一定的位率。這一過程導致精度的降低。
—— 熵編碼
熵編碼是無損編碼。它對變換、量化后得到的系數和運動信息,進行進一步的壓縮。

二、視頻編碼分類
1、MPEG系列
(由ISO[國際標准組織機構]下屬的MPEG[運動圖象專家組]開發)視頻編碼方面主要是MPEG1(VCD使用)、MPEG2(DVD使用)、MPEG4(DVDRIP使用的都是它的變種,如:divx,xvid等)、MPEG4 AVC。
1.1、MPEG-1編碼
MPEG-1是MPEG組織制定的第一個視頻和音頻有損壓縮標准。視頻壓縮算法於1990年定義完成。1992年底,MPEG-1正式被批准成為國際標准。MPEG-1是為CD光碟介質定制的的視頻和音頻壓縮格式。一張70分鍾的CD光碟傳輸速率大約在1.4Mbps。而MPEG-1采用了塊方式的運動補償、離散餘弦變換(DCT)、量化等技術,並為1.2Mbps傳輸速率進行了優化。MPEG-1隨后被Video CD采用作為核心技術。
特點:
隨機訪問
靈活的幀率
可變的圖像尺寸
定義了I-幀、P-幀和B-幀
運動補償可跨越多個幀
半像素精度的運動向量
量化矩陣
GOF結構
slice結構

缺點(視頻監控中):
壓縮比還不夠大:在多路監控情況下,錄像所要求的磁盤空間過大。
圖像清晰度還不夠高:由於MPEG1最大清晰度僅為352 * 288,考慮到容量、模擬數字量化損 失等其它因素,回放清晰度不高。
不適合網絡傳輸: 對傳輸圖像的帶寬有一定的要求,不適合網絡傳輸,尤其是在常用的低帶寬網絡上無法實現遠程多路視頻傳送。
靈活性差:MPEG1的錄像幀數固定為每秒25幀,不能丟幀錄像。

相關RFC(RTP包):
a) rfc2038 : RTP Payload Format for MPEG1/MPEG2 Video
http://tools.ietf.org/rfc/rfc2038.txt
b) rfc2250 :RTP Payload Format for MPEG1/MPEG2 Video
http://www.ietf.org/rfc/rfc2250.txt

1.2、MPEG-2編碼
MPEG-2制定於1994年,設計目標是高級工業標准的圖象質量以及更高的傳輸率。MPEG-2所能提供的傳輸率在3-10Mbits/sec間,其在NTSC制式下的分辨率可達720X486,MPEG-2也可提供並能夠提供廣播級的視像和CD級的音質。MPEG-2的音頻編碼可提供左右中及兩個環繞聲道,以及一個加重低音聲道,剖析MPEG-2視頻編碼器和多達7個伴音聲道(DVD可有8種語言配音的原因)。由於MPEG-2在設計時的巧妙處理,使得大多數MPEG-2解碼器也可播放MPEG-1格式的數據,如VCD。
  同時,由於MPEG-2的出色性能表現,已能適用於HDTV,使得原打算為HDTV設計的MPEG-3,還沒出世就被拋棄了。(MPEG-3要求傳輸速率在20Mbits/sec-40Mbits/sec間,但這將使畫面有輕度扭曲)。除了作為DVD的指定標准外,MPEG-2還可用於為廣播,有線電視網,電纜網絡以及衛星直播(DirectBroadcastSatellite)提供廣播級的數字視頻。

特點:
輸出碼率流速率可適應同步或異步傳輸,無需固定;  
適應於逐行或隔行掃描系統;
可用於4:2:0、4:2:2、4:4:4等亮、色取樣;
按清晰度可以將圖象分為4個等級,高級解碼器可與低級解碼器實現下兼容;
按使用的工具和方法不同分為5種類型,即允許分層性編碼,以保證不同的傳輸與接收要求。
缺點(視頻監控中):
帶寬需求比較大:如果要達到比較好的效果, MPEG2 產品需要至少到 6M 。而且其帶寬只能在 2M 、 4M 、 6M 、 8M 之間切換。
MPEG2 產品只有 E1 專線的產品,不能是純 IP 的視訊系統級聯。
MPEG2 產品由於采用的算法比較復雜,決定其編解碼過程比較耗時。
MPEG2 協議當時是為單向廣播應用設計的,因此對延時的要求不是很強烈。從目前應用看,會議經過 MCU 后的延時大概在 1S 左右,因此會議有比較明顯的停頓感,如果經過了 MPEG2 和 E1 之間的轉換,延時會更高。

相關RFC(RTP包):
a) rfc2038 : RTP Payload Format for MPEG1/MPEG2 Video
http://tools.ietf.org/rfc/rfc2038.txt
b) rfc2250 :RTP Payload Format for MPEG1/MPEG2 Video
http://www.ietf.org/rfc/rfc2250.txt

1.3 MPEG-4 編碼
MPEG-4標准並非是MPEG-2的替代品,它着眼於不同的應用領域。MPEG-4的制定初衷主要針對視頻會議、可視電話超低比特率壓縮(小於64Kb/s)的需求。在制定過程中,MPEG組織深深感受到人們對媒體信息,特別是對視頻信息的需求由播放型轉向基於內容的訪問、檢索和操作。
MPEG-4為多媒體數據壓縮編碼提供了更為廣闊的平台,它定義的是一種格式、一種框架,而不是具體算法,它希望建立一種更自由的通信與開發環境。於是MPEG-4新的目標就是定義為:支持多種多媒體的應用,特別是多媒體信息基於內容的檢索和訪問,可根據不同的應用需求,現場配置解碼器。編碼系統也是開放的,可隨時加入新的有效的算法模塊。應用范圍包括實時視聽通信、多媒體通信、遠地監測/監視、VOD、家庭購物/娛樂等。

特點:
與MPEG-1和MPEG-2相比,MPEG-4更適於交互AV服務以及遠程監控。
壓縮比高:特別針對低帶寬等條件設計算法,因而MPEG4的壓縮比更高,使低碼率的視頻傳輸成為可能
圖像質量好:MPEG4的最高圖像清晰度為768*576,遠優於MPEG1的352*288,可以達到接近DVD的畫面效果。這使得它的圖像高清晰度非常好。另外,其它的壓縮技術由於算法上的局限,在畫面中出現快速運動的人或物體和大幅度的場景變化時,圖像質量下降。而MPEG4采用基於對象的識別編碼模式,從而保證良好的清晰度。
節省存儲空間:同等條件如場景、圖像格式和壓縮分辨率條件下,經過編碼處理的圖像文件越小,所占用的存儲空間越小。
相關RFC(RTP包):
a) rfc3016 : RTP Payload Format for MPEG-4 Audio/Visual Streams
http://tools.ietf.org/rfc/rfc3016.txt
b) rfc3640fc3640 :RTP Payload Format for Transport of MPEG-4 Elementary Streams
http://tools.ietf.org/rfc/rfc3640.txt

1.4 、Mpeg4 AVC編碼(JVT)
新一代的視頻壓縮標准。
JVT是由ISO/IEC MPEG和ITU-T VCEG成立的聯合視頻工作組(Joint Video Team),致力於新一代數字視頻壓縮標准的制定。
JVT標准在ISO/IEC中的正式名稱為:MPEG-4 AVC(part10)標准;在ITU-T中的名稱:H.264(早期被稱為H.26L)。
其它參考下文的H.264/AVC部分。

2、H.23X系列
(由ITU[國際電傳視訊聯盟]主導,側重網絡傳輸,注意:只是視頻編碼)
包括H.261、H.262、H.263、H.263+、H.263++、H.264(就是MPEG4 AVC-合作的結晶)。

2.1 H.261編碼
H.261又稱為P*64,其中P為64kb/s的取值范圍,是1到30的可變參數,它最初是針對在ISDN上實現電信會議應用特別是面對面的可視電話和視頻會議而設計的。實際的編碼算法類似於MPEG算法,但不能與后者兼容。H.261在實時編碼時比MPEG所占用的CPU運算量少得多,此算法為了優化帶寬占用量,引進了在圖像質量與運動幅度之間的平衡折中機制,也就是說,劇烈運動的圖像比相對靜止的圖像質量要差。因此這種方法是屬於恆定碼流可變質量編碼而非恆定質量可變碼流編碼。
優點:
CPU運算量小:H.261在實時編碼時比MPEG所占用的CPU運算量少得多。
缺點:
壓縮比低
缺乏靈活性

相關RFC(RTP包):
a) rfc2032 :RTP Payload Format for H.261 Video Streams
http://tools.ietf.org/rfc/rfc2032.txt
b) rfc4587 : RTP Payload Format for H.261 Video Streams
http://www.ietf.org/rfc/rfc4587.txt

2.2 H.262編碼
H.262 是ITU-T的一個數字視頻編碼標准,屬於視頻編解碼器。H.262在技術內容上和ISO/IEC的MPEG-2視頻標准(正式名稱是ISO/IEC 13818-2)一致。
H.262是由ITU-T的VCEG組織和ISO/IEC的MPEG組織聯合制定的,所以制定完成后分別成為了兩個組織的標准,正式名稱是"ITU-T建議H.262"和"ISO/IEC 13818-2"。這兩個標准在所有的文字敘述上都是相同的(也許除了封面和標價之外)。
PEG2 Video/H.262:MPEG2(ISO/IEC 13818-2),也被稱為ITU-T H.262,是目前消費類電子視頻設備中使用最廣泛的視頻編碼標准。MPE2視頻用於數字電視廣播:包括陸地,海底電纜和直接衛星廣播。它能在25fps(PAL)或者30fps(NTSC)的固定幀率下達到720x576像素成像。此外,它也是DVD-V中必需的編解碼器。
其它內容參考MPEG2。

2.3 H.263編碼
H.263標准是甚低碼率的圖像編碼國際標准,它一方面以H.261為基礎,以混合編碼為核心,其基本原理框圖和H.261十分相似,原始數據和碼流組織也相似;另一方面,H.263也吸收了MPEG等其它一些國際標准中有效、合理的部分,如:半像素精度的運動估計、PB幀預測等,使它性能優於H.261。
H.263使用的位率可小於64Kb/s,且傳輸比特率可不固定(變碼率)。H.263支持多種分辨率:SQCIF(128x96)、QCIF、CIF、4CIF、16CIF。
相關RFC(RTP包):
a) rfc2190 : RTP Payload Format for H.263 Video Streams http://tools.ietf.org/rfc/rfc2190.txt
b) rfc2429 : RTP Payload Format for the 1998 Version of ITU-T Rec. H.263 Video (H.263+)
http://tools.ietf.org/rfc/rfc2429.txt
c) rfc4629 : RTP Payload Format for ITU-T Rec. H.263 Video
http://tools.ietf.org/rfc/rfc4629.txt

2.4 H.263+編碼
1998年IUT-T推出的H.263+是H.263建議的第2版,它提供了12個新的可協商模式和其他特征,進一步提高了壓縮編碼性能。如H.263只有5種視頻源格式,H.263+允許使用更多的源格式,圖像時鍾頻率也有多種選擇,拓寬應用范圍;另一重要的改進是可擴展性,它允許多顯示率、多速率及多分辨率,增強了視頻信息在易誤碼、易丟包異構網絡環境下的傳輸。另外,H.263+對H.263中的不受限運動矢量模式進行了改進,加上12個新增的可選模式,不僅提高了編碼性能,而且增強了應用的靈活性。H.263已經基本上取代了H.261。

2.5 H.263++編碼
H263++在H263+基礎上增加了3個選項,主要是為了增強碼流在惡劣信道上的抗誤碼性能,同時為了提高增強編碼效率。這3個選項為:
選項U——稱為增強型參考幀選擇,它能夠提供增強的編碼效率和信道錯誤再生能力(特別是在包丟失的情形下),需要設計多緩沖區用於存貯多參考幀圖像。
選項V——稱為數據分片,它能夠提供增強型的抗誤碼能力(特別是在傳輸過程中本地數據被破壞的情況下),通過分離視頻碼流中DCT的系數頭和運動矢量數據,采用可逆編碼方式保護運動矢量。
選項W——在H263+的碼流中增加補充信息,保證增強型的反向兼容性,附加信息包括:指示采用的定點IDCT、圖像信息和信息類型、任意的二進制數據、文本、重復的圖像頭、交替的場指示、稀疏的參考幀識別。

2.6 H.264 / AVC 編碼
H.264集中了以往標准的優點,並吸收了以往標准制定中積累的經驗,采用簡潔設計,使它比MPEG4更容易推廣。H.264創造性了多參考幀、多塊類型、整數變換、幀內預測等新的壓縮技術,使用了更精細的分象素運動矢量(1/4、1/8)和新一代的環路濾波器,使得壓縮性能大大提高,系統更加完善。
H.264主要有以下幾大優點:
高效壓縮:與H.263+和MPEG4 SP相比,減小50%比特率;
延時約束方面有很好的柔韌性;
容錯能力;
編/解碼的復雜性可伸縮性;
解碼全部細節:沒有不匹配;
高質量應用;
網絡友善。
相關RFC(RTP包):
a) rfc3984 : RTP Payload Format for H.264 Video
http://www.ietf.org/rfc/rfc3984.txt
b) rfc6190 : RTP Payload Format for Scalable Video Coding
http://www.rfc-editor.org/rfc/rfc6190.txt

3、其它
3.1 MJPEG編碼
MJPEG全名為"Motion Joint Photographic Experts Group",是一種視頻編碼格式,中文名稱翻譯為“技術即運動靜止圖像(或逐幀)壓縮技術”。MJPEG廣泛應用於非線性編輯領域可精確到幀編輯和多層圖像處理,把運動的視頻序列作為連續的靜止圖像來處理,這種壓縮方式單獨完整地壓縮每一幀,在編輯過程中可隨機存儲每一幀,可進行精確到幀的編輯,此外M-JPEG的壓縮和解壓縮是對稱的,可由相同的硬件和軟件實現。但M-JPEG只對幀內的空間冗余進行壓縮。不對幀間的時間冗余進行壓縮,故壓縮效率不高。采用M-JPEG數字壓縮格式,當壓縮比7:1時,可提供相當於Betecam SP質量圖像的節目。
相關RFC(RTP包):
a) Rfc2435 : RTP Payload Format for JPEG-compressed Video http://tools.ietf.org/rfc/rfc2435.txt

3.2 VC-1編碼
VC-1,全名VC-1視訊編解碼器(Video Codec 1),是微軟所開發的視頻編解碼系統。VC-1是最后被認可的高清編碼格式,相對於MPEG2,VC-1的壓縮比更高,但相對於H.264而言,編碼解碼的計算則要稍小一些,目前來看,VC-1可能是一個比較好的平衡,輔以微軟的支持,應該是一只不可忽視的力量。一般來說,VC-1多為“.wmv”后綴,但這都不是絕對的,具體的編碼格式還是要通過軟件來查詢。
相關RFC(RTP包):
a) Rfc4225 :RTP Payload Format for Video Codec 1 (VC-1)
http://tools.ietf.org/rfc/rfc4425.txt

3.3 RealVideo編碼
RealVideo格式文件包括后綴名為RA、RM、RAM、RMVB的四種視頻格式。Real Video是一種高壓縮比的視頻格式,可以使用任何一種常用於多媒體及Web上制作視頻的方法來創建RealVideo文件。例如Premiere、VideoShop以及AfterEffects等,對於文件的播放可用realplayer和暴風影音播放。
RealVideo文件是RealNetworks公司開發的一種新型流式視頻文件格式,它包含在RealNetworks公司所制定的音頻視頻壓縮規范RealMedia中,主要用來在低速率的廣域網上實時傳輸活動視頻影像,可以根據網絡數據傳輸速率的不同而采用不同的壓縮比率,從而實現影像數據的實時傳送和實時播放。

3.4 VP8編碼
VP8 是一個開放的影像壓縮格式,最早由 On2 Technologiesis 開發,隨后由 Google 釋出。同時 Google 也釋出了 VP8 編碼的實現函式庫:libvpx,以BSD授權條款的方式發行,隨后也附加了專利使用權。而在經過一些爭論之后,最終VP8 的授權確認為一個開放源代碼授權。

3.5 Theora 編碼
Theora是一個免權利金、開放格式的有損影像壓縮技術,由Xiph.Org基金會開發,該基金會還開發了著名的聲音編碼技術Vorbis,以及多媒體容器檔案格式Ogg。libtheora則是Xiph.Org基金會針對Theora格式的實作。Theora是由On2 Technologies公司專屬的VP3編碼器經過開放源代碼后衍生而來,目標是達成比MPEG-4 Part 2更好的編碼效率。Theora的命名來自於一個電視節目Max Headroom中的角色:Theora Jones。

三、視頻編碼工具
1、Libav(FFmpeg)
網址:http://www.libav.org/
Libav(舊稱:FFmpeg)是一個自由軟件,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能,包含了libavcodec ─這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及 libavformat ——一個音訊與視訊格式轉換函式庫。

1.1 組成元件
ffmpeg :是一個命令列工具,用來對視訊檔案轉換格式,也支援對電視卡即時編碼
ffserver :是一個 HTTP 多媒體即時廣播串流服務器,支援時光平移
ffplay :是一個簡單的播放器,基於 SDL 與 FFmpeg 函式庫
libavcodec :包含了全部 FFmpeg 音訊/視訊 編解碼函式庫
libavformat :包含 demuxers 和 muxer 函式庫
libavutil :包含一些工具函式庫
libpostproc :對於視訊做前處理的函式庫
libswscale :對於影像作縮放的函式庫

1.2 主要參數
-i 設定輸入檔名。
-f 設定輸出格式。
-y 若輸出檔案已存在時則覆蓋檔案。
-fs 超過指定的檔案大小時則結束轉換。
-ss 從指定時間開始轉換。
-title 設定標題。
-timestamp 設定時間戳。
-vsync 增減Frame使影音同步。
影像參數:
-b 設定影像流量,默認為200Kbit/秒。( 單位請參照下方注意事項 )
-r 設定FrameRate值,默認為25。
-s 設定畫面的寬與高。
-aspect 設定畫面的比例。
-vn 不處理影像,於僅針對聲音做處理時使用。
-vcodec 設定影像影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。

1.3 編碼示例
環境:
CentOS 6.2_64 + FFmpeg version 0.6.5
USB攝像頭:羅技(Logitech)C110

mpeg1視頻編碼:
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg1video 1.mpg
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg1video -f rtp rtp://172.16.1.100:7000 > 1.sdp

mpeg2視頻編碼:
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg2video 1.mpg
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg2video -f rtp rtp://172.16.1.100:7000 > 1.sdp

mpeg4視頻編碼:
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg4 1.mp4
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec mpeg4 -f rtp rtp://172.16.1.100:7000 > 1.sdp

h261視頻編碼:
ffmpeg -f video4linux2 -s 176*144 -r 10 -i /dev/video0 -vcodec h261 1.h261

h263視頻編碼:
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec h263 1.h263
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec h263 -f rtp rtp://172.16.1.100:7000 > 1.sdp

h264視頻編碼:
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec libx264 -subq 5 -g 250 -qmin 10 -qmax 51 -i_qfactor 0.71 1.m4v
ffmpeg -f video4linux2 -r 30 -i /dev/video0 -vcodec libx264 -subq 5 -g 250 -qmin 10 -qmax 51 -i_qfactor 0.71 -f rtp rtp://172.16.1.100:7000 > 1.sdp

2、mencoder
mencoder 是一款命令行方式的視頻處理軟件,是Mplayer自帶的編碼工具(Mplayer是Linux下的播放器,開源,支持幾乎所有視頻格式的播放,現在有windows和Mac版本)。
mencoder支持幾乎所有的格式的視頻轉換,可以將任意格式轉換到任意格式,轉換功能可以說是相當強大。目前市面上流行的格式轉換器,都是基於mencoder開發的GUI,比如暴風轉碼,格式工廠等。可以說轉換器能辦到的,mencoder都能辦到,但mencoder能辦到的,轉換器就不一定能辦到了。

3、ffdshow
ffdshow是一套免費的編解碼軟件,可支持H.264、FLV、WMV、MPEG-1、MPEG-2以及MPEG-4等格式視頻檔。ffdshow本身並不包含媒體播放器,但各種媒體播放器都可以使用ffdshow進行解碼。
ffdshow是一款全能的DirectShow解碼、編碼器,可以解壓縮常見的視頻格式和幾乎所有的音頻格式, 它還提供了豐富的加工處理選項,可以銳化畫面,調節畫面的亮度,它還支持諸多字幕格式.它能讓音頻和視頻播放更流暢。

4、x264
x264是一個采用GPL授權的視頻編碼自由軟件。x264的主要功能在於進行H.264/MPEG-4 AVC的視頻編碼,而不是作為解碼器(decoder)之用。
自藍光光碟推出以來,要制作藍光光碟產品都需要利用昂貴的軟件,例如索尼的Blu-code。而x264是一款基於H.264標准的編碼器,此外它是免費開源的。透過x264,藍光光碟影片就可以存放在不同的媒體中,例如普通的DVD碟片上。只要播放裝置集成了適當的解碼器,就可以播放這些藍光兼容光碟,而不是只限播放藍光光碟。

5、Xvid 和DivX
Xvid(舊稱為XviD)是一個開放源代碼的MPEG-4視頻編解碼器,它是基於OpenDivX而編寫的。Xvid是由一群原OpenDivX義務開發者在OpenDivX於2001年7月停止開發后自行開發的。Xvid支持多種編碼模式,量化(Quantization)方式和范圍控,運動偵測(Motion Search)和曲線平衡分配(Curve)等眾多編碼技術,對用戶來說功能十分強大。Xvid的主要競爭對手是DivX。但Xvid是開放源代碼的,而DivX則只有免費(不是自由)的版本和商用版本。
DivX是一種將影片的音頻由MP3來壓縮、視頻由MPEG-4技術來壓縮的數字多媒體壓縮格式。DivX由DivXNetworks公司發明,DivX配置CPU要求是300MHz以上、內存要求是64M以上、8M以上顯存的顯卡.DivX視頻編碼技術是為了打破微軟ASF的種種協定的束縛,由Microsoft mpeg4 v3修改而來,使用MPEG-4壓縮算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM