ffplay调试环境搭建

简介: 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!!!

目录
相关文章
|
8月前
|
存储 C语言 Windows
音视频使用qt测试ffmpeg接口时无法运行
音视频使用qt测试ffmpeg接口时无法运行
141 0
|
3月前
|
编解码 Linux 开发者
初探FFplay:多媒体播放器的快速入门指南
【10月更文挑战第15天】FFplay是一个由FFmpeg项目提供的轻量级多媒体播放器,它使用FFmpeg库来解码和播放音频/视频流。FFplay非常适合那些想要深入了解多媒体编解码技术和音视频播放流程的开发者或爱好者。本文将介绍FFplay的基本功能、安装配置步骤以及如何使用命令行参数来播放多媒体文件。
354 0
|
6月前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
131 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
7月前
|
编解码 Linux
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
XviD是开源的MPEG-4视频编解码器,曾与DivX一起用于早期MP4视频编码,但现在已被H.264取代。要集成XviD到Linux上的FFmpeg,首先下载源码,解压后配置并编译安装libxvid。接着,在FFmpeg源码目录中,重新配置FFmpeg以启用libxvid,然后编译并安装。成功后,通过`ffmpeg -version`检查是否启用libxvid。详细步骤包括下载、解压libxvid,使用`configure`和`make`命令安装,以及更新FFmpeg配置并安装。
108 2
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
|
7月前
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
368 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
|
7月前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
144 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
8月前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
186 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
8月前
|
编解码 Linux
FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
在《FFmpeg开发实战》一书中,介绍了如何在Linux环境下为FFmpeg集成libopus和libvpx,以支持WebM格式的Opus和VP8/VP9编码。首先,下载并安装libopus。接着,下载并安装libvpx。最后,在FFmpeg源码目录下,重新配置FFmpeg,启用libopus和libvpx,编译并安装。通过`ffmpeg -version`检查版本信息,确认libopus和libvpx已启用。
187 1
FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx
|
8月前
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
179 1
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
8月前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
276 0
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx