乐趣区

关于c++:ffplay调试环境搭建

前言

ffplay 是基于 FFmpeg 的最简略的官网播放器。麻雀虽小,五脏俱全,虽说 ffplay 简略,然而各种播放器应有的性能一一俱全,说它简略或者仅仅是因为它只有一个点 c 文件而已吧。

想要开发一个优良的播放器,参考是必不可少的,毕竟 control c 和 control v 是程序员天生的本能。以前遇到播放的问题向人求教的时,常常听到的一句话就是去看看 ffplay 是怎么解决的就晓得怎么过解决了呀,
可见 ffplay 在播放畛域的位置不个别。。。

而且想要学好 FFmpeg,在理解了 FFmpeg 的基本知识和相干 API 之后,再联合我的项目实战是十分有必要的。然而光是跑马观花式的看看 ffplay 的源码可能播种甚微,要想深刻去理解 ffplay 外部的大抵细节,集成源码断点调试是必可少的。
后续笔者将用几篇文章介绍 ffplay 的一些次要的性能点,然而想要理解 ffplay 单靠几篇文章必定是不够的,笔者更加心愿的是这几篇博客能起到抛砖引玉的作用,疏导大家更加深刻地学习理解。。。

所谓兵马未动,粮草先行,明天咱们就先搭建好 ffplay 的调试环境,不便大家后续的学习调试。

环境搭建

笔者所应用的环境是:Mac 零碎和 Clion 开发工具。笔者集成的 FFmpeg 的版本是应用 Homebrew 装置的 ffmpeg5.0

1、编译集成 FFmpeg 库
ffplay 的调试环境搭建是建设在笔者之前的文章《FFmpeg 连载 1 - 开发环境搭建》之上,首先须要集成 FFmpeg 的相干库,这一步大家参考笔者之前的文章即可。

2、新建 Clion 工程

新建好 CLion 工程后(留神是 C 工程,不是 C ++ 工程),咱们就须要下载 FFmpeg 的源码了,留神这个源码的版本最好和后面集成 FFmpeg 的版本好一样,即便不一样版本呢之间也不要相差太远,不然可能会因为版本的起因导致一些性能或头文件对应不上。

3、生成 config.h 头文件

下载好 FFmpeg 的源码后,咱们须要进入到源码目录执行一下 ./configure 命令行,这一步的目标是生成 config.h 头文件。而后找到文件 config.h 并拷贝到咱们新建 CLion 工程中去。

4、拷贝 fftools 目录下的相干文件

咱们将源码目录 fftools 下的三个文件拷贝进去咱们的 CLion 工程,这三个文件别离是cmdutils.ccmdutils.hffplay.c

5、拷贝 va_copy.h 头文件

将源码目录 compat 下的头文件 va_copy.h 也拷贝进去咱们新建的 CLion 目录,到这里咱们所需的源文件是算是筹备实现了。

6、批改 CMakeLists.txt

批改 CMakeLists.txt 如下,次要相干库的门路要替换成本人的 FFmpeg 库和 SDL 库的实在门路。

cmake_minimum_required(VERSION 3.21)
# 这里是工程名称  C 工程
project(FFplay_debug C)

set(CMAKE_C_STANDARD 99)

cmake_minimum_required(VERSION 3.17)

# FFmpeg 的装置目录,能够通过命令 "brew info ffmpeg" 获取
# 须要替换成本人的 FFMpeg 装置目录
set(FFMPEG_DIR /opt/homebrew/Cellar/ffmpeg/5.0)

# SDL2 的装置目录,能够通过命令 "brew info sdl2" 获取
# 须要替换成本人的 SDL2 装置目录
set(SDL2_DIR /opt/homebrew/Cellar/sdl2/2.0.20)

# 头文件搜寻门路
include_directories(${FFMPEG_DIR}/include/)

include_directories(${CMAKE_SOURCE_DIR})

include_directories(${SDL2_DIR}/include/SDL2/)

# 动态链接库或动态链接库的搜寻门路
link_directories(${FFMPEG_DIR}/lib/)

link_directories(${SDL2_DIR}/lib/)

#将指定文件设置在 FFmpeg_test_source 变量中
file(GLOB FFplay_debug_source ${CMAKE_SOURCE_DIR}/*.*)

add_executable(FFplay_debug ${FFplay_debug_source} cmdutils.c)

#链接库
target_link_libraries(FFplay_debug
        #FFmpeg 库
        avcodec
        avdevice
        postproc
        avfilter
        avformat
        avutil
        swresample
        swscale
        # SDL2 库
        SDL2
        )

7、debug 测试

而后就能够欢快地进行断点调试了,找到 ffplay.c 的 main 函数,打一个断点,而后 debug 运行一下。

同理,如果童鞋们想要调试一下 ffprobe.c 或 ffmpeg.c 也能够应用同样的形式集成即可。

可能遇到的问题

1、SDL2 没有装置

ffplay 是须要依赖 SDL 进行画面的展现和声音的播放的。所以集成的前提是须要装置好 SDL2。

2、文件 ”cmdutils.c” 找不到头文件 ”libavutil/libm.h”

笔者集成的时候就遇到了这个问题,解决方案就是间接正文掉即可。

举荐浏览

FFmpeg 连载 1 - 开发环境搭建
FFmpeg 连载 2 - 拆散视频和音频
FFmpeg 连载 3 - 视频解码
FFmpeg 连载 4 - 音频解码
FFmpeg 连载 5 - 音视频编码
FFmpeg 连载 6 - 音频重采样
FFmpeg 连载 8 - 视频合并以及替换视频背景音乐实战

关注我,一起提高,人生不止 coding!!!

退出移动版