美文网首页音视频iOS音视频
Mac下调试FFmpeg的两种方式(支持10.15.4及以上)

Mac下调试FFmpeg的两种方式(支持10.15.4及以上)

作者: 向晨宇 | 来源:发表于2020-08-21 08:06 被阅读0次

    公共步骤

    step.1 编译 ffmpeg

    在github上下载ffmpeg最新版

    • tar xvf ffmpeg-4.0.2.tar.bz2
    • cd ffmpeg-4.0.2
    • ./configure --prefix="ffmpeg_build" --enable-debug --extra-cflags="-fno-stack-check" --cc=clang
    • sudo make && make install

    step.2 新建一个空的 xcode 项目

    • Create a new Xcode project
    • 新建一个空的 xcode 项目


      1.png
      2.png

    step.3 添加 ffmpeg-4.0.2 源码目录进 ffmpeg4_demo 项目中

    image.png

    step.4 添加头文件搜索路径

    • 到这里就可以实现头文件跳转了. 要等待处理完毕才可以点击头文件或者类来查看代码.


      image.png

    方法一. 编译库之后用调试库下断点调试

    step.1 添加一个 target

    • File -> New -> Target -> Cross-platform -> External Build System

      8.png
    • target 命名为 ffmpeg-make

      image.png
    • target 切换到 ffmpeg-make

      10.png

    step.2 修改 ffmpeg-make 源码路径配置

    • 修改 ffmpeg-make 源码路径。
      image.png

    step.3 修改 ffmpeg-make 命令行参数

    • 修改命令行参数


      image.png
    • 修改可执行命令


      image.png

    step.4 添加断点(ffplay.c->main函数), 点击 run

    14.png

    方法二. 调试具体代码

    在公共步骤之后我们在main.cpp写如下代码:

    #include <iostream>
    
    #ifdef __cplusplus
    extern "C" {
    #endif
        
    #include "libavformat/avformat.h"
    #include "libavcodec/avcodec.h"
        
    #ifdef __cplusplus
    }
    #endif
    
    int decodeStream(const char *url) {
        int ret;
        AVFormatContext *ifmtCtx = NULL;
        if ((ret = avformat_open_input(&ifmtCtx,url, NULL, NULL)) < 0) {
            av_log(NULL, AV_LOG_ERROR, "Cannot openinput file\n");
            return ret;
        }
        if ((ret = avformat_find_stream_info(ifmtCtx, NULL))< 0) {
            av_log(NULL, AV_LOG_ERROR, "Cannot findstream information\n");
            return ret;
        }
        
        return 0;
    }
    
    int main(int argc, const char * argv[]) {
            // insert code here...
        decodeStream("xxx");
        
        return 0;
    }
    

    然后打断点即可完成调试

    xcode添加库

    image.png

    注意事项

    1. 如果ffmpeg目录变了或者更新怎么办?

    现在拿到了路径,我们就去这里路径去add.处理完之后变成这样。

    image.png

    利用dwarfdump -debug-info target xxx.a去查看编译的ffmpeg路径,如果更新或者目录变了需要重新编译

    2. 编译指定版本的ffmpeg

    比如我现在要安装FFmpeg3.4.2版本.

    1. 查看软件包安装来源

    $ brew info ffmpeg
    

    执行上述命令您会得到如下信息:

    $ From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/ffmpeg.rb
    

    你看到了什么?github(版本控制) 还有 *.rb(安装文件)

    2. Github中查看rb文件历史提价(版本)信息

    复制链接到地址栏:https://github.com/Homebrew/homebrew-core/blob/master/Formula/ffmpeg.rb
    可以看到如下信息:

    url "https://ffmpeg.org/releases/ffmpeg-4.0.1.tar.xz"
    sha256 "605f5c01c60db35d3b617a79cabb2c7032412be243554602eeed1b628125c0ee"
    

    可以看到当前版本就是: ffmpeg-4.0.1
    接着,在Github上查看历史提交信息,按照如下操作依次点击(熟悉github的同学应该已经看透了秘密):

    17.png
    18.png
    19.png
    20.png

    3. 安装 ffmpeg-3.4.2 版本软件包

    ffmpeg:3.4.2 对应的ffmpeg.rb文件网址:https://raw.githubusercontent...
    执行安装

    参考文献

    1. ijkPlayer编译、打包、多格式及Https支持
    2. ffmpeg安装指定版本
    3. ffmpeg源码调试,非静态库

    相关文章

      网友评论

        本文标题:Mac下调试FFmpeg的两种方式(支持10.15.4及以上)

        本文链接:https://www.haomeiwen.com/subject/dlpejktx.html