windows環境下搭建ffmpeg開發環境

來源:互聯網
上載者:User

標籤:c   style   class   blog   code   tar   

       ffmpeg是一個開源、跨平台的程式庫,可以使用在windows、linux等平台下,本文將簡單講解windows環境下ffmpeg開發環境搭建過程,本人使用的作業系統為windows 7,整合式開發環境為Visual Studio 2005,ffmpeg版本為2.2。有人可能會說都什麼年代了,還VS 2005,現在VS 2010/2012/2013都出了。本人電腦也安裝了VS2010,每次開啟,伴隨著硬碟指示燈的閃爍,以及硬碟的吱吱響聲,過了許久才彈出閃屏頁面,此時你的思緒可能已經飄到了南極,啟動一次實在太慢了,完全老牛拉車的感覺,所以後續VS2012/2013就都沒有再安裝使用了。個人覺得VS2005/2008比較銳,相對輕巧些,啟動速度快,當然很多快速鍵用著也習慣了。       下面從一個非常簡單的ffmpeg例子著手,講一下開發環境搭建過程:       1. 開啟VS編輯器,建立一個win 32 c++控制台應用程式。       2. 進入ffmpeg源碼下的doc/examples檔案夾,找到metadata.c檔案,該檔案是一個獨立demo,運行結果為列印音視頻媒體檔案基本資料。該檔案體積還不到2k,程式碼數在這幾個demo裡最少,看起來也容易懂。為metadata.c檔案源碼,開啟該檔案,拷貝裡面的代碼到我們建立的win 32工程,此時如果嘗試編譯上述代碼時,編譯器會報各種各樣的錯誤,主要錯誤原因還是ffmpeg在windows環境下的各種水土不服,在linux環境下好很多,沒有這麼多的什麼資料類型不識別、宏定義缺失等等錯誤,下面根據錯誤類型,設定工程並修改上述代碼,以完成正確編譯。                   
       (1)設定工程標頭檔及lib庫依賴。ffmpeg的標頭檔和lib庫可以自己編譯得到,不過本人沒有嘗試,而是直接到這裡下載了已編譯好的ffmpeg windows相關版本,解壓後得到下述檔案:                                             

                                             
       拷貝其中的include標頭檔、lib庫檔案以及bin目錄下的dll檔案到自己的工程下,然後在工程屬性中設定附加元件封裝含目錄:$(ProjectDir)\include和附加庫目錄:$(ProjectDir)\lib,這個設定很簡單了。此時工程目錄如所示:                                             
       (2)此時編譯工程會有如所示錯誤,解決方案就是定位到該錯誤,直接將其注釋即可。                                             
       (3)再次編譯工程,會有如所示錯誤:                                             
定位錯誤後發現還是common.h標頭檔有問題,解決方案為在剛才注釋的下面,新增下述代碼:#ifndef INT64_C#define INT64_C(c)  (c ## LL)#define UINT64_C(c) (c ## ULL)#endif       (4)如果此時再次編譯工程,還是會有錯誤,錯誤原因是我們建立的win 32 c++工程直接調用ffmpeg的c函數庫,導致c函數無法解析,對於這樣由於c++和c函數名編譯後命名機制不同導致無法解析的問題,只需在引用c函數庫時添加extern "C"即可,當然還有引用lib庫。修改後的代碼如下:
#include "stdafx.h"#include <stdio.h>#include <stdlib.h>extern "C"{    #include <libavformat/avformat.h>    #include <libavutil/dict.h>}#pragma comment(lib, "avformat.lib")#pragma comment(lib, "avutil.lib")int main (){    AVFormatContext *fmt_ctx = NULL;    AVDictionaryEntry *tag = NULL;    int ret = 0;    av_register_all();    if ((ret = avformat_open_input(&fmt_ctx, "iphone.mp3", NULL, NULL))){        return ret;}    while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))){        printf("%s=%s\n", tag->key, tag->value);}    avformat_close_input(&fmt_ctx);system("pause");    return 0;}
此時可以順利編譯通過了,運行結果如下:                                      
       當然,隨著開發的深入,在使用uint8_t、int64_t等資料類型時,編譯器會報如下錯誤:fatal error C1083: Cannot open include file: ‘stdint.h‘: No such file or directory,即找不到相關標頭檔,該標頭檔的壓縮包可以在我上傳的工程檔案目錄內找到,解壓縮後將兩個標頭檔拷貝至Microsoft Visual Studio 8/vc/include目錄即可。
       工程下載連結:http://download.csdn.net/detail/u013085897/7428719       由於工程運行依賴的幾個dll體積比較大,所以在上傳工程時本人將其刪掉了,該dll可以到文中提到的連結下載。即:http://ffmpeg.zeranoe.com/builds/




聯繫我們

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