FFMpeg中apiexample.c例子分析——解碼分析

來源:互聯網
上載者:User
FFMpeg中apiexample.c例子分析——解碼分析
收藏

我們直接從
video_decode_example()
函數開始講,該函數實現了如何去解碼一個視頻檔案,以
.mpeg

件為例。


  (
1
)將緩衝的末尾清
0
,從而確保讀操作不會越界導致破壞
mpeg
流。


    
uint8_t
inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];


    
memset(inbuf +
INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);


    可見,我們所分配的緩衝,除了存放資料外,最後部分還預留了一小段空間。


  (
2

avcodec_find_decoder()
函數用於尋找與
codec ID
相匹配的登入的解碼器。


  (
3

avcodec_alloc_context()
函數用於分配一個
AVCodecContext
並設定預設值,
如果失敗返回
NULL
,並可用
av_free()
進行釋放。


  (
4

avcodec_alloc_frame()
函數用於分配一個
AVFrame
並設定預設值,如果失敗返回
NULL

並可用
av_free()
進行釋放。


  (
5

avcodec_open()
函數用給定的
AVCodec
來初始化
AVCodecContext


    對於一些轉碼器,像
msmpeg4

mpeg4
,其寬度和高度必須要初始化,因為這些資訊在碼流(
bitstream
)中是沒有的。
avcodec_open()
會幫我們把寬度和高度設定好。


  (
6
)開啟檔案
fopen


  (
7
)迴圈解碼。

來源:(http://blog.sina.com.cn/s/blog_4e87ac6e0100a60g.html
)
- FFMpeg中apiexample.c例子分析——解碼分析_eNsEmpire_新浪部落格


  (
7.1
)讀取檔案
fread(inbuf,
1, INBUF_SIZE, f );


    注意
1
:一些轉碼器是基於流的(像
mpegvideo

mpegaudio
),這是使用它們的唯一一種方法,因為在解析它之前,你不知道壓縮資料的大小。


    但是,一些其他轉碼器(像
msmpeg4

mpeg4
)是基於幀的,所以對於某一幀,你必須調用這些轉碼器來處理所有資料。你也必須在初始化這些編解
碼器前,先把寬度和高度設定了。


    注意
2
:一些轉碼器允許原始參數(像幀大小,採樣率)在任何一幀被改變。我們雖然已對此做了處理,但你也
要重視起來。


    這兒,我們用一個基於流的解碼器(
mpeg1video
),所以我們把資料輸到解碼器,看它是否可以解碼一幀。


  (
7.2

avcodec_decode_video()
函數用於解碼一個視訊框架
,

inbuf_ptr

picture,
所採用的轉碼器是
c


  (
7.3
)寫入檔案。


  (
8
)解碼延時的幀,再寫入檔案。


    一些解碼器,像
MPEG
,傳輸
I
幀和
P
幀時,都會有一幀的延時。所以我們必須要擷取視頻的最後一幀資料。


  (
9
)釋放資源。


    
fclose(f);


    
avcodec_close(c);


    
av_free(c);


    
av_free(picture);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.