基于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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

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