ffplay調試環境搭建

才高八斗船帆ub 發佈 2022-12-08T10:53:03.935225+00:00

以前遇到播放的問題向人請教的時,經常聽到的一句話就是去看看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、新建Clion工程

新建好CLion工程後(注意是C工程,不是C++工程),我們就需要下載FFmpeg的源碼了,注意這個源碼的版本最好和前面集成FFmpeg的版本好一樣,即使不一樣版本呢之間也不要相差太遠,不然可能會因為版本的原因導致一些功能或頭文件對應不上。

2、生成config.h頭文件

下載好FFmpeg的源碼後,我們需要進入到源碼目錄執行一下./configure命令行,這一步的目的是生成config.h頭文件。然後找到文件config.h並拷貝到我們新建CLion工程中去。

3、拷貝fftools目錄下的相關文件

我們將源碼目錄fftools下的三個文件拷貝進去我們的CLion工程,這三個文件分別是cmdutils.ccmdutils.h ffplay.c

4、拷貝va_copy.h頭文件

將源碼目錄compat下的頭文件va_copy.h也拷貝進去我們新建的CLion目錄,到這裡我們所需的源文件是算是準備完成了。

5、修改CMakeLists.txt

修改CMakeLists.txt如下,主要相關庫的路徑要替換成自己的FFmpeg庫和SDL庫的真實路徑。


【騰訊文檔】FFmpegWebRTCRTMPRTSPHLSRTP播放器-音視頻流媒體高級開發-資料領取FFmpegWebRTCRTMPRTSPHLSRTP鎾斁鍣�-闊寵棰戞祦濯掍綋楂樼駭寮€鍙�-璧勬枡棰嗗彇


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
        )

6、debug測試

然後就可以愉快地進行斷點調試了,找到ffplay.c的main函數,打一個斷點,然後debug運行一下。

同理,如果童鞋們想要調試一下ffprobe.c或ffmpeg.c也可以使用同樣的方式集成即可。

可能遇到的問題

1、SDL2沒有安裝

ffplay是需要依賴SDL進行畫面的展示和聲音的播放的。所以集成的前提是需要安裝好SDL2

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

筆者集成的時候就遇到了這個問題,解決方案就是直接注釋掉即可。



關鍵字: