凌晨半夜这会儿还挺激动的,自从开始学DX12后就很少用linux了,为了深入学习ffmpeg,学习ffplay代码,在windows的wsl上整个linux环境搞搞(直接在windows上调试ffplay半天没折腾过来,所以只好在linux上整,不过linux还是好啊,很适合开发环境(坏了,我又有想中途放弃DX12直接去学vulkan的感觉了))。

安装的话,wsl现在是wsl2也有linux内核了,直接当linux用就行。装的经典的Ubuntu(虽然更喜欢arch但在wsl上装arch还是有些折腾了,不如ubuntu来的稳定和快速些)。

进去后安装各种必要工具,make,gcc,pkg-config,gdb之类的,还要有libsdl2-dev,不然configure配置时ffplay因为没有SDL依赖导致不会被加入到编译中去。

然后是下载好ffmpeg源码,进去后配置configure。

./configure
    --enable-debug
    --disable-optimizations
    --extra-cflags="-g3"
    --extra-ldflags="-g3"
    --disable-stripping
    --prefix=/usr/local
    --enable-shared

配置完成后就可以开始make了,记得用make -j8开启多线程加速编译,毕竟这是个漫长的时间(虽然我的surface go2就俩核心,所以只能用到j4,j8只会适得其反了)。

编译好后可以安装也可以不安装,直接调试也行。安装的话sudo make install

好了,现在你可以直接用gdb调试了,调试的程序是ffplay_g,这个就是debug版本。

当然我个人对直接用gdb调试不熟悉,nvim上用gdb调试也太久没用了,所以这里就用vscode调试了。 (vs好像也可以吧,我记得用linux开发环境的设置的)。

vscode的配置,你需要安装wsl的插件,以及c/c++的插件。 注意: 这个c/c++插件与你在windows的vscode上已经安装过的不一样,它是指定在wsl:Ubuntu上运行所安装的。不安装的话launch.json中type无法设置为cppdbg。

然后是.vscodelaunch.json的配置。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/ffplay_g",
            "args": [
                "test.mp3"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb"
        }

    ]
}

这里的args你按你传参的需求来,我是先测试音频的所以设的test.mp3。

.vscode我是直接放在ffmpeg源码目录下了,放其他地方或许也可以,但相应的你的launch.json的配置内容就要调整,program什么之类的。

啊,当然,你也可以调试别的。ffmpeg_gffprobe_g都可以。

配置设置完之后你就可以来到ffplay.c中打断点调试了。

F5!启动!