解决ffmpeg2.8android移植平台移植ffmpeg的一揽子有关问题怎么解决

下次自动登录
关注移动互联网和移动APP开发工具、开发框架、测试工具、微信开发、Android源码、Android开源类库以及各种开源组件的IT科技网站
现在的位置:
跨平台――ffmpeg移植android、cocos2dx
ffmpeg 1.2.6, android ndk r8b,cygwin
【windows下编译】
这个比想象中的简单,用MinGW编译,然后在VS里用生成的lib库即可,参照下列网友的博客:
windows下编译ffmpeg
【配置编译】
安装好cygwin,把android ndk放到cygwin的home目录下面,路径是这样:D:/cocos2dx/cygwin/home/Administrator/android-ndk-r8b
然后解压ffmpeg到这个地方(jni里就是内容):D:/cocos2dx/cygwin/home/Administrator/ffmpeg/jni/ffmpeg
然后编写配置脚本config.sh,这部分可参考下面的链接:
编写ffmpeg的config.sh脚本
内容如下(注意最后把configure的内容放一行,这是一个坑哦!而且如果ndk路径不一样的自己改下):
./configure
--disable-asm --disable-static --enable-shared --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avfilter --disable-postproc --enable-small --cross-prefix=/home/Administrator/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi- --enable-cross-compile
--target-os=linux --extra-cflags='-I/home/Administrator/android-ndk-r8b/platforms/android-9/arch-arm/usr/include' --extra-ldflags='-L/home/Administrator/android-ndk-r8b/platforms/android-9/arch-arm/usr/lib -nostdlib' --arch=arm --disable-symver --disable-debug --disable-stripping
sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
然后把这个脚本拷贝到上面的jni目录下,运行cygwin到jni目录去执行这个脚本:
cd /home/Administrator/ffmpeg/jni
export TMPDIR=d:/temp
./config.sh
第二句是设置临时目录,这也是一个坑,而且这个目录要存在吧。然后第三句就开始执行配置脚本,出现下面这样就对了……
【编写Android.mk】vcD4KPHA+ztK+zbK719DPuMu1wcujrM7S0rLKx7LOv7zG5Mv7sqm/zbXEo6zO0tKyvs2yu8/qz7i9ssHLo6y63Lbgv9PSsrD8uqzU2sDvw+bBy6GjxOPWu9Kqz8LU2LKiv72xtLW9xOO41bLFZmZtcGVnxL/CvM/g06a1xM671sO+zdDQwcujqNei0uLA78PmtcRjb25maWcuc2jT0LXjuMS2r6Os0tTJz8Pmsqm/zbXEzqrXvKOstvjH0snPw+a9ssHLINXiwO+yu9PDudzEx7j2Y29uZmlnLnNoo6mhozwvcD4KPHA+QW5kcm9pZC5ta3M8L3A+CjxwPqG+wv6zpLHg0uvCty212tK7vL6hvzwvcD4KPHA+tO3O87rNv9O2vLHIvc+24KOstPO80tf2usPQxMDt17yxuKGjz8i4xNK70Km12Le9sMmjujwvcD4KPHA+MS7Q3rjEam5pL2ZmbXBlZ8/CtcRjb25maWcuaKOs0N64xNXiwb3Q0LPJ1eLR+aO6PC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:">#define CC_IDENT "gcc 4.4.3(GCC)"
#define av_restrict// restrict2.修改libavcode libavformat libavutil libswscale目录下的Makefile,将其中的include XXXXconfig.mak去掉
3.修改libavutil/libm.h,将其中的static方法都删除掉
然后就可以把ndk目录设置到环境变量path里去,就可在cygwin中cd到最外面的那个ffmpeg目录开始第一波尝试了,执行ndk-build
【漫长编译路-第二季】
1.哦,对了ndk可能还会有些问题,你只要找到ndk里对应文件对应的行数,一般是注释或删除掉那行就行了。这个我就不去再弄一次了。
本来编译的坑还是很多的,可能都在上面的配置文件中被我改掉了,所以现在看着很轻松的样子。
2.libavutil下的time.h重名问题,将该目录的time.h改名为avtime.h,然后将所有用到libavutil/time.h的c文件都改为libavutil/avtime.h(去目录设置搜索条件搜索文件修改呗)。
3.链接的时候说ff_log2_tab重定义了,将libavformat和libavcodec下的makefile里log2_tab.o删除呗,然后删除临时文件再编译下。
见到下图就大功告成了:
如果我描述得不清楚的话,可以参考下这篇博客,我也是写这个的时候才发现,真是后悔没早点找到:
http://blog.csdn.net/xms0xms/article/details/8964999
【在cocos2dx中使用】
这里只说最简单的方式啊,把ffmpeg整个拷贝到cocos2d-x-2.2.1/cocos2dx下,因为引擎缺省build_native.sh里配置了这个导入目录。然后修改Android.mk加上下面这些话:
LOCAL_WHOLE_STATIC_LIBRARIES += libavformat
LOCAL_WHOLE_STATIC_LIBRARIES += libavcodec
LOCAL_WHOLE_STATIC_LIBRARIES += libavutil
LOCAL_WHOLE_STATIC_LIBRARIES += libswscale
include $(BUILD_SHARED_LIBRARY)
$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavformat)
$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavcodec)
$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavutil)
$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libswscale)
应该就能用了,而怎么用的话,可以参考下面这个大大写的文文,也可用来移植ios:
http://blog.csdn.net/langresser_king/article/details/
注意:在android下要将播放的视频文件拷贝到可写目录(且目录必须存在)去,不然会打开错误的,谨记……
【上篇】【下篇】
您可能还会对这些文章感兴趣!
同分类最新文章下次自动登录
现在的位置:
& 综合 & 正文
解决Android平台移植ffmpeg的一揽子问题
IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是基于移植的ffmpeg基础上做了些改进,他做的主要贡献有:
1. 移植了ffmpeg并将与媒体相关的结构体在java层重新进行了封装,方便应用在java层直接操作ffmpeg API,如各种媒体格式转码及播放,如图1所示
2. 模仿Android的MediaPlayer类实现了ffmpeg的播放接口,如setDataSource(),setDisplay(),start(), stop(),pause()等,缺点是没有实现seek功能。
3. 实现了一个简单播放器功能,抛弃掉ffmpeg自带的ffplay播放器,他重新实现了音视频的分离播放和同步处理等播放器应有的功能。
图1 ffmpeg的java层封装
基于Android移植ffmpeg的意义在于:
1.解决了Android媒体框架OpenCore的多媒体支持不足,虽然说Android平台的软解功耗大,但是从PC机的发展历史看,Android的视频处理以后也会走以硬解为主,软解为辅的路线。
2. 解决Android平台直播的问题,虽然Android支持RTSP/RTP的直播方案,但是这种方案主要是普遍用在电信设备上,基于互联网的海量视频服务提供者还是以http live streaming方案为主,测试时可以用ffmpeg将直播流打包成分段的ts流(如10秒钟),然后组织成m3u8文件实现完整的直播方案,而且互联网的直播内容还有很多是基于mms协议的,视频格式是wmv,要聚集这些内容都是离不开ffmpeg软解的。
移植步骤:
1. 下载havlenaptr移植的ffmpeg().
基于ndk编译下载的ffmpeg,出现的编译问题主要是文件的存放路径不对,修改jni目录下的Android.mk文件,增加头文件目录$(LOCAL_PATH)/../include/android,修改Vector.h文件为:
#include &cutils/log.h&#include &utils/VectorImpl.h&#include &utils/TypeHelpers.h&
3.utils目录下缺少TypeHelpers.h,添加该文件:
#ifndef ANDROID_TYPE_HELPERS_H
#define ANDROID_TYPE_HELPERS_H
#include &new&
#include &stdint.h&
#include &string.h&
#include &sys/types.h&
namespace android {
template &typename T& struct trait_trivial_ctor
{ enum { value = false }; };
template &typename T& struct trait_trivial_dtor
{ enum { value = false }; };
template &typename T& struct trait_trivial_copy
{ enum { value = false }; };
template &typename T& struct trait_trivial_assign{ enum { value = false }; };
template &typename T& struct trait_pointer
{ enum { value = false }; };
template &typename T& struct trait_pointer&T*& { enum { value = true }; };
#define ANDROID_BASIC_TYPES_TRAITS( T )
template&& struct trait_trivial_ctor& T &
{ enum { value = true }; };
template&& struct trait_trivial_dtor& T &
{ enum { value = true }; };
template&& struct trait_trivial_copy& T &
{ enum { value = true }; };
template&& struct trait_trivial_assign& T &{ enum { value = true }; };
#define ANDROID_TYPE_TRAITS( T, ctor, dtor, copy, assign )
template&& struct trait_trivial_ctor& T &
{ enum { value = ctor }; };
template&& struct trait_trivial_dtor& T &
{ enum { value = dtor }; };
template&& struct trait_trivial_copy& T &
{ enum { value = copy }; };
template&& struct trait_trivial_assign& T &{ enum { value = assign }; };
template &typename TYPE&
struct traits {
is_pointer
= trait_pointer&TYPE&::value,
has_trivial_ctor
= is_pointer || trait_trivial_ctor&TYPE&::value,
has_trivial_dtor
= is_pointer || trait_trivial_dtor&TYPE&::value,
has_trivial_copy
= is_pointer || trait_trivial_copy&TYPE&::value,
has_trivial_assign
= is_pointer || trait_trivial_assign&TYPE&::value
template &typename T, typename U&
struct aggregate_traits {
is_pointer
has_trivial_ctor
= traits&T&::has_trivial_ctor && traits&U&::has_trivial_ctor,
has_trivial_dtor
= traits&T&::has_trivial_dtor && traits&U&::has_trivial_dtor,
has_trivial_copy
= traits&T&::has_trivial_copy && traits&U&::has_trivial_copy,
has_trivial_assign
= traits&T&::has_trivial_assign && traits&U&::has_trivial_assign
ANDROID_BASIC_TYPES_TRAITS( void );
ANDROID_BASIC_TYPES_TRAITS( bool );
ANDROID_BASIC_TYPES_TRAITS( char );
ANDROID_BASIC_TYPES_TRAITS( unsigned char );
ANDROID_BASIC_TYPES_TRAITS( short );
ANDROID_BASIC_TYPES_TRAITS( unsigned short );
ANDROID_BASIC_TYPES_TRAITS( int );
ANDROID_BASIC_TYPES_TRAITS( unsigned int );
ANDROID_BASIC_TYPES_TRAITS( long );
ANDROID_BASIC_TYPES_TRAITS( unsigned long );
ANDROID_BASIC_TYPES_TRAITS( long long );
ANDROID_BASIC_TYPES_TRAITS( unsigned long long );
ANDROID_BASIC_TYPES_TRAITS( float );
ANDROID_BASIC_TYPES_TRAITS( double );
template&typename TYPE& inline
int strictly_order_type(const TYPE& lhs, const TYPE& rhs) {
return (lhs & rhs) ? 1 : 0;
template&typename TYPE& inline
int compare_type(const TYPE& lhs, const TYPE& rhs) {
return strictly_order_type(rhs, lhs) - strictly_order_type(lhs, rhs);
template&typename TYPE& inline
void construct_type(TYPE* p, size_t n) {
if (!traits&TYPE&::has_trivial_ctor) {
while (n--) {
new(p++) TYPE;
template&typename TYPE& inline
void destroy_type(TYPE* p, size_t n) {
if (!traits&TYPE&::has_trivial_dtor) {
while (n--) {
p-&~TYPE();
template&typename TYPE& inline
void copy_type(TYPE* d, const TYPE* s, size_t n) {
if (!traits&TYPE&::has_trivial_copy) {
while (n--) {
new(d) TYPE(*s);
memcpy(d,s,n*sizeof(TYPE));
template&typename TYPE& inline
void assign_type(TYPE* d, const TYPE* s, size_t n) {
if (!traits&TYPE&::has_trivial_assign) {
while (n--) {
*d++ = *s++;
memcpy(d,s,n*sizeof(TYPE));
template&typename TYPE& inline
void splat_type(TYPE* where, const TYPE* what, size_t n) {
if (!traits&TYPE&::has_trivial_copy) {
while (n--) {
new(where) TYPE(*what);
while (n--) {
*where++ = *
template&typename TYPE& inline
void move_forward_type(TYPE* d, const TYPE* s, size_t n = 1) {
if (!traits&TYPE&::has_trivial_copy || !traits&TYPE&::has_trivial_dtor) {
while (n--) {
if (!traits&TYPE&::has_trivial_copy) {
new(d) TYPE(*s);
if (!traits&TYPE&::has_trivial_dtor) {
s-&~TYPE();
memmove(d,s,n*sizeof(TYPE));
template&typename TYPE& inline
void move_backward_type(TYPE* d, const TYPE* s, size_t n = 1) {
if (!traits&TYPE&::has_trivial_copy || !traits&TYPE&::has_trivial_dtor) {
while (n--) {
if (!traits&TYPE&::has_trivial_copy) {
new(d) TYPE(*s);
if (!traits&TYPE&::has_trivial_dtor) {
s-&~TYPE();
memmove(d,s,n*sizeof(TYPE));
template &typename KEY, typename VALUE&
struct key_value_pair_t {
key_value_pair_t() { }
key_value_pair_t(const key_value_pair_t& o) : key(o.key), value(o.value) { }
key_value_pair_t(const KEY& k, const VALUE& v) : key(k), value(v)
key_value_pair_t(const KEY& k) : key(k) { }
inline bool operator & (const key_value_pair_t& o) const {
return strictly_order_type(key, o.key);
template&&
template &typename K, typename V&
struct trait_trivial_ctor& key_value_pair_t&K, V& &
{ enum { value = aggregate_traits&K,V&::has_trivial_ctor }; };
template&&
template &typename K, typename V&
struct trait_trivial_dtor& key_value_pair_t&K, V& &
{ enum { value = aggregate_traits&K,V&::has_trivial_dtor }; };
template&&
template &typename K, typename V&
struct trait_trivial_copy& key_value_pair_t&K, V& &
{ enum { value = aggregate_traits&K,V&::has_trivial_copy }; };
template&&
template &typename K, typename V&
struct trait_trivial_assign& key_value_pair_t&K, V& &
{ enum { value = aggregate_traits&K,V&::has_trivial_assign};};
#endif // ANDROID_TYPE_HELPERS_H
4.编译中出现 make: *** No rule to make target `/cygdrive/e/workspace/myffmpeg/obj/local/armeabi/libjniaudio.so', needed by `/cygdrive/e/workspace/myffmpeg/obj/local/armeabi/libmediaplayer.a'.
Stop. 需要把下载的ffmpeg中的libjniaudio.so和libjnivideo.so放到错误中指定的目录下。
5. 编译成功后运行的结果如下:
当点击媒体文件播放时,发现画面显示不正常,如下所示:
调试后发现MediaPlayer.cpp中没有像Android自带播放器一样实现OnVideoSizeChangedListener的回调函数,当播放视图(SurfaceView)创建后没有根据实际播放的视频大小做调整,而且画面没有居中显示,所以我在此基础上做了如下改进
1. 实现OnVideoSizeChangedListener接口,通知播放界面调整大小
2. 播放界面剧中显示,等比率缩放视频大小。
3. 实现Seek功能
3.1 要实现getCurrentPosition(), 因为拖动时传过来的是时间millisecond
3.2 把milli second转化成timestamp掉用av_seek...
3.3 在IDecoder类里面加入flush函数,实际上就是seek的时候把队列里的AVPacket清除掉
<span style="color:# 通过av_gettime()函数作为外部参考时钟,实现音视频同步,需要hurryup和实现drop frame的处理。
下面是调整后播放flv(h264+aac)格式(分辨率为320*240,25帧/S)的结果,软解播放达到平均22帧/s
其它wmv,ts流,avi等格式均可播放,但是音质效果需要改进。
最近的进展情况:
1. 实现ffmpeg播放的回调接口,可以通知界面刷新状态,如去掉缓冲提示等。
public interface IFFMpegPlayer {
public void onPlay();
public void onStop();
public void onRelease();
public void onError(String msg, Exception e);
2. 定制话播放控制栏界面,效果如下:
替换ffmpeg自带的控制栏界面
如何支持http网络播放,需要config.h里enable相关选项,我的配置参考如下:
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "--target-os=linux --arch=armv41 --enable-cross-compile --cc=/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-gcc --cross-prefix=/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi- --nm=/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-nm --extra-cflags='-fPIC -DANDROID' --enable-static --disable-shared --disable-asm --disable-yasm --prefix=/home/ffmpeg-android-bin --extra-ldflags='-Wl,-T,/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/platforms/android-4/arch-arm/usr/lib -L/home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/platforms/android-4/arch-arm/usr/lib -nostdlib /home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/crtbegin.o /home/petr/projects/android_api/ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/crtend.o -lc -lm -ldl'"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define FFMPEG_DATADIR "/home/ffmpeg-android-bin/share/ffmpeg"
#define CC_TYPE "gcc"
#define CC_VERSION __VERSION__
#define restrict restrict
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "/n/t"
#define EXTERN_PREFIX ""
#define EXTERN_ASM
#define ARCH_ALPHA 0
#define ARCH_ARM 0
#define ARCH_AVR32 0
#define ARCH_AVR32_AP 0
#define ARCH_AVR32_UC 0
#define ARCH_BFIN 0
#define ARCH_IA64 0
#define ARCH_M68K 0
#define ARCH_MIPS 0
#define ARCH_MIPS64 0
#define ARCH_PARISC 0
#define ARCH_PPC 0
#define ARCH_PPC64 0
#define ARCH_S390 0
#define ARCH_SH4 0
#define ARCH_SPARC 0
#define ARCH_SPARC64 0
#define ARCH_TOMI 0
#define ARCH_X86 0
#define ARCH_X86_32 0
#define ARCH_X86_64 0
#define HAVE_ALTIVEC 0
#define HAVE_AMD3DNOW 0
#define HAVE_AMD3DNOWEXT 0
#define HAVE_ARMV5TE 0
#define HAVE_ARMV6 0
#define HAVE_ARMV6T2 0
#define HAVE_ARMVFP 0
#define HAVE_IWMMXT 0
#define HAVE_MMI 0
#define HAVE_MMX 0
#define HAVE_MMX2 0
#define HAVE_NEON 0
#define HAVE_PPC4XX 0
#define HAVE_SSE 0
#define HAVE_SSSE3 0
#define HAVE_VIS 0
#define HAVE_BIGENDIAN 0
#define HAVE_BEOSTHREADS 0
#define HAVE_OS2THREADS 0
#define HAVE_PTHREADS 0
#define HAVE_W32THREADS 0
#define HAVE_ALSA_ASOUNDLIB_H 0
#define HAVE_ALTIVEC_H 0
#define HAVE_ARPA_INET_H 0
#define HAVE_ATTRIBUTE_MAY_ALIAS 1
#define HAVE_ATTRIBUTE_PACKED 1
#define HAVE_BSWAP 0
#define HAVE_CLOSESOCKET 0
#define HAVE_CMOV 0
#define HAVE_CONIO_H 0
#define HAVE_DCBZL 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
#define HAVE_DEV_IC_BT8XX_H 0
#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
#define HAVE_DLFCN_H 0
#define HAVE_DLOPEN 1
#define HAVE_DOS_PATHS 0
#define HAVE_EBP_AVAILABLE 0
#define HAVE_EBX_AVAILABLE 0
#define HAVE_EXP2 0
#define HAVE_EXP2F 0
#define HAVE_FAST_64BIT 0
#define HAVE_FAST_CLZ 1
#define HAVE_FAST_CMOV 0
#define HAVE_FAST_UNALIGNED 0
#define HAVE_FORK 1
#define HAVE_GETADDRINFO 1
#define HAVE_GETHRTIME 0
#define HAVE_GETPROCESSMEMORYINFO 0
#define HAVE_GETPROCESSTIMES 0
#define HAVE_GETRUSAGE 0
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0
#define HAVE_INET_ATON 1
#define HAVE_INLINE_ASM 1
#define HAVE_ISATTY 1
#define HAVE_LDBRX 0
#define HAVE_LIBDC
#define HAVE_LIBDC
#define HAVE_LOCAL_ALIGNED_16 0
#define HAVE_LOCAL_ALIGNED_8 0
#define HAVE_LOG2 0
#define HAVE_LOG2F 0
#define HAVE_LOONGSON 0
#define HAVE_LRINT 0
#define HAVE_LRINTF 0
#define HAVE_LZO1X_999_COMPRESS 0
#define HAVE_MACHINE_IOCTL_BT848_H 0
#define HAVE_MACHINE_IOCTL_METEOR_H 0
#define HAVE_MALLOC_H 0
#define HAVE_MEMALIGN 1
#define HAVE_MKSTEMP 1
#define HAVE_PLD 1
#define HAVE_POSIX_MEMALIGN 0
#define HAVE_ROUND 0
#define HAVE_ROUNDF 0
#define HAVE_SDL 0
#define HAVE_SDL_VIDEO_SIZE 0
#define HAVE_SETMODE 0
#define HAVE_SOCKLEN_T 1
#define HAVE_SOUNDCARD_H 0
#define HAVE_POLL_H 0
#define HAVE_SETRLIMIT 0
#define HAVE_STRERROR_R 1
#define HAVE_STRUCT_ADDRINFO 1
#define HAVE_STRUCT_IPV6_MREQ 0
#define HAVE_STRUCT_SOCKADDR_IN6 0
#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
#define HAVE_SYMVER 1
#define HAVE_SYMVER_GNU_ASM 1
#define HAVE_SYMVER_ASM_LABEL 0
#define HAVE_SYS_MMAN_H 0
#define HAVE_SYS_RESOURCE_H 0
#define HAVE_SYS_SELECT_H 0
#define HAVE_SYS_SOUNDCARD_H 0
#define HAVE_SYS_VIDEOIO_H 0
#define HAVE_TEN_OPERANDS 0
#define HAVE_TERMIOS_H 0
#define HAVE_THREADS 0
#define HAVE_TRUNCF 0
#define HAVE_VFP_ARGS 1
#define HAVE_VIRTUALALLOC 0
#define HAVE_WINSOCK2_H 0
#define HAVE_XFORM_ASM 0
#define HAVE_YASM 0
#define CONFIG_BSFS 1
#define CONFIG_DECODERS 1
#define CONFIG_DEMUXERS 1
#define CONFIG_ENCODERS 1
#define CONFIG_FILTERS 1
#define CONFIG_HWACCELS 0
#define CONFIG_INDEVS 1
#define CONFIG_MUXERS 1
#define CONFIG_OUTDEVS 0
#define CONFIG_PARSERS 1
#define CONFIG_PROTOCOLS 1
#define CONFIG_AANDCT 1
#define CONFIG_AVCODEC 1
#define CONFIG_AVDEVICE 0
#define CONFIG_AVFILTER 0
#define CONFIG_AVFILTER_LAVF 0
#define CONFIG_AVFORMAT 1
#define CONFIG_AVISYNTH 0
#define CONFIG_BZLIB 0
#define CONFIG_DCT 1
#define CONFIG_DOC 0
#define CONFIG_DWT 1
#define CONFIG_DXVA2 0
#define CONFIG_FASTDIV 1
#define CONFIG_FFMPEG 1
#define CONFIG_FFPLAY 0
#define CONFIG_FFPROBE 1
#define CONFIG_FFSERVER 0
#define CONFIG_FFT 1
#define CONFIG_GOLOMB 1
#define CONFIG_GPL 0
#define CONFIG_GPROF 0
#define CONFIG_GRAY 0
#define CONFIG_H264DSP 1
#define CONFIG_HARDCODED_TABLES 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBDIRAC 0
#define CONFIG_LIBFAAC 0
#define CONFIG_LIBGSM 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 0
#define CONFIG_LIBOPENJPEG 0
#define CONFIG_LIBRTMP 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSPEEX 0
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBXVID 0
#define CONFIG_LPC 1
#define CONFIG_LSP 1
#define CONFIG_MDCT 1
#define CONFIG_MEMALIGN_HACK 0
#define CONFIG_MLIB 0
#define CONFIG_MPEGAUDIO_HP 1
#define CONFIG_NETWORK 1
#define CONFIG_NONFREE 0
#define CONFIG_PIC 0
#define CONFIG_POSTPROC 0
#define CONFIG_POWERPC_PERF 0
#define CONFIG_RDFT 1
#define CONFIG_RUNTIME_CPUDETECT 0
#define CONFIG_SHARED 0
#define CONFIG_SMALL 0
#define CONFIG_SRAM 0
#define CONFIG_STATIC 1
#define CONFIG_SWSCALE 1
#define CONFIG_SWSCALE_ALPHA 1
#define CONFIG_VAAPI 0
#define CONFIG_VDPAU 0
#define CONFIG_VERSION3 0
#define CONFIG_X11GRAB 0
#define CONFIG_ZLIB 0
#define CONFIG_AVUTIL 1
#define CONFIG_GPLV3 0
#define CONFIG_LGPLV3 0
#define CONFIG_AASC_DECODER 1
#define CONFIG_AMV_DECODER 1
#define CONFIG_ANM_DECODER 1
#define CONFIG_ASV1_DECODER 1
#define CONFIG_ASV2_DECODER 1
#define CONFIG_AURA_DECODER 1
#define CONFIG_AURA2_DECODER 1
#define CONFIG_AVS_DECODER 1
#define CONFIG_BETHSOFTVID_DECODER 1
#define CONFIG_BFI_DECODER 1
#define CONFIG_BINK_DECODER 1
#define CONFIG_BMP_DECODER 1
#define CONFIG_C93_DECODER 1
#define CONFIG_CAVS_DECODER 1
#define CONFIG_CDGRAPHICS_DECODER 1
#define CONFIG_CINEPAK_DECODER 1
#define CONFIG_CLJR_DECODER 1
#define CONFIG_CSCD_DECODER 1
#define CONFIG_CYUV_DECODER 1
#define CONFIG_DNXHD_DECODER 1
#define CONFIG_DPX_DECODER 1
#define CONFIG_DSICINVIDEO_DECODER 1
#define CONFIG_DVVIDEO_DECODER 1
#define CONFIG_DXA_DECODER 0
#define CONFIG_EACMV_DECODER 1
#define CONFIG_EAMAD_DECODER 1
#define CONFIG_EATGQ_DECODER 1
#define CONFIG_EATGV_DECODER 1
#define CONFIG_EATQI_DECODER 1
#define CONFIG_EIGHTBPS_DECODER 1
#define CONFIG_EIGHTSVX_EXP_DECODER 1
#define CONFIG_EIGHTSVX_FIB_DECODER 1
#define CONFIG_ESCAPE124_DECODER 1
#define CONFIG_FFV1_DECODER 1
#define CONFIG_FFVHUFF_DECODER 1
#define CONFIG_FLASHSV_DECODER 0
#define CONFIG_FLIC_DECODER 1
#define CONFIG_FLV_DECODER 1
#define CONFIG_FOURXM_DECODER 1
#define CONFIG_FRAPS_DECODER 1
#define CONFIG_FRWU_DECODER 1
#define CONFIG_GIF_DECODER 1
#define CONFIG_H261_DECODER 1
#define CONFIG_H263_DECODER 1
#define CONFIG_H263I_DECODER 1
#define CONFIG_H264_DECODER 1
#define CONFIG_H264_VDPAU_DECODER 0
#define CONFIG_HUFFYUV_DECODER 1
#define CONFIG_IDCIN_DECODER 1
#define CONFIG_IFF_BYTERUN1_DECODER 1
#define CONFIG_IFF_ILBM_DECODER 1
#define CONFIG_INDEO2_DECODER 1
#define CONFIG_INDEO3_DECODER 1
<span class="p
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 一揽子解决方案 的文章

 

随机推荐