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. java.util.zip.ZipOutputStream压缩无乱码(原创)

    package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...

  2. lightOJ 1326 Race(第二类Stirling数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...

  3. openfire中mysql的前期设置

    使用openfire的时候如果需要使用自己的mysql数据库,需要提前进行设置,下面将记录下,基本的设置过程. 一.前期准备工作: 1.先下载两个工具一个是mysql数据库还有一个是SQLyog(可以 ...

  4. java中List的排序功能的实现

    今天在工作的时候,遇到了List排序的问题,所以总结了一下,与大家分享.Collections.sort排序的时候,用到了Comparator接口下面的compare()方法.下面的小例子中,还用到了 ...

  5. vi编辑器基本用法介绍

    vi是Linux系统中编写文件的工具 如果vi出现乱码情况,需要升级vi,命令如下: sudo apt-get install vim  //升级vi vi的启动方式有两种,直接使用vi命令和在vi命 ...

  6. JAVA将Excel中的报表导出为图片格式(三)换一种实现

    上一篇介绍了使用Java的Robot机器人实现截图,然后将剪贴板上的数据流生成PNG图片 但是经过博主的不断测试,在完全依赖远程桌面的没有终端显示器的服务器上 使用截图方式是不可行的,因为一旦使用了远 ...

  7. ti processor sdk linux am335x evm /bin/commom.sh hacking

    #!/bin/sh # # ti processor sdk linux am335x evm /bin/commom.sh hacking # 说明: # 本文主要对TI的sdk中的common.s ...

  8. 【Java】List的三种遍历方法

    public void List_Test(){ List<String>list = new ArrayList<String>(); for(int i = 0;i < ...

  9. handler.post 为什么要将thread对象post到handler中执行呢?

    转载网址:http://www.cnblogs.com/crazypebble/archive/2011/03/23/1991829.html在Android中使用Handler和Thread线程执行 ...

  10. RMAN 备份详解

    一.数据库备份与RMAN备份的概念 1.数据库完全备份:按归档模式分为归档和非归档 归档模式 打开状态,属于非一致性备份        关闭状态,可以分为一致性和非一致性 非归档模式 打开状态,非一致 ...