android平台移植ffmpeg 播放器

简介: 引用:http://blog.csdn.net/ouyangtianhan/article/details/7943543 IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是基于havlenapetr移植的ffmpeg基础上做了些改进,他做的主要贡献有: 1.

引用:http://blog.csdn.net/ouyangtianhan/article/details/7943543

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,添加该文件:

[cpp]  view plain copy
  1. /* 
  2.  *  TypeHelpers.h 
  3.  *   
  4.  *  Copyright 2005 The Android Open Source Project 
  5.  * 
  6.  */  
  7. #ifndef ANDROID_TYPE_HELPERS_H  
  8. #define ANDROID_TYPE_HELPERS_H  
  9. #include <new>  
  10. #include <stdint.h>  
  11. #include <string.h>  
  12. #include <sys/types.h>  
  13. // ---------------------------------------------------------------------------  
  14. namespace android {  
  15. /* 
  16.  * Types traits 
  17.  */  
  18.       
  19. template <typename T> struct trait_trivial_ctor  { enum { value = false }; };  
  20. template <typename T> struct trait_trivial_dtor  { enum { value = false }; };  
  21. template <typename T> struct trait_trivial_copy  { enum { value = false }; };  
  22. template <typename T> struct trait_trivial_assign{ enum { value = false }; };  
  23. template <typename T> struct trait_pointer     { enum { value = false }; };      
  24. template <typename T> struct trait_pointer<T*> { enum { value = true }; };  
  25. #define ANDROID_BASIC_TYPES_TRAITS( T )                                       /  
  26.     template<> struct trait_trivial_ctor< T >  { enum { value = true }; };    /  
  27.     template<> struct trait_trivial_dtor< T >  { enum { value = true }; };    /  
  28.     template<> struct trait_trivial_copy< T >  { enum { value = true }; };    /  
  29.     template<> struct trait_trivial_assign< T >{ enum { value = true }; };   
  30. #define ANDROID_TYPE_TRAITS( T, ctor, dtor, copy, assign )                    /  
  31.     template<> struct trait_trivial_ctor< T >  { enum { value = ctor }; };    /  
  32.     template<> struct trait_trivial_dtor< T >  { enum { value = dtor }; };    /  
  33.     template<> struct trait_trivial_copy< T >  { enum { value = copy }; };    /  
  34.     template<> struct trait_trivial_assign< T >{ enum { value = assign }; };   
  35. template <typename TYPE>  
  36. struct traits {  
  37.     enum {  
  38.         is_pointer          = trait_pointer<TYPE>::value,  
  39.         has_trivial_ctor    = is_pointer || trait_trivial_ctor<TYPE>::value,  
  40.         has_trivial_dtor    = is_pointer || trait_trivial_dtor<TYPE>::value,  
  41.         has_trivial_copy    = is_pointer || trait_trivial_copy<TYPE>::value,  
  42.         has_trivial_assign  = is_pointer || trait_trivial_assign<TYPE>::value     
  43.     };  
  44. };  
  45. template <typename T, typename U>  
  46. struct aggregate_traits {  
  47.     enum {  
  48.         is_pointer          = false,  
  49.         has_trivial_ctor    = traits<T>::has_trivial_ctor && traits<U>::has_trivial_ctor,  
  50.         has_trivial_dtor    = traits<T>::has_trivial_dtor && traits<U>::has_trivial_dtor,  
  51.         has_trivial_copy    = traits<T>::has_trivial_copy && traits<U>::has_trivial_copy,  
  52.         has_trivial_assign  = traits<T>::has_trivial_assign && traits<U>::has_trivial_assign  
  53.     };  
  54. };  
  55. // ---------------------------------------------------------------------------  
  56. /* 
  57.  * basic types traits 
  58.  */  
  59.    
  60. ANDROID_BASIC_TYPES_TRAITS( void );  
  61. ANDROID_BASIC_TYPES_TRAITS( bool );  
  62. ANDROID_BASIC_TYPES_TRAITS( char );  
  63. ANDROID_BASIC_TYPES_TRAITS( unsigned char );  
  64. ANDROID_BASIC_TYPES_TRAITS( short );  
  65. ANDROID_BASIC_TYPES_TRAITS( unsigned short );  
  66. ANDROID_BASIC_TYPES_TRAITS( int );  
  67. ANDROID_BASIC_TYPES_TRAITS( unsigned int );  
  68. ANDROID_BASIC_TYPES_TRAITS( long );  
  69. ANDROID_BASIC_TYPES_TRAITS( unsigned long );  
  70. ANDROID_BASIC_TYPES_TRAITS( long long );  
  71. ANDROID_BASIC_TYPES_TRAITS( unsigned long long );  
  72. ANDROID_BASIC_TYPES_TRAITS( float );  
  73. ANDROID_BASIC_TYPES_TRAITS( double );  
  74. // ---------------------------------------------------------------------------  
  75.       
  76. /* 
  77.  * compare and order types 
  78.  */  
  79. template<typename TYPE> inline  
  80. int strictly_order_type(const TYPE& lhs, const TYPE& rhs) {  
  81.     return (lhs < rhs) ? 1 : 0;  
  82. }  
  83. template<typename TYPE> inline  
  84. int compare_type(const TYPE& lhs, const TYPE& rhs) {  
  85.     return strictly_order_type(rhs, lhs) - strictly_order_type(lhs, rhs);  
  86. }  
  87. /* 
  88.  * create, destroy, copy and assign types... 
  89.  */  
  90.    
  91. template<typename TYPE> inline  
  92. void construct_type(TYPE* p, size_t n) {  
  93.     if (!traits<TYPE>::has_trivial_ctor) {  
  94.         while (n--) {  
  95.             new(p++) TYPE;  
  96.         }  
  97.     }  
  98. }  
  99. template<typename TYPE> inline  
  100. void destroy_type(TYPE* p, size_t n) {  
  101.     if (!traits<TYPE>::has_trivial_dtor) {  
  102.         while (n--) {  
  103.             p->~TYPE();  
  104.             p++;  
  105.         }  
  106.     }  
  107. }  
  108. template<typename TYPE> inline  
  109. void copy_type(TYPE* d, const TYPE* s, size_t n) {  
  110.     if (!traits<TYPE>::has_trivial_copy) {  
  111.         while (n--) {  
  112.             new(d) TYPE(*s);  
  113.             d++, s++;  
  114.         }  
  115.     } else {  
  116.         memcpy(d,s,n*sizeof(TYPE));  
  117.     }  
  118. }  
  119. template<typename TYPE> inline  
  120. void assign_type(TYPE* d, const TYPE* s, size_t n) {  
  121.     if (!traits<TYPE>::has_trivial_assign) {  
  122.         while (n--) {  
  123.             *d++ = *s++;  
  124.         }  
  125.     } else {  
  126.         memcpy(d,s,n*sizeof(TYPE));  
  127.     }  
  128. }  
  129. template<typename TYPE> inline  
  130. void splat_type(TYPE* where, const TYPE* what, size_t n) {  
  131.     if (!traits<TYPE>::has_trivial_copy) {  
  132.         while (n--) {  
  133.             new(where) TYPE(*what);  
  134.             where++;  
  135.         }  
  136.     } else {  
  137.          while (n--) {  
  138.              *where++ = *what;  
  139.         }  
  140.     }  
  141. }  
  142. template<typename TYPE> inline  
  143. void move_forward_type(TYPE* d, const TYPE* s, size_t n = 1) {  
  144.     if (!traits<TYPE>::has_trivial_copy || !traits<TYPE>::has_trivial_dtor) {  
  145.         d += n;  
  146.         s += n;  
  147.         while (n--) {  
  148.             --d, --s;  
  149.             if (!traits<TYPE>::has_trivial_copy) {  
  150.                 new(d) TYPE(*s);  
  151.             } else {  
  152.                 *d = *s;  
  153.             }  
  154.             if (!traits<TYPE>::has_trivial_dtor) {  
  155.                 s->~TYPE();  
  156.             }  
  157.         }  
  158.     } else {  
  159.         memmove(d,s,n*sizeof(TYPE));  
  160.     }  
  161. }  
  162. template<typename TYPE> inline  
  163. void move_backward_type(TYPE* d, const TYPE* s, size_t n = 1) {  
  164.     if (!traits<TYPE>::has_trivial_copy || !traits<TYPE>::has_trivial_dtor) {  
  165.         while (n--) {  
  166.             if (!traits<TYPE>::has_trivial_copy) {  
  167.                 new(d) TYPE(*s);  
  168.             } else {  
  169.                 *d = *s;  
  170.             }  
  171.             if (!traits<TYPE>::has_trivial_dtor) {  
  172.                 s->~TYPE();  
  173.             }  
  174.             d++, s++;  
  175.         }  
  176.     } else {  
  177.         memmove(d,s,n*sizeof(TYPE));  
  178.     }  
  179. }  
  180. // ---------------------------------------------------------------------------  
  181. /* 
  182.  * a key/value pair 
  183.  */  
  184. template <typename KEY, typename VALUE>  
  185. struct key_value_pair_t {  
  186.     KEY     key;  
  187.     VALUE   value;  
  188.     key_value_pair_t() { }  
  189.     key_value_pair_t(const key_value_pair_t& o) : key(o.key), value(o.value) { }  
  190.     key_value_pair_t(const KEY& k, const VALUE& v) : key(k), value(v)  { }  
  191.     key_value_pair_t(const KEY& k) : key(k) { }  
  192.     inline bool operator < (const key_value_pair_t& o) const {  
  193.         return strictly_order_type(key, o.key);  
  194.     }  
  195. };  
  196. template<>  
  197. template <typename K, typename V>  
  198. struct trait_trivial_ctor< key_value_pair_t<K, V> >  
  199. enum { value = aggregate_traits<K,V>::has_trivial_ctor }; };  
  200. template<>   
  201. template <typename K, typename V>  
  202. struct trait_trivial_dtor< key_value_pair_t<K, V> >  
  203. enum { value = aggregate_traits<K,V>::has_trivial_dtor }; };  
  204. template<>   
  205. template <typename K, typename V>  
  206. struct trait_trivial_copy< key_value_pair_t<K, V> >  
  207. enum { value = aggregate_traits<K,V>::has_trivial_copy }; };  
  208. template<>   
  209. template <typename K, typename V>  
  210. struct trait_trivial_assign< key_value_pair_t<K, V> >  
  211. enum { value = aggregate_traits<K,V>::has_trivial_assign};};  
  212. // ---------------------------------------------------------------------------  
  213. }; // namespace android  
  214. // ---------------------------------------------------------------------------  
  215. #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相关选项,我的配置参考如下:

[cpp]  view plain copy
  1. /* Automatically generated by configure - do not modify! */  
  2. #ifndef FFMPEG_CONFIG_H  
  3. #define FFMPEG_CONFIG_H  
  4. #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'"  
  5. #define FFMPEG_LICENSE "LGPL version 2.1 or later"  
  6. #define FFMPEG_DATADIR "/home/ffmpeg-android-bin/share/ffmpeg"  
  7. #define CC_TYPE "gcc"  
  8. #define CC_VERSION __VERSION__  
  9. #define restrict restrict  
  10. #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "/n/t"  
  11. #define EXTERN_PREFIX ""  
  12. #define EXTERN_ASM   
  13. #define ARCH_ALPHA 0  
  14. #define ARCH_ARM 0  
  15. #define ARCH_AVR32 0  
  16. #define ARCH_AVR32_AP 0  
  17. #define ARCH_AVR32_UC 0  
  18. #define ARCH_BFIN 0  
  19. #define ARCH_IA64 0  
  20. #define ARCH_M68K 0  
  21. #define ARCH_MIPS 0  
  22. #define ARCH_MIPS64 0  
  23. #define ARCH_PARISC 0  
  24. #define ARCH_PPC 0  
  25. #define ARCH_PPC64 0  
  26. #define ARCH_S390 0  
  27. #define ARCH_SH4 0  
  28. #define ARCH_SPARC 0  
  29. #define ARCH_SPARC64 0  
  30. #define ARCH_TOMI 0  
  31. #define ARCH_X86 0  
  32. #define ARCH_X86_32 0  
  33. #define ARCH_X86_64 0  
  34. #define HAVE_ALTIVEC 0  
  35. #define HAVE_AMD3DNOW 0  
  36. #define HAVE_AMD3DNOWEXT 0  
  37. #define HAVE_ARMV5TE 0  
  38. #define HAVE_ARMV6 0  
  39. #define HAVE_ARMV6T2 0  
  40. #define HAVE_ARMVFP 0  
  41. #define HAVE_IWMMXT 0  
  42. #define HAVE_MMI 0  
  43. #define HAVE_MMX 0  
  44. #define HAVE_MMX2 0  
  45. #define HAVE_NEON 0  
  46. #define HAVE_PPC4XX 0  
  47. #define HAVE_SSE 0  
  48. #define HAVE_SSSE3 0  
  49. #define HAVE_VIS 0  
  50. #define HAVE_BIGENDIAN 0  
  51. #define HAVE_BEOSTHREADS 0  
  52. #define HAVE_OS2THREADS 0  
  53. #define HAVE_PTHREADS 0  
  54. #define HAVE_W32THREADS 0  
  55. #define HAVE_ALSA_ASOUNDLIB_H 0  
  56. #define HAVE_ALTIVEC_H 0  
  57. #define HAVE_ARPA_INET_H 0  
  58. #define HAVE_ATTRIBUTE_MAY_ALIAS 1  
  59. #define HAVE_ATTRIBUTE_PACKED 1  
  60. #define HAVE_BSWAP 0  
  61. #define HAVE_CLOSESOCKET 0  
  62. #define HAVE_CMOV 0  
  63. #define HAVE_CONIO_H 0  
  64. #define HAVE_DCBZL 0  
  65. #define HAVE_DEV_BKTR_IOCTL_BT848_H 0  
  66. #define HAVE_DEV_BKTR_IOCTL_METEOR_H 0  
  67. #define HAVE_DEV_IC_BT8XX_H 0  
  68. #define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0  
  69. #define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0  
  70. #define HAVE_DLFCN_H 0  
  71. #define HAVE_DLOPEN 1  
  72. #define HAVE_DOS_PATHS 0  
  73. #define HAVE_EBP_AVAILABLE 0  
  74. #define HAVE_EBX_AVAILABLE 0  
  75. #define HAVE_EXP2 0  
  76. #define HAVE_EXP2F 0  
  77. #define HAVE_FAST_64BIT 0  
  78. #define HAVE_FAST_CLZ 1  
  79. #define HAVE_FAST_CMOV 0  
  80. #define HAVE_FAST_UNALIGNED 0  
  81. #define HAVE_FORK 1  
  82. #define HAVE_GETADDRINFO 1  
  83. #define HAVE_GETHRTIME 0  
  84. #define HAVE_GETPROCESSMEMORYINFO 0  
  85. #define HAVE_GETPROCESSTIMES 0  
  86. #define HAVE_GETRUSAGE 0  
  87. #define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0  
  88. #define HAVE_INET_ATON 1  
  89. #define HAVE_INLINE_ASM 1  
  90. #define HAVE_ISATTY 1  
  91. #define HAVE_LDBRX 0  
  92. #define HAVE_LIBDC1394_1 0  
  93. #define HAVE_LIBDC1394_2 0  
  94. #define HAVE_LOCAL_ALIGNED_16 0  
  95. #define HAVE_LOCAL_ALIGNED_8 0  
  96. #define HAVE_LOG2 0  
  97. #define HAVE_LOG2F 0  
  98. #define HAVE_LOONGSON 0  
  99. #define HAVE_LRINT 0  
  100. #define HAVE_LRINTF 0  
  101. #define HAVE_LZO1X_999_COMPRESS 0  
  102. #define HAVE_MACHINE_IOCTL_BT848_H 0  
  103. #define HAVE_MACHINE_IOCTL_METEOR_H 0  
  104. #define HAVE_MALLOC_H 0  
  105. #define HAVE_MEMALIGN 1  
  106. #define HAVE_MKSTEMP 1  
  107. #define HAVE_PLD 1  
  108. #define HAVE_POSIX_MEMALIGN 0  
  109. #define HAVE_ROUND 0  
  110. #define HAVE_ROUNDF 0  
  111. #define HAVE_SDL 0  
  112. #define HAVE_SDL_VIDEO_SIZE 0  
  113. #define HAVE_SETMODE 0  
  114. #define HAVE_SOCKLEN_T 1  
  115. #define HAVE_SOUNDCARD_H 0  
  116. #define HAVE_POLL_H 0  
  117. #define HAVE_SETRLIMIT 0  
  118. #define HAVE_STRERROR_R 1  
  119. #define HAVE_STRUCT_ADDRINFO 1  
  120. #define HAVE_STRUCT_IPV6_MREQ 0  
  121. #define HAVE_STRUCT_SOCKADDR_IN6 0  
  122. #define HAVE_STRUCT_SOCKADDR_SA_LEN 0  
  123. #define HAVE_STRUCT_SOCKADDR_STORAGE 1  
  124. #define HAVE_SYMVER 1  
  125. #define HAVE_SYMVER_GNU_ASM 1  
  126. #define HAVE_SYMVER_ASM_LABEL 0  
  127. #define HAVE_SYS_MMAN_H 0  
  128. #define HAVE_SYS_RESOURCE_H 0  
  129. #define HAVE_SYS_SELECT_H 0  
  130. #define HAVE_SYS_SOUNDCARD_H 0  
  131. #define HAVE_SYS_VIDEOIO_H 0  
  132. #define HAVE_TEN_OPERANDS 0  
  133. #define HAVE_TERMIOS_H 0  
  134. #define HAVE_THREADS 0  
  135. #define HAVE_TRUNCF 0  
  136. #define HAVE_VFP_ARGS 1  
  137. #define HAVE_VIRTUALALLOC 0  
  138. #define HAVE_WINSOCK2_H 0  
  139. #define HAVE_XFORM_ASM 0  
  140. #define HAVE_YASM 0  
  141. #define CONFIG_BSFS 1  
  142. #define CONFIG_DECODERS 1  
  143. #define CONFIG_DEMUXERS 1  
  144. #define CONFIG_ENCODERS 1  
  145. #define CONFIG_FILTERS 1  
  146. #define CONFIG_HWACCELS 0  
  147. #define CONFIG_INDEVS 1  
  148. #define CONFIG_MUXERS 1  
  149. #define CONFIG_OUTDEVS 0  
  150. #define CONFIG_PARSERS 1  
  151. #define CONFIG_PROTOCOLS 1  
  152. #define CONFIG_AANDCT 1  
  153. #define CONFIG_AVCODEC 1  
  154. #define CONFIG_AVDEVICE 0  
  155. #define CONFIG_AVFILTER 0  
  156. #define CONFIG_AVFILTER_LAVF 0  
  157. #define CONFIG_AVFORMAT 1  
  158. #define CONFIG_AVISYNTH 0  
  159. #define CONFIG_BZLIB 0  
  160. #define CONFIG_DCT 1  
  161. #define CONFIG_DOC 0  
  162. #define CONFIG_DWT 1  
  163. #define CONFIG_DXVA2 0  
  164. #define CONFIG_FASTDIV 1  
  165. #define CONFIG_FFMPEG 1  
  166. #define CONFIG_FFPLAY 0  
  167. #define CONFIG_FFPROBE 1  
  168. #define CONFIG_FFSERVER 0  
  169. #define CONFIG_FFT 1  
  170. #define CONFIG_GOLOMB 1  
  171. #define CONFIG_GPL 0  
  172. #define CONFIG_GPROF 0  
  173. #define CONFIG_GRAY 0  
  174. #define CONFIG_H264DSP 1  
  175. #define CONFIG_HARDCODED_TABLES 0  
  176. #define CONFIG_LIBDC1394 0  
  177. #define CONFIG_LIBDIRAC 0  
  178. #define CONFIG_LIBFAAC 0  
  179. #define CONFIG_LIBGSM 0  
  180. #define CONFIG_LIBMP3LAME 0  
  181. #define CONFIG_LIBNUT 0  
  182. #define CONFIG_LIBOPENCORE_AMRNB 0  
  183. #define CONFIG_LIBOPENCORE_AMRWB 0  
  184. #define CONFIG_LIBOPENJPEG 0  
  185. #define CONFIG_LIBRTMP 0  
  186. #define CONFIG_LIBSCHROEDINGER 0  
  187. #define CONFIG_LIBSPEEX 0  
  188. #define CONFIG_LIBTHEORA 0  
  189. #define CONFIG_LIBVORBIS 0  
  190. #define CONFIG_LIBVPX 0  
  191. #define CONFIG_LIBX264 0  
  192. #define CONFIG_LIBXVID 0  
  193. #define CONFIG_LPC 1  
  194. #define CONFIG_LSP 1  
  195. #define CONFIG_MDCT 1  
  196. #define CONFIG_MEMALIGN_HACK 0  
  197. #define CONFIG_MLIB 0  
  198. #define CONFIG_MPEGAUDIO_HP 1  
  199. #define CONFIG_NETWORK 1  
  200. #define CONFIG_NONFREE 0  
  201. #define CONFIG_PIC 0  
  202. #define CONFIG_POSTPROC 0  
  203. #define CONFIG_POWERPC_PERF 0  
  204. #define CONFIG_RDFT 1  
  205. #define CONFIG_RUNTIME_CPUDETECT 0  
  206. #define CONFIG_SHARED 0  
  207. #define CONFIG_SMALL 0  
  208. #define CONFIG_SRAM 0  
  209. #define CONFIG_STATIC 1  
  210. #define CONFIG_SWSCALE 1  
  211. #define CONFIG_SWSCALE_ALPHA 1  
  212. #define CONFIG_VAAPI 0  
  213. #define CONFIG_VDPAU 0  
  214. #define CONFIG_VERSION3 0  
  215. #define CONFIG_X11GRAB 0  
  216. #define CONFIG_ZLIB 0  
  217. #define CONFIG_AVUTIL 1  
  218. #define CONFIG_GPLV3 0  
  219. #define CONFIG_LGPLV3 0  
  220. #define CONFIG_AASC_DECODER 1  
  221. #define CONFIG_AMV_DECODER 1  
  222. #define CONFIG_ANM_DECODER 1  
  223. #define CONFIG_ASV1_DECODER 1  
  224. #define CONFIG_ASV2_DECODER 1  
  225. #define CONFIG_AURA_DECODER 1  
  226. #define CONFIG_AURA2_DECODER 1  
  227. #define CONFIG_AVS_DECODER 1  
  228. #define CONFIG_BETHSOFTVID_DECODER 1  
  229. #define CONFIG_BFI_DECODER 1  
  230. #define CONFIG_BINK_DECODER 1  
  231. #define CONFIG_BMP_DECODER 1  
  232. #define CONFIG_C93_DECODER 1  
  233. #define CONFIG_CAVS_DECODER 1  
  234. #define CONFIG_CDGRAPHICS_DECODER 1  
  235. #define CONFIG_CINEPAK_DECODER 1  
  236. #define CONFIG_CLJR_DECODER 1  
  237. #define CONFIG_CSCD_DECODER 1  
  238. #define CONFIG_CYUV_DECODER 1  
  239. #define CONFIG_DNXHD_DECODER 1  
  240. #define CONFIG_DPX_DECODER 1  
  241. #define CONFIG_DSICINVIDEO_DECODER 1  
  242. #define CONFIG_DVVIDEO_DECODER 1  
  243. #define CONFIG_DXA_DECODER 0  
  244. #define CONFIG_EACMV_DECODER 1  
  245. #define CONFIG_EAMAD_DECODER 1  
  246. #define CONFIG_EATGQ_DECODER 1  
  247. #define CONFIG_EATGV_DECODER 1  
  248. #define CONFIG_EATQI_DECODER 1  
  249. #define CONFIG_EIGHTBPS_DECODER 1  
  250. #define CONFIG_EIGHTSVX_EXP_DECODER 1  
  251. #define CONFIG_EIGHTSVX_FIB_DECODER 1  
  252. #define CONFIG_ESCAPE124_DECODER 1  
  253. #define CONFIG_FFV1_DECODER 1  
  254. #define CONFIG_FFVHUFF_DECODER 1  
  255. #define CONFIG_FLASHSV_DECODER 0  
  256. #define CONFIG_FLIC_DECODER 1  
  257. #define CONFIG_FLV_DECODER 1  
  258. #define CONFIG_FOURXM_DECODER 1  
  259. #define CONFIG_FRAPS_DECODER 1  
  260. #define CONFIG_FRWU_DECODER 1  
  261. #define CONFIG_GIF_DECODER 1  
  262. #define CONFIG_H261_DECODER 1  
  263. #define CONFIG_H263_DECODER 1  
  264. #define CONFIG_H263I_DECODER 1  
  265. #define CONFIG_H264_DECODER 1  
  266. #define CONFIG_H264_VDPAU_DECODER 0  
  267. #define CONFIG_HUFFYUV_DECODER 1  
  268. #define CONFIG_IDCIN_DECODER 1  
  269. #define CONFIG_IFF_BYTERUN1_DECODER 1  
  270. #define CONFIG_IFF_ILBM_DECODER 1  
  271. #define CONFIG_INDEO2_DECODER 1  
  272. #define CONFIG_INDEO3_DECODER 1  
  273. #define CONFIG_INDEO5_DECODER 1  
  274. #define CONFIG_INTERPLAY_VIDEO_DECODER 1  
  275. #define CONFIG_JPEGLS_DECODER 1  
  276. #define CONFIG_KGV1_DECODER 1  
  277. #define CONFIG_KMVC_DECODER 1  
  278. #define CONFIG_LOCO_DECODER 1  
  279. #define CONFIG_MDEC_DECODER 1  
  280. #define CONFIG_MIMIC_DECODER 1  
  281. #define CONFIG_MJPEG_DECODER 1  
  282. #define CONFIG_MJPEGB_DECODER 1  
  283. #define CONFIG_MMVIDEO_DECODER 1  
  284. #define CONFIG_MOTIONPIXELS_DECODER 1  
  285. #define CONFIG_MPEG_XVMC_DECODER 0  
  286. #define CONFIG_MPEG1VIDEO_DECODER 1  
  287. #define CONFIG_MPEG2VIDEO_DECODER 1  
  288. #define CONFIG_MPEG4_DECODER 1  
  289. #define CONFIG_MPEG4_VDPAU_DECODER 0  
  290. #define CONFIG_MPEGVIDEO_DECODER 1  
  291. #define CONFIG_MPEG_VDPAU_DECODER 0  
  292. #define CONFIG_MPEG1_VDPAU_DECODER 0  
  293. #define CONFIG_MSMPEG4V1_DECODER 1  
  294. #define CONFIG_MSMPEG4V2_DECODER 1  
  295. #define CONFIG_MSMPEG4V3_DECODER 1  
  296. #define CONFIG_MSRLE_DECODER 1  
  297. #define CONFIG_MSVIDEO1_DECODER 1  
  298. #define CONFIG_MSZH_DECODER 1  
  299. #define CONFIG_NUV_DECODER 1  
  300. #define CONFIG_PAM_DECODER 1  
  301. #define CONFIG_PBM_DECODER 1  
  302. #define CONFIG_PCX_DECODER 1  
  303. #define CONFIG_PGM_DECODER 1  
  304. #define CONFIG_PGMYUV_DECODER 1  
  305. #define CONFIG_PICTOR_DECODER 1  
  306. #define CONFIG_PNG_DECODER 0  
  307. #define CONFIG_PPM_DECODER 1  
  308. #define CONFIG_PTX_DECODER 1  
  309. #define CONFIG_QDRAW_DECODER 1  
  310. #define CONFIG_QPEG_DECODER 1  
  311. #define CONFIG_QTRLE_DECODER 1  
  312. #define CONFIG_R210_DECODER 1  
  313. #define CONFIG_RAWVIDEO_DECODER 1  
  314. #define CONFIG_RL2_DECODER 1  
  315. #define CONFIG_ROQ_DECODER 1  
  316. #define CONFIG_RPZA_DECODER 1  
  317. #define CONFIG_RV10_DECODER 1  
  318. #define CONFIG_RV20_DECODER 1  
  319. #define CONFIG_RV30_DECODER 1  
  320. #define CONFIG_RV40_DECODER 1  
  321. #define CONFIG_SGI_DECODER 1  
  322. #define CONFIG_SMACKER_DECODER 1  
  323. #define CONFIG_SMC_DECODER 1  
  324. #define CONFIG_SNOW_DECODER 1  
  325. #define CONFIG_SP5X_DECODER 1  
  326. #define CONFIG_SUNRAST_DECODER 1  
  327. #define CONFIG_SVQ1_DECODER 1  
  328. #define CONFIG_SVQ3_DECODER 1  
  329. #define CONFIG_TARGA_DECODER 1  
  330. #define CONFIG_THEORA_DECODER 1  
  331. #define CONFIG_THP_DECODER 1  
  332. #define CONFIG_TIERTEXSEQVIDEO_DECODER 1  
  333. #define CONFIG_TIFF_DECODER 1  
  334. #define CONFIG_TMV_DECODER 1  
  335. #define CONFIG_TRUEMOTION1_DECODER 1  
  336. #define CONFIG_TRUEMOTION2_DECODER 1  
  337. #define CONFIG_TSCC_DECODER 0  
  338. #define CONFIG_TXD_DECODER 1  
  339. #define CONFIG_ULTI_DECODER 1  
  340. #define CONFIG_V210_DECODER 1  
  341. #define CONFIG_V210X_DECODER 1  
  342. #define CONFIG_VB_DECODER 1  
  343. #define CONFIG_VC1_DECODER 1  
  344. #define CONFIG_VC1_VDPAU_DECODER 0  
  345. #define CONFIG_VCR1_DECODER 1  
  346. #define CONFIG_VMDVIDEO_DECODER 1  
  347. #define CONFIG_VMNC_DECODER 1  
  348. #define CONFIG_VP3_DECODER 1  
  349. #define CONFIG_VP5_DECODER 1  
  350. #define CONFIG_VP6_DECODER 1  
  351. #define CONFIG_VP6A_DECODER 1  
  352. #define CONFIG_VP6F_DECODER 1  
  353. #define CONFIG_VQA_DECODER 1  
  354. #define CONFIG_WMV1_DECODER 1  
  355. #define CONFIG_WMV2_DECODER 1  
  356. #define CONFIG_WMV3_DECODER 1  
  357. #define CONFIG_WMV3_VDPAU_DECODER 0  
  358. #define CONFIG_WNV1_DECODER 1  
  359. #define CONFIG_XAN_WC3_DECODER 1  
  360. #define CONFIG_XL_DECODER 1  
  361. #define CONFIG_YOP_DECODER 1  
  362. #define CONFIG_ZLIB_DECODER 0  
  363. #define CONFIG_ZMBV_DECODER 0  
  364. #define CONFIG_AAC_DECODER 1  
  365. #define CONFIG_AC3_DECODER 1  
  366. #define CONFIG_ALAC_DECODER 1  
  367. #define CONFIG_ALS_DECODER 1  
  368. #define CONFIG_AMRNB_DECODER 1  
  369. #define CONFIG_APE_DECODER 1  
  370. #define CONFIG_ATRAC1_DECODER 1  
  371. #define CONFIG_ATRAC3_DECODER 1  
  372. #define CONFIG_BINKAUDIO_DCT_DECODER 1  
  373. #define CONFIG_BINKAUDIO_RDFT_DECODER 1  
  374. #define CONFIG_COOK_DECODER 1  
  375. #define CONFIG_DCA_DECODER 1  
  376. #define CONFIG_DSICINAUDIO_DECODER 1  
  377. #define CONFIG_EAC3_DECODER 1  
  378. #define CONFIG_FLAC_DECODER 1  
  379. #define CONFIG_IMC_DECODER 1  
  380. #define CONFIG_MACE3_DECODER 1  
  381. #define CONFIG_MACE6_DECODER 1  
  382. #define CONFIG_MLP_DECODER 1  
  383. #define CONFIG_MP1_DECODER 1  
  384. #define CONFIG_MP1FLOAT_DECODER 1  
  385. #define CONFIG_MP2_DECODER 1  
  386. #define CONFIG_MP2FLOAT_DECODER 1  
  387. #define CONFIG_MP3_DECODER 1  
  388. #define CONFIG_MP3FLOAT_DECODER 1  
  389. #define CONFIG_MP3ADU_DECODER 1  
  390. #define CONFIG_MP3ADUFLOAT_DECODER 1  
  391. #define CONFIG_MP3ON4_DECODER 1  
  392. #define CONFIG_MP3ON4FLOAT_DECODER 1  
  393. #define CONFIG_MPC7_DECODER 1  
  394. #define CONFIG_MPC8_DECODER 1  
  395. #define CONFIG_NELLYMOSER_DECODER 1  
  396. #define CONFIG_QCELP_DECODER 1  
  397. #define CONFIG_QDM2_DECODER 1  
  398. #define CONFIG_RA_144_DECODER 1  
  399. #define CONFIG_RA_288_DECODER 1  
  400. #define CONFIG_SHORTEN_DECODER 1  
  401. #define CONFIG_SIPR_DECODER 1  
  402. #define CONFIG_SMACKAUD_DECODER 1  
  403. #define CONFIG_SONIC_DECODER 1  
  404. #define CONFIG_TRUEHD_DECODER 1  
  405. #define CONFIG_TRUESPEECH_DECODER 1  
  406. #define CONFIG_TTA_DECODER 1  
  407. #define CONFIG_TWINVQ_DECODER 1  
  408. #define CONFIG_VMDAUDIO_DECODER 1  
  409. #define CONFIG_VORBIS_DECODER 1  
  410. #define CONFIG_WAVPACK_DECODER 1  
  411. #define CONFIG_WMAPRO_DECODER 1  
  412. #define CONFIG_WMAV1_DECODER 1  
  413. #define CONFIG_WMAV2_DECODER 1  
  414. #define CONFIG_WMAVOICE_DECODER 1  
  415. #define CONFIG_WS_SND1_DECODER 1  
  416. #define CONFIG_PCM_ALAW_DECODER 1  
  417. #define CONFIG_PCM_BLURAY_DECODER 1  
  418. #define CONFIG_PCM_DVD_DECODER 1  
  419. #define CONFIG_PCM_F32BE_DECODER 1  
  420. #define CONFIG_PCM_F32LE_DECODER 1  
  421. #define CONFIG_PCM_F64BE_DECODER 1  
  422. #define CONFIG_PCM_F64LE_DECODER 1  
  423. #define CONFIG_PCM_MULAW_DECODER 1  
  424. #define CONFIG_PCM_S8_DECODER 1  
  425. #define CONFIG_PCM_S16BE_DECODER 1  
  426. #define CONFIG_PCM_S16LE_DECODER 1  
  427. #define CONFIG_PCM_S16LE_PLANAR_DECODER 1  
  428. #define CONFIG_PCM_S24BE_DECODER 1  
  429. #define CONFIG_PCM_S24DAUD_DECODER 1  
  430. #define CONFIG_PCM_S24LE_DECODER 1  
  431. #define CONFIG_PCM_S32BE_DECODER 1  
  432. #define CONFIG_PCM_S32LE_DECODER 1  
  433. #define CONFIG_PCM_U8_DECODER 1  
  434. #define CONFIG_PCM_U16BE_DECODER 1  
  435. #define CONFIG_PCM_U16LE_DECODER 1  
  436. #define CONFIG_PCM_U24BE_DECODER 1  
  437. #define CONFIG_PCM_U24LE_DECODER 1  
  438. #define CONFIG_PCM_U32BE_DECODER 1  
  439. #define CONFIG_PCM_U32LE_DECODER 1  
  440. #define CONFIG_PCM_ZORK_DECODER 1  
  441. #define CONFIG_INTERPLAY_DPCM_DECODER 1  
  442. #define CONFIG_ROQ_DPCM_DECODER 1  
  443. #define CONFIG_SOL_DPCM_DECODER 1  
  444. #define CONFIG_XAN_DPCM_DECODER 1  
  445. #define CONFIG_ADPCM_4XM_DECODER 1  
  446. #define CONFIG_ADPCM_ADX_DECODER 1  
  447. #define CONFIG_ADPCM_CT_DECODER 1  
  448. #define CONFIG_ADPCM_EA_DECODER 1  
  449. #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 1  
  450. #define CONFIG_ADPCM_EA_R1_DECODER 1  
  451. #define CONFIG_ADPCM_EA_R2_DECODER 1  
  452. #define CONFIG_ADPCM_EA_R3_DECODER 1  
  453. #define CONFIG_ADPCM_EA_XAS_DECODER 1  
  454. #define CONFIG_ADPCM_G726_DECODER 1  
  455. #define CONFIG_ADPCM_IMA_AMV_DECODER 1  
  456. #define CONFIG_ADPCM_IMA_DK3_DECODER 1  
  457. #define CONFIG_ADPCM_IMA_DK4_DECODER 1  
  458. #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 1  
  459. #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 1  
  460. #define CONFIG_ADPCM_IMA_ISS_DECODER 1  
  461. #define CONFIG_ADPCM_IMA_QT_DECODER 1  
  462. #define CONFIG_ADPCM_IMA_SMJPEG_DECODER 1  
  463. #define CONFIG_ADPCM_IMA_WAV_DECODER 1  
  464. #define CONFIG_ADPCM_IMA_WS_DECODER 1  
  465. #define CONFIG_ADPCM_MS_DECODER 1  
  466. #define CONFIG_ADPCM_SBPRO_2_DECODER 1  
  467. #define CONFIG_ADPCM_SBPRO_3_DECODER 1  
  468. #define CONFIG_ADPCM_SBPRO_4_DECODER 1  
  469. #define CONFIG_ADPCM_SWF_DECODER 1  
  470. #define CONFIG_ADPCM_THP_DECODER 1  
  471. #define CONFIG_ADPCM_XA_DECODER 1  
  472. #define CONFIG_ADPCM_YAMAHA_DECODER 1  
  473. #define CONFIG_DVBSUB_DECODER 1  
  474. #define CONFIG_DVDSUB_DECODER 1  
  475. #define CONFIG_PGSSUB_DECODER 1  
  476. #define CONFIG_XSUB_DECODER 1  
  477. #define CONFIG_LIBDIRAC_DECODER 0  
  478. #define CONFIG_LIBGSM_DECODER 0  
  479. #define CONFIG_LIBGSM_MS_DECODER 0  
  480. #define CONFIG_LIBOPENCORE_AMRNB_DECODER 0  
  481. #define CONFIG_LIBOPENCORE_AMRWB_DECODER 0  
  482. #define CONFIG_LIBOPENJPEG_DECODER 0  
  483. #define CONFIG_LIBSCHROEDINGER_DECODER 0  
  484. #define CONFIG_LIBSPEEX_DECODER 0  
  485. #define CONFIG_LIBVPX_DECODER 0  
  486. #define CONFIG_ASV1_ENCODER 1  
  487. #define CONFIG_ASV2_ENCODER 1  
  488. #define CONFIG_BMP_ENCODER 1  
  489. #define CONFIG_DNXHD_ENCODER 1  
  490. #define CONFIG_DVVIDEO_ENCODER 1  
  491. #define CONFIG_FFV1_ENCODER 1  
  492. #define CONFIG_FFVHUFF_ENCODER 1  
  493. #define CONFIG_FLASHSV_ENCODER 0  
  494. #define CONFIG_FLV_ENCODER 1  
  495. #define CONFIG_GIF_ENCODER 1  
  496. #define CONFIG_H261_ENCODER 1  
  497. #define CONFIG_H263_ENCODER 1  
  498. #define CONFIG_H263P_ENCODER 1  
  499. #define CONFIG_HUFFYUV_ENCODER 1  
  500. #define CONFIG_JPEGLS_ENCODER 1  
  501. #define CONFIG_LJPEG_ENCODER 1  
  502. #define CONFIG_MJPEG_ENCODER 1  
  503. #define CONFIG_MPEG1VIDEO_ENCODER 1  
  504. #define CONFIG_MPEG2VIDEO_ENCODER 1  
  505. #define CONFIG_MPEG4_ENCODER 1  
  506. #define CONFIG_MSMPEG4V1_ENCODER 1  
  507. #define CONFIG_MSMPEG4V2_ENCODER 1  
  508. #define CONFIG_MSMPEG4V3_ENCODER 1  
  509. #define CONFIG_PAM_ENCODER 1  
  510. #define CONFIG_PBM_ENCODER 1  
  511. #define CONFIG_PCX_ENCODER 1  
  512. #define CONFIG_PGM_ENCODER 1  
  513. #define CONFIG_PGMYUV_ENCODER 1  
  514. #define CONFIG_PNG_ENCODER 0  
  515. #define CONFIG_PPM_ENCODER 1  
  516. #define CONFIG_QTRLE_ENCODER 1  
  517. #define CONFIG_RAWVIDEO_ENCODER 1  
  518. #define CONFIG_ROQ_ENCODER 1  
  519. #define CONFIG_RV10_ENCODER 1  
  520. #define CONFIG_RV20_ENCODER 1  
  521. #define CONFIG_SGI_ENCODER 1  
  522. #define CONFIG_SNOW_ENCODER 1  
  523. #define CONFIG_SVQ1_ENCODER 1  
  524. #define CONFIG_TARGA_ENCODER 1  
  525. #define CONFIG_TIFF_ENCODER 1  
  526. #define CONFIG_V210_ENCODER 1  
  527. #define CONFIG_WMV1_ENCODER 1  
  528. #define CONFIG_WMV2_ENCODER 1  
  529. #define CONFIG_ZLIB_ENCODER 0  
  530. #define CONFIG_ZMBV_ENCODER 0  
  531. #define CONFIG_AAC_ENCODER 1  
  532. #define CONFIG_AC3_ENCODER 1  
  533. #define CONFIG_ALAC_ENCODER 1  
  534. #define CONFIG_FLAC_ENCODER 1  
  535. #define CONFIG_MP2_ENCODER 1  
  536. #define CONFIG_NELLYMOSER_ENCODER 1  
  537. #define CONFIG_RA_144_ENCODER 1  
  538. #define CONFIG_SONIC_ENCODER 1  
  539. #define CONFIG_SONIC_LS_ENCODER 1  
  540. #define CONFIG_VORBIS_ENCODER 1  
  541. #define CONFIG_WMAV1_ENCODER 1  
  542. #define CONFIG_WMAV2_ENCODER 1  
  543. #define CONFIG_PCM_ALAW_ENCODER 1  
  544. #define CONFIG_PCM_F32BE_ENCODER 1  
  545. #define CONFIG_PCM_F32LE_ENCODER 1  
  546. #define CONFIG_PCM_F64BE_ENCODER 1  
  547. #define CONFIG_PCM_F64LE_ENCODER 1  
  548. #define CONFIG_PCM_MULAW_ENCODER 1  
  549. #define CONFIG_PCM_S8_ENCODER 1  
  550. #define CONFIG_PCM_S16BE_ENCODER 1  
  551. #define CONFIG_PCM_S16LE_ENCODER 1  
  552. #define CONFIG_PCM_S24BE_ENCODER 1  
  553. #define CONFIG_PCM_S24DAUD_ENCODER 1  
  554. #define CONFIG_PCM_S24LE_ENCODER 1  
  555. #define CONFIG_PCM_S32BE_ENCODER 1  
  556. #define CONFIG_PCM_S32LE_ENCODER 1  
  557. #define CONFIG_PCM_U8_ENCODER 1  
  558. #define CONFIG_PCM_U16BE_ENCODER 1  
  559. #define CONFIG_PCM_U16LE_ENCODER 1  
  560. #define CONFIG_PCM_U24BE_ENCODER 1  
  561. #define CONFIG_PCM_U24LE_ENCODER 1  
  562. #define CONFIG_PCM_U32BE_ENCODER 1  
  563. #define CONFIG_PCM_U32LE_ENCODER 1  
  564. #define CONFIG_PCM_ZORK_ENCODER 1  
  565. #define CONFIG_ROQ_DPCM_ENCODER 1  
  566. #define CONFIG_ADPCM_ADX_ENCODER 1  
  567. #define CONFIG_ADPCM_G726_ENCODER 1  
  568. #define CONFIG_ADPCM_IMA_QT_ENCODER 1  
  569. #define CONFIG_ADPCM_IMA_WAV_ENCODER 1  
  570. #define CONFIG_ADPCM_MS_ENCODER 1  
  571. #define CONFIG_ADPCM_SWF_ENCODER 1  
  572. #define CONFIG_ADPCM_YAMAHA_ENCODER 1  
  573. #define CONFIG_DVBSUB_ENCODER 1  
  574. #define CONFIG_DVDSUB_ENCODER 1  
  575. #define CONFIG_XSUB_ENCODER 1  
  576. #define CONFIG_LIBDIRAC_ENCODER 0  
  577. #define CONFIG_LIBFAAC_ENCODER 0  
  578. #define CONFIG_LIBGSM_ENCODER 0  
  579. #define CONFIG_LIBGSM_MS_ENCODER 0  
  580. #define CONFIG_LIBMP3LAME_ENCODER 0  
  581. #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0  
  582. #define CONFIG_LIBSCHROEDINGER_ENCODER 0  
  583. #define CONFIG_LIBTHEORA_ENCODER 0  
  584. #define CONFIG_LIBVORBIS_ENCODER 0  
  585. #define CONFIG_LIBVPX_ENCODER 0  
  586. #define CONFIG_LIBX264_ENCODER 0  
  587. #define CONFIG_LIBXVID_ENCODER 0  
  588. #define CONFIG_H263_VAAPI_HWACCEL 0  
  589. #define CONFIG_H264_DXVA2_HWACCEL 0  
  590. #define CONFIG_H264_VAAPI_HWACCEL 0  
  591. #define CONFIG_MPEG2_DXVA2_HWACCEL 0  
  592. #define CONFIG_MPEG2_VAAPI_HWACCEL 0  
  593. #define CONFIG_MPEG4_VAAPI_HWACCEL 0  
  594. #define CONFIG_VC1_DXVA2_HWACCEL 0  
  595. #define CONFIG_VC1_VAAPI_HWACCEL 0  
  596. #define CONFIG_WMV3_DXVA2_HWACCEL 0  
  597. #define CONFIG_WMV3_VAAPI_HWACCEL 0  
  598. #define CONFIG_AAC_PARSER 1  
  599. #define CONFIG_AC3_PARSER 1  
  600. #define CONFIG_CAVSVIDEO_PARSER 1  
  601. #define CONFIG_DCA_PARSER 1  
  602. #define CONFIG_DIRAC_PARSER 1  
  603. #define CONFIG_DNXHD_PARSER 1  
  604. #define CONFIG_DVBSUB_PARSER 1  
  605. #define CONFIG_DVDSUB_PARSER 1  
  606. #define CONFIG_H261_PARSER 1  
  607. #define CONFIG_H263_PARSER 1  
  608. #define CONFIG_H264_PARSER 1  
  609. #define CONFIG_MJPEG_PARSER 1  
  610. #define CONFIG_MLP_PARSER 1  
  611. #define CONFIG_MPEG4VIDEO_PARSER 1  
  612. #define CONFIG_MPEGAUDIO_PARSER 1  
  613. #define CONFIG_MPEGVIDEO_PARSER 1  
  614. #define CONFIG_PNM_PARSER 1  
  615. #define CONFIG_VC1_PARSER 1  
  616. #define CONFIG_VP3_PARSER 1  
  617. #define CONFIG_VP8_PARSER 1  
  618. #define CONFIG_AAC_ADTSTOASC_BSF 1  
  619. #define CONFIG_CHOMP_BSF 1  
  620. #define CONFIG_DUMP_EXTRADATA_BSF 1  
  621. #define CONFIG_H264_MP4TOANNEXB_BSF 1  
  622. #define CONFIG_IMX_DUMP_HEADER_BSF 1  
  623. #define CONFIG_MJPEGA_DUMP_HEADER_BSF 1  
  624. #define CONFIG_MP3_HEADER_COMPRESS_BSF 1  
  625. #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 1  
  626. #define CONFIG_MOV2TEXTSUB_BSF 1  
  627. #define CONFIG_NOISE_BSF 1  
  628. #define CONFIG_REMOVE_EXTRADATA_BSF 1  
  629. #define CONFIG_TEXT2MOVSUB_BSF 1  
  630. #define CONFIG_AAC_DEMUXER 1  
  631. #define CONFIG_AC3_DEMUXER 1  
  632. #define CONFIG_AEA_DEMUXER 1  
  633. #define CONFIG_AIFF_DEMUXER 1  
  634. #define CONFIG_AMR_DEMUXER 1  
  635. #define CONFIG_ANM_DEMUXER 1  
  636. #define CONFIG_APC_DEMUXER 1  
  637. #define CONFIG_APE_DEMUXER 1  
  638. #define CONFIG_ASF_DEMUXER 1  
  639. #define CONFIG_ASS_DEMUXER 1  
  640. #define CONFIG_AU_DEMUXER 1  
  641. #define CONFIG_AVI_DEMUXER 1  
  642. #define CONFIG_AVISYNTH_DEMUXER 0  
  643. #define CONFIG_AVS_DEMUXER 1  
  644. #define CONFIG_BETHSOFTVID_DEMUXER 1  
  645. #define CONFIG_BFI_DEMUXER 1  
  646. #define CONFIG_BINK_DEMUXER 1  
  647. #define CONFIG_C93_DEMUXER 1  
  648. #define CONFIG_CAF_DEMUXER 1  
  649. #define CONFIG_CAVSVIDEO_DEMUXER 1  
  650. #define CONFIG_CDG_DEMUXER 1  
  651. #define CONFIG_DAUD_DEMUXER 1  
  652. #define CONFIG_DIRAC_DEMUXER 1  
  653. #define CONFIG_DNXHD_DEMUXER 1  
  654. #define CONFIG_DSICIN_DEMUXER 1  
  655. #define CONFIG_DTS_DEMUXER 1  
  656. #define CONFIG_DV_DEMUXER 1  
  657. #define CONFIG_DXA_DEMUXER 1  
  658. #define CONFIG_EA_DEMUXER 1  
  659. #define CONFIG_EA_CDATA_DEMUXER 1  
  660. #define CONFIG_EAC3_DEMUXER 1  
  661. #define CONFIG_FFM_DEMUXER 1  
  662. #define CONFIG_FILMSTRIP_DEMUXER 1  
  663. #define CONFIG_FLAC_DEMUXER 1  
  664. #define CONFIG_FLIC_DEMUXER 1  
  665. #define CONFIG_FLV_DEMUXER 1  
  666. #define CONFIG_FOURXM_DEMUXER 1  
  667. #define CONFIG_GSM_DEMUXER 1  
  668. #define CONFIG_GXF_DEMUXER 1  
  669. #define CONFIG_H261_DEMUXER 1  
  670. #define CONFIG_H263_DEMUXER 1  
  671. #define CONFIG_H264_DEMUXER 1  
  672. #define CONFIG_IDCIN_DEMUXER 1  
  673. #define CONFIG_IFF_DEMUXER 1  
  674. #define CONFIG_IMAGE2_DEMUXER 1  
  675. #define CONFIG_IMAGE2PIPE_DEMUXER 1  
  676. #define CONFIG_INGENIENT_DEMUXER 1  
  677. #define CONFIG_IPMOVIE_DEMUXER 1  
  678. #define CONFIG_ISS_DEMUXER 1  
  679. #define CONFIG_IV8_DEMUXER 1  
  680. #define CONFIG_IVF_DEMUXER 1  
  681. #define CONFIG_LMLM4_DEMUXER 1  
  682. #define CONFIG_M4V_DEMUXER 1  
  683. #define CONFIG_MATROSKA_DEMUXER 1  
  684. #define CONFIG_MJPEG_DEMUXER 1  
  685. #define CONFIG_MLP_DEMUXER 1  
  686. #define CONFIG_MM_DEMUXER 1  
  687. #define CONFIG_MMF_DEMUXER 1  
  688. #define CONFIG_MOV_DEMUXER 1  
  689. #define CONFIG_MP3_DEMUXER 1  
  690. #define CONFIG_MPC_DEMUXER 1  
  691. #define CONFIG_MPC8_DEMUXER 1  
  692. #define CONFIG_MPEGPS_DEMUXER 1  
  693. #define CONFIG_MPEGTS_DEMUXER 1  
  694. #define CONFIG_MPEGTSRAW_DEMUXER 1  
  695. #define CONFIG_MPEGVIDEO_DEMUXER 1  
  696. #define CONFIG_MSNWC_TCP_DEMUXER 1  
  697. #define CONFIG_MTV_DEMUXER 1  
  698. #define CONFIG_MVI_DEMUXER 1  
  699. #define CONFIG_MXF_DEMUXER 1  
  700. #define CONFIG_NC_DEMUXER 1  
  701. #define CONFIG_NSV_DEMUXER 1  
  702. #define CONFIG_NUT_DEMUXER 1  
  703. #define CONFIG_NUV_DEMUXER 1  
  704. #define CONFIG_OGG_DEMUXER 0  
  705. #define CONFIG_OMA_DEMUXER 1  
  706. #define CONFIG_PCM_ALAW_DEMUXER 1  
  707. #define CONFIG_PCM_MULAW_DEMUXER 1  
  708. #define CONFIG_PCM_F64BE_DEMUXER 1  
  709. #define CONFIG_PCM_F64LE_DEMUXER 1  
  710. #define CONFIG_PCM_F32BE_DEMUXER 1  
  711. #define CONFIG_PCM_F32LE_DEMUXER 1  
  712. #define CONFIG_PCM_S32BE_DEMUXER 1  
  713. #define CONFIG_PCM_S32LE_DEMUXER 1  
  714. #define CONFIG_PCM_S24BE_DEMUXER 1  
  715. #define CONFIG_PCM_S24LE_DEMUXER 1  
  716. #define CONFIG_PCM_S16BE_DEMUXER 1  
  717. #define CONFIG_PCM_S16LE_DEMUXER 1  
  718. #define CONFIG_PCM_S8_DEMUXER 1  
  719. #define CONFIG_PCM_U32BE_DEMUXER 1  
  720. #define CONFIG_PCM_U32LE_DEMUXER 1  
  721. #define CONFIG_PCM_U24BE_DEMUXER 1  
  722. #define CONFIG_PCM_U24LE_DEMUXER 1  
  723. #define CONFIG_PCM_U16BE_DEMUXER 1  
  724. #define CONFIG_PCM_U16LE_DEMUXER 1  
  725. #define CONFIG_PCM_U8_DEMUXER 1  
  726. #define CONFIG_PVA_DEMUXER 1  
  727. #define CONFIG_QCP_DEMUXER 1  
  728. #define CONFIG_R3D_DEMUXER 1  
  729. #define CONFIG_RAWVIDEO_DEMUXER 1  
  730. #define CONFIG_RL2_DEMUXER 1  
  731. #define CONFIG_RM_DEMUXER 1  
  732. #define CONFIG_ROQ_DEMUXER 1  
  733. #define CONFIG_RPL_DEMUXER 1  
  734. #define CONFIG_RTSP_DEMUXER 0  
  735. #define CONFIG_SDP_DEMUXER 0  
  736. #define CONFIG_SEGAFILM_DEMUXER 1  
  737. #define CONFIG_SHORTEN_DEMUXER 1  
  738. #define CONFIG_SIFF_DEMUXER 1  
  739. #define CONFIG_SMACKER_DEMUXER 1  
  740. #define CONFIG_SOL_DEMUXER 1  
  741. #define CONFIG_SOX_DEMUXER 1  
  742. #define CONFIG_STR_DEMUXER 1  
  743. #define CONFIG_SWF_DEMUXER 1  
  744. #define CONFIG_THP_DEMUXER 1  
  745. #define CONFIG_TIERTEXSEQ_DEMUXER 1  
  746. #define CONFIG_TMV_DEMUXER 1  
  747. #define CONFIG_TRUEHD_DEMUXER 1  
  748. #define CONFIG_TTA_DEMUXER 1  
  749. #define CONFIG_TXD_DEMUXER 1  
  750. #define CONFIG_VC1_DEMUXER 1  
  751. #define CONFIG_VC1T_DEMUXER 1  
  752. #define CONFIG_VMD_DEMUXER 1  
  753. #define CONFIG_VOC_DEMUXER 1  
  754. #define CONFIG_VQF_DEMUXER 1  
  755. #define CONFIG_W64_DEMUXER 1  
  756. #define CONFIG_WAV_DEMUXER 1  
  757. #define CONFIG_WC3_DEMUXER 1  
  758. #define CONFIG_WSAUD_DEMUXER 1  
  759. #define CONFIG_WSVQA_DEMUXER 1  
  760. #define CONFIG_WV_DEMUXER 1  
  761. #define CONFIG_XA_DEMUXER 1  
  762. #define CONFIG_YOP_DEMUXER 1  
  763. #define CONFIG_YUV4MPEGPIPE_DEMUXER 1  
  764. #define CONFIG_LIBNUT_DEMUXER 0  
  765. #define CONFIG_AC3_MUXER 1  
  766. #define CONFIG_ADTS_MUXER 1  
  767. #define CONFIG_AIFF_MUXER 1  
  768. #define CONFIG_AMR_MUXER 1  
  769. #define CONFIG_ASF_MUXER 1  
  770. #define CONFIG_ASS_MUXER 1  
  771. #define CONFIG_ASF_STREAM_MUXER 1  
  772. #define CONFIG_AU_MUXER 1  
  773. #define CONFIG_AVI_MUXER 1  
  774. #define CONFIG_AVM2_MUXER 1  
  775. #define CONFIG_CRC_MUXER 1  
  776. #define CONFIG_DAUD_MUXER 1  
  777. #define CONFIG_DIRAC_MUXER 1  
  778. #define CONFIG_DNXHD_MUXER 1  
  779. #define CONFIG_DTS_MUXER 1  
  780. #define CONFIG_DV_MUXER 1  
  781. #define CONFIG_EAC3_MUXER 1  
  782. #define CONFIG_FFM_MUXER 1  
  783. #define CONFIG_FILMSTRIP_MUXER 1  
  784. #define CONFIG_FLAC_MUXER 1  
  785. #define CONFIG_FLV_MUXER 1  
  786. #define CONFIG_FRAMECRC_MUXER 1  
  787. #define CONFIG_FRAMEMD5_MUXER 1  
  788. #define CONFIG_GIF_MUXER 1  
  789. #define CONFIG_GXF_MUXER 1  
  790. #define CONFIG_H261_MUXER 1  
  791. #define CONFIG_H263_MUXER 1  
  792. #define CONFIG_H264_MUXER 1  
  793. #define CONFIG_IMAGE2_MUXER 1  
  794. #define CONFIG_IMAGE2PIPE_MUXER 1  
  795. #define CONFIG_IPOD_MUXER 1  
  796. #define CONFIG_M4V_MUXER 1  
  797. #define CONFIG_MD5_MUXER 1  
  798. #define CONFIG_MATROSKA_MUXER 1  
  799. #define CONFIG_MATROSKA_AUDIO_MUXER 1  
  800. #define CONFIG_MJPEG_MUXER 1  
  801. #define CONFIG_MLP_MUXER 1  
  802. #define CONFIG_MMF_MUXER 1  
  803. #define CONFIG_MOV_MUXER 1  
  804. #define CONFIG_MP2_MUXER 1  
  805. #define CONFIG_MP3_MUXER 1  
  806. #define CONFIG_MP4_MUXER 1  
  807. #define CONFIG_MPEG1SYSTEM_MUXER 1  
  808. #define CONFIG_MPEG1VCD_MUXER 1  
  809. #define CONFIG_MPEG1VIDEO_MUXER 1  
  810. #define CONFIG_MPEG2DVD_MUXER 1  
  811. #define CONFIG_MPEG2SVCD_MUXER 1  
  812. #define CONFIG_MPEG2VIDEO_MUXER 1  
  813. #define CONFIG_MPEG2VOB_MUXER 1  
  814. #define CONFIG_MPEGTS_MUXER 1  
  815. #define CONFIG_MPJPEG_MUXER 1  
  816. #define CONFIG_MXF_MUXER 1  
  817. #define CONFIG_MXF_D10_MUXER 1  
  818. #define CONFIG_NULL_MUXER 1  
  819. #define CONFIG_NUT_MUXER 1  
  820. #define CONFIG_OGG_MUXER 0  
  821. #define CONFIG_PCM_ALAW_MUXER 1  
  822. #define CONFIG_PCM_MULAW_MUXER 1  
  823. #define CONFIG_PCM_F64BE_MUXER 1  
  824. #define CONFIG_PCM_F64LE_MUXER 1  
  825. #define CONFIG_PCM_F32BE_MUXER 1  
  826. #define CONFIG_PCM_F32LE_MUXER 1  
  827. #define CONFIG_PCM_S32BE_MUXER 1  
  828. #define CONFIG_PCM_S32LE_MUXER 1  
  829. #define CONFIG_PCM_S24BE_MUXER 1  
  830. #define CONFIG_PCM_S24LE_MUXER 1  
  831. #define CONFIG_PCM_S16BE_MUXER 1  
  832. #define CONFIG_PCM_S16LE_MUXER 1  
  833. #define CONFIG_PCM_S8_MUXER 1  
  834. #define CONFIG_PCM_U32BE_MUXER 1  
  835. #define CONFIG_PCM_U32LE_MUXER 1  
  836. #define CONFIG_PCM_U24BE_MUXER 1  
  837. #define CONFIG_PCM_U24LE_MUXER 1  
  838. #define CONFIG_PCM_U16BE_MUXER 1  
  839. #define CONFIG_PCM_U16LE_MUXER 1  
  840. #define CONFIG_PCM_U8_MUXER 1  
  841. #define CONFIG_PSP_MUXER 1  
  842. #define CONFIG_RAWVIDEO_MUXER 1  
  843. #define CONFIG_RM_MUXER 1  
  844. #define CONFIG_ROQ_MUXER 1  
  845. #define CONFIG_RTP_MUXER 1  
  846. #define CONFIG_RTSP_MUXER 0  
  847. #define CONFIG_SOX_MUXER 1  
  848. #define CONFIG_SPDIF_MUXER 1  
  849. #define CONFIG_SWF_MUXER 1  
  850. #define CONFIG_TG2_MUXER 1  
  851. #define CONFIG_TGP_MUXER 1  
  852. #define CONFIG_TRUEHD_MUXER 1  
  853. #define CONFIG_VC1T_MUXER 1  
  854. #define CONFIG_VOC_MUXER 1  
  855. #define CONFIG_WAV_MUXER 1  
  856. #define CONFIG_WEBM_MUXER 1  
  857. #define CONFIG_YUV4MPEGPIPE_MUXER 1  
  858. #define CONFIG_LIBNUT_MUXER 0  
  859. #define CONFIG_ASPECT_FILTER 1  
  860. #define CONFIG_CROP_FILTER 1  
  861. #define CONFIG_FORMAT_FILTER 1  
  862. #define CONFIG_NOFORMAT_FILTER 1  
  863. #define CONFIG_NULL_FILTER 1  
  864. #define CONFIG_PAD_FILTER 1  
  865. #define CONFIG_PIXELASPECT_FILTER 1  
  866. #define CONFIG_SCALE_FILTER 1  
  867. #define CONFIG_SLICIFY_FILTER 1  
  868. #define CONFIG_UNSHARP_FILTER 1  
  869. #define CONFIG_VFLIP_FILTER 1  
  870. #define CONFIG_BUFFER_FILTER 1  
  871. #define CONFIG_NULLSRC_FILTER 1  
  872. #define CONFIG_NULLSINK_FILTER 1  
  873. #define CONFIG_FILE_PROTOCOL 1  
  874. #define CONFIG_GOPHER_PROTOCOL 0  
  875. #define CONFIG_HTTP_PROTOCOL 1  
  876. #define CONFIG_MMST_PROTOCOL 0  
  877. #define CONFIG_PIPE_PROTOCOL 1  
  878. #define CONFIG_RTMP_PROTOCOL 0  
  879. #define CONFIG_RTMPT_PROTOCOL 1  
  880. #define CONFIG_RTMPE_PROTOCOL 1  
  881. #define CONFIG_RTMPTE_PROTOCOL 1  
  882. #define CONFIG_RTMPS_PROTOCOL 1  
  883. #define CONFIG_RTP_PROTOCOL 0  
  884. #define CONFIG_TCP_PROTOCOL 1  
  885. #define CONFIG_UDP_PROTOCOL 1  
  886. #define CONFIG_CONCAT_PROTOCOL 1  
  887. #define CONFIG_ALSA_INDEV 0  
  888. #define CONFIG_BKTR_INDEV 0  
  889. #define CONFIG_DV1394_INDEV 1  
  890. #define CONFIG_JACK_INDEV 0  
  891. #define CONFIG_OSS_INDEV 0  
  892. #define CONFIG_V4L2_INDEV 0  
  893. #define CONFIG_V4L_INDEV 0  
  894. #define CONFIG_VFWCAP_INDEV 0  
  895. #define CONFIG_X11_GRAB_DEVICE_INDEV 0  
  896. #define CONFIG_LIBDC1394_INDEV 0  
  897. #define CONFIG_ALSA_OUTDEV 0  
  898. #define CONFIG_OSS_OUTDEV 0  
  899. #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,解码线程发现队列空时直接退出

原文:http://blog.csdn.net/moruite/article/details/6305944

相关文章
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
112 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
27天前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
31 2
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
86 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
开发工具 Android开发 iOS开发
安卓与iOS开发环境对比:选择适合你的平台
【9月更文挑战第26天】在移动应用开发的广阔天地中,安卓和iOS是两大巨头。它们各自拥有独特的优势和挑战,影响着开发者的选择和决策。本文将深入探讨这两个平台的开发环境,帮助你理解它们的核心差异,并指导你根据个人或项目需求做出明智的选择。无论你是初学者还是资深开发者,了解这些平台的异同都至关重要。让我们一起探索,找到最适合你的那片开发天地。
|
2月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
1月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
109 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
1月前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
58 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
141 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
1月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
75 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势