跳到主要内容

FFmpeg编译及调试

阅读量

0

阅读人次

0

编译

Linux

sudo apt install nasm
./configure --prefix=/opt/Libraries/ffmpeg-6.0
make -j6
make install

MSVC

找到 x64 Native Tools Command Prompt for VS 2022 这个命令工具,点击它打开命令行。

为了让 MSYS2 能继承 MSVC 的环境变量,需要修改 D:\msys64\msys2_shell.cmd 中的 rem set MSYS2_PATH_TYPE=inherit,去掉rem,取消这⼀句的注释。使MSYS2的环境变量继承当前CMD的窗口的环境变量。

x64 Native Tools Command Prompt for VS 2022 命令窗口输入 cd d:\msys64\ 先回到 msys64目录。

然后再输入 .\msys2_shell.cmd -ucrt64,启动 msys2 命令行窗口。在 MSYS2 命令行窗口分别输入 echo $LIBwhich cl.exe ,确认 msys2 命令行窗口 是否已经继承了 MSVC 的 lib 环境变量,以及确认一下 cl.exe 是在MSVC的目录下,同时看下 cl.exe 的目录是否有 link.exe。

安装MSYS2所需软件:

pacman -S diffutils make pkg-config yasm

下载SDL2,在目录下新建sdl2.pc文件,内容如下:

# sdl pkg-config source file

prefix=/e/Projects/Libraries/SDL2-2.28.4_msvc
exec_prefix=${prefix}
libdir=${prefix}/lib/x64
includedir=${prefix}/include

Name: sdl2
Description: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.
Version: 2.28.4
Requires:
Conflicts:
Libs: -L${libdir} -lSDL2
Cflags: -I${includedir}

导入SDL2至 pkg-config:

export PKG_CONFIG_PATH=/e/Projects/Libraries/SDL2-2.28.4_msvc:$PKG_CONFIG_PATH

进入FFmpeg源码目录,执行configure:

执行configure可能会等待很久才输出结果。

在make之前,注意config.h文件的编码,最好转换为UTF-8 with BOM,否则有可能会出现

E:\Projects\ffmpeg-6.0\config.h(1): warning C4828: 文件包含在偏移 0x232 处开始的字符,该字符在当前源字符集中无效(代码页 65001)。

的错误导致编译失败。

./configure \
--prefix=/e/Projects/ffmpeg-7.0_msvc2022_64bit \
--enable-gpl \
--enable-nonfree \
--enable-shared \
--enable-sdl2 \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--toolchain=msvc

make -j8
make install # 要执行 make install

NDK

安装MSYS2

# 安装编译相关工具
pacman -S diffutils make

COMPILER_ROOT=D:/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64

./configure --prefix=D:/Android/ffmpeg-6.0 \
--cross-prefix=${COMPILER_ROOT}/bin/aarch64-linux-android30- \
--ld=${COMPILER_ROOT}/bin/aarch64-linux-android30-clang \
--nm=${COMPILER_ROOT}/bin/llvm-nm.exe \
--strip=${COMPILER_ROOT}/bin/llvm-strip.exe \
--disable-doc --disable-vulkan \
--disable-static --enable-shared --arch=aarch64 --enable-cross-compile \
--target-os=android --disable-programs

make -j6
make install

使用 VS Code 调试

使用 VS Code 打开源码目录,在FFmpeg源码目录下新建.vscode\launch.json文件:

{
"version": "0.2.0",
"configurations": [
{
"name": "ffplay调试",
"type": "cppvsdbg",
"request": "launch",
"program": "E:/Projects/ffmpeg-6.0_msvc2022_64bit/bin/ffplay.exe",
"cwd": "E:/",
"args": [
"E:/01.mp4"
]
}
]
}

即可调试。