1. 程式人生 > >FFmpeg,H.264,Directshow,和opencv及視訊編碼與封裝格式

FFmpeg,H.264,Directshow,和opencv及視訊編碼與封裝格式

http://www.voidcn.com/blog/yhhyhhyhhyhh/article/p-5769736.html

    最近做專案,參考網上的資料,梳理了一下視訊採集,編碼,傳輸,顯示相關知識及常用的視訊處理框架和開源庫(本文有誤的地方請見諒,好多概念網上說的感覺都不清楚)。

一.FFmpeg,H.264,Directshow,和opencv

1)FFmpeg:一套開源的音視訊處理的框架或程式。

2)H.264:一種目前比較高效的視訊壓縮標準或一套編解碼協議x264是關於H.264的一個開源專案是實現這種視訊壓縮的方法(演算法或軟體))。

3)DirectShow:微軟推出的

流媒體處理的開發包

4)Opencv:一個開源的計算機視覺的處理庫

       FFmpeg,Directshow和opencv都可以實現視訊檔案和流資料(攝像頭採集)的播放處理,其中Directshow攝像頭採集的資料(攝像頭採集資料返回的資料型別和opencv一致),可以直接在opencv中的介面使用。

FFmpeg中的libavcodec包含了音視訊編解碼器的庫,其中包含H.264的編解碼。

Opencv中包含FFmpeg的dll。

1.FFmpeg

FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。它包括了領先的音/視訊編碼庫libavcodec等。

FFmpeg有非常強大的功能包括視訊採集功能、視訊格式轉換、視訊抓圖、給視訊加水印等。FFmpeg視訊採集功能非常強大,不僅可以採集視訊採集卡或USB攝像頭的影象,還可以進行螢幕錄製,同時還支援以RTP方式將視訊流傳送給支援RTSP的流媒體伺服器,支援直播應用。FFmpeg Linux上開發,可以在大多數作業系統下編譯,包括Windows

2.H.264:

目前比較高效的視訊壓縮標準(h.265更高效)或一套編解碼協議。

x264則是關於H264的一個開源專案是實現這種視訊壓縮的方法(演算法或軟體))。

H.264,同時也是MPEG-4第十部分,是由ITU-T視訊編碼專家組(VCEG)和ISO/IEC

動態影象專家組(MPEG)聯合組成的聯合視訊組(JVT,Joint Video Team)提出的高度壓縮數字視訊編解碼器標準。這個標準通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。

3.DirectShow

DirectShow是微軟公司推出的新一代基於COM(Component Object Model)的流媒體處理的開發包。主要功能是流媒體的採集與回放。它集成了DirectDraw,DirectSound,Direct3D的一些技術。它是一個開放的架構,你自己可以寫自己的Filter元件。一般在windows下做視訊採集處理。

4.opencv

opencv是一個開源的計算機視覺的處理庫。opencv可以利用DirectShow來採集攝像頭視訊,這比採用opencv裡的採集視訊資料函式要好用。directshow用於視訊採集容易些而opencv用於影象處理容易些opencv內含ffmpeg編、解碼的dll。所攝像頭時可以:利用DirectShow採集,利用opencv處理。

Video4linux2(簡稱V4L2),是linux中關於視訊裝置的核心驅動。在Linux中,視訊裝置是裝置檔案,可以像訪問普通檔案一樣對其進行讀寫,攝像頭在/dev/video0下。

二.視訊編碼與封裝格式

遠端攝像頭採集視訊實時播放機處理流程:

視訊原始資料(攝像頭採集)---->編碼---->傳輸---->終端(解碼,顯示,處理)

1.攝像頭採集的資料格式:

色彩空間或色彩模型:RGB,YUVYCbCr

RGB紅綠藍色彩空間。常見的RGB格式有RGB1RGB4RGB8RGB565RGB555RGB24RGB32ARGB32等;

YUV色彩空間的重要性是它的亮度訊號Y和色度訊號UV是分離的。

YCbCr 則是在世界數字組織視訊標準研製過程中作為ITU - R BT1601 建議的一部分其實是YUV經過縮放和偏移的翻版。其中YYUV 中的Y含義一致, Cb , Cr 同樣都指色彩只是在表示方法上不同而已。在YUV 家族中, YCbCr 是在計算機系統中應用最多的成員其應用領域很廣泛,JPEGMPEG均採用此格式。一般人們所講的YUV大多是指YCbCrYCbCr 有許多取樣格式4∶4∶4 , 4∶2∶2 , 4∶1∶1 4∶2∶0常見的YUV格式有YUY2YUYVYVYUUYVYAYUVY41PY411Y211IF09IYUVYV12YVU9YUV411YUV420等。

X264在進行編碼的時候需要標準的YUV(4:2:0)

RGB24一幀的大小size=width×heigth×3 Byte,RGB32的size=width×heigth×4,如果是I420(即YUV標準格式4:2:0)的資料量是 size=width×heigth×1.5 Byte。在採集到RGB24資料後,需要對這個格式的資料進行第一次壓縮。即將影象的顏色空間由RGB2YUV。

要看攝像頭驅動支援哪些格式,一般攝像頭採集後輸出的視訊(或幀)格式為RGB或YUV。也有可能是經過硬體壓縮的格式的圖片。如ZC301晶片的攝像頭輸出是JPEG流,ov511晶片的攝像頭輸出的是16位的RGB圖片。

2.視訊編碼:

視訊流傳輸中最為重要的編解碼標準有國際電聯的H.261、H.263、H.264,運動靜止影象專家組的M-JPEG國際標準化組織運動影象專家組的MPEG系列標準,此外在網際網路上被廣泛應用的還有Real-Networks的RealVideo、微軟公司的WMV以及Apple公司的QuickTime等。還有國內的AVS。

3.封裝格式:

封裝格式(也叫容器),就是將已經編碼壓縮好的視訊軌和音訊軌按照一定的格式放到一個檔案中,也就是說僅僅是一個外殼,或者大家把它當成一個放視訊軌和音訊軌的資料夾也可以。

3.1常見封裝格式

AVI:微軟在90年代初創立的封裝標準,是當時為對抗quicktime格式(mov)而推出的,只能支援固定CBR恆定位元率編碼的聲音檔案。

FLV:針對於h.263家族的格式。

MKV:萬能封裝器,有良好的相容和跨平臺性、糾錯性,可帶外掛字幕

相關推薦

FFmpegH.264Directshowopencv視訊編碼封裝格式

http://www.voidcn.com/blog/yhhyhhyhhyhh/article/p-5769736.html     最近做專案,參考網上的資料,梳理了一下視訊採集,編碼,傳輸,顯示相關知識及常用的視訊處理框架和開源庫(本文有誤的地方請見諒,好多概念

專注HEVCH.264ffmpeg

SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即絕對誤差和 SATD(Sum of Absolute Transformed Difference)即hadamard變換後再絕對值求和 SSD(Sum of Squared Differen

專業的談談0~25516~235的產生歷史合理設定專業叫法Y/C伸張壓縮

電視機產生的歷史比PC顯示器悠久,這是人都該知道的。TV的誕生伴隨著時代的侷限性,首先是黑白電視機誕生的最早,為了討好黑白電視機使用者,彩色電視機必須相容黑白電視機,注意:誕生彩色電視機的時候,全地球公民都在用黑白電視機,你敢和他們對抗?全部拋棄黑白電視機使用者?P.S. QQ好像也是這麼

電動平衡車出新國標了具體有哪些測試專案流程費用?

GB/T34668-2017電動平衡車安全要求及測試方法》 主要針對平衡車安全方面,主要圍繞平衡車的材料、外殼、銳利邊緣、安全保護功能和元件等一般安全要求,電氣安全、機械安全、環境可靠性、標誌和說明,以及相應的測試方法而做出規定,為製造商、檢驗檢測單位和使用者提供必要的安全

h.264中的strideplane

stride指在記憶體中每行畫素所佔的空間。如下圖所示,為了實現記憶體對齊(或者其它的什麼原因),每行畫素在記憶體中所佔的空間並不是影象的寬度。 plane一般是以luma plane、chroma plane的形式出現,其實就是luma層和chroma層,就像RGB,

H.264中I幀IDR幀

IDR幀的作用是立刻重新整理, 使錯誤不致傳播。從IDR幀開始, 重新算一個新的序列開始編碼。而I幀不具有隨機訪問的能力,這個功能是由IDR承擔。IDR幀會導致DPB (DecodedPictureBuffer 參考幀列表——這是關鍵所在)清空,而I不會。 在IDR幀之後的所有幀都不能引用任何I

FFmpegH.264解碼器原始碼簡單分析:概述

=====================================================H.264原始碼分析文章列表:【編碼 - x264】【解碼 - libavcodec H.264 解碼器】================================

linux下ffmpeg增加h.264庫時的ERROR: libx264 not found 錯誤解決

Linux 作業系統:Fedora 8;FFMpeg版本:0.5;libx264 BUILD:79。 錯誤描述:在安裝好libx264 庫後configure ffmpeg-0.5 時(要選擇--enable-libx264),報出ERROR: libx264 not found的錯誤。即提示找不到libx

H.264中的SPSPPS

H.264碼流第一個 NALU是 SPS(序列引數集Sequence Parameter Set) 對應H264標準文件 7.3.2.1 序列引數集的語法進行解析 H.264碼流第二個 NALU是 PPS(影象引數集Picture Parameter Se

ffmpeg實現H.264視訊解碼-1

▶ ffmpeg是一個優秀的開源多媒體編解碼集合 ▶ ffmpeg的libavcodec完成音視訊的編碼或解碼 ▶ H.264視訊解碼主要由H264.c實現 ▶ H264.c能夠流暢解碼x264編碼工程的碼流 ▶ ffmpeg的H.264解碼過程包括初始

FFmpegH.264解碼器原始碼簡單分析:解碼器主幹部分

=====================================================H.264原始碼分析文章列表:【編碼 - x264】【解碼 - libavcodec H.264 解碼器】================================

FFmpegH.264解碼器原始碼簡單分析:熵解碼(Entropy Decoding)部分

=====================================================H.264原始碼分析文章列表:【編碼 - x264】【解碼 - libavcodec H.264 解碼器】================================

H.264量化引數QP量化步長Qstep

1. 量化引數QP是量化步長Qstep的序號。對於亮度(Luma)編碼而言,量化步長Qstep共有52個值,QP取值0~51,對於色度(Chroma)編碼,Q的取值0~39。 QP取最小值0

【視頻編解碼·學習筆記】3. H.264視頻編解碼工程JM的下載編解碼

tro 關鍵幀 isa 源文件 完成 -m decode orm mat 一、下載JM工程: JM是H.264標準制定團隊所認可的官方參考軟件。網址如下 http://iphome.hhi.de/suehring/tml/ 從頁面中可找到相應的工程源碼,本次選擇JM 8

基於Arria10的H.264 4K高效能編解碼器模組視訊演示

更多精彩內容,請微信搜尋“FPGAer俱樂部”關注我們。位於加拿大溫哥華的System-On-Chip Technologies公司正式釋出基於Arria10 SOC器件的H.264高效能編解碼模組,同時提供對應的評估套件。基於Arria10 SOC器件的H.264高效能編碼

FFMPEG實現PCM編碼(採用封裝格式實現)

技術在於交流、溝通,轉載請註明出處並保持作品的完整性。 原文:https://blog.csdn.net/hiwubihe/article/details/81260882   [音訊編解碼系列文章] 音訊編解碼基礎 FFMPEG實現音訊重取樣 FFM

基於MFCOpenCV的攝像機定標立體匹配測試程式

最近整理了一下這兩年一直在用的攝像機定標與立體匹配測試程式,將程式碼進行了重構,介面也做了調整,分享出來方便有需要的朋友使用。當然我的程式設計能力有限,程式可能還有各種bug,請大家多多包涵。相關問題歡迎留言或email聯絡討論,謝謝!  =========

音訊實時傳輸播放AMR硬編碼硬解碼

在Android中我所知道的音訊編解碼有兩種方式: (一)使用AudioRecord採集音訊,用這種方式採集的是未經壓縮的音訊流;用AudioTrack播放實時音訊流。用這兩個類的話,如果需要對音訊進行編解碼,就需要自己移植編解碼庫了,比如可以移植ilbc,speex等開源

視訊基礎知識-封裝格式編碼格式

封裝格式和編碼的關係,就是和酒與酒瓶的關係差不多,而播放器就是開酒器。為了可以喝更好的酒,最好先了解酒是什麼酒,酒瓶是什麼酒瓶,怎麼使用開酒器開酒瓶。位元速率或者可以比喻做酒的原料。對於同一個酒瓶和做

使用Qt5OpenCV視訊播放器

宣告在前頭:本文是查閱整合了眾多網友的知識的基礎上實現的。 首先,說在前頭。通過實現了使用OpenCV做播放器的過程,才發現OpenCV真的不適合做播放器,至少是沒有什麼太多視訊處理理論基礎認識的初學者。實現過程中也是歷盡千辛萬苦,查閱很多資料。 使用環境是Qt5.7.0+