直播未来属于RTMP还是HTTP?

HTTP 传视频比 RTMP 实现起来简单?HTTP 延迟太高?

答:直播通讯未来是属于html5的。

1,协议使用份额

如今国内90%的面向大众的直播平台都是采用的rtmp和httpflv的混合,hls很少,而国外大部分采用的dash,少部分用hls和其他协议。

2,先简单的描述下这些协议

httpflv:这种直播传输实际上就是利用的flv文件的特点,只需要一个matedata和音视频各自header,后面的音视频数据就可以随意按照时间戳传输,当然视频得按照gop段来传输,这种直播数据实际上就是一个无限大的http传输的flv文件,视频地址类似:

http://mywebsite.com/live.flv,客户端利用flv特性,可以一边接受数据边解码播放。

rtmp:rtmp是adobe研发的开放协议,rtmp其实实质上也是传输的flv格式的数据,同样是flv tag,只不过rtmp在传输上封装了一层,比如rtmp不仅可以直播,也可以推流。rtmp的直播原理同样也是利用了flv文件的特性,只需要一些头信息,后面就可以随意传输音视频数据,达到边传输边播放。

hls:hls是苹果公司开发的协议,http轮询传输,该协议主要的数据格式是ts视频文件,大致就是将裸流h264和音频直播数据,切片封装成ts段,形成无数的ts小文件,客户端先请求一个m3u8文件,该文件内部会有一列ts文件的地址,客户端按照顺序依次播放ts,以此类推,hls地址类似:http://mywebsite.com/live.m3u8,hls在大部分的浏览器利用html5video是可以直接播放的。

dash:这个协议国内用的不多,http轮询传输,但是国外很多平台都在用,比如youtube直播,该协议是google公司研发的,和hls如出一辙,同样是将直播流数据切片,只不过不是ts文件,而是mp4或者3gp文件,又或者webm(vp8,vp9)文件,该协议同样和hls一样也是http传输,同样和hls主打的是“自适应动态码率”,大概意思就是当客户端网络不好的时候会无缝切换到低码率的路线。

3,各种协议延时及其原因

rtmp和httpflv:这两种协议大致数据一致,所以延时原因都是差不多的。按理说tcp流式传输直播因该都是延时极低的,为什么rtmp和httpflv还有延时呢?原因在h264上,rtmp和httpflv都是传输的flv tag,视频tag的数据平常就是h264数据,h264解码有个IBP,I是关键帧,是一帧完整的图像,必须要先有个I才能解码后面的BP,BP帧可以随便少,但是I帧不能少,所以I帧必须是在flv tag传输中第二个传输的(第一个是h264spspps),但是I帧在h264流里不是常有的,是隔一段才有个I帧,这个一段的间隔,俗称GOP,当编码时候GOP设置很短,当客户端连接上来,服务器会以最快速度找到流中最近I帧,从I帧开始发送直播数据,然而当GOP很长,I帧间隔很长,或者等待下一个I帧开始向新连接发送数据,或者在缓存里找最近的上一个I帧开始发送,这里就是rtmp和hls协议延时的关键了,在各大cdn平台,叫“rtmp秒开技术”,原理就是将推流数据二次解编码,设置很小的gop。总的来说,gop设置1s,在不考虑网络传输链路延时情况,数据延时最大就为1s,运气好刚好就是I帧就是0延时!

hls和dash:这两种协议延时原因大致都是差不多的,因为切片了,切成小端的文件,单独开始传输,这就是延时的关键了,当然可以设置切成小文件,越小延时越低。按理说dash切片要比hls稍微先进一点,所以延时上dash要比hls低,但是同样的,切片了,就注定延时。

4,关于解码播放的优劣势

首先,我想说flash真的要被淘汰了,rtmp和httpflv目前在网页上只能用flash或者插件的方式解码播放,而且flash在cpu和内存上都是占用很高。但是在客户端app上,不用网页播放,你可以不用担心这个问题。网页上播放,hls和dash的优势就体现出来了,可以用html5直接播放,当然理论上,dash的mp4的兼容性要比hls更好。而且hls和dash支持动态适应网络,无缝调节码率,这在网络波动很大的地方,这个功能不错,当然个人对于这个功能无所谓,我情愿线下看高清,也不线上看马赛克。

5,总结

对于各种面向用户的直播协议,我只讲了一部分的,当然还有更多,这里就不一一列举了。以后在浏览器上肯定是html5的市场,无论是hls也好dash也罢,或者新兴的很多websocket直播也好,技术反正是在不断更替的,或许有天,html5突然支持flv播放了呢?

我列一个表作为总结:

协议

httpflv

rtmp

hls

dash

传输层

http流

tcp流

http

http

视频格式

flv

flv tag

Ts文件

Mp4 3gp webm

延时

很高

数据分段

连续流

连续流

切片文件

切片文件

Html5播放

暂不支持

不支持

大部分支持

极大部分支持

服务器编程难易

简单

一般

一般+

中等

直播未来属于RTMP还是HTTP?的更多相关文章

  1. 直播未来属于RTMP还是HTTP

    直播未来属于RTMP还是HTTP? - Tinywan - 博客园 https://www.cnblogs.com/tinywan/p/6122065.html 直播未来属于RTMP还是HTTP? H ...

  2. 实现输出h264直播流的rtmp服务器

    RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及pc.移动.嵌入式等平台,是做流媒体开发 ...

  3. 实现输出h264直播流的rtmp服务器 flash直播服务器【转】

    实现输出h264直播流的rtmp服务器 RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及 ...

  4. 实现输出h264直播流的rtmp服务器 flash直播服务器

    http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html 实现输出h264直播流的rtmp服务器 RTMP(Real Time ...

  5. 监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)

    监控系统的多协议直播(RTSP RTMP  HTTP Live Streaming)

  6. iOS直播-播放基于RTMP协议的视频

    iOS直播-播放基于RTMP协议的视频 流媒体协议介绍 1. 伪流媒体: 渐进式下载 : 边下边存, 文件会保存 使用http协议,也能够实现视频播放, 也能快进快退等, 体验上跟流媒体很像. 优酷, ...

  7. Mac上搭建直播服务器Nginx+rtmp

    简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 步骤安装 1.安装Homebrow Homebrew简 ...

  8. EasyNVR互联网监控直播分发出RTMP、HLS、HTTP-FLV视频流说明介绍

    背景需求 需求比视频流协议更重要,你想要什么,什么可以满足你的需求,这个很大程度上是需求在前,选择使用什么视频流是比较靠后的. 目前Easy系列互联网直播服务将全线支持HLS.RTMP.HTP-FLV ...

  9. 直播推流实现RTMP协议的一些注意事项

    —— 2017-2-12 更新RTMP 协议整理了一下,包括rtmp 消息类型,rtmp 如何分块,rtmp分块例子. 用脑图整理了一下,使用Xmind 打开,URL: https://github. ...

随机推荐

  1. Dijkstra 算法、Kruskal 算法、Prim算法、floyd算法

    1.dijkstra算法 算最短路径的,算法解决的是有向图中单个源点到其他顶点的最短路径问题. 初始化n*n的数组. 2.kruskal算法 算最小生成树的,按权值加入 3.Prim算法 类似dijk ...

  2. 苹果app审核的规则总结

    1.1为App Store开发程序,开发者必须遵守 Program License Agreement (PLA).人机交互指南(HIG)以及开发者和苹果签订的任何协议和合同.以下规则和示例旨在帮助开 ...

  3. [HTML]HTML框架IFrame下利用JS在主页面和子页面间传值

    今天写的程序涉及到JS框架传值的问题,这些是我找到的一些资料 下面主页面和子页面互相传值的DEMO 如果仅仅需要子页面触发主页面的函数 仅需 [ parent.window.你的函数 ] 就可以了 D ...

  4. 动手动脑小程序——TryAndCatch

    import java.util.Scanner; public class Gade { public static void main(String[] args) {  // TODO 自动生成 ...

  5. 第十一章 Android 内核驱动——Alarm

    11.1  基本原理 Alarm 闹钟是 android 系统中在标准 RTC 驱动上开发的一个新的驱动,提供了一个定时器 用于把设备从睡眠状态唤醒,当然因为它是依赖 RTC 驱动的,所以它同时还可以 ...

  6. ant-环境变量

    ant是绿色免安装的,通常习惯放在C盘根目录下,如:C:\apache-ant-1.9.4 那么环境就应该配置为: ANT_HOME=C:\apache-ant-1.9.4(注意:这里不需要加分号)P ...

  7. 20150608_Andriod 发布问题处理

    参考地址: http://blog.csdn.net/cxc19890214/article/details/39120415 问题:当我们开发完成一个Android应用程序后,在发布该应用程序之前必 ...

  8. 基本的MFC多线程

    多线程程序我本来是能够来写的.但是由于在图像处理的过程中,对于这方面知识使用的比较少,造成重复忘记的情况.这里再次进行整理学习,特别注重和“图像处理”理清关系,为下一步使用奠定基础. 这里实现的是工作 ...

  9. Unity安卓上播放视频的问题,暂时无解记录一下

    设备联想A7600m,好像是联发科的cpu 先用网上流传很广的这个Unity自带接口试验一下: Handheld.PlayFullScreenMovie(Path.Combine(Applicatio ...

  10. 2016年11月23日 星期三 --出埃及记 Exodus 20:14

    2016年11月23日 星期三 --出埃及记 Exodus 20:14 "You shall not commit adultery.不可奸淫.