`
walksing
  • 浏览: 216936 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

rtsp rtmp http 直播 点播

 
阅读更多

http://blog.chinaunix.net/uid-26000296-id-4932817.html

http://blog.chinaunix.net/uid-26000296-id-4932822.html

http://blog.csdn.net/zhangxinrun/article/details/50739237



直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看,
HLS主要是延时比较大,RTMP主要优势在于延时低。



1. RTMP的特点如下:

1) Adobe支持得很好:
   RTMP实际上是现在编码器输出的工业标准协议,基本上所有的编码器(摄像头之类)都支持RTMP输出。
   原因在于PC市场巨大,PC主要是Windows,Windows的浏览器基本上都支持flash,
   Flash又支持RTMP支持得非常好。
2) 适合长时间播放:
   因为RTMP支持的很完善,所以能做到flash播放RTMP流长时间不断流,
   当时测试是100万秒,即10天多可以连续播放。
   对于商用流媒体应用,客户端的稳定性当然也是必须的,否则最终用户看不了还怎么玩?
   我就知道有个教育客户,最初使用播放器播放http流,需要播放不同的文件,结果就总出问题,
   如果换成服务器端将不同的文件转换成RTMP流,客户端就可以一直播放;
   该客户走RTMP方案后,经过CDN分发,没听说客户端出问题了。
3)延迟较低:
   比起YY的那种UDP私有协议,RTMP算延迟大的(延迟在1-3秒),
   比起HTTP流的延时(一般在10秒以上)RTMP算低延时。
   一般的直播应用,只要不是电话类对话的那种要求,RTMP延迟是可以接受的。
   在一般的视频会议应用中,RTMP延时也能接受,原因是别人在说话的时候我们一般在听,
   实际上1秒延时没有关系,我们也要思考(话说有些人的CPU处理速度还没有这么快)。
4) 有累积延迟:
   技术一定要知道弱点,RTMP有个弱点就是累积误差,原因是RTMP基于TCP不会丢包。
   所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;
   待网络状况好了,就一起发给客户端。
   这个的对策就是,当客户端的缓冲区很大,就断开重连。



经过测量发现,在网络状况良好时:
  . RTMP延时可以做到0.8秒左右。
  . 多级边缘节点不会影响延迟(和SRS同源的某CDN的边缘服务器可以做到)
  . Nginx-Rtmp延迟有点大,估计是缓存的处理,多进程通信导致?
  . GOP是个硬指标,不过SRS可以关闭GOP的cache来避免这个影响.
  . 服务器性能太低,也会导致延迟变大,服务器来不及发送数据。
  . 客户端的缓冲区长度也影响延迟。
    譬如flash客户端的NetStream.bufferTime设置为10秒,那么延迟至少10秒以上。



4. GOP-Cache

什么是GOP?就是视频流中两个I帧的时间距离。
GOP有什么影响?
Flash(解码器)只有拿到GOP才能开始解码播放。
也就是说,服务器一般先给一个I帧给Flash。
可惜问题来了,假设GOP是10秒,也就是每隔10秒才有关键帧,
如果用户在第5秒时开始播放,会怎么样?
第一种方案:等待下一个I帧,
也就是说,再等5秒才开始给客户端数据。
这样延迟就很低了,总是实时的流。
问题是:等待的这5秒,会黑屏,现象就是播放器卡在那里,什么也没有,
有些用户可能以为死掉了,就会刷新页面。
总之,某些客户会认为等待关键帧是个不可饶恕的错误,延时有什么关系?
我就希望能快速启动和播放视频,最好打开就能放!


第二种方案:马上开始放,
放什么呢?
你肯定知道了,放前一个I帧。
也就是说,服务器需要总是cache一个gop,
这样客户端上来就从前一个I帧开始播放,就可以快速启动了。
问题是:延迟自然就大了。


有没有好的方案?
有!至少有两种:
编码器调低GOP,譬如0.5秒一个GOP,这样延迟也很低,也不用等待。
坏处是编码器压缩率会降低,图像质量没有那么好。



5. 累积延迟

除了GOP-Cache,还有一个有关系,就是累积延迟。
服务器可以配置直播队列的长度,服务器会将数据放在直播队列中,
如果超过这个长度就清空到最后一个I帧:


当然这个不能配置太小,
譬如GOP是1秒,queue_length是1秒,这样会导致有1秒数据就清空,会导致跳跃。


有更好的方法?有的。
延迟基本上就等于客户端的缓冲区长度,因为延迟大多由于网络带宽低,
服务器缓存后一起发给客户端,现象就是客户端的缓冲区变大了,
譬如NetStream.BufferLength=5秒,那么说明缓冲区中至少有5秒数据。


处理累积延迟的最好方法,是客户端检测到缓冲区有很多数据了,如果可以的话,就重连服务器。
当然如果网络一直不好,那就没有办法了。





一、分发方式比较
互联网上的两种主要的分发方式:HLS和RTMP,
什么时候用谁,完全决定于应用场景。
还有其他的分发方式,这些分发方式不属于互联网常见和通用的方式,不予以比较:
  . UDP:
    譬如YY的实时应用,视频会议等等,或者RTSP之类。
    这类应用的特点就是实时性要求特别高,以毫秒计算。
    TCP家族协议根本就满足不了要求,所以HTTP/TCP都不靠谱。
    这类应用没有通用的方案,必须自己实现分发(服务端)和播放(客户端)。
  . P2P:
    譬如RTMFP或者各家自己的协议。
    这类应用的特点是节省带宽。
    目前PC/flash上的RTMFP比较成熟,Android上的P2P属于起步群雄纷争标准不一,
    IOS上P2P应该没有听说过。
  . RTSP:
    这种不是互联网上的主要应用,在其他领域譬如安防等有广泛应用。


另外,HTTP的也分为几种:
  . HTTP progressive:
    早期流媒体服务器分发http文件时,以普通的http文件分发,这种叫做渐进式下载,
    意思就是如果文件很大譬如1小时时长1GB大小,想从中间开始播放是不行的。
    但这种方式已经是作古了,很多http服务器支持http文件的seek,就是从中间开始播放。
  . HTTP stream:
    支持seek的HTTP流,譬如各家视频网站的点播分发方式。
    或者稍微复杂点的,譬如把一个大文件切几段之后分发。
    目前在pc/flash上点播国内的主流分发是这种方式。
  . HLS:
    这种是现在适配方式最广(除了flash, 需要额外的as库支持),
    在PC上有vlc,Android/IOS原生播放器就支持播放HLS,HTML5里面的url可以写HLS地址。
    总之,在移动端是以HLS为主。
  . HDS:adobe自己的HLS,一坨屎。
  . DASH:各家提出的HLS,目前还没有广泛应用。


对比以下互联网上用的流媒体分发方式:
  . HLS:apple的HLS,支持点播和直播。
  . HTTP:即HTTP stream,各家自己定义的http流,应用于国内点播视频网站。
  . RTMP:直播应用,对实时性有一定要求,以PC为主。



二、RTMP
1. RTMP本质上是流协议,主要的优势是:
  . 实时性高:
    RTMP的实时性在3秒之内,经过多层CDN节点分发后,实时性也在3秒左右。
    在一些实时性有要求的应用中以RTMP为主。
  . 支持加密:
    RTMPE和RTMPS为加密协议。
    虽然HLS也有加密,但在PC平台上flash对RTMPE/RTMPS支持应该比较不错。
  . 稳定性高:
    在PC平台上flash播放的最稳定方式是RTMP,
    如果做CDN或者大中型集群分发,选择稳定性高的协议一定是必要的。
    HTTP也很稳定,但HTTP是在协议上稳定;
    稳定性不只是服务端的事情,在集群分发,服务器管理,主备切换,客户端的支持上,
    RTMP在PC分发这种方式上还是很有优势。
  . 编码器接入:
    编码器输出到互联网(还可以输出为udp组播之类**应用),主要是RTMP。
    譬如专业编码器,或者flash网页编码器,或者FMLE,或者ffmpeg,或者安防摄像头,都支持RTMP输出。
    若需要接入多种设备,譬如提供云服务;
    或者希望网页直接采集摄像头;或者能在不同编码器之间切换,
    那么RTMP作为服务器的输入协议会是最好的选择。
  . 系统容错:
    容错有很多种级别,RTMP的集群实现时可以指定N上层,在错误时切换不会影响到下层或者客户端,
    另外RTMP的流没有标识,切到其他的服务器的流也可以继续播放。
    HLS的流热备切换没有这么容易。
    若对于直播的容错要求高,譬如降低出问题的概率,选择RTMP会是很好的选择。
  . 可监控:
    在监控系统或者运维系统的角度看,流协议应该比较合适监控。
    HTTP的流监控感觉没有那么完善。这个不算绝对优势,但比较有利。


2. RTMP的劣势是:
  . 协议复杂:
    RTMP协议比起HTTP复杂很多,导致性能低下。
    测试发现两台服务器直连100Gbps网络中,HTTP能跑到60Gbps,但是RTMP只能跑到10Gbps,
    CPU占用率RTMP要高很多。
    复杂协议导致在研发,扩展,维护软件系统时都没有HTTP那么方便,所以HTTP服务器现在大行其道,
    apache/nginx/tomcat,N多HTTP服务器;
    而RTMP协议虽然早就公开,但是真正在大规模中分发表现良好的没有,
    adobe自己的FMS在CDN中都经常出问题。
  . Cache麻烦:
    流协议做缓存不方便。譬如点播,若做RTMP流协议,边缘缓存RTMP会很麻烦。
    如果是HTTP,缓存其实也很麻烦,但是HTTP服务器的缓存已经做了很久,所以只需要使用就好。
    这是为何点播都走HTTP的原因。



三、HTTP
HTTP说的是HTTP流,譬如各大视频网站的点播流。
HTTP本质上还是文件分发,主要的优势是:
  . 性能很高:
    HTTP的性能没得说,协议简单,各种HTTP高性能服务器也完善。
    如果分发的量特别大,譬如点播视频网站,没有直播的实时性要求,HTTP协议是最好选择。
  . 没有碎片:
    HTTP比HLS没有碎片,HTTP分发大文件会比小文件分发方便很多。
    特别是存储,小文件的性能超低,是个硬伤。
  . 穿墙:
    互联网不可能不开放HTTP协议,否则就不叫互联网。所
    以任何端口封掉,也不会导致HTTP流看不了。(不过RTMP也能穿墙,用RTMPT协议)。


HTTP的劣势是:
  . 实时性差:
    基本上没有实时性这个说法。
  . 原生支持不好:
    就PC上flash对于HTTP流支持还可以,Android/IOS上似乎只能mp4,总之移动端对于HTTP的支持不是很完善。



四、HLS
HLS是adobe的开放标准,在Android3?以上也原生支持.
HLS的主要优势是:
  . 性能高:和HTTP一样。
  . 穿墙:和HTTP一样。
  . 原生支持很好:IOS上支持完美。Android上支持差些。PC/flash上现在也有各种as插件支持HLS。


HLS的主要劣势是:
  . 实时性差:基本上HLS的延迟在10秒以上。
  . 文件碎片:若分发HLS,码流低,切片较小时,小文件分发不是很友好。
    特别是一些对存储比较敏感的情况,譬如源站的存储,嵌入式的SD卡。



五、应用方式
推荐的方式是:
  . 编码器输出RTMP协议。
  . 流媒体系统接入使用RTMP协议。
  . 流媒体系统内部直播分发使用RTMP。
  . PC+直播+实时性要求高:使用flash播放RTMP。
  . PC+直播+没有实时性要求:使用RTMP或者HLS均可。
  . PC+点播:使用HTTP或者HLS。
  . Apple IOS/OSX:都使用HLS(实时性要求高得自己解析RTMP,或者使用外部库,
    譬如https://www.vitamio.org)
  . Andorid:和IOS一样,不过可以确定的是可以自己开发支持RTMP。



===============================================================================





RTSP、 RTMP、HTTP的共同点、区别

共同点:

1:RTSP RTMP HTTP都是在应用应用层。

2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。



区别:

1:HTTP: 即超文本传送协议(ftp即文件传输协议)。

HTTP:(Real Time Streaming Protocol),实时流传输协议。

HTTP全称Routing Table Maintenance Protocol(路由选择表维护协议)。



2:HTTP将所有的数据作为文件做处理。http协议不是流媒体协议。

RTMP和RTSP协议是流媒体协议。



3:RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护。



4:RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流。HTTP没有特定的流。



5:RTSP传输一般需要2-3个通道,命令和数据通道分离,HTTP和RTMP一般在TCP一个通道上传输命令和数据。



RTSP、RTCP、RTP区别

1:RTSP实时流协议

作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。总的说来,RTSP是一个流媒体表示 协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂 停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作(RFC2326)。



2:RTCP控制协议

RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并 不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。通常RTCP会采用与RTP相同的分发机制,向会话中的 所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进 行控制或者对网络状况进行诊断。

RTCP协议的功能是通过不同的RTCP数据报来实现的,主要有如下几种类型:

SR:发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。(SERVER定时间发送给CLIENT)。

RR:接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。(SERVER接收CLIENT端发送过来的响应)。

SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。

BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。

APP:由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。



3:RTP数据协议

RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。

RTP用到的地方就是 PLAY ,服务器往客户端传输数据用UDP协议,RTP是在传输数据的前面加了个12字节的头(描述信息)。

RTP载荷封装设计本文的网络传输是基于IP协议,所以最大传输单元(MTU)最大为1500字节,在使用IP/UDP/RTP的协议层次结构的时候,这 其中包括至少20字节的IP头,8字节的UDP头,以及12字节的RTP头。这样,头信息至少要占用40个字节,那么RTP载荷的最大尺寸为1460字 节。以H264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。
分享到:
评论

相关推荐

    HTML播放rtmp流 直播+回放

    RTMP协议支持播放、暂停、快进、快退等操作,适用于直播和点播场景。 2. **HTML5视频播放**:HTML5中的`<video>`标签是用于嵌入视频的关键元素。通过指定`src`属性,可以加载视频源,但默认情况下,HTML5的`<video>...

    几千个rtsp、rtmp测试直播源

    RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)是两种常见的流媒体协议,广泛应用于视频直播和点播服务。本资料包提供的是几千个用于测试的RTSP和RTMP直播源,对于开发者来说,这些源...

    rtsp2rtmpServer

    Nginx-RTMP模块是Nginx服务器的一个扩展,用于提供RTMP流媒体服务,支持直播和点播功能。当`ffmpeg`将RTSP视频流转换为RTMP格式后,它会推送到Nginx-RTMP服务器,然后由服务器分发给多个客户端。 HLS(HTTP Live ...

    rtmp/rtsp/hls直播服务软件

    2、采用开发的流媒体协议,而非私有协议,可以与主流系统对接,至少支持RTMP推流,RTMP拉流,RTSP拉流三种方式获取直播流,支持对获取的直播流再按照TS组播或者单播,RTMP,RTSP,HLS,TS OVER HTTP,FLV OVER HTTP等...

    rtsp流转rtmp流

    在IT行业中,流媒体传输是不可或缺的一部分,尤其是在网络视频直播和点播服务中。本文将深入探讨如何将RTSP流转换为RTMP流,这是一个在实际应用中非常常见且重要的技术场景。RTSP(Real Time Streaming Protocol)和...

    摄像头rtsp流转成rtmp流用于浏览器实时播放

    描述中提到的“基于nginx包含rtmp,http-flv模块,支持rtmp推理,http-flv,hls,rtmp拉流,可进行直播点播”进一步扩展了这个话题。Nginx是一款高性能的Web服务器,同时也可作为反向代理、负载均衡器和邮件代理...

    桌面录屏,并推送rtsp/rtmp流

    RTSP常用于IPTV和VoD(视频点播)服务,它支持更多的交互性和灵活性,但相对于RTMP,可能会有稍高的延迟。 将桌面录屏与RTMP/RTSP流推送结合,意味着用户不仅可以录制桌面内容,还可以实时地将录制的视频流推送到...

    VXG视频框架下的RTSP,RTMP视频流直播Demo(Eclipse版)

    其次,RTMP(Real-Time Messaging Protocol)由Adobe Systems开发,主要用于互联网上的音视频直播和点播。RTMP支持即时传输,常用于Flash Player和网页浏览器中的视频流。它的工作方式是建立一个TCP连接,然后在该...

    Springboot+netty实现的流媒体服务(可用于直播点播)

    介绍:Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,低延迟(支持识别h264、aac...

    RTSP协议与HTTP协议

    ### RTSP协议与HTTP协议详解 #### 一、RTSP协议概述 **实时流协议**(RTSP, Real Time Streaming Protocol)是一种应用层...在实际应用场景中,例如在线直播、视频点播等,RTSP与HTTP的结合使用已经成为一种标准实践。

    vlc播放器支持rtmp/rtsp/h264

    VLC播放器支持RTMP协议,意味着用户可以通过VLC直接播放通过RTMP协议传输的直播或点播视频流,这对于开发者来说非常有用,可以用于测试、演示或观看网络直播内容。 RTSP(Real-Time Streaming Protocol)则是一种...

    rtmp/rtsp播放器

    这两种协议常用于在线视频直播和点播服务,因为它们能有效处理延迟和数据传输问题。 RTMP是一种实时数据传输协议,主要由Adobe Systems开发,用于在Internet上传输音频、视频和其他数据。它常用于直播流媒体服务,...

    ijkplayer源码编译so库,支持rtsp、rtmp视频流播放

    - **移动应用开发**: 适用于需要高质量视频播放的Android和iOS应用,如直播应用、视频点播服务等。 - **嵌入式设备**: 在资源有限的嵌入式设备上,ijkplayer的轻量级特性使其成为理想选择。 7. **使用ijkplayer的...

    java服务将rtsp视频流转成rtmp视频流

    而RTMP是由Adobe Systems开发的,主要用于将音频、视频数据传送到服务器,常用于在线直播和视频点播平台。 要将RTSP视频流转成RTMP,我们需要一个中间转换服务,这个服务可以接收RTSP流,解码后重新编码为RTMP格式...

    国标28181平台支持上下级级联支持rtsp/rtmp/HLS输出

     21、支持rtmp和hls会话一直保留  22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知  23、支持公网和局域网同时存在  24、支持httpserver,接口支持http+json  25、支持设备上线...

    海康威视推流RTMP-java代码demo

    本篇文章将深入解析如何利用Java调用海康威视的摄像头,将RTSP(Real Time Streaming Protocol)流转换为RTMP(Real-Time Messaging Protocol)流,以便在互联网上进行直播或点播。 RTSP是一种网络协议,主要用于...

    Springboot、netty实现的http-flv、websocket-flv直播点播

    Springboot、netty实现的http-flv、websocket-flv流媒体服务(可用于直播点播),支持rtsp、h264、h265等、rtmp等多种源,h5纯js播放(不依赖flash),不需要依赖nginx等第三方,低延迟(支持识别h264、aac编码自动...

    rtsp、rtp、rtcp、rtmp中英文协议

    它支持直播和点播服务,常用于Flash Player和Adobe Air应用。RTMP通过TCP连接建立会话,并通过单一连接传输数据,包括音频、视频和控制信息。相比于RTSP,RTMP在设置和操作上更简单,但其不是标准协议,只在特定的...

    过http转国标28181(GB28181-2016)实现动态获取RTSP、RTMP、HLS输出管理平台

    1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备... 21、支持rtmp和hls会话一直保留  22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知  23、支持公网和局域网同时存在

    rtsp视频流转码并上传到RTMP服务器上的小工具

    是一种用于处理视频流的实用程序,它能够从RTSP(Real-Time Streaming Protocol)源接收视频流,对其进行转码,并将其推送到RTMP(Real-Time Messaging Protocol)服务器进行直播或存储。这个小工具在IT行业中特别...

Global site tag (gtag.js) - Google Analytics