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相关版本号,解压后得到下述文件:

                                             

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzA4NTg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


                                             
       拷贝当中的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\n", tag->key, tag->value);
} avformat_close_input(&fmt_ctx); system("pause");
return 0;
}
此时能够顺利编译通过了,执行结果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzA4NTg5Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

       当然,随着开发的深入,在使用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能够到文中提到的链接下载。即:



windows环境下搭建ffmpeg开发环境的更多相关文章

  1. 在win10环境下搭建 solr 开发环境

    在win10环境下搭建 solr 开发环境 2017年05月30日 09:19:32 SegaChen0130 阅读数:1050   在win10环境下搭建 solr 开发环境 安装环境  Windo ...

  2. Centos7.4环境下搭建Python开发环境(虚拟机安装+python安装+pycharm安装)

    目录 一.安装 Centos7.4虚拟机 二.安装 python3.6.7 三.安装 pycharm 一般情况下,大家都是在 Windows平台下进行 Python开发,软件安装和环境搭建都非常&qu ...

  3. 【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作

    前言 搭建完hadoop集群之后在windows环境下搭建java项目进行测试 操作hdfs中的文件 版本一 package com.slp.hadoop274.hdfs; import java.i ...

  4. Linux环境下搭建Android开发环境

    最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...

  5. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  6. Linux环境下搭建php开发环境的操作步骤

    本文主要记载了通过编译方式进行软件/开发环境的安装过程,其他安装方式忽略! 文章背景: 因为php和Apache等采用编译安装方式进行安装,然而编译安装方式,需要c,c++编译环境, 通过apt方式安 ...

  7. windows系统下搭建Python开发环境

    1.首先下载最新的Python http://www.python.org/download/,我下载的是最新的Python3.5.1 2.下载完成之后开始安装,安装就比较简单了,一路下一步. 3.安 ...

  8. windows环境下搭建Java开发环境(二):Tomcat安装和配置

    一.资源下载 官网:http://tomcat.apache.org/ 本人安装的是Tomcat8.5,安装包百度云资源:链接:https://pan.baidu.com/s/17SDFsoS0yAP ...

  9. windows环境下搭建Java开发环境(一):jdk安装和配置

    一.资源下载 官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html 本人安装的是jdk1.8,百度云资源:链接:h ...

随机推荐

  1. Hive简介

    实验简介 我们本节课程主要介绍 Hive 的相关知识,将会涉及以下内容: Hive 的定义 Hive 的体系结构 Hive 与关系数据库的区别 Hive 的应用场景 Hive 的存储 一.什么是 Hi ...

  2. UVa 10048 (Floyd变形) Audiophobia

    题意: 给一个带权无向图,和一些询问,每次询问两个点之间最大权的最小路径. 分析: 紫书上的题解是错误的,应该是把原算法中的加号变成max即可.但推理过程还是类似的,如果理解了Floyd算法的话,这个 ...

  3. [2015编程之美] 第一场A

    #1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一 ...

  4. JVM的GC机制及JVM的调优方法

    内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要. 1.在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的 ...

  5. python 网络编程(五)---DNS域名系统

    1.域名系统定义 DNS计算机域名系统由域名服务器和域名解析器组成.通常输入的是网址就是一个域名. 2.域名查询 查询方式包括: 1)正向查询:由域名查找对应的IP(如:www.baidu.com—& ...

  6. CPU的ADDR2为什么跟SDRAM的0地址线接在一起

    出处:http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=11544&fromuid=5490 最近看到坛子里很多初学者对于C ...

  7. 使用slf4j取代Apache Commons Logging

    假如你正在开发应用程序所调用的组件当中已经使用了 JCL(之前叫 Jakarta Commons Logging,JCL) 的,还有一些组建可能直接调用了 java.util.logging,这时你需 ...

  8. SSH权威指南(转载)

    本书是一本介绍通信安全的书籍,如果你想保障你的通信安全,本书能给你一个很好的解决方案.本书从ssh协议介绍起,到具体的开源实现和商业实现.但本书同时介绍开源实现和商业实现,给人感觉比较乱.注意:由于o ...

  9. linux产生静态库和动态库

    如何构建一个库 静态库(.a) 静态库的建立和使用是非常简单的: 1. 编译源文件:gcc -Wall -c test1.c test2.c 2. 生成库文件:ar -cvq libtest.a 3. ...

  10. Win7旗舰版的nfs服务器如何架设? - Microsoft Community

    Win7旗舰版的nfs服务器如何架设? - Microsoft Community Win7旗舰版的nfs服务器如何架设?