需求比协议重要,理解你的需求在前,选择应用的协议在后!

第一、是什么?

解释这个问题有很大的难度,你所处的角度不同,决定了所需答案的不同。不管怎么样,协议是为了解决问题而生的,它有着天然的指向性。同时,也有着它自身的局限。这三个协议的背后,有着一段凄美的爱情故事。我说说,你听听,在想当初….

千禧年的钟声敲响了,人们迈进了一个新的世纪。当时的移动和联通还不能互发信息,手机是什么样咱们心里也多少有点儿数。就在这样的环境里,就在这样一个网络生存条件下,一小撮内心躁动的人开始不安了!它就是Macromedia。

Macromedia

对,就是它。不知道没关系,这个公司就活到2005年。这是一个短命的公司,但它拿出了一个长命协议,影响了之后的网上生活,也为全民直播奠定了基础。这就是RTMP,一个实时消息传输协议,一个让在线看片成为可能得协议,一个让东京.热了的协议….

就这样,一个新的时代开始了!

当时间拨到了2012年, Adobe 正式发布 RTMP specification v1.0 的时候。本以为拿着媒体服务的金钥匙,可以在未来世界纵横驰骋。但Adobe错了,未来已来,但那是一个Html5的世界,一个不需要Flash的世界。

在这种大背景下,RTMP被替换是迟早的,不是它不帅,只是这个世界变化快!

HttpFlv的出现最早是2008年,从它的协议本身我们能看到Adobe的影子,就是flv协议本身。也可以说,httpflv是争夺与放弃之间妥协的产物。人们再也不愿意看到Adobe,但又不得不面对海量Flv历史文档。在仇恨与无奈的交织中,httpflv诞生了。

HttpFlv 就是 http+flv ,将音视频数据封装成FLV格式,然后通过 HTTP 协议传输给客户端。理解HttpFlv协议,这就话就是关键。

但聪明地你马上就会发现,虽然传输协议变了,但在flv数据格式下,脱离FlashPlayer还是无稽之谈。但在2016年,这一切都发生了改变,因为flv.js问世了!

Bilibili,也就是传说中的B站,不仅贡献了弹幕,为我们提供了另一种观影交互体验。更重要的,Flv.js的诞生,让我们在视频播放领域彻底告别Adobe时代。一个全新、干净的HTML5就这样向我们走来了。

关于HLS

现实世界就是这么残酷,伴随协议更迭的,是一个巨头倒下,另一个巨头崛起的故事。谈HLS 就不得不谈苹果,谈苹果就不得不提乔帮主。

我总是不想刻意拔高一个人,但这逼 …. 哎,不说了。就记住吧,悲剧的开端,往往是荣耀的起点。是悲剧还是荣耀,只取决于你!

好,返回头继续说HLS,HLS就是“HTTP Live Streaming”的缩写,它诞生自2009年,QuickTime和iPhone3GS黄金搭档下的一个标准,一个意在颠覆流媒体产业的新协议。

它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验。

HLS的出现是为了解决苹果原生环境中的流媒体播放,这个协议可以方便地让Mac和iPhone播放视频流,不依赖Adobe,更不用去管什么标准委员会。依赖自己,永远是最大力量的保障。

RFC 8216

但幸运之神就是这么奇怪,当它给你打开一扇门的时候,也在不经意间给你关上了一个。就苹果来说,HLS经过10年的发展,RFC 8216发布了HLS的第七个版本。Adobe早已是昨日黄花,未来已来,这是一个Html5的世界。在视频播放领域,全民直播已经开启,这是一个实时性需求强于稳定性的播放环境。苹果也跟曾经的Adobe一样,猜中了故事的开始,却踩空了这个故事的结局。

这也许就是商业世界最精彩的地方,即便你冲到万亿市值,对于未来而言,你我依然一无所知!

HLS 就先说到这,贴两张 WIKI的截图镇楼,下一章的内容马上开始。

HLS Usage

HLS Clients

第二、为什么

我始终认为,认识一个新的事务,不管它是无形的技术还是有型的实体,都要从正反两面去观察。在聚光灯下,它标榜的是什么?谢幕之后,它的无奈又是什么。只有这样,才能保持我们的谦卑与疑惑,理性地分析,得到一个较为全面的认识。

在本小节,我将通过解答一个问题的过程,建立对这三个协议的基本认识。

两端加一服

在开始之前,我先把流媒体服务中的双端关系说一下。在一个完整的流媒体服务框架中,角色就是"两端加一服"。推流端、拉流端加上媒体服务器。

同时按照应用场景的不同,协议又分:

  • 推流协议;

  • 拉流播放协议;

大部分教程在介绍这三个协议的时候,都忽略了一点,就是协议的应用场景到底是什么?RTMP 可以用在双端,但 HLS 只能用在拉流端,记住这层关系。

带着问题找答案:为什么RTMP比HLS快?

首先,这个问题发生在拉流端,协议也都是拉流协议。分别对RTMP和HLS的拉流播放进行抓包,能得到以下两张截图。

RTMP

HttpFlv

通过报文数据我们能看出:
• 在RTMP下,从Handshake到第一个VideoData用了700ms的时间;
• 在HLS下,从Get m3u8到response ts Data只有300ms!

问题来了,HLS的响应效率这么高,怎么就比RTMP还慢了呢?这都要从HLS的实现方案说起。

HLS拉流方案

在上图的生产环境中,以RTMP协议推流,HLS拉流。端到端的时间消耗是:

  • RTMP 推流端的联通成本是 700ms ,注意此时的 700 毫秒包含了 connect 和 send Video Data ;

  • 推流端联通之后的时间成本,主要是采集编码封包的成本,不需要再次connect;

  • HLS的请求响应成本是300ms;

  • flvto ts的成本,用ffmpeg切一个10秒的码率500的视频,算上磁盘的写入时间最多 200ms;

所以说,HLS的慢的原因只有一个,就是等数据

Get Frist m3u8

以 demo 中的这个 m3u8 来说,在直播的环境里媒体服务器要等到这 12 秒的数据推上来,我才有可能输出。即使切片成本降为零,拉流端看到的数据也是12秒之前的内容。

能不能优化?能!
缩短ts间隔与个数,HLS也能做到3秒+的延迟。但这个结果也拼不过RTMP这种不需切片的解决方案。

第三、怎么选

当您真正了解这三个协议之后,对于选择的问题我相信您已经有了自己的答案。我写这篇博客的初衷,也是想以历史背景入手,避免一上来就抛概念、甩结果。

希望我写的这些内容对您能有帮助,视频解决方案很复杂,它涉及的内容太多,在学习之初建立起清晰的脉络至关重要。为他人易,为自己难!祝大家在多媒体服务上,选你所选,爱你所爱。

三协议小结

参考:
https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol
https://en.wikipedia.org/wiki/HTTP_Live_Streaming
http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
https://datatracker.ietf.org/doc/rfc8216/
https://www.villainhr.com/page/2017/08/05/RTMP%20H5%20%E7%9B%B4%E6%92%AD%E6%B5%81%E6%8A%80%E6%9C%AF%E8%A7%A3%E6%9E%90

作者:北塔资讯
链接:https://www.jianshu.com/p/32417d8ee5b6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后祝各位老板早生贵子!

怎么开心怎么来!怎么好玩怎么来!

欢迎各位老师投稿或者推荐分享文章、教程、故事等!一律保留版权

下面是小编微信,添加小编微信,我拉你进群、可以学习、交流、交易直播周边产品技术等!

1群已满(中级玩家)

2群已满(初级玩家)

3群新开(VMIX兴趣新手训练班,谢绝纯卖货,平台、撸毛党)

ffmpeg rtmp 不清晰_知识储备:理解RTMP、HttpFlv和HLS的正确姿势相关推荐

  1. 理解RTMP、HttpFlv和HLS的正确姿势

    需求比协议重要,理解你的需求在前,选择应用的协议在后! 第一.是什么? 解释这个问题有很大的难度,你所处的角度不同,决定了所需答案的不同.不管怎么样,协议是为了解决问题而生的,它有着天然的指向性.同时 ...

  2. ffmpeg rtmp 不清晰_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器

    本文与csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/104893135,欢迎关注,点赞,评论. 前言 音视频系列: HectoorZ ...

  3. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  4. 华为抓截屏_原来这才是华为截屏的正确姿势,今天才知道,千万别不当回事

    原标题:原来这才是华为截屏的正确姿势,今天才知道,千万别不当回事 大家都知道我们的华为手机有很多好用的功能,截屏就是其中一个,那么你知道华为手机截屏的正确姿势吗?今天小编就带大家一起看看吧! 一.自带 ...

  5. bundle 安装_超级小白使用pip安装第三方库的正确姿势

    为了感谢大家对"Python客栈"的关注与支持,即日起,我们每天会在留言中随机抽取三位粉丝发放6.6元小红包.快来参与吧!1 1.pip是什么 pip是python的包管理工具,p ...

  6. java logger使用_这才是JAVA中打印日志的正确姿势

    作者:lrwin 原文链接:http://t.cn/E9BkD7a 使用slf4j 1. 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 2. 实现方式统一使用: Logback框架 打 ...

  7. vb6如何判断文件是否存在_使用boost.filesystem检查文件是否存在的正确姿势

    在我参与的项目中,使用了boost.filesystem进行文件操作.boost.filesystem在发生错误的时候会抛出异常,但是在大部分情况下这些异常是可以忽略的,例如,在检查文件是否存在的时候 ...

  8. 联想拯救者r720适合java么_联想拯救者R720重装Win10系统的正确姿势

    2017年最火爆的笔记本子当属联想拯救者R720, 很多人用它玩吃鸡游戏,这款机型购买时,有的选的是无固态版本, 也有的自行加装固态,也有的买来时就是固态+机械双硬盘. 问题一: 加装固态的话,必须选 ...

  9. pwm波程序如何实现_【优秀成果】如何做好算法与程序实现教学的知识储备

    [摘要]<普通高中信息技术课程标准>(2017版)将算法与程序实现作为必修模块一的主要内容,并融入到多个单元和模块中.大部分教师缺少相应的知识储备,需要及时补充.本文结合笔者近3年的教学实 ...

最新文章

  1. 一文了解Python常见的序列化操作
  2. 按键驱动的恩恩怨怨之概述
  3. saltstack(十二)job管理
  4. 腾讯“科学探索奖”提名报名正式启动
  5. 测试linux写文件系统,linux下各主要文件系统的读写性能测试
  6. 新建一个同名域能不能替换原域_能不能挣钱,从你最早设计猪场就已经决定了!...
  7. php把时间戳转换成多少时间之前函数
  8. 一步一步写算法(之排序二叉树删除-2)
  9. 计算机二级之Office应用之Excel中的函数(3)
  10. Java 避免创建不必要的对象
  11. win7下ApmServ启动失败问题
  12. 方舟生存进化手游服务器显示以驯养两千,《方舟:生存进化》手游官方网站-大型生存探索沙盒手游...
  13. vue中使用vue-quill-editor富文本编辑器
  14. 洛谷入门5——口算练习题
  15. 数据链路层协议的功能不包括( )
  16. python模拟鼠标键盘原理_Python-模拟鼠标键盘动作
  17. 快捷复制网页文字小技巧
  18. javabeans基础
  19. PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
  20. 构建Oracle高可用环境HA rac:企业级高可用数据库架构、实战与经验总结

热门文章

  1. 导出toolStrip1中的图标
  2. win10下使用python访问vmbox中的redis
  3. 探秘Tomcat——一个简易的Servlet容器
  4. Eclipse上安装GIT插件EGit及使用
  5. CentOS下软件的安装
  6. bugfree3.0.2版本升级--更新版
  7. 我要做一个合格的网络工程师
  8. .Net Micro Framework研究—绘图
  9. 关于source insight 3.5 无法同步文件的问题
  10. 2020年高等数学方法与提高(上海理工大学)学习笔记:无穷级数