ffmpeg解碼流程學(xué)習(xí)總結(jié)

搞IT都三年了,都沒有好好的寫過一篇博客,從現(xiàn)在開始,有時(shí)間就要寫點(diǎn)東西吧,也算是對(duì)過往工作學(xué)習(xí)的總結(jié)吧。

言歸正傳,進(jìn)入主題,這幾天由于工作的需要,要要就ffmpeg,并且一直到Android平臺(tái)上。

由于本人從來沒有接觸過ffmpeg,剛開始就頭大。不過之后慢慢的看了一些ffmpeg大神們的文章和博客就慢慢的懂了一些,那現(xiàn)在就把自己學(xué)習(xí)的過程總結(jié)一下吧:

ffmpeg體系非常龐大,一不小心就會(huì)云里霧里,還是要小心為妙。

在window下,可以去官網(wǎng)下載已經(jīng)編碼好的庫(kù),然后可以嘗試手動(dòng)去玩一玩這些庫(kù),可能用到的最多就兩個(gè)ffmpeg(格式方面的)和ffplay(播放方面的),反正不要錢,去玩一玩吧。

好吧,還是讓我們?nèi)タ匆幌略创a吧:

首先?av_register_all();//將所有該注冊(cè)類和結(jié)構(gòu)體進(jìn)行注冊(cè)。

AVFormatContext*pFormatCtx =?avformat_alloc_context();//獲取一個(gè)全局的結(jié)構(gòu)體,很多地方都會(huì)用到

avformat_open_input(&pFormatCtx,filepath,NULL,NULL);//打開視頻文件,第二個(gè)參數(shù)就是視頻文件路徑。返回值是int,0表示打開成功。pFormatCtx里面存有視頻流信息

avformat_find_stream_info(pFormatCtx,NULL);//檢查一下是否有視頻流,是否可用,返回值是int,小于0,表示沒有視頻流或是視頻流不可用。

int videoindex=-1;

for(i=0; inb_streams; i++)

if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){

videoindex=i;

break;

}

if(videoindex==-1){

printf("Didn't find a video stream.\n");

return -1;

} //遍歷視頻流信息,找到對(duì)應(yīng)視頻流的索引

AVCodecContext*pCodecCtx=pFormatCtx->streams[videoindex]->codec;通過對(duì)應(yīng)的索引找到對(duì)應(yīng)的解碼結(jié)構(gòu)體信息

AVCodec*pCodec=avcodec_find_decoder(pCodecCtx->codec_id);//通過對(duì)應(yīng)的ID好知道解碼器。

avcodec_open2(pCodecCtx, pCodec,NULL);//視頻解碼

av_read_frame(pFormatCtx, packet);//讀取每一幀數(shù)據(jù)

avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet);//將壓縮的數(shù)據(jù)解碼,還原成YUV或是RGB數(shù)據(jù)。

基本流程就是這樣,忘記說明了,av_read_frame(pFormatCtx, packet);是個(gè)循環(huán)操作。

其實(shí)這個(gè)我也是查看雷宵驊大神們文章和demo,自我總結(jié)的,demo下載地址:http://sourceforge.NET/projects/simplestffmpegplayer/;貌似github是也是有的,大家可以去找一下。

希望大家多多包涵,多多指正。有時(shí)間再講移植到Android編譯情況吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,980評(píng)論 0 3
  • ##初始化 ``` av_register_all 編解碼初始化函數(shù),此函數(shù)無參數(shù)返回 avcodec_regi...
    嗨皮波士代閱讀 1,879評(píng)論 0 1
  • 根據(jù)ffmpeg官方網(wǎng)站上的例子程序開始學(xué)習(xí)ffmpeg和SDL編程。 SDL是一個(gè)跨平臺(tái)的多媒體開發(fā)包。適用于游...
    762683ff5d3d閱讀 1,916評(píng)論 0 2
  • ffmpeg是一個(gè)非常有用的命令行程序,它可以用來轉(zhuǎn)碼媒體文件。它是領(lǐng)先的多媒體框架FFmpeg的一部分,其有很多...
    城市之光閱讀 7,045評(píng)論 3 6
  • 在公園散步 在樹下談心 在商場(chǎng)閑逛 手拉著手 喜歡你騎車載我回家 摟著你的腰 這畫面曾經(jīng)是我羨慕的 羨慕著別人一起...
    追求快樂閱讀 568評(píng)論 0 1

友情鏈接更多精彩內(nèi)容