FFmpeg在Android Studio中断点调试

FFmpeg在Android Studio中断点调试,第1张

概述一般情况下在Android平台使用FFmpeg为动态库或静态库的形式,只能通过设置FFmpeg日志回调来看一些FFmpeg输出的日志,有时需要debug来查看FFmpeg内部执行过程,本文记录一下在AndroidStudio中使用FFmpeg源码进行断点调试的方法。需在Linux或macOS下,Windows10系统可以使用wsl子系统。1

一般情况下在AndroID平台使用FFmpeg为动态库或静态库的形式,只能通过设置FFmpeg日志回调来看一些FFmpeg输出的日志,有时需要deBUG来查看FFmpeg内部执行过程,本文记录一下在AndroID Studio中使用FFmpeg源码进行断点调试的方法。需在linux或macOS下,windows 10系统可以使用wsl子系统。

1. 编写FFmpeg配置脚本

在此之前需要准备FFmpeg源码
,NDK(AndroID SDK文件夹下的ndk-bundle或者ndk下的特定版本,wsl子系统需要单独下载)linux版)。

用来调试的工程开启尽量少的功能,下面以调试FFmpeg(4.3.1)硬解h264为例,在FFmpeg根目录下新建文件armv8a_config.sh

#!/bin/bashAPI=21NDK=/home/user/AndroID/ndk/androID-ndk-r21PREBUILT=$NDK/toolchains/llvm/prebuilt/linux-x86_64PREFIX=/home/user/Desktop/ffmpeg/arm64-v8aCONfigURE_FLAGS="--disable-programs \--disable-avdevice \--disable-swresample \--disable-swscale \--disable-postproc \--disable-avfilter \--disable-network \--disable-everything \--enable-jni \--enable-mediacodec \--enable-decoder=h264_mediacodec \--enable-decoder=hevc_mediacodec \--enable-demuxer=h264 \--enable-demuxer=mov \--enable-protocol=file"./configure $CONfigURE_FLAGS \--target-os=androID \--arch=aarch64 \--enable-cross-compile \--cross-prefix=$PREBUILT/bin/aarch64-linux-androID- \--prefix=$PREFIX \--cc=$PREBUILT/bin/aarch64-linux-androID$API-clang \--cxx=$PREBUILT/bin/aarch64-linux-androID$API-clang++

在终端中进入FFmpeg根目录,增加执行权限 chmod +x armv8a_config.sh,并执行./armv8a_config.sh

2. 创建ffmpeg CMake依赖库

执行完上面步骤ffmpeg会自动配置好Makefile,然后执行make -j8 > sources.txt,此步骤主要用来获取所有需要的源文件(如果有更好的办法获取源文件列表,可以在评论区告诉我)。

在FFmpeg根目录创建CMakeLists.txt文件,复制上步生成的sources.txt文件中的.o后缀的所有行,并改后缀为.c,部分文件为.S,创建ffmpeg依赖库

project(ffmpeg)set(ffmpeg_sources        libavformat/allformats.c        libavformat/avio.c        libavformat/aviobuf.c        libavformat/cutils.c        libavformat/dump.c        libavformat/file.c        libavformat/format.c        libavformat/h264dec.c        libavformat/ID3v1.c        libavformat/ID3v2.c        libavformat/isom.c        libavformat/Metadata.c        libavformat/mov.c        libavformat/mov_chan.c        libavformat/mov_esds.c        libavformat/mux.c        libavformat/options.c        libavformat/os_support.c        libavformat/protocols.c        libavformat/qtpalette.c        libavformat/rawdec.c        libavformat/replaygain.c        libavformat/riff.c        libavformat/riffdec.c        libavformat/sdp.c        libavformat/url.c        libavformat/utils.c        libavcodec/aarch64/h264dsp_init_aarch64.c        libavcodec/aarch64/h264dsp_neon.S        libavcodec/aarch64/h264IDct_neon.S        libavcodec/aarch64/IDctdsp_init_aarch64.c        libavcodec/aarch64/simple_IDct_neon.S        libavcodec/ac3_parser.c        libavcodec/ac3tab.c        libavcodec/adts_parser.c        libavcodec/allcodecs.c        libavcodec/avdct.c        libavcodec/avpacket.c        libavcodec/avpicture.c        libavcodec/bitstream.c        libavcodec/bitstream_filter.c        libavcodec/bitstream_filters.c        libavcodec/bsf.c        libavcodec/codec_desc.c        libavcodec/d3d11va.c        libavcodec/decode.c        libavcodec/dirac.c        libavcodec/dv_profile.c        libavcodec/encode.c        libavcodec/faandct.c        libavcodec/faanIDct.c        libavcodec/fdctdsp.c        libavcodec/ffjni.c        libavcodec/Golomb.c        libavcodec/h2645_parse.c        libavcodec/h264_mp4toannexb_bsf.c        libavcodec/h264_parse.c        libavcodec/h264_parser.c        libavcodec/h264_ps.c        libavcodec/h264_sei.c        libavcodec/h264data.c        libavcodec/h264dsp.c        libavcodec/h264IDct.c        libavcodec/hevc_data.c        libavcodec/hevc_mp4toannexb_bsf.c        libavcodec/hevc_parse.c        libavcodec/hevc_parser.c        libavcodec/hevc_ps.c        libavcodec/hevc_sei.c        libavcodec/IDctdsp.c        libavcodec/imgconvert.c        libavcodec/jfdctfst.c        libavcodec/jfdctint.c        libavcodec/jni.c        libavcodec/jrevdct.c        libavcodec/mathtables.c        libavcodec/mediacodec.c        libavcodec/mediacodec_surface.c        libavcodec/mediacodec_sw_buffer.c        libavcodec/mediacodec_wrapper.c        libavcodec/mediacodecdec.c        libavcodec/mediacodecdec_common.c        libavcodec/mjpegenc_huffman.c        libavcodec/mpeg12framerate.c        libavcodec/mpeg4audio.c        libavcodec/mpegaudiodata.c        libavcodec/null_bsf.c        libavcodec/options.c        libavcodec/parser.c        libavcodec/parsers.c        libavcodec/profiles.c        libavcodec/pthread.c        libavcodec/pthread_frame.c        libavcodec/pthread_slice.c        libavcodec/qsv_API.c        libavcodec/raw.c        libavcodec/simple_IDct.c        libavcodec/startcode.c        libavcodec/utils.c        libavcodec/v4l2_buffers.c        libavcodec/v4l2_context.c        libavcodec/v4l2_fmt.c        libavcodec/v4l2_m2m.c        libavcodec/vorbis_parser.c        libavcodec/xiph.c        libavutil/../compat/strtod.c        libavutil/aarch64/cpu.c        libavutil/aarch64/float_dsp_init.c        libavutil/aarch64/float_dsp_neon.S        libavutil/adler32.c        libavutil/aes.c        libavutil/aes_ctr.c        libavutil/audio_fifo.c        libavutil/avsscanf.c        libavutil/avstring.c        libavutil/base64.c        libavutil/blowfish.c        libavutil/bprint.c        libavutil/buffer.c        libavutil/camellia.c        libavutil/cast5.c        libavutil/channel_layout.c        libavutil/color_utils.c        libavutil/cpu.c        libavutil/crc.c        libavutil/des.c        libavutil/dict.c        libavutil/display.c        libavutil/dovi_Meta.c        libavutil/downmix_info.c        libavutil/encryption_info.c        libavutil/error.c        libavutil/eval.c        libavutil/fifo.c        libavutil/file.c        libavutil/file_open.c        libavutil/fixed_dsp.c        libavutil/float_dsp.c        libavutil/frame.c        libavutil/hash.c        libavutil/hdr_dynamic_Metadata.c        libavutil/hmac.c        libavutil/hwcontext.c        libavutil/hwcontext_mediacodec.c        libavutil/imgutils.c        libavutil/integer.c        libavutil/intmath.c        libavutil/lfg.c        libavutil/lls.c        libavutil/log.c        libavutil/log2_tab.c        libavutil/mastering_display_Metadata.c        libavutil/mathematics.c        libavutil/md5.c        libavutil/mem.c        libavutil/murmur3.c        libavutil/opt.c        libavutil/parseutils.c        libavutil/pixdesc.c        libavutil/pixelutils.c        libavutil/random_seed.c        libavutil/rational.c        libavutil/rc4.c        libavutil/reverse.c        libavutil/ripemd.c        libavutil/samplefmt.c        libavutil/sha.c        libavutil/sha512.c        libavutil/slicethread.c        libavutil/spherical.c        libavutil/stereo3d.c        libavutil/tea.c        libavutil/threadmessage.c        libavutil/time.c        libavutil/timecode.c        libavutil/tree.c        libavutil/twofish.c        libavutil/tx.c        libavutil/tx_double.c        libavutil/tx_float.c        libavutil/tx_int32.c        libavutil/utils.c        libavutil/vIDeo_enc_params.c        libavutil/xga_Font_data.c        libavutil/xtea.c)add_library(ffmpeg ${ffmpeg_sources})target_include_directorIEs(ffmpeg        PUBliC ./)
3. 在AndroID NDK工程中引用ffmpeg依赖库

在自己C++工程的CMakeLists.txt中增加

add_subdirectory({ffmpeg_dir} ./ffmpeg)target_link_librarIEs( {lib_name}                       ...                       ffmpeg                       z)

同步Gradle之后就能尝试build,通过后就可以愉快的deBUG之旅了。

总结

以上是内存溢出为你收集整理的FFmpeg在Android Studio中断点调试全部内容,希望文章能够帮你解决FFmpeg在Android Studio中断点调试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存