You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/FFmpeg-1.1/configuration/Build-Instructions-zh-CN.txt

113 lines
6.3 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

FFmpeg 1.1 + libvpx 1.3.0 编译配置说明
一、编译目标
目标平台:Windows 32 位(x86 / Win32)。
FFmpeg:n1.1,仅生成 libavcodec、libavformat、libavutil、libswscale 四个动态库及对应 MSVC 导入库。
libvpx:1.3.0,构建 Release 静态库,启用 VP8 编码和解码,禁用 VP9,然后静态链接进 avcodec-54.dll。
FFmpeg 保持 LGPL 2.1 或更高版本配置,关闭 GPL、nonfree 和 version3。libvpx 使用其原有 BSD 许可,另附 PATENTS 文件。
FFmpeg 启用 -O2 优化并保留 -Z7 调试信息;本次没有单独构建一套 Debug DLL。
二、编译环境和源码位置
MSVC:Visual Studio 2010,x86 编译器 16.00.30319.01。
Windows SDK:7.0A。
MSBuild:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe。
MSYS2:E:\msys64,使用 Bash、GNU Make、Perl、diff 等工具。
Yasm:1.3.0,位于 E:\thirdparty-build\tools\yasm。
C99 转换工具:E:\thirdparty-build\tools\c99-to-c89。
兼容整数头文件:E:\thirdparty-build\tools\msinttypes。
环境入口:E:\thirdparty-build\ffmpeg-vs2010.cmd。
该入口加载 VS2010 vcvars32.bat,仅设置当前终端及子进程的 PATH、INCLUDE、临时目录等环境变量。
本包 source\FFmpeg-n1.1 保存完整 FFmpeg n1.1 源码,包括 configure、公共构建文件和 compat 等目录。
本包 source\libvpx-1.3.0 保留完整 libvpx 源码;其中的 VP9 等文件不代表本次启用了对应功能。
以下命令中的绝对路径是原始构建机记录,迁移后应替换为本包对应源码及工具路径。
三、libvpx 实际构建命令
先启动上述环境入口。以下命令在其 Bash 终端执行,构建目录和输出目录需预先创建。
以下脚本采用本机实际目录;迁移目录时需要同步调整脚本中的所有路径。
#!/usr/bin/env bash
set -e
# 使用 VS2010 构建供 FFmpeg 链接的 Win32 静态库。
cd /e/thirdparty-build/build/libvpx-1.3.0-x86-static
# 旧版工程生成器需要相对源码路径,避免把 MSYS 盘符路径写入 VS 工程。
../../source/libvpx-1.3.0/configure \
--target=x86-win32-vs10 \
--prefix=/e/thirdparty-build/output/libvpx-1.3.0-x86-static \
--enable-static --disable-shared --enable-static-msvcrt \
--enable-vp8 --disable-vp9 --disable-examples --disable-unit-tests \
--disable-docs --disable-debug-libs
make NO_LAUNCH_DEVENV=1
# Yasm 的格式名区分大小写,旧生成器给出的 Win32 必须改为 win32。
sed -i 's/-f $(PlatformName)/-f win32/g' vpx.vcxproj
MSYS2_ARG_CONV_EXCL='*' /c/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe \
vpx.sln -t:Build -p:Configuration=Release -p:Platform=Win32 -verbosity:minimal
test -f Win32/Release/vpxmt.lib
make NO_LAUNCH_DEVENV=1 install
# FFmpeg 1.1 的检测脚本使用 vpx.lib 这个名称。
mkdir -p /e/thirdparty-build/output/libvpx-1.3.0-x86-static/lib
cp Win32/Release/vpxmt.lib /e/thirdparty-build/output/libvpx-1.3.0-x86-static/lib/vpx.lib
四、FFmpeg 实际构建命令
libvpx 构建、安装完成后执行下面的命令。
--enable-shared/--disable-static 控制 FFmpeg 自身生成动态库;libvpx 则通过静态 vpx.lib 链接进去。
--extra-ldflags 使用 MSVC 链接器的 -libpath: 语法。
FFmpeg 的 avcodec.lib 等四个 .lib 是 DLL 导入库;libvpx 的 vpx.lib 是包含实现的静态库,两者性质不同。
#!/usr/bin/env bash
set -e
# 保留原四库与 LGPL 配置,静态链接已经构建的 libvpx。
cd /e/thirdparty-build/build/ffmpeg-1.1-lgpl-vpx-x86
test -f /e/thirdparty-build/output/libvpx-1.3.0-x86-static/lib/vpx.lib
/c/Users/ljj22/Desktop/thirdparty-build/FFmpeg-n1.1/configure \
--toolchain=msvc --target-os=win32 --arch=x86 \
--prefix=/e/thirdparty-build/output/ffmpeg-1.1-lgpl-vpx-x86 \
--enable-shared --disable-static \
--disable-gpl --disable-nonfree --disable-version3 \
--disable-programs --disable-doc \
--disable-avdevice --disable-avfilter --disable-swresample \
--disable-avresample --disable-postproc \
--enable-libvpx \
--extra-cflags="-IE:/thirdparty-build/output/libvpx-1.3.0-x86-static/include -MT" \
--extra-ldflags="-libpath:E:/thirdparty-build/output/libvpx-1.3.0-x86-static/lib"
# 中文版编译器的版本字符串经 MSYS 转码后会使 VS2010 误读引号,改成等价 ASCII 描述。
sed -i 's/^#define CC_IDENT .*/#define CC_IDENT "MSVC 16.00.30319.01 x86"/' config.h
make -j4
make install
五、本机兼容性处理
1. libvpx configure 使用相对源码路径,避免旧生成器把 /e/... 路径错误写进 VS2010 工程。
2. 仅在生成的 vpx.vcxproj 中将 Yasm 参数 -f $(PlatformName) 改为 -f win32。Yasm 对格式名称大小写敏感。
3. 将生成的 vpxmt.lib 复制为安装目录 lib\vpx.lib,供 FFmpeg 的 libvpx 检测和链接使用;文件内容一致。
4. 中文版 MSVC 的版本描述在 MSYS 转码后引起 config.h 的 C2001 错误;仅将生成文件的 CC_IDENT 改为 ASCII 描述 MSVC 16.00.30319.01 x86。未修改编解码源码或许可选项。
5. configure 提示 pkg-config 不存在,但本次通过显式头文件路径、库路径及实际链接检测找到 libvpx。
六、配置记录和输出
FFmpeg 实际输出如下:
模块 DLL 文件 导入库文件 模块版本
libavcodec avcodec-54.dll avcodec.lib 54.86.100
libavformat avformat-54.dll avformat.lib 54.59.106
libavutil avutil-52.dll avutil.lib 52.13.100
libswscale swscale-2.dll swscale.lib 2.1.103
make install 将四个 DLL 及四个导入库安装到 bin,将公开头文件安装到 include。
本包将 FFmpeg 输出分别整理到 bin、lib、include;libvpx 源码保存在 source\libvpx-1.3.0,已静态链接进 avcodec-54.dll。
configuration 保留 FFmpeg 的 config.h、config.mak、config.log,其中 config.h 已包含上述 CC_IDENT 修正。
config.log 记录配置检测过程,其中功能探测失败不等于最终构建失败;该文件不是 make 的编译日志。
七、许可文件
FFmpeg:licenses\FFmpeg\LICENSE、licenses\FFmpeg\COPYING.LGPLv2.1。各源文件内的原始声明仍保留。
libvpx:licenses\libvpx\LICENSE、licenses\libvpx\PATENTS。原源码中的许可及署名文件仍保留。
本包 source\FFmpeg-n1.1 已包含本次构建对应的完整 FFmpeg 1.1 源码。
按 FFmpeg LICENSE 保留 IJG 致谢:
This software is based in part on the work of the Independent JPEG Group.