zoukankan      html  css  js  c++  java
  • ffmpeg精简

    自:http://www.chinavideo.org/viewthread.php?tid=5567&extra=page%3D1&page=2

    现在更新一下目前遇到的问题: 
    我想裁减ffmpeg编译出来的Dll库,把avcodec.dll裁减到1MB左右就可以了,只需要用ffmpeg完成H.264的解码和对音频解码的支持. 目前搭建了MinGW+MSYS的环境来编译ffmpeg,make的版本是3.81的. 
    编译过程如下: 
    ./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 
    make 
    make install 
    但最后编译生成的 avcodec.dll 还是有3.5MB ? 请问还需要在 configure 里加哪些参数,才能达到我所要求的裁减效果呢??

    --enable-small


    大哥,按照你的方法来做: 
    ./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 --enable-small 
    make 
    make install 
    但最后编译生成的 avcodec.dll 还是有2620KB ? 请问还需要在 configure 里加哪些参数,才能达到我所要的裁减(精简到1MB左右)效果呢?? 
    我现在是下载的ffmpeg-0.6.1的源代码。我在网上有看到可以把 avcodec.dll裁减到700多KB,不会吧???


    --disable-avdevice 
    --disable-avfilter 
    --disable-network 
    然后再 
    --disable-everything 
    最后再 
    --enable-decoder=需要解码的codec格式 
    --enable-decoder=xxxx 
    ... 
    --enable-demuxer=需要解码的容器格式 
    --enable-demuxer=xxxx


    非常感谢楼上的高手!

    这一两天终于把ffmpeg裁减好了,avcodec-52.dll 744KB,可以达到我们项目预期的需求.现将整个过程及遇到的问题和解决方法一一列举出来,以供大家日后做为参考: 
    1.首先下载ffmpeg-0.6.1的源代码,PC端使用VS2008 + SP1的开发环境; 
    2.搭建MinGW+MSYS的ffmpeg编译环境,这个可以参考网上很多这方面的文章.有个地方稍微提下,建议大家安装最新的MinGW环境,http://sourceforge.net/projects/mingw/files/ 到这个链接可以下载到最新版的MinGW.因为我发现如果GCC的版本太低(例如:3.4,2),编译出来的avcodec.dll在做encode编码的时候,ffmpeg会报错,提示ffmpeg在编译的过程中使用了版本太低的GCC编译器,建议>=4.2. 
    我目前MinGW+MSYS的编译环境,使用的 GCC 是4.5.0, Make版本是 3.81 
    3.配置及编译ffmpeg 
    ./configure --disable-static --enable-shared --enable- memalign-hack --enable-small --disable-encoders --disable-decoders --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mjpeg --prefix=/e/ffmpeg-sdk/ 
    make;make install 
    这样,在E盘的ffmpeg-sdk目录下会有include头文件及bin目录下会有对应的avcodec/avformat等等dll和lib库. 
    4.用VS2008调用ffmpeg库编写应用程序(使用方法可以参考网上的相关文章),这里提一下三个问题的解决: 
    第一,解决:Cannot open include file: 'inttypes.h' 
    更新ffmpeg之后,有时编译应用ffmpeg库的工程会发现提示: Cannot open include file: 'inttypes.h': No such file or directory 的出错信息,可通过如下方法解决: 
    1、找到include目录中的/libavutil/common.h 
    2、在"#define AVUTIL_COMMON_H"之后加入如下代码,同时删除"#include <inttypes.h>" 然后保存: 
    #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) 
    # define CONFIG_WIN32 
    #endif 
    #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES) 
    # define EMULATE_INTTYPES 
    #endif 
    #ifndef EMULATE_INTTYPES 
    # include <inttypes.h> 
    #else 
    typedef signed char int8_t; 
    typedef signed short int16_t; 
    typedef signed int int32_t; 
    typedef unsigned char uint8_t; 
    typedef unsigned short uint16_t; 
    typedef unsigned int uint32_t; 
    # ifdef CONFIG_WIN32 
    typedef signed __int64 int64_t; 
    typedef unsigned __int64 uint64_t; 
    # else /* other OS */ 
    typedef signed long long int64_t; 
    typedef unsigned long long uint64_t; 
    # endif /* other OS */ 
    #endif /* EMULATE_INTTYPES */ 
    第二,继'inttypes.h'之后的问题 'stdint.h'怎么解决? 
    解决方法:经过测试,在VC++2008+SP1下可以将#include <stdint.h>注释掉,不会影响编译和连接。 
    第三,是在Windows下环境使用ffmpeg库时发现报错 
    error C3861: 'UINT64_C': identifier not found,怎么回事? 
    解决方案: 
    在/libavutil/common.h里加入定义如下: 
    #ifndef INT64_C 
    #define INT64_C(c) (c ## LL) 
    #define UINT64_C(c) (c ## ULL) 
    #endif

    好了,就写这么多吧!希望大家可以互相学习,共同进步了 

    Powered by Zoundry Raven

  • 相关阅读:
    开发者账号续期后,itunes停止付款了
    复杂sql分组查询 ( pivot)
    免费真机调试 -- Xcode7
    System.Security.Cryptography.CryptographicException: 指定了无效的提供程序类型
    phonegap创建的ios项目推送消息出现闪退现象
    这周的《财经郎眼
    <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
    ios线程和GCD和队列同步异步的关系
    <转>关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
    为什么我们要做单元测试?(二)
  • 原文地址:https://www.cnblogs.com/yang131/p/13338237.html
Copyright © 2011-2022 走看看