基于FFMPEG API开发RTMP推流器
1. 环境
Win10 + Visual Stdio 2017
2. 材料
Windows版本的FFMPEG库
下载地址:https://ffmpeg.zeranoe.com/builds/
如图所示,下载Windows64位的4.0.2版本的Shared和Dev版本,Dev包含的是开发ffmpeg程序所需要的头文件及链接库,在编译时会用到;Shared包含的是运行程序时调用到的ffmpeg的动态库,在运行时用到。这两个都要下载。
3 开发环境配置
- 创建解决方案
打开Visual Studio 2017,创建一个live的解决方案,
- 创建项目
项目结构如下图所示。
- 运行
此时点本地Windows调试器按键运行一下,如果弹出的控制台有打印Hello World, 则项目创建成功。
VS默认为Debug环境为x86配置,我们可以将其手动改为x64平台。如下图所示,再次点本地Windows调试器按键运行一下,看是否还会成功打印Hello World,答案当然是肯定的啦。
接下来我们把ffmpeg加入到我们的解决方案中,在我们的live目录下创建一个ffmpeg的目录来存放库及头文件,还有运行动态库。将ffmpeg-4.0.2-win64-dev文件夹下的include和lib,还有ffmpeg-4.0.2-win64-shared文件夹下的bin目录都复制到ffmpeg目录下。
接下来就是把它们配置到我们的live解决方案中
3.1 配置include和lib目录
右击项目,属性 --> C/C++ --> 常规 添加include目录
链接器–>常规–>附加库目录 添加lib目录 如下图
链接器–》输入–》附加依赖项–》编辑,输入lib目录中所有的.lib文件名。
运行环境配置:配置属性–>高度–>环境–>输入path=ffmpeg bin目录
至此,所有的配置完成。
3.2 导入源码
我们这次的推流工程项目StreamPusher是直接拿雷神的simplest_ffmpeg_streamer的工程来升级的,雷神的simplest_ffmpeg_streamer的github地址为https://github.com/leixiaohua1020/simplest_ffmpeg_streamer, 它这个工程是在2014年10月份写的,当时的ffmpeg版本为2.3.6, https://ffmpeg.org/olddownload.html,
这次我们尝试着给它升级到4.0.2,看它能不能正常运行。
首先将雷神的simplest_ffmpeg_streamer项目中的simplest_ffmpeg_streamer.cpp复制到我们的StreamPusher.cpp里,编译时主要碰到三个问题,
- 预编译头错误
解决方法
- 在解决方案资源管理器中,右击相应的.cpp文件,点击“属性”
- 在左侧配置属性中,点开“C/C++”,单击“预编译头”
- 更改右侧第一行的“创建/使用预编译头”,把选项从“使用预编译头(/Yu)”改成“不使用预编译头”
- CODEC_FLAG_GLOBAL_HEADER找不到
在4.0.2版本中,它已被替换成AV_CODEC_FLAG_GLOBAL_HEADER。
- 变量/类被声明已否决
发现报非常多的变量/类被声明已否决,先暂时关掉SDL试一下,
3.3 验证
编译成功后,再搭建一个SRS流媒体服务器验证一下(网上有许多博客可参考,比较简单),推流成功。
下一节,我们将打开SDL,通过修改代码,实现将此工程升级到4.0.3版本。
完整代码可到我的github下载:
https://github.com/onroadtech/live
branch: master