Windows下编译FFmpeg.exe

前言重点内容
本文针对初次接触FFmpeg且像我一样的小白,刚接触流媒体很多东西都不了解但是工作的项目中需要加一视频点播直播功能,网上看了一些文档最后采用FFmpeg+Nginx来做直播。Nginx的强大在这里我就不多说了,小型局域网内的点播、直播它是稳稳的够用了。在搭建流媒体服务器的过程中,直播需要依靠FFmpeg来拉直播源,源地址我用香港卫视的地址:rtmp://live.hkstv.hk.lxdns.com/live/hks,推流到Nginx服务器上,测试直播功能正常(之后改用本地rtsp推流到服务器也很稳定)。但当产品上线安装到项目机器上出现严重花屏、卡顿现象。排除了网络,客户端程序,服务器,流媒体编解码器问题后锁定问题在FFmpeg拉流环节。

  • 编译环境:PC Windows10 64bit
  • 编译工具:MinGW+MSYS+yasm

    前期准备

下载FFmpeg


FFmpeg: https://github.com/FFmpeg/FFmpeg/tree/release/2.6
Windows下编译FFmpeg.exe_第1张图片

下载MinGW


MinGw: https://sourceforge.net/projects/mingw/files/
Windows下编译FFmpeg.exe_第2张图片

下载yasm


yasm: http://yasm.tortall.net/Download.html
Windows下编译FFmpeg.exe_第3张图片

配置编译环境


  • 安装MinGW后配置模拟Linux所需要的包,勾选Basic Setup下所有的Package(机器不同,可能包的数量不同,我的比较多)。然后应用 ,菜单栏Installation=>Apply Changes。
    MSYS已经包含在MinGW Basic Setup的包中,不用单独下载
    Windows下编译FFmpeg.exe_第4张图片
  • 更改yasm*.exe为yasm.exe后复制到MinGW的bin目录下(也有文章让放在c:\windows\system32下我这边尝试无效)
    到这里Windows下编译环境就搞定了

修改FFmpeg

经过了几波测试发现分辨率越小,服务端发送给客户端的数据越小,其花屏现象越少,说明花屏现象与服务端发送的数据量有关。
可能的原因是服务端发送的数据量较大时,客户端缓冲区不足,导致数据丢失的问题,从而引起花屏现象。看了网上的一些文档把问题锁定在UDP_MAX_PKT_SIZE这个变量。之后问了公司的技术经理,也认为是数据量变大导致的接收区缓存不够。(最后的效果也验证了这个想法是正确的)
最后修改源码:路径\FFmpeg-release-2.6\libavformat\udp.c
把UDP_MAX_PKT_SIZE增大十倍。

开始编译


  1. 运行MinGW\msys\1.0\msys.bat
  2. 进入FFmpeg2.6的解压路径
  3. 编译命令
 ./configure --enable-shared --disable-static --enable-memalign-hack
make
make install

参考

www.cnblogs.com/dwdxdy/p/3240217.html
bbs.csdn.net/topics/391956783?page=1
http://blog.csdn.net/zhouyongku/article/details/44961447
http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/

你可能感兴趣的:(FFmpeg)