记录一次Android交叉编译ffmpeg排查错误
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排查错误的更多相关文章
- Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...
- 记录一下学习Android时遇到一些问题
实在是不擅长Android开发,但在努力的学习当中.这篇文章就记录一下学习过程中,自己犯下的一些错误,同时也让自己记住别再犯同样的错误了.各位看官勿见笑! 一个关于空指针的错误 错误类型一: 未对对象 ...
- (转)Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程) .
声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级后的cocos2d-x有了一些变化,目前的博文还没有关于Cocos2d-x 2.2.1最新版搭建Android交 ...
- Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)
原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...
- 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...
- MySQL复制异常大扫盲:快速溯源与排查错误全解
MySQL复制异常大扫盲:快速溯源与排查错误全解https://mp.weixin.qq.com/s/0Ic8BnUokyOj7m1YOrk1tA 作者介绍王松磊,现任职于UCloud,从事MySQL ...
- (转载)android开发常见编程错误总结
首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07 第771次阅读 android,异常 0 编辑推荐:稀 ...
- [原]如何在Android用FFmpeg+SDL2.0解码图像线程
关于如何在Android上用FFmpeg+SDL2.0解码显示图像参考[原]如何在Android用FFmpeg+SDL2.0解码显示图像 ,关于如何在Android使用FFmpeg+SDL2.0解码声 ...
- [原]如何在Android用FFmpeg+SDL2.0解码声音
关于如何在Android上用FFmpeg+SDL2.0解码显示图像参考[原]如何在Android用FFmpeg+SDL2.0解码显示图像 ,本文是基于上述文章和[原]零基础学习视频解码之解码声音 来移 ...
随机推荐
- django定期执行任务
要在django项目中定期执行任务,比如每天一定的时间点抓取数据,刷新数据库等,可以参考stackoverflow的方法,先编写一个manage.py命令,然后使用crontab来定时执行这个命令. ...
- 传感器(3)传感器的X,Y,Z轴
设备正面水平向上. X轴 : 左右方向,向右是正值. Y轴 : 远近方向,远离你是负. Z轴 : 上下方向,向上是正值.
- Oracle Gateways透明网关访问SQL Server
自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link S ...
- maven - setting.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...
- UVa 1648 (推公式) Business Center
题意: 有一种奇怪的电梯,每次只能向上走u个楼层或者向下走d个楼层 现在有m个这种电梯,求恰好n次能够到达的最小楼层数(必须是正数),最开始默认位于第0层. 分析: 假设电梯向上走x次,则向下走n-x ...
- HttpContext.Current.RewritePath方法重写URL
if (!IsPostBack) { //如果请求ID为空,则重写URL为:~/index.aspx?ID=shouji.115sou.com if (Request.QueryString[&quo ...
- UVALive 2238 Fixed Partition Memory Management(二分完美匹配)
题意:计算机中有一些固定大小的内存,内存越大,处理速度越快.对于一个程序,加入不同的内存空间,处理所需时间不同.现给出m个内存空间,n个程序,对于每个程序程序,有k组数据(s,t),分别表示当程序 i ...
- Java [Leetcode 263]Ugly Number
题目描述: Write a program to check whether a given number is an ugly number. Ugly numbers are positive n ...
- 在VC中显示和处理图片的方法
落鹤生 发布于 2011-10-21 09:12 点击:344次 来自:blog.csdn.net/mengaim_cn 几种用GDI画图的方法介绍. TAG: GDI 法1:这个方法其实用的是 ...
- 使用ffmpeg实现转码样例(代码实现)
分类: C/C++ 使用ffmpeg实现转码样例(代码实现) 使用ffmpeg转码主要工作如下: Demux -> Decoding -> Encoding -> Muxing 其中 ...