zoukankan      html  css  js  c++  java
  • windows环境下搭建ffmpeg开发环境

           ffmpeg是一个开源、跨平台的程序库,能够使用在windows、linux等平台下,本文将简单解说windows环境下ffmpeg开发环境搭建过程,本人使用的操作系统为windows 7。集成开发环境为Visual Studio 2005,ffmpeg版本号为2.2。有人可能会说都什么年代了,还VS 2005。如今VS 2010/2012/2013都出了。本人电脑也安装了VS2010,每次打开。伴随着硬盘指示灯的闪烁。以及硬盘的吱吱响声,过了许久才弹出闪屏页面,此时你的思绪可能已经飘到了南极。启动一次实在太慢了。全然老牛拉车的感觉,所以兴许VS2012/2013就都没有再安装使用了。

    个人认为VS2005/2008比較锐,相对轻巧些,启动速度快,当然非常多快捷键用着也习惯了。

           以下从一个很easy的ffmpeg样例着手。讲一下开发环境搭建过程:
           1. 打开VS编辑器,新建一个win 32 c++控制台应用程序。
           2. 进入ffmpeg源代码下的doc/examples目录。找到metadata.c文件。该文件是一个独立demo。执行结果为打印音视频媒体文件基本信息。该文件体积还不到2k,代码行数在这几个demo里最少,看起来也easy懂。

    下图为metadata.c文件源代码。打开该文件,拷贝里面的代码到我们新建的win 32project,此时假设尝试编译上述代码时。编译器会报各种各样的错误,主要错误原因还是ffmpeg在windows环境下的各种水土不服。在linux环境下好非常多。没有这么多的什么数据类型不识别、宏定义缺失等等错误,以下依据错误类型,设置project并改动上述代码,以完毕正确编译。

                       
           (1)设置project头文件及lib库依赖。

    ffmpeg的头文件和lib库能够自己编译得到,只是本人没有尝试。而是直接到这里下载了已编译好的ffmpeg windows相关版本号,解压后得到下述文件:

                                                 

                                                 
           拷贝当中的include头文件、lib库文件以及bin文件夹下的dll文件到自己的project下,然后在project属性中设置附加包括文件夹:$(ProjectDir)include和附加库文件夹:$(ProjectDir)lib这个设置非常easy了。此时project文件夹例如以下图所看到的:
                                                 
           (2)此时编译project会有例如以下图所看到的错误。解决方法就是定位到该错误。直接将其凝视就可以。

                                                 
           (3)再次编译project,会有例如以下图所看到的错误:
                                                 
    定位错误后发现还是common.h头文件有问题,解决方法为在刚才凝视的以下,新增下述代码:
    #ifndef INT64_C
    #define INT64_C(c)  (c ## LL)
    #define UINT64_C(c) (c ## ULL)
    #endif
           (4)假设此时再次编译project,还是会有错误,错误原因是我们新建的win 32 c++project直接调用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
    ", 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,即找不到相关头文件。该头文件的压缩包能够在我上传的project文件文件夹内找到。解压缩后将两个头文件拷贝至Microsoft Visual Studio 8/vc/include文件夹就可以。


           因为project执行依赖的几个dll体积比較大,所以在上传project时本人将其删掉了,该dll能够到文中提到的链接下载。即:





  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5359390.html
Copyright © 2011-2022 走看看