前言
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.c
、cmdutils.h
、 ffplay.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!!!