目标: win10 编译 ffmpeg
环境: win10
准备条件:
- 编译器 vs2013 或者 vs2019 (推荐)
- wsl 安装 Linux 子系统(这个比虚拟机好用)这里使用的是我在Windows商店下载的Ubuntu18
- fmpeg 4.2.3
步骤:
1、开始菜单 VisualStudio里找到”Developer Command Prompt for VS 2019“,运行
提示:Win键,输入for VS,会立刻出现,回车即可执行
2、输入bash,进入linux子系统
3、如果没有yasm,运行apt install yasm安装,唯一的安装了。
为./configure添加两个参数: --cc=cl.exe --ld=link.exe
两个.exe非常重要,默认的configure在bash中执行cl,是找不到cl.exe的,link同理,所以我们手动指定,不会报错。
–enable-x86asm在以前某些版本可能需要改为–enable-yasm
编译选项:
make clean
./configure --arch=x86_64 --cc=cl.exe --ld=link.exe --enable-shared --disable-doc --enable-ffmpeg --enable-ffplay --enable-ffprobe --disable-symver --enable-small --disable-everything --disable-w32threads --enable-protocol=rtmp --enable-protocol=http --enable-protocol=tcp --enable-protocol=udp --enable-protocol=file --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=h264 --enable-demuxer=aac --enable-demuxer=mpegts --enable-decoder=h264 --enable-decoder=aac --enable-decoder=aasc --enable-decoder=aac_latm --enable-parser=aac --enable-parser=h264 --enable-demuxer=opus --enable-decoder=libopus --enable-parser=opus --prefix="./ffbin" --toolchain=msvc --enable-x86asm --enable-optimizations --enable-debug --enable-protocol=crypto --enable-muxer=flv --enable-libx264 --enable-gpl --extra-cflags=/I"D:/4_work/gitlab/thirdparty/x264/" --extra-ldflags=/LIBPATH:“D:/4_work/gitlab/thirdparty/x264/” --extra-cflags=/I"D:/4_work/gitlab/thirdparty/SDL2-2.0.14/" --extra-ldflags=/LIBPATH:“D:/4_work/gitlab/thirdparty/SDL2-2.0.14/”
make
make install
出现的问题
-
ffplay 编译失败
应该是 sdl 库在config 时候找不到路径,在linux 下需要安装,windows 暂时不知道怎么配置进去 -
源码字符集不匹配的问题
msvc2019
因为msvc2019默认以utf-8编码读取源码,而./configure生成的config.h包含gbk字符 解决方法: - 将config.h以gbk编码打开(notepad++或vscode),复制全部,再以utf-8打开粘贴覆盖; - 或者,干脆将utf-8下乱码的字符删除
msvc2013
msvc2013默认以gbk编码读取源码,所以方法同msvc2019,不过恰好相反,要确保不出现gbk编码无法识别的字符 -
编译出错,timespec未定义
timespec结构体是C11标准定义的,包含在time.h头文件中,msvc2013可能没有完全实现这个标准。 幸好ffmpeg只是借用了这个结构体,而没有用到相应的函数, 所以我们手动定义一下好了:#ifndef _MY_TIMESPEC_ #define _MY_TIMESPEC_ struct timespec { time_t tv_sec; // Seconds - >= 0 long tv_nsec; // Nanoseconds - [0, 999999999] }; #endif将它拷贝到源码中,重新make
874

被折叠的 条评论
为什么被折叠?



