概述
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 这一行。
编译通过,整个引擎也编译通过。
转载于:https://www.cnblogs.com/zzugyl/p/5439207.html
最后
以上就是阳光水池为你收集整理的记录一次Android交叉编译ffmpeg排查错误的全部内容,希望文章能够帮你解决记录一次Android交叉编译ffmpeg排查错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复