基于FFMPEG API开发RTMP推流器

1. 环境

Win10 + Visual Stdio 2017

2. 材料

Windows版本的FFMPEG库

下载地址:https://ffmpeg.zeranoe.com/builds/

如图1所示,下载Windows64位的4.0.2版本的Shared和Dev版本,Dev包含的是开发ffmpeg程序所需要的头文件及链接库,在编译时会用到;Shared包含的是运行程序时调用到的ffmpeg的动态库,在运行时用到。这两个都要下载。

图1

3 开发环境配置

  • 创建解决方案

打开Visual Studio 2017,创建一个live的解决方案,如图2所示,

图2
  • 创建项目

如图3,


图3

项目结构如图4所示。


图4
  • 运行

此时点本地Windows调试器按键运行一下,如果弹出的控制台有打印Hello World, 则项目创建成功。

VS默认为Debug环境为x86配置,我们可以将其手动改为x64平台。如图5所示,再次点本地Windows调试器按键运行一下,看是否还会成功打印Hello World,答案当然是肯定的啦。

图5

接下来我们把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目录 如图6

图6

链接器-->常规-->附加库目录 添加lib目录 如图7


图7

链接器--》输入--》附加依赖项--》编辑,输入lib目录中所有的.lib文件名,如图8,9所示。

图8

图9

运行环境配置:配置属性-->高度-->环境-->输入path=ffmpeg bin目录 如图10所示


图10

至此,所有的配置完成。

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,如图11。

图11

这次我们尝试着给它升级到4.0.2,看它能不能正常运行。

首先将雷神的simplest_ffmpeg_streamer项目中的simplest_ffmpeg_streamer.cpp复制到我们的StreamPusher.cpp里,编译时主要碰到三个问题,

  • 预编译头错误

解决方法

  1. 在解决方案资源管理器中,右击相应的.cpp文件,点击“属性”
  2. 在左侧配置属性中,点开“C/C++”,单击“预编译头”
  3. 更改右侧第一行的“创建/使用预编译头”,把选项从“使用预编译头(/Yu)”改成“不使用预编译头”

如下图所示

13.png
  • 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,004评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,858评论 2 59
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 目录 I(36)最后的暑假 (37)冬夜飞蛾 高三的日子,全部与高考相关。一次又一次的测验,早晨五点多到晚上十点多...
    波米阅读 1,064评论 11 26
  • 昨晚,回到家时快10点了,时间不算晚,但却很累。 从前天开始,我又被抽调进了谈判项目组。 我是项目组成员,但在项目...
    安心在奔跑阅读 2,120评论 3 5