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 \ 这一行。
编译通过,整个引擎也编译通过。

记录一次Android交叉编译ffmpeg排查错误的更多相关文章

  1. Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)

    Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...

  2. 记录一下学习Android时遇到一些问题

    实在是不擅长Android开发,但在努力的学习当中.这篇文章就记录一下学习过程中,自己犯下的一些错误,同时也让自己记住别再犯同样的错误了.各位看官勿见笑! 一个关于空指针的错误 错误类型一: 未对对象 ...

  3. (转)Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程) .

    声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级后的cocos2d-x有了一些变化,目前的博文还没有关于Cocos2d-x 2.2.1最新版搭建Android交 ...

  4. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...

  5. 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境

    搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...

  6. MySQL复制异常大扫盲:快速溯源与排查错误全解

    MySQL复制异常大扫盲:快速溯源与排查错误全解https://mp.weixin.qq.com/s/0Ic8BnUokyOj7m1YOrk1tA 作者介绍王松磊,现任职于UCloud,从事MySQL ...

  7. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  8. [原]如何在Android用FFmpeg+SDL2.0解码图像线程

    关于如何在Android上用FFmpeg+SDL2.0解码显示图像参考[原]如何在Android用FFmpeg+SDL2.0解码显示图像 ,关于如何在Android使用FFmpeg+SDL2.0解码声 ...

  9. [原]如何在Android用FFmpeg+SDL2.0解码声音

    关于如何在Android上用FFmpeg+SDL2.0解码显示图像参考[原]如何在Android用FFmpeg+SDL2.0解码显示图像 ,本文是基于上述文章和[原]零基础学习视频解码之解码声音 来移 ...

随机推荐

  1. Buffer数据结构和new IO的Memory-mapped files

    一.Buffer类 java.nio.Buffer这个类是用来干什么的?有怎样的结构? "Core Java"中是这样定义的“A buffer is array of values ...

  2. javascript精确计算

    一篇文章: 4 个用于执行高级数学计算的 JavaScript 库 numbers.js  Numeric Javascript accounting.js Tangle 有时只需要加减乘法能精确,没 ...

  3. BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207 题意:给出一个数列,若干询问.每个询问查询[L,R]区间内是否存在某个长度为K的子 ...

  4. css,html命名规则

    css,html命名规则 页头: header 登录条: loginBar 标志: logo 侧栏: sideBar 广告: banner 导航: nav 子导航: subNav 菜单: menu 子 ...

  5. Ajax、Comet与Websocket

    从 http 协议说起 1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...

  6. Java知识点:琐碎知识点(3)

    零碎 switch(x),x只可以是enum或byte.short.char.int. 枚举在switch-case语句作为标签时必须是枚举常量的非限定名称,否则Compile Error. Enum ...

  7. python模拟http请求2

    发现了一个非常好用的第三方module:requests,模拟接口非常简单. 详细了解请移步:http://docs.python-requests.org/en/latest/ 非常不错 #!cod ...

  8. hdu 3496 Watch The Movie

    题意:题目给定N部电影,每部电影有时长和价值,要求看M部电影,并且时间控制在L以内,转化为背包问题,让我们在N件物品中找正好M件物品塞进容量L的包中,求最大的价值.// dp[i][j] 表示在容量为 ...

  9. Oracle表与索引的分析及索引重建

    1.分析表与索引(analyze 不会重建索引)   analyze table tablename compute statistics 等同于 analyze table tablename co ...

  10. 《C++ Primer 4th》读书笔记 第6章-语句

    原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3912407.html