?
?
?
原文地址: http://blog.csdn.net/moruite/article/details/6305944
?
IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是基于havlenapetr移植的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(https://github.com/havlenapetr/FFMpeg/zipball/debug).
2.? 基于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,添加该文件:
- /*?
- ?*??TypeHelpers.h?
- ?*???
- ?*??Copyright?2005?The?Android?Open?Source?Project?
- ?*?
- ?*/??
- #ifndef?ANDROID_TYPE_HELPERS_H??
- #define?ANDROID_TYPE_HELPERS_H??
- #include?<new>??
- #include?<stdint.h>??
- #include?<string.h>??
- #include?<sys/types.h>??
- //?---------------------------------------??
- namespace?android?{??
- /*?
- ?*?Types?traits?
- ?*/??
- ??????
- 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?{??
- ????enum?{??
- ????????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?{??
- ????enum?{??
- ????????is_pointer??????????=?false,??
- ????????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??
- ????};??
- };??
- //?---------------------------------------??
- /*?
- ?*?basic?types?traits?
- ?*/??
- ???
- 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?);??
- //?---------------------------------------??
- ??????
- /*?
- ?*?compare?and?order?types?
- ?*/??
- 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);??
- }??
- /*?
- ?*?create,?destroy,?copy?and?assign?types...?
- ?*/??
- ???
- 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();??
- ????????????p++;??
- ????????}??
- ????}??
- }??
- 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);??
- ????????????d++,?s++;??
- ????????}??
- ????}?else?{??
- ????????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++;??
- ????????}??
- ????}?else?{??
- ????????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);??
- ????????????where++;??
- ????????}??
- ????}?else?{??
- ?????????while?(n--)?{??
- ?????????????*where++?=?*what;??
- ????????}??
- ????}??
- }??
- 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)?{??
- ????????d?+=?n;??
- ????????s?+=?n;??
- ????????while?(n--)?{??
- ????????????--d,?--s;??
- ????????????if?(!traits<TYPE>::has_trivial_copy)?{??
- ????????????????new(d)?TYPE(*s);??
- ????????????}?else?{??
- ????????????????*d?=?*s;??
- ????????????}??
- ????????????if?(!traits<TYPE>::has_trivial_dtor)?{??
- ????????????????s->~TYPE();??
- ????????????}??
- ????????}??
- ????}?else?{??
- ????????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);??
- ????????????}?else?{??
- ????????????????*d?=?*s;??
- ????????????}??
- ????????????if?(!traits<TYPE>::has_trivial_dtor)?{??
- ????????????????s->~TYPE();??
- ????????????}??
- ????????????d++,?s++;??
- ????????}??
- ????}?else?{??
- ????????memmove(d,s,n*sizeof(TYPE));??
- ????}??
- }??
- //?---------------------------------------??
- /*?
- ?*?a?key/value?pair?
- ?*/??
- template?<typename?KEY,?typename?VALUE>??
- struct?key_value_pair_t?{??
- ????KEY?????key;??
- ????VALUE???value;??
- ????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};};??
- //?---------------------------------------??
- };?//?namespace?android??
- //?---------------------------------------??
- #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清除掉
- 3.4 通过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相关选项,我的配置参考如下:
- /*?Automatically?generated?by?configure?-?do?not?modify!?*/??
- #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_LIBDC1394_1?0??
- #define?HAVE_LIBDC1394_2?0??
- #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??
- #define?CONFIG_INDEO5_DECODER?1??
- #define?CONFIG_INTERPLAY_VIDEO_DECODER?1??
- #define?CONFIG_JPEGLS_DECODER?1??
- #define?CONFIG_KGV1_DECODER?1??
- #define?CONFIG_KMVC_DECODER?1??
- #define?CONFIG_LOCO_DECODER?1??
- #define?CONFIG_MDEC_DECODER?1??
- #define?CONFIG_MIMIC_DECODER?1??
- #define?CONFIG_MJPEG_DECODER?1??
- #define?CONFIG_MJPEGB_DECODER?1??
- #define?CONFIG_MMVIDEO_DECODER?1??
- #define?CONFIG_MOTIONPIXELS_DECODER?1??
- #define?CONFIG_MPEG_XVMC_DECODER?0??
- #define?CONFIG_MPEG1VIDEO_DECODER?1??
- #define?CONFIG_MPEG2VIDEO_DECODER?1??
- #define?CONFIG_MPEG4_DECODER?1??
- #define?CONFIG_MPEG4_VDPAU_DECODER?0??
- #define?CONFIG_MPEGVIDEO_DECODER?1??
- #define?CONFIG_MPEG_VDPAU_DECODER?0??
- #define?CONFIG_MPEG1_VDPAU_DECODER?0??
- #define?CONFIG_MSMPEG4V1_DECODER?1??
- #define?CONFIG_MSMPEG4V2_DECODER?1??
- #define?CONFIG_MSMPEG4V3_DECODER?1??
- #define?CONFIG_MSRLE_DECODER?1??
- #define?CONFIG_MSVIDEO1_DECODER?1??
- #define?CONFIG_MSZH_DECODER?1??
- #define?CONFIG_NUV_DECODER?1??
- #define?CONFIG_PAM_DECODER?1??
- #define?CONFIG_PBM_DECODER?1??
- #define?CONFIG_PCX_DECODER?1??
- #define?CONFIG_PGM_DECODER?1??
- #define?CONFIG_PGMYUV_DECODER?1??
- #define?CONFIG_PICTOR_DECODER?1??
- #define?CONFIG_PNG_DECODER?0??
- #define?CONFIG_PPM_DECODER?1??
- #define?CONFIG_PTX_DECODER?1??
- #define?CONFIG_QDRAW_DECODER?1??
- #define?CONFIG_QPEG_DECODER?1??
- #define?CONFIG_QTRLE_DECODER?1??
- #define?CONFIG_R210_DECODER?1??
- #define?CONFIG_RAWVIDEO_DECODER?1??
- #define?CONFIG_RL2_DECODER?1??
- #define?CONFIG_ROQ_DECODER?1??
- #define?CONFIG_RPZA_DECODER?1??
- #define?CONFIG_RV10_DECODER?1??
- #define?CONFIG_RV20_DECODER?1??
- #define?CONFIG_RV30_DECODER?1??
- #define?CONFIG_RV40_DECODER?1??
- #define?CONFIG_SGI_DECODER?1??
- #define?CONFIG_SMACKER_DECODER?1??
- #define?CONFIG_SMC_DECODER?1??
- #define?CONFIG_SNOW_DECODER?1??
- #define?CONFIG_SP5X_DECODER?1??
- #define?CONFIG_SUNRAST_DECODER?1??
- #define?CONFIG_SVQ1_DECODER?1??
- #define?CONFIG_SVQ3_DECODER?1??
- #define?CONFIG_TARGA_DECODER?1??
- #define?CONFIG_THEORA_DECODER?1??
- #define?CONFIG_THP_DECODER?1??
- #define?CONFIG_TIERTEXSEQVIDEO_DECODER?1??
- #define?CONFIG_TIFF_DECODER?1??
- #define?CONFIG_TMV_DECODER?1??
- #define?CONFIG_TRUEMOTION1_DECODER?1??
- #define?CONFIG_TRUEMOTION2_DECODER?1??
- #define?CONFIG_TSCC_DECODER?0??
- #define?CONFIG_TXD_DECODER?1??
- #define?CONFIG_ULTI_DECODER?1??
- #define?CONFIG_V210_DECODER?1??
- #define?CONFIG_V210X_DECODER?1??
- #define?CONFIG_VB_DECODER?1??
- #define?CONFIG_VC1_DECODER?1??
- #define?CONFIG_VC1_VDPAU_DECODER?0??
- #define?CONFIG_VCR1_DECODER?1??
- #define?CONFIG_VMDVIDEO_DECODER?1??
- #define?CONFIG_VMNC_DECODER?1??
- #define?CONFIG_VP3_DECODER?1??
- #define?CONFIG_VP5_DECODER?1??
- #define?CONFIG_VP6_DECODER?1??
- #define?CONFIG_VP6A_DECODER?1??
- #define?CONFIG_VP6F_DECODER?1??
- #define?CONFIG_VQA_DECODER?1??
- #define?CONFIG_WMV1_DECODER?1??
- #define?CONFIG_WMV2_DECODER?1??
- #define?CONFIG_WMV3_DECODER?1??
- #define?CONFIG_WMV3_VDPAU_DECODER?0??
- #define?CONFIG_WNV1_DECODER?1??
- #define?CONFIG_XAN_WC3_DECODER?1??
- #define?CONFIG_XL_DECODER?1??
- #define?CONFIG_YOP_DECODER?1??
- #define?CONFIG_ZLIB_DECODER?0??
- #define?CONFIG_ZMBV_DECODER?0??
- #define?CONFIG_AAC_DECODER?1??
- #define?CONFIG_AC3_DECODER?1??
- #define?CONFIG_ALAC_DECODER?1??
- #define?CONFIG_ALS_DECODER?1??
- #define?CONFIG_AMRNB_DECODER?1??
- #define?CONFIG_APE_DECODER?1??
- #define?CONFIG_ATRAC1_DECODER?1??
- #define?CONFIG_ATRAC3_DECODER?1??
- #define?CONFIG_BINKAUDIO_DCT_DECODER?1??
- #define?CONFIG_BINKAUDIO_RDFT_DECODER?1??
- #define?CONFIG_COOK_DECODER?1??
- #define?CONFIG_DCA_DECODER?1??
- #define?CONFIG_DSICINAUDIO_DECODER?1??
- #define?CONFIG_EAC3_DECODER?1??
- #define?CONFIG_FLAC_DECODER?1??
- #define?CONFIG_IMC_DECODER?1??
- #define?CONFIG_MACE3_DECODER?1??
- #define?CONFIG_MACE6_DECODER?1??
- #define?CONFIG_MLP_DECODER?1??
- #define?CONFIG_MP1_DECODER?1??
- #define?CONFIG_MP1FLOAT_DECODER?1??
- #define?CONFIG_MP2_DECODER?1??
- #define?CONFIG_MP2FLOAT_DECODER?1??
- #define?CONFIG_MP3_DECODER?1??
- #define?CONFIG_MP3FLOAT_DECODER?1??
- #define?CONFIG_MP3ADU_DECODER?1??
- #define?CONFIG_MP3ADUFLOAT_DECODER?1??
- #define?CONFIG_MP3ON4_DECODER?1??
- #define?CONFIG_MP3ON4FLOAT_DECODER?1??
- #define?CONFIG_MPC7_DECODER?1??
- #define?CONFIG_MPC8_DECODER?1??
- #define?CONFIG_NELLYMOSER_DECODER?1??
- #define?CONFIG_QCELP_DECODER?1??
- #define?CONFIG_QDM2_DECODER?1??
- #define?CONFIG_RA_144_DECODER?1??
- #define?CONFIG_RA_288_DECODER?1??
- #define?CONFIG_SHORTEN_DECODER?1??
- #define?CONFIG_SIPR_DECODER?1??
- #define?CONFIG_SMACKAUD_DECODER?1??
- #define?CONFIG_SONIC_DECODER?1??
- #define?CONFIG_TRUEHD_DECODER?1??
- #define?CONFIG_TRUESPEECH_DECODER?1??
- #define?CONFIG_TTA_DECODER?1??
- #define?CONFIG_TWINVQ_DECODER?1??
- #define?CONFIG_VMDAUDIO_DECODER?1??
- #define?CONFIG_VORBIS_DECODER?1??
- #define?CONFIG_WAVPACK_DECODER?1??
- #define?CONFIG_WMAPRO_DECODER?1??
- #define?CONFIG_WMAV1_DECODER?1??
- #define?CONFIG_WMAV2_DECODER?1??
- #define?CONFIG_WMAVOICE_DECODER?1??
- #define?CONFIG_WS_SND1_DECODER?1??
- #define?CONFIG_PCM_ALAW_DECODER?1??
- #define?CONFIG_PCM_BLURAY_DECODER?1??
- #define?CONFIG_PCM_DVD_DECODER?1??
- #define?CONFIG_PCM_F32BE_DECODER?1??
- #define?CONFIG_PCM_F32LE_DECODER?1??
- #define?CONFIG_PCM_F64BE_DECODER?1??
- #define?CONFIG_PCM_F64LE_DECODER?1??
- #define?CONFIG_PCM_MULAW_DECODER?1??
- #define?CONFIG_PCM_S8_DECODER?1??
- #define?CONFIG_PCM_S16BE_DECODER?1??
- #define?CONFIG_PCM_S16LE_DECODER?1??
- #define?CONFIG_PCM_S16LE_PLANAR_DECODER?1??
- #define?CONFIG_PCM_S24BE_DECODER?1??
- #define?CONFIG_PCM_S24DAUD_DECODER?1??
- #define?CONFIG_PCM_S24LE_DECODER?1??
- #define?CONFIG_PCM_S32BE_DECODER?1??
- #define?CONFIG_PCM_S32LE_DECODER?1??
- #define?CONFIG_PCM_U8_DECODER?1??
- #define?CONFIG_PCM_U16BE_DECODER?1??
- #define?CONFIG_PCM_U16LE_DECODER?1??
- #define?CONFIG_PCM_U24BE_DECODER?1??
- #define?CONFIG_PCM_U24LE_DECODER?1??
- #define?CONFIG_PCM_U32BE_DECODER?1??
- #define?CONFIG_PCM_U32LE_DECODER?1??
- #define?CONFIG_PCM_ZORK_DECODER?1??
- #define?CONFIG_INTERPLAY_DPCM_DECODER?1??
- #define?CONFIG_ROQ_DPCM_DECODER?1??
- #define?CONFIG_SOL_DPCM_DECODER?1??
- #define?CONFIG_XAN_DPCM_DECODER?1??
- #define?CONFIG_ADPCM_4XM_DECODER?1??
- #define?CONFIG_ADPCM_ADX_DECODER?1??
- #define?CONFIG_ADPCM_CT_DECODER?1??
- #define?CONFIG_ADPCM_EA_DECODER?1??
- #define?CONFIG_ADPCM_EA_MAXIS_XA_DECODER?1??
- #define?CONFIG_ADPCM_EA_R1_DECODER?1??
- #define?CONFIG_ADPCM_EA_R2_DECODER?1??
- #define?CONFIG_ADPCM_EA_R3_DECODER?1??
- #define?CONFIG_ADPCM_EA_XAS_DECODER?1??
- #define?CONFIG_ADPCM_G726_DECODER?1??
- #define?CONFIG_ADPCM_IMA_AMV_DECODER?1??
- #define?CONFIG_ADPCM_IMA_DK3_DECODER?1??
- #define?CONFIG_ADPCM_IMA_DK4_DECODER?1??
- #define?CONFIG_ADPCM_IMA_EA_EACS_DECODER?1??
- #define?CONFIG_ADPCM_IMA_EA_SEAD_DECODER?1??
- #define?CONFIG_ADPCM_IMA_ISS_DECODER?1??
- #define?CONFIG_ADPCM_IMA_QT_DECODER?1??
- #define?CONFIG_ADPCM_IMA_SMJPEG_DECODER?1??
- #define?CONFIG_ADPCM_IMA_WAV_DECODER?1??
- #define?CONFIG_ADPCM_IMA_WS_DECODER?1??
- #define?CONFIG_ADPCM_MS_DECODER?1??
- #define?CONFIG_ADPCM_SBPRO_2_DECODER?1??
- #define?CONFIG_ADPCM_SBPRO_3_DECODER?1??
- #define?CONFIG_ADPCM_SBPRO_4_DECODER?1??
- #define?CONFIG_ADPCM_SWF_DECODER?1??
- #define?CONFIG_ADPCM_THP_DECODER?1??
- #define?CONFIG_ADPCM_XA_DECODER?1??
- #define?CONFIG_ADPCM_YAMAHA_DECODER?1??
- #define?CONFIG_DVBSUB_DECODER?1??
- #define?CONFIG_DVDSUB_DECODER?1??
- #define?CONFIG_PGSSUB_DECODER?1??
- #define?CONFIG_XSUB_DECODER?1??
- #define?CONFIG_LIBDIRAC_DECODER?0??
- #define?CONFIG_LIBGSM_DECODER?0??
- #define?CONFIG_LIBGSM_MS_DECODER?0??
- #define?CONFIG_LIBOPENCORE_AMRNB_DECODER?0??
- #define?CONFIG_LIBOPENCORE_AMRWB_DECODER?0??
- #define?CONFIG_LIBOPENJPEG_DECODER?0??
- #define?CONFIG_LIBSCHROEDINGER_DECODER?0??
- #define?CONFIG_LIBSPEEX_DECODER?0??
- #define?CONFIG_LIBVPX_DECODER?0??
- #define?CONFIG_ASV1_ENCODER?1??
- #define?CONFIG_ASV2_ENCODER?1??
- #define?CONFIG_BMP_ENCODER?1??
- #define?CONFIG_DNXHD_ENCODER?1??
- #define?CONFIG_DVVIDEO_ENCODER?1??
- #define?CONFIG_FFV1_ENCODER?1??
- #define?CONFIG_FFVHUFF_ENCODER?1??
- #define?CONFIG_FLASHSV_ENCODER?0??
- #define?CONFIG_FLV_ENCODER?1??
- #define?CONFIG_GIF_ENCODER?1??
- #define?CONFIG_H261_ENCODER?1??
- #define?CONFIG_H263_ENCODER?1??
- #define?CONFIG_H263P_ENCODER?1??
- #define?CONFIG_HUFFYUV_ENCODER?1??
- #define?CONFIG_JPEGLS_ENCODER?1??
- #define?CONFIG_LJPEG_ENCODER?1??
- #define?CONFIG_MJPEG_ENCODER?1??
- #define?CONFIG_MPEG1VIDEO_ENCODER?1??
- #define?CONFIG_MPEG2VIDEO_ENCODER?1??
- #define?CONFIG_MPEG4_ENCODER?1??
- #define?CONFIG_MSMPEG4V1_ENCODER?1??
- #define?CONFIG_MSMPEG4V2_ENCODER?1??
- #define?CONFIG_MSMPEG4V3_ENCODER?1??
- #define?CONFIG_PAM_ENCODER?1??
- #define?CONFIG_PBM_ENCODER?1??
- #define?CONFIG_PCX_ENCODER?1??
- #define?CONFIG_PGM_ENCODER?1??
- #define?CONFIG_PGMYUV_ENCODER?1??
- #define?CONFIG_PNG_ENCODER?0??
- #define?CONFIG_PPM_ENCODER?1??
- #define?CONFIG_QTRLE_ENCODER?1??
- #define?CONFIG_RAWVIDEO_ENCODER?1??
- #define?CONFIG_ROQ_ENCODER?1??
- #define?CONFIG_RV10_ENCODER?1??
- #define?CONFIG_RV20_ENCODER?1??
- #define?CONFIG_SGI_ENCODER?1??
- #define?CONFIG_SNOW_ENCODER?1??
- #define?CONFIG_SVQ1_ENCODER?1??
- #define?CONFIG_TARGA_ENCODER?1??
- #define?CONFIG_TIFF_ENCODER?1??
- #define?CONFIG_V210_ENCODER?1??
- #define?CONFIG_WMV1_ENCODER?1??
- #define?CONFIG_WMV2_ENCODER?1??
- #define?CONFIG_ZLIB_ENCODER?0??
- #define?CONFIG_ZMBV_ENCODER?0??
- #define?CONFIG_AAC_ENCODER?1??
- #define?CONFIG_AC3_ENCODER?1??
- #define?CONFIG_ALAC_ENCODER?1??
- #define?CONFIG_FLAC_ENCODER?1??
- #define?CONFIG_MP2_ENCODER?1??
- #define?CONFIG_NELLYMOSER_ENCODER?1??
- #define?CONFIG_RA_144_ENCODER?1??
- #define?CONFIG_SONIC_ENCODER?1??
- #define?CONFIG_SONIC_LS_ENCODER?1??
- #define?CONFIG_VORBIS_ENCODER?1??
- #define?CONFIG_WMAV1_ENCODER?1??
- #define?CONFIG_WMAV2_ENCODER?1??
- #define?CONFIG_PCM_ALAW_ENCODER?1??
- #define?CONFIG_PCM_F32BE_ENCODER?1??
- #define?CONFIG_PCM_F32LE_ENCODER?1??
- #define?CONFIG_PCM_F64BE_ENCODER?1??
- #define?CONFIG_PCM_F64LE_ENCODER?1??
- #define?CONFIG_PCM_MULAW_ENCODER?1??
- #define?CONFIG_PCM_S8_ENCODER?1??
- #define?CONFIG_PCM_S16BE_ENCODER?1??
- #define?CONFIG_PCM_S16LE_ENCODER?1??
- #define?CONFIG_PCM_S24BE_ENCODER?1??
- #define?CONFIG_PCM_S24DAUD_ENCODER?1??
- #define?CONFIG_PCM_S24LE_ENCODER?1??
- #define?CONFIG_PCM_S32BE_ENCODER?1??
- #define?CONFIG_PCM_S32LE_ENCODER?1??
- #define?CONFIG_PCM_U8_ENCODER?1??
- #define?CONFIG_PCM_U16BE_ENCODER?1??
- #define?CONFIG_PCM_U16LE_ENCODER?1??
- #define?CONFIG_PCM_U24BE_ENCODER?1??
- #define?CONFIG_PCM_U24LE_ENCODER?1??
- #define?CONFIG_PCM_U32BE_ENCODER?1??
- #define?CONFIG_PCM_U32LE_ENCODER?1??
- #define?CONFIG_PCM_ZORK_ENCODER?1??
- #define?CONFIG_ROQ_DPCM_ENCODER?1??
- #define?CONFIG_ADPCM_ADX_ENCODER?1??
- #define?CONFIG_ADPCM_G726_ENCODER?1??
- #define?CONFIG_ADPCM_IMA_QT_ENCODER?1??
- #define?CONFIG_ADPCM_IMA_WAV_ENCODER?1??
- #define?CONFIG_ADPCM_MS_ENCODER?1??
- #define?CONFIG_ADPCM_SWF_ENCODER?1??
- #define?CONFIG_ADPCM_YAMAHA_ENCODER?1??
- #define?CONFIG_DVBSUB_ENCODER?1??
- #define?CONFIG_DVDSUB_ENCODER?1??
- #define?CONFIG_XSUB_ENCODER?1??
- #define?CONFIG_LIBDIRAC_ENCODER?0??
- #define?CONFIG_LIBFAAC_ENCODER?0??
- #define?CONFIG_LIBGSM_ENCODER?0??
- #define?CONFIG_LIBGSM_MS_ENCODER?0??
- #define?CONFIG_LIBMP3LAME_ENCODER?0??
- #define?CONFIG_LIBOPENCORE_AMRNB_ENCODER?0??
- #define?CONFIG_LIBSCHROEDINGER_ENCODER?0??
- #define?CONFIG_LIBTHEORA_ENCODER?0??
- #define?CONFIG_LIBVORBIS_ENCODER?0??
- #define?CONFIG_LIBVPX_ENCODER?0??
- #define?CONFIG_LIBX264_ENCODER?0??
- #define?CONFIG_LIBXVID_ENCODER?0??
- #define?CONFIG_H263_VAAPI_HWACCEL?0??
- #define?CONFIG_H264_DXVA2_HWACCEL?0??
- #define?CONFIG_H264_VAAPI_HWACCEL?0??
- #define?CONFIG_MPEG2_DXVA2_HWACCEL?0??
- #define?CONFIG_MPEG2_VAAPI_HWACCEL?0??
- #define?CONFIG_MPEG4_VAAPI_HWACCEL?0??
- #define?CONFIG_VC1_DXVA2_HWACCEL?0??
- #define?CONFIG_VC1_VAAPI_HWACCEL?0??
- #define?CONFIG_WMV3_DXVA2_HWACCEL?0??
- #define?CONFIG_WMV3_VAAPI_HWACCEL?0??
- #define?CONFIG_AAC_PARSER?1??
- #define?CONFIG_AC3_PARSER?1??
- #define?CONFIG_CAVSVIDEO_PARSER?1??
- #define?CONFIG_DCA_PARSER?1??
- #define?CONFIG_DIRAC_PARSER?1??
- #define?CONFIG_DNXHD_PARSER?1??
- #define?CONFIG_DVBSUB_PARSER?1??
- #define?CONFIG_DVDSUB_PARSER?1??
- #define?CONFIG_H261_PARSER?1??
- #define?CONFIG_H263_PARSER?1??
- #define?CONFIG_H264_PARSER?1??
- #define?CONFIG_MJPEG_PARSER?1??
- #define?CONFIG_MLP_PARSER?1??
- #define?CONFIG_MPEG4VIDEO_PARSER?1??
- #define?CONFIG_MPEGAUDIO_PARSER?1??
- #define?CONFIG_MPEGVIDEO_PARSER?1??
- #define?CONFIG_PNM_PARSER?1??
- #define?CONFIG_VC1_PARSER?1??
- #define?CONFIG_VP3_PARSER?1??
- #define?CONFIG_VP8_PARSER?1??
- #define?CONFIG_AAC_ADTSTOASC_BSF?1??
- #define?CONFIG_CHOMP_BSF?1??
- #define?CONFIG_DUMP_EXTRADATA_BSF?1??
- #define?CONFIG_H264_MP4TOANNEXB_BSF?1??
- #define?CONFIG_IMX_DUMP_HEADER_BSF?1??
- #define?CONFIG_MJPEGA_DUMP_HEADER_BSF?1??
- #define?CONFIG_MP3_HEADER_COMPRESS_BSF?1??
- #define?CONFIG_MP3_HEADER_DECOMPRESS_BSF?1??
- #define?CONFIG_MOV2TEXTSUB_BSF?1??
- #define?CONFIG_NOISE_BSF?1??
- #define?CONFIG_REMOVE_EXTRADATA_BSF?1??
- #define?CONFIG_TEXT2MOVSUB_BSF?1??
- #define?CONFIG_AAC_DEMUXER?1??
- #define?CONFIG_AC3_DEMUXER?1??
- #define?CONFIG_AEA_DEMUXER?1??
- #define?CONFIG_AIFF_DEMUXER?1??
- #define?CONFIG_AMR_DEMUXER?1??
- #define?CONFIG_ANM_DEMUXER?1??
- #define?CONFIG_APC_DEMUXER?1??
- #define?CONFIG_APE_DEMUXER?1??
- #define?CONFIG_ASF_DEMUXER?1??
- #define?CONFIG_ASS_DEMUXER?1??
- #define?CONFIG_AU_DEMUXER?1??
- #define?CONFIG_AVI_DEMUXER?1??
- #define?CONFIG_AVISYNTH_DEMUXER?0??
- #define?CONFIG_AVS_DEMUXER?1??
- #define?CONFIG_BETHSOFTVID_DEMUXER?1??
- #define?CONFIG_BFI_DEMUXER?1??
- #define?CONFIG_BINK_DEMUXER?1??
- #define?CONFIG_C93_DEMUXER?1??
- #define?CONFIG_CAF_DEMUXER?1??
- #define?CONFIG_CAVSVIDEO_DEMUXER?1??
- #define?CONFIG_CDG_DEMUXER?1??
- #define?CONFIG_DAUD_DEMUXER?1??
- #define?CONFIG_DIRAC_DEMUXER?1??
- #define?CONFIG_DNXHD_DEMUXER?1??
- #define?CONFIG_DSICIN_DEMUXER?1??
- #define?CONFIG_DTS_DEMUXER?1??
- #define?CONFIG_DV_DEMUXER?1??
- #define?CONFIG_DXA_DEMUXER?1??
- #define?CONFIG_EA_DEMUXER?1??
- #define?CONFIG_EA_CDATA_DEMUXER?1??
- #define?CONFIG_EAC3_DEMUXER?1??
- #define?CONFIG_FFM_DEMUXER?1??
- #define?CONFIG_FILMSTRIP_DEMUXER?1??
- #define?CONFIG_FLAC_DEMUXER?1??
- #define?CONFIG_FLIC_DEMUXER?1??
- #define?CONFIG_FLV_DEMUXER?1??
- #define?CONFIG_FOURXM_DEMUXER?1??
- #define?CONFIG_GSM_DEMUXER?1??
- #define?CONFIG_GXF_DEMUXER?1??
- #define?CONFIG_H261_DEMUXER?1??
- #define?CONFIG_H263_DEMUXER?1??
- #define?CONFIG_H264_DEMUXER?1??
- #define?CONFIG_IDCIN_DEMUXER?1??
- #define?CONFIG_IFF_DEMUXER?1??
- #define?CONFIG_IMAGE2_DEMUXER?1??
- #define?CONFIG_IMAGE2PIPE_DEMUXER?1??
- #define?CONFIG_INGENIENT_DEMUXER?1??
- #define?CONFIG_IPMOVIE_DEMUXER?1??
- #define?CONFIG_ISS_DEMUXER?1??
- #define?CONFIG_IV8_DEMUXER?1??
- #define?CONFIG_IVF_DEMUXER?1??
- #define?CONFIG_LMLM4_DEMUXER?1??
- #define?CONFIG_M4V_DEMUXER?1??
- #define?CONFIG_MATROSKA_DEMUXER?1??
- #define?CONFIG_MJPEG_DEMUXER?1??
- #define?CONFIG_MLP_DEMUXER?1??
- #define?CONFIG_MM_DEMUXER?1??
- #define?CONFIG_MMF_DEMUXER?1??
- #define?CONFIG_MOV_DEMUXER?1??
- #define?CONFIG_MP3_DEMUXER?1??
- #define?CONFIG_MPC_DEMUXER?1??
- #define?CONFIG_MPC8_DEMUXER?1??
- #define?CONFIG_MPEGPS_DEMUXER?1??
- #define?CONFIG_MPEGTS_DEMUXER?1??
- #define?CONFIG_MPEGTSRAW_DEMUXER?1??
- #define?CONFIG_MPEGVIDEO_DEMUXER?1??
- #define?CONFIG_MSNWC_TCP_DEMUXER?1??
- #define?CONFIG_MTV_DEMUXER?1??
- #define?CONFIG_MVI_DEMUXER?1??
- #define?CONFIG_MXF_DEMUXER?1??
- #define?CONFIG_NC_DEMUXER?1??
- #define?CONFIG_NSV_DEMUXER?1??
- #define?CONFIG_NUT_DEMUXER?1??
- #define?CONFIG_NUV_DEMUXER?1??
- #define?CONFIG_OGG_DEMUXER?0??
- #define?CONFIG_OMA_DEMUXER?1??
- #define?CONFIG_PCM_ALAW_DEMUXER?1??
- #define?CONFIG_PCM_MULAW_DEMUXER?1??
- #define?CONFIG_PCM_F64BE_DEMUXER?1??
- #define?CONFIG_PCM_F64LE_DEMUXER?1??
- #define?CONFIG_PCM_F32BE_DEMUXER?1??
- #define?CONFIG_PCM_F32LE_DEMUXER?1??
- #define?CONFIG_PCM_S32BE_DEMUXER?1??
- #define?CONFIG_PCM_S32LE_DEMUXER?1??
- #define?CONFIG_PCM_S24BE_DEMUXER?1??
- #define?CONFIG_PCM_S24LE_DEMUXER?1??
- #define?CONFIG_PCM_S16BE_DEMUXER?1??
- #define?CONFIG_PCM_S16LE_DEMUXER?1??
- #define?CONFIG_PCM_S8_DEMUXER?1??
- #define?CONFIG_PCM_U32BE_DEMUXER?1??
- #define?CONFIG_PCM_U32LE_DEMUXER?1??
- #define?CONFIG_PCM_U24BE_DEMUXER?1??
- #define?CONFIG_PCM_U24LE_DEMUXER?1??
- #define?CONFIG_PCM_U16BE_DEMUXER?1??
- #define?CONFIG_PCM_U16LE_DEMUXER?1??
- #define?CONFIG_PCM_U8_DEMUXER?1??
- #define?CONFIG_PVA_DEMUXER?1??
- #define?CONFIG_QCP_DEMUXER?1??
- #define?CONFIG_R3D_DEMUXER?1??
- #define?CONFIG_RAWVIDEO_DEMUXER?1??
- #define?CONFIG_RL2_DEMUXER?1??
- #define?CONFIG_RM_DEMUXER?1??
- #define?CONFIG_ROQ_DEMUXER?1??
- #define?CONFIG_RPL_DEMUXER?1??
- #define?CONFIG_RTSP_DEMUXER?0??
- #define?CONFIG_SDP_DEMUXER?0??
- #define?CONFIG_SEGAFILM_DEMUXER?1??
- #define?CONFIG_SHORTEN_DEMUXER?1??
- #define?CONFIG_SIFF_DEMUXER?1??
- #define?CONFIG_SMACKER_DEMUXER?1??
- #define?CONFIG_SOL_DEMUXER?1??
- #define?CONFIG_SOX_DEMUXER?1??
- #define?CONFIG_STR_DEMUXER?1??
- #define?CONFIG_SWF_DEMUXER?1??
- #define?CONFIG_THP_DEMUXER?1??
- #define?CONFIG_TIERTEXSEQ_DEMUXER?1??
- #define?CONFIG_TMV_DEMUXER?1??
- #define?CONFIG_TRUEHD_DEMUXER?1??
- #define?CONFIG_TTA_DEMUXER?1??
- #define?CONFIG_TXD_DEMUXER?1??
- #define?CONFIG_VC1_DEMUXER?1??
- #define?CONFIG_VC1T_DEMUXER?1??
- #define?CONFIG_VMD_DEMUXER?1??
- #define?CONFIG_VOC_DEMUXER?1??
- #define?CONFIG_VQF_DEMUXER?1??
- #define?CONFIG_W64_DEMUXER?1??
- #define?CONFIG_WAV_DEMUXER?1??
- #define?CONFIG_WC3_DEMUXER?1??
- #define?CONFIG_WSAUD_DEMUXER?1??
- #define?CONFIG_WSVQA_DEMUXER?1??
- #define?CONFIG_WV_DEMUXER?1??
- #define?CONFIG_XA_DEMUXER?1??
- #define?CONFIG_YOP_DEMUXER?1??
- #define?CONFIG_YUV4MPEGPIPE_DEMUXER?1??
- #define?CONFIG_LIBNUT_DEMUXER?0??
- #define?CONFIG_AC3_MUXER?1??
- #define?CONFIG_ADTS_MUXER?1??
- #define?CONFIG_AIFF_MUXER?1??
- #define?CONFIG_AMR_MUXER?1??
- #define?CONFIG_ASF_MUXER?1??
- #define?CONFIG_ASS_MUXER?1??
- #define?CONFIG_ASF_STREAM_MUXER?1??
- #define?CONFIG_AU_MUXER?1??
- #define?CONFIG_AVI_MUXER?1??
- #define?CONFIG_AVM2_MUXER?1??
- #define?CONFIG_CRC_MUXER?1??
- #define?CONFIG_DAUD_MUXER?1??
- #define?CONFIG_DIRAC_MUXER?1??
- #define?CONFIG_DNXHD_MUXER?1??
- #define?CONFIG_DTS_MUXER?1??
- #define?CONFIG_DV_MUXER?1??
- #define?CONFIG_EAC3_MUXER?1??
- #define?CONFIG_FFM_MUXER?1??
- #define?CONFIG_FILMSTRIP_MUXER?1??
- #define?CONFIG_FLAC_MUXER?1??
- #define?CONFIG_FLV_MUXER?1??
- #define?CONFIG_FRAMECRC_MUXER?1??
- #define?CONFIG_FRAMEMD5_MUXER?1??
- #define?CONFIG_GIF_MUXER?1??
- #define?CONFIG_GXF_MUXER?1??
- #define?CONFIG_H261_MUXER?1??
- #define?CONFIG_H263_MUXER?1??
- #define?CONFIG_H264_MUXER?1??
- #define?CONFIG_IMAGE2_MUXER?1??
- #define?CONFIG_IMAGE2PIPE_MUXER?1??
- #define?CONFIG_IPOD_MUXER?1??
- #define?CONFIG_M4V_MUXER?1??
- #define?CONFIG_MD5_MUXER?1??
- #define?CONFIG_MATROSKA_MUXER?1??
- #define?CONFIG_MATROSKA_AUDIO_MUXER?1??
- #define?CONFIG_MJPEG_MUXER?1??
- #define?CONFIG_MLP_MUXER?1??
- #define?CONFIG_MMF_MUXER?1??
- #define?CONFIG_MOV_MUXER?1??
- #define?CONFIG_MP2_MUXER?1??
- #define?CONFIG_MP3_MUXER?1??
- #define?CONFIG_MP4_MUXER?1??
- #define?CONFIG_MPEG1SYSTEM_MUXER?1??
- #define?CONFIG_MPEG1VCD_MUXER?1??
- #define?CONFIG_MPEG1VIDEO_MUXER?1??
- #define?CONFIG_MPEG2DVD_MUXER?1??
- #define?CONFIG_MPEG2SVCD_MUXER?1??
- #define?CONFIG_MPEG2VIDEO_MUXER?1??
- #define?CONFIG_MPEG2VOB_MUXER?1??
- #define?CONFIG_MPEGTS_MUXER?1??
- #define?CONFIG_MPJPEG_MUXER?1??
- #define?CONFIG_MXF_MUXER?1??
- #define?CONFIG_MXF_D10_MUXER?1??
- #define?CONFIG_NULL_MUXER?1??
- #define?CONFIG_NUT_MUXER?1??
- #define?CONFIG_OGG_MUXER?0??
- #define?CONFIG_PCM_ALAW_MUXER?1??
- #define?CONFIG_PCM_MULAW_MUXER?1??
- #define?CONFIG_PCM_F64BE_MUXER?1??
- #define?CONFIG_PCM_F64LE_MUXER?1??
- #define?CONFIG_PCM_F32BE_MUXER?1??
- #define?CONFIG_PCM_F32LE_MUXER?1??
- #define?CONFIG_PCM_S32BE_MUXER?1??
- #define?CONFIG_PCM_S32LE_MUXER?1??
- #define?CONFIG_PCM_S24BE_MUXER?1??
- #define?CONFIG_PCM_S24LE_MUXER?1??
- #define?CONFIG_PCM_S16BE_MUXER?1??
- #define?CONFIG_PCM_S16LE_MUXER?1??
- #define?CONFIG_PCM_S8_MUXER?1??
- #define?CONFIG_PCM_U32BE_MUXER?1??
- #define?CONFIG_PCM_U32LE_MUXER?1??
- #define?CONFIG_PCM_U24BE_MUXER?1??
- #define?CONFIG_PCM_U24LE_MUXER?1??
- #define?CONFIG_PCM_U16BE_MUXER?1??
- #define?CONFIG_PCM_U16LE_MUXER?1??
- #define?CONFIG_PCM_U8_MUXER?1??
- #define?CONFIG_PSP_MUXER?1??
- #define?CONFIG_RAWVIDEO_MUXER?1??
- #define?CONFIG_RM_MUXER?1??
- #define?CONFIG_ROQ_MUXER?1??
- #define?CONFIG_RTP_MUXER?1??
- #define?CONFIG_RTSP_MUXER?0??
- #define?CONFIG_SOX_MUXER?1??
- #define?CONFIG_SPDIF_MUXER?1??
- #define?CONFIG_SWF_MUXER?1??
- #define?CONFIG_TG2_MUXER?1??
- #define?CONFIG_TGP_MUXER?1??
- #define?CONFIG_TRUEHD_MUXER?1??
- #define?CONFIG_VC1T_MUXER?1??
- #define?CONFIG_VOC_MUXER?1??
- #define?CONFIG_WAV_MUXER?1??
- #define?CONFIG_WEBM_MUXER?1??
- #define?CONFIG_YUV4MPEGPIPE_MUXER?1??
- #define?CONFIG_LIBNUT_MUXER?0??
- #define?CONFIG_ASPECT_FILTER?1??
- #define?CONFIG_CROP_FILTER?1??
- #define?CONFIG_FORMAT_FILTER?1??
- #define?CONFIG_NOFORMAT_FILTER?1??
- #define?CONFIG_NULL_FILTER?1??
- #define?CONFIG_PAD_FILTER?1??
- #define?CONFIG_PIXELASPECT_FILTER?1??
- #define?CONFIG_SCALE_FILTER?1??
- #define?CONFIG_SLICIFY_FILTER?1??
- #define?CONFIG_UNSHARP_FILTER?1??
- #define?CONFIG_VFLIP_FILTER?1??
- #define?CONFIG_BUFFER_FILTER?1??
- #define?CONFIG_NULLSRC_FILTER?1??
- #define?CONFIG_NULLSINK_FILTER?1??
- #define?CONFIG_FILE_PROTOCOL?1??
- #define?CONFIG_GOPHER_PROTOCOL?0??
- #define?CONFIG_HTTP_PROTOCOL?1??
- #define?CONFIG_MMST_PROTOCOL?0??
- #define?CONFIG_PIPE_PROTOCOL?1??
- #define?CONFIG_RTMP_PROTOCOL?0??
- #define?CONFIG_RTMPT_PROTOCOL?1??
- #define?CONFIG_RTMPE_PROTOCOL?1??
- #define?CONFIG_RTMPTE_PROTOCOL?1??
- #define?CONFIG_RTMPS_PROTOCOL?1??
- #define?CONFIG_RTP_PROTOCOL?0??
- #define?CONFIG_TCP_PROTOCOL?1??
- #define?CONFIG_UDP_PROTOCOL?1??
- #define?CONFIG_CONCAT_PROTOCOL?1??
- #define?CONFIG_ALSA_INDEV?0??
- #define?CONFIG_BKTR_INDEV?0??
- #define?CONFIG_DV1394_INDEV?1??
- #define?CONFIG_JACK_INDEV?0??
- #define?CONFIG_OSS_INDEV?0??
- #define?CONFIG_V4L2_INDEV?0??
- #define?CONFIG_V4L_INDEV?0??
- #define?CONFIG_VFWCAP_INDEV?0??
- #define?CONFIG_X11_GRAB_DEVICE_INDEV?0??
- #define?CONFIG_LIBDC1394_INDEV?0??
- #define?CONFIG_ALSA_OUTDEV?0??
- #define?CONFIG_OSS_OUTDEV?0??
- #endif?/*?FFMPEG_CONFIG_H?*/??
?
FFMpeg自带的播放器ffplay对音视频的处理方法总结:
1. 如果声音是CBR的(也就是固定码率),就以音频的时间戳为基准
2. 如果视频时CBR,就以视频的时间戳为基准
3. 如果都是VBR的,就参考外部时钟,通过av_gettime()获取微妙集的时钟。
?
ffmpeg通过AVStream结构的time_base(有理数由分子和分母组成)可以获取一个参考时间单位,所有音视频流的timestamp都是基于这个时间单位顺序递增,比如time_base.num=1,time_base.den=90000,表示把1秒分成90000等份,音视频的pts和dts值就表示有多少个1/90000等份,更简单一点假设time_base.num=1,time_base.den=1000,就表示1秒分成1000等份,相当于1毫秒,那时间戳就表示是以毫秒为单位的,再做音视频处理时候,如果解码的速度比按照时间戳显示的速度快,那就简单不用丟帧(Drop Frame)处理,当解码速度很慢时(比如手机设备),就需要丢帧处理,是每两帧丟一帧数据,还是每3帧丟掉一帧数据,就需要根据延时显示程度来计算丢帧的比率
?
havlenapetr最新的ffmpeg可以直接编译通过,不过有个bug,就是播放完毕后,video_decoder线程不能退出,主要原因是阻塞在packet队列的Queue->get函数里,这里处理逻辑需要考虑两种情况:
1. AVPacket队列里没有音视频帧数据时,解码线程挂起进入等待状态,有新的AVPacket加入队列时激活解码线程
2. 如果文件读取到末尾,Queue->get直接返回-1,解码线程发现队列空时直接退出