ffplay调试环境搭建
创始人
2024-03-27 04:03:20

前言

    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、新建Clion工程

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

2、生成config.h头文件

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

3、拷贝fftools目录下的相关文件

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

4、拷贝va_copy.h头文件

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

5、修改CMakeLists.txt

修改CMakeLists.txt如下,主要相关库的路径要替换成自己的FFmpeg库和SDL库的真实路径。

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

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 库avcodecavdevicepostprocavfilteravformatavutilswresampleswscale# SDL2库SDL2)

6、debug测试

    然后就可以愉快地进行断点调试了,找到ffplay.c的main函数,打一个断点,然后debug运行一下。

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

可能遇到的问题

1、SDL2没有安装

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

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

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

 

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...