<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在 Android Studio 中調(diào)試 FFmpeg

          共 7617字,需瀏覽 16分鐘

           ·

          2021-07-30 16:45

          一般情況下在Android平臺(tái)使用FFmpeg為動(dòng)態(tài)庫或靜態(tài)庫的形式,只能通過設(shè)置FFmpeg日志回調(diào)來看一些FFmpeg輸出的日志,有時(shí)需要debug來查看FFmpeg內(nèi)部執(zhí)行過程。


          本文記錄一下在Android Studio中使用FFmpeg源碼進(jìn)行斷點(diǎn)調(diào)試的方法。需在Linux或macOS下,Windows 10系統(tǒng)可以使用wsl子系統(tǒng)。


          1. 編寫FFmpeg配置腳本

          在此之前需要準(zhǔn)備FFmpeg源碼,NDK(Android SDK文件夾下的ndk-bundle或者ndk下的特定版本,wsl子系統(tǒng)需要單獨(dú)下載)Linux版)。


          用來調(diào)試的工程開啟盡量少的功能,下面以調(diào)試FFmpeg(4.3.1)硬解h264為例,在FFmpeg根目錄下新建文件armv8a_config.sh


          #!/bin/bash
          API=21
          NDK=/home/user/Android/ndk/android-ndk-r21
          PREBUILT=$NDK/toolchains/llvm/prebuilt/linux-x86_64
          PREFIX=/home/user/Desktop/ffmpeg/arm64-v8a

          CONFIGURE_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++

          在終端中進(jìn)入FFmpeg根目錄,增加執(zhí)行權(quán)限 chmod +x armv8a_config.sh并執(zhí)行./armv8a_config.sh

          2. 創(chuàng)建ffmpeg CMake依賴庫

          執(zhí)行完上面步驟ffmpeg會(huì)自動(dòng)配置好Makefile,然后執(zhí)行make -j8 > sources.txt,此步驟主要用來獲取所有需要的源文件(如果有更好的辦法獲取源文件列表,可以在評(píng)論區(qū)告訴我)。


          在FFmpeg根目錄創(chuàng)建CMakeLists.txt文件,復(fù)制上步生成的sources.txt文件中的.o后綴的所有行,并改后綴為.c,部分文件為.S,創(chuàng)建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之旅了。


          作者:VE視頻引擎

          來源:https://segmentfault.com/a/1190000038403006


          -- END --

          推薦:

          Android FFmpeg 實(shí)現(xiàn)帶濾鏡的微信小視頻錄制功能

          全網(wǎng)最全的 Android 音視頻和 OpenGL ES 干貨,都在這了

          一文掌握 YUV 圖像的基本處理

          Android FFmpeg 流媒體邊播放邊錄制功能

          FFmpeg + Android AudioRecorder 音頻錄制編碼

          利用 FFmpeg 和 ANativeWindow 實(shí)現(xiàn)視頻解碼播放

          FFmpeg、x264以及fdk-aac 編譯整合

          瀏覽 86
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最近中文字幕免费MV第一季歌词怀孕 | 日欧操逼电影 | 少妇夫妻性生活的视频一级 | 五月婷婷久久久 | 狠狠干免费的成人视频 |