基於FFMPEG SDK流媒體開發1---解碼媒體檔案流資訊

來源:互聯網
上載者:User

標籤:

最近項目涉及到流媒體等開發,由於有過開發經驗深知其難度所在,沒辦法只能重新拾起,最新版的SDK被改的一塌糊塗,不過大體的開發思路都是一樣的,看多少書查多少資料都無用,一步一步的編寫代碼 才是學好的關鍵。。

我會把每一天的學習經過,更新到博文上,希望能給更多想學習的人帶來協助,篇尾附上工程     以及最新版本SDK。

FFMPEG被大多數的人命令列來使用,其實在真正的流媒體開發中,要想靈活運用其開發流媒體應用程式層序,必須使用官方SDK開發  ,實際上我們市面上好多產品

都是基於FFMPEG,比如 XX影音  。。 

FFMPEG官網  http://www.ffmpeg.org/

API地址       http://www.ffmpeg.org/doxygen/trunk/index.html

由於在windows下編譯非常痛苦,所以還是推薦大家去直接下載編譯好的二進位檔案,注意官網上並沒有直接完整的開發包,你需要分別取下載Linux或者windows下的

共用庫 對於windows下還需要下載 .lib匯入庫,由於我是windows下 這裡我就提供windows

http://ffmpeg.zeranoe.com/builds/   這個頁面可以下載到 動態庫和到入庫 。。因為FFMPEG已經交由別的組織維護了。。。 在下面這個頁面找吧 還有一點就是 既然用人家的東西 記住一定要遵循LGPL或GPL許可證...別給國人丟臉  

人家老外都這麼說了 

Donating shows that you benefit from my work and are thankful for the time I spend on it. So if you like my work and would like to see more, feel free to donate, if you can‘t right now don‘t worry about it and just enjoy using FFmpeg on Windows. Thank you to everyone who has donated in the past!

 

具體不廢話了,如何設定項目啥的,這都是新手層級的問題,我就不詳細說明了 直接上代碼加註釋     我會提供原始碼下載 。。。工程配置好的 大家下載研究就行

 

[cpp] view plaincopyprint? 
  1. // ffmpeg_test.cpp : 定義控制台應用程式的進入點。  
  2. //  
  3.   
  4. #include "stdafx.h"    
  5.   
  6. #include <windows.h>  
  7. #ifdef _CPPRTTI  
  8. extern "C"    
  9. {  
  10. #endif  
  11.     #include "libavcodec/avcodec.h"  //轉碼器  
  12.     #include "libavformat/avformat.h" //格式上下文   
  13.     #include "libavformat/avio.h"  //音視頻IO  
  14.     #include "libavutil/file.h"  //處理檔案  
  15. #ifdef _CPPRTTI    
  16. };  
  17. #endif  
  18.   
  19. void  SetStdClr(WORD wd)  
  20. {  
  21.     SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),wd );  
  22. }  
  23.   
  24. int _tmain(int argc, _TCHAR* argv[])  
  25. {     
  26.     //註冊所有 編碼器  解析器 二進位流過濾器  
  27.      av_register_all();  
  28.      avcodec_register_all();  
  29.      SetStdClr(FOREGROUND_RED |   FOREGROUND_GREEN);  
  30.      AVFormatContext *pContext=NULL;//格式上下文  
  31.      int errNo=0 ;  
  32.      pContext=avformat_alloc_context();  
  33.      //開啟輸入檔案 新介面  
  34.      if(0==avformat_open_input(&pContext,".\\test.mp4",nullptr,NULL)){  
  35.          printf("開啟檔案輸入成功!\n");  
  36.      }else  
  37.          return  0;  
  38.      //從上下文檢索流資訊  
  39.     if(0==avformat_find_stream_info(pContext,NULL))  
  40.     {  
  41.         printf("擷取流資訊成功!\n");  
  42.     }else  
  43.         return 0 ;  
  44.     //迴圈多個流  
  45.      SetStdClr(FOREGROUND_RED |   FOREGROUND_BLUE);  
  46.     for (unsigned int i=0;i<pContext->nb_streams;i++)  
  47.     {     
  48.   
  49.         //媒體流   
  50.         AVStream *pStream = pContext->streams[i];  
  51.         //幀率資訊 為有理數/無理數  
  52.         AVRational frame =pStream->r_frame_rate;    
  53.   
  54.         // 時間比率單位  
  55.         AVRational timeBase = pStream->time_base;   
  56.           
  57.         //流的期間  位元速率  
  58.         int64_t duration=   pStream->duration ;   
  59.         printf("媒體期間%d\n",duration);  
  60.         //擷取編碼類別型  
  61.         AVCodecContext *pCodecContext=pStream->codec ;  
  62.         //擷取 媒體類型  
  63.         /************************************************************************/  
  64.         /*  
  65.         enum AVMediaType { 
  66.         AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA 
  67.         AVMEDIA_TYPE_VIDEO, 
  68.         AVMEDIA_TYPE_AUDIO, 
  69.         AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous 
  70.         AVMEDIA_TYPE_SUBTITLE, 
  71.         AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse 
  72.         AVMEDIA_TYPE_NB 
  73.         }; 
  74.                                                                      */  
  75.         /************************************************************************/  
  76.         AVMediaType avMediaType=pCodecContext->codec_type;  
  77.         //編碼器ID  
  78.         AVCodecID codecID=pCodecContext->codec_id ;  
  79.         if(avMediaType == AVMEDIA_TYPE_AUDIO)  
  80.         {  
  81.             //如果是視頻  
  82.             int audioChannels = pCodecContext->channels;  
  83.             int samplerate = pCodecContext->sample_rate;  
  84.             PixelFormat pixelFormat = pCodecContext->pix_fmt;  
  85.             printf("Stream%d音頻\n",i);  
  86.             printf("音頻採樣頻率%d/%d\n",timeBase.num,timeBase.den);  
  87.             printf("音頻時間單位%d/%d\n",timeBase.num,timeBase.den);  
  88.             printf("音頻通道數%d\n",audioChannels);  
  89.   
  90.         }  
  91.         else if(avMediaType == AVMEDIA_TYPE_VIDEO)  
  92.         {  
  93.             //如果是音頻  
  94.             int videoWidth = pCodecContext->width;  
  95.             int videoHeight = pCodecContext->height;  
  96.             AVSampleFormat sampleFmt = pCodecContext->sample_fmt;  
  97.             printf("Stream%d視頻\n",i);  
  98.             printf("幀率幀率%d/%d\n",frame.den,frame.num);  
  99.             printf("視頻時間單位%d/%d\n",timeBase.num,timeBase.den);  
  100.             printf("映像寬度:%d\t高度:%d\t%\n",videoWidth,videoHeight);  
  101.             printf("映像寬度:%d\t高度:%d\t%\n",videoWidth,videoHeight);  
  102.         }  
  103.         switch(codecID)  
  104.         {  
  105.         case  AV_CODEC_ID_AAC:  
  106.             printf("編碼器FAAC\n");  
  107.             break;  
  108.         case  AV_CODEC_ID_H264:  
  109.             printf("編碼器H264\n");  
  110.             break;  
  111.         }  
  112.   
  113.     }  
  114.     //釋放上下文環境  
  115.     if(!pContext)  
  116.     {  
  117.         avformat_close_input(&pContext);  
  118.     }  
  119.     return 0;  
  120. }  


運行結果如下:

 

 

工程 

http://download.csdn.net/detail/yue7603835/8268095

基於FFMPEG SDK流媒體開發1---解碼媒體檔案流資訊(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.