Android版本手机直播引擎中,引用了libvlc开源库。
项目接过来,发现编译脚本中使用了很多用户名下的绝对路径。
项目相关人离职,导致这个脚本实际上已经废掉。而且不知道相关路径下有没有其他文件和第三方库。
琢磨很久,基本上搞定了路径问题。还剩下一个ffmpeg开源库编译脚本的选择问题。目录下有十几个文件备用。
后来听说是用了一个名为ffmpeg_build.sh的脚本
其中有一段

#function build_one
{
./configure \
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--prefix=$prefix \
--enable-cross-compile \
--disable-shared \
--enable-static \
--extra-libs="-lgcc" \
--cc=$CC \
--cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \
--sysroot="$NDK_SYSROOT" \
--extra-cflags="-I$X264_PATH/include -I$FDKAAC_PATH/include -I$ARM_INC -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a8 -mfpu=neon -fPIC" \
--extra-ldflags="-L$FDKAAC_PATH/lib/android -L$X264_PATH/lib/android -lc -nostdlib -lm -ldl -mfloat-abi=softfp" \
--disable-symver \
--disable-doc \
--disable-yasm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-protocols \
--disable-debug \
--disable-programs \
--disable-encoders \
--disable-decoders \
--disable-filters \
--disable-demuxers \
--disable-avdevice \
--disable-devices \
--disable-muxers \
--disable-parsers \
--disable-armv6t2 \
--disable-armv5te \
--disable-bsfs \
--enable-small \
--enable-gpl \
--enable-network \
--enable-neon \
--enable-pthreads \
--enable-libx264 \
--enable-zlib \
--enable-nonfree \
--enable-libfdk-aac \
--enable-protocol=rtmp \
--enable-muxer=flv \
--enable-muxer=mp4 \
--enable-demuxer=aac \
--enable-demuxer=h264 \
--enable-demuxer=flv \
--enable-encoder=libfdk_aac \
--enable-encoder=libx264 \
--enable-decoder=libx264 \
--enable-decoder=libfdk_aac \
--enable-decoder=aac \
--enable-decoder=h264 \
--enable-parser=aac \
--enable-parser=h264 \
--enable-bsf=aac_adtstoasc \
--enable-asm \
$ADDITIONAL_CONFIGURE_FLAG make clean
make -j4 install
}

直接编译使用,但是在vlc调用ffmpeg的过程中报错。

于是根据需求,自己改写了一个版本ffmpeg_build_new.sh。其中那一段如下:

#function build_one
{
./configure \
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--prefix=$prefix \
--enable-cross-compile \
--disable-shared \
--enable-static \
--extra-libs="-lgcc" \
--cc=$CC \
--cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \
--sysroot="$NDK_SYSROOT" \
--extra-cflags="-I$X264_PATH/include -I$FDKAAC_PATH/include -I$ARM_INC -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a8 -mfpu=neon -fPIC -DANDROID" \
--extra-ldflags="-L$FDKAAC_PATH/lib/android -L$X264_PATH/lib/android -lc -nostdlib -lm -ldl -llog -mfloat-abi=softfp" \
--disable-everything \
--disable-symver \
--disable-doc \
--disable-yasm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-parsers \
--disable-protocols \
--disable-demuxers \
--disable-muxers \
--disable-debug \
--disable-filters \
--disable-programs \
--disable-armv6 \
--disable-armv6t2 \
--disable-armv5te \
--disable-decoders \
--disable-encoders \
--enable-gpl \
--enable-network \
--enable-neon \
--enable-pthreads \
--enable-libx264 \
--enable-nonfree \
--enable-libfdk-aac \
--enable-protocol=rtmp \
--enable-protocol=mp4 \
--enable-muxer=flv \
--enable-muxer=mp4 \
--enable-encoder=libfdk_aac \
--enable-encoder=libx264 \
$ADDITIONAL_CONFIGURE_FLAG make clean
make -j4 install
}

按照这个脚本,编译出来的libavcodec.a比之前已经在使用的版本文件大小小很多。

在意料中,因为我关掉了不用的编解码器和其他库。
并且使用这个结果,也是报同样的错误。

静下来想一想,我想起一个工具 at -t
于是分析已经在使用的版本libavcodec.a

$ ar -t ~/former/ffmpeg/lib/libavcodec.a
aac_ac3_parser.o
aac_adtstoasc_bsf.o
aac_parser.o
aacadtsdec.o
aacdec.o
aacps.o
aacpsdsp.o
aacsbr.o
aactab.o
allcodecs.o
aacpsdsp_init_arm.o
aacpsdsp_neon.o
fft_fixed_init_arm.o
fft_fixed_neon.o
fft_init_arm.o
fft_neon.o
fft_vfp.o
fmtconvert_init_arm.o
fmtconvert_neon.o
fmtconvert_vfp.o
fmtconvert_vfp_armv6.o
h264chroma_init_arm.o
h264cmc_neon.o
h264dsp_init_arm.o
h264dsp_neon.o
h264idct_neon.o
h264pred_init_arm.o
h264pred_neon.o
h264qpel_init_arm.o
h264qpel_neon.o
hpeldsp_neon.o
idctdsp_arm.o
idctdsp_armv6.o
idctdsp_init_arm.o
idctdsp_init_armv6.o
idctdsp_init_neon.o
idctdsp_neon.o
jrevdct_arm.o
mdct_fixed_neon.o
mdct_neon.o
mdct_vfp.o
me_cmp_armv6.o
me_cmp_init_arm.o
pixblockdsp_armv6.o
pixblockdsp_init_arm.o
sbrdsp_init_arm.o
sbrdsp_neon.o
simple_idct_arm.o
simple_idct_armv6.o
simple_idct_neon.o
startcode_armv6.o
videodsp_init_arm.o
audio_frame_queue.o
audioconvert.o
avdct.o
avfft.o
avpacket.o
avpicture.o
bitstream.o
bitstream_filter.o
cabac.o
codec_desc.o
dsputil_compat.o
dv_profile.o
error_resilience.o
faandct.o
faanidct.o
fdctdsp.o
fft_fixed.o
fft_fixed_32.o
fft_float.o
fft_init_table.o
fmtconvert.o
frame_thread_encoder.o
golomb.o
h264.o
h264_cabac.o
h264_cavlc.o
h264_direct.o
h264_loopfilter.o
h264_mb.o
h264_parser.o
h264_picture.o
h264_ps.o
h264_refs.o
h264_sei.o
h264_slice.o
h264chroma.o
h264dsp.o
h264idct.o
h264pred.o
h264qpel.o
idctdsp.o
imgconvert.o
jfdctfst.o
jfdctint.o
jrevdct.o
kbdwin.o
libfdk-aacenc.o
libx264.o
mathtables.o
mdct_fixed.o
mdct_fixed_32.o
mdct_float.o
me_cmp.o
mpeg4audio.o
mpegaudiodata.o
options.o
parser.o
pixblockdsp.o
pthread.o
pthread_frame.o
pthread_slice.o
raw.o
resample.o
resample2.o
sbrdsp.o
simple_idct.o
sinewin.o
startcode.o
utils.o
videodsp.o

共计122个c文件编译的.o

同样分析ffmpeg_build_new.sh编译结果libavcodec.a
发现只有30个差别太大。
分析ffmpeg_build.sh编译结果libavcodec.a
发现有123个,和线上版本很接近。
马上对比一下文件名。仅仅是多了一个libfdk-aacdec.o

现在明白了,ffmpeg_build.sh脚本中多了一个aac解码器,原作者更改并没有保存。
立刻删除--enable-decoder=libfdk_aac \ 这一行。
编译通过,整个引擎也编译通过。

最新文章

  1. Spring in Action 学习笔记一
  2. js学习篇--数组按升序降序排列
  3. yii2.0用户登录,退出判断(摘录)
  4. 最长公共子序列模板(LCS)和LICS模板
  5. 基于@AspectJ和schema的aop(二)---@AspectJ基础语法
  6. jpa+spring配置多数据源
  7. Swift构造器(Initializer)与析构器(Deinitializer)
  8. Java中解析XML的四种方法
  9. C#中调用c++的dll
  10. 为什么说2017全球云计算大会中国站 (Cloud Connect China 2017)不得不参加?
  11. 【一天一道LeetCode】#103. Binary Tree Zigzag Level Order Traversal
  12. [dev] udp socket的read长度问题
  13. LINUX sed grep awk之间比较整理
  14. Js学习(1)基本语法
  15. 简述Markdown的使用方法
  16. C#典型案例及分析
  17. Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器
  18. 郑轻校赛 2127 tmk射气球 (数学)
  19. CentOS依赖包查找工具(https://centos.pkgs.org)
  20. day22 CMDB 基础部分 (一)

热门文章

  1. JS模块化编程
  2. linux源码Makefile详解
  3. sql 2005 同义词
  4. StaggeredGridLayoutManager
  5. error LNK2005 new,delete 等已经在LIBCMT.lib(delete.obj) 中定义 错误修正
  6. UVa 1647 (递推) Computer Transformation
  7. linux shell ls -1 列显示文件
  8. HDU 5303 Delicious Apples 美味苹果 (DP)
  9. HDU 1041 Computer Transformation
  10. 一、oracle 高水位线详解