设为首页收藏本站

数字电视开发论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

快捷登录

胜天工科技销售各种数字电视信号调制卡胜天工科技销售各种数字电视信号码流卡

【游客、新手、注册会员的区别】 【积分策略和会员晋级说明】 【发帖和附件上传规则】 【如何下载感兴趣的资料】 【如何获取梦游币】 【侵权资料处理及免责说明】
查看: 779|回复: 2

[理论] HTTP协议、RTSP协议、RTMP协议、RTP,RTCP,HLS的概念、区别、用法和测试源

[复制链接]
  • TA的每日心情
    开心
    昨天 11:13
  • 签到天数: 1870 天

    [LV.Master]伴坛终老

    新浪微博达人勋

    发表于 2016-12-5 16:18:39 | 显示全部楼层 |阅读模式
    分享到:
    消息来自- 北京朝阳
    背景知识

    先有TCP/IP协议簇 5层模型,后有DoD 4层模型,再有OSI 7层模型。

    TCP/IP协议簇(TCP/IP Suite)除了代表TCP与IP这两种通讯协议外,更包含了与TCP/IP相关的数十种通讯协议,例如:SMTP、DNS、ICMP、POP、FTP、Telnet等等。其实我们平常口语所谓的TCP/IP通讯协议,其背后真正的意义就是指TCP/IP协议组合,而非单指TCP和IP两种通讯协议。

    因为因特网最初起源于军事用途,因此这个模型便以美国国防部(DoD,Department Of Defense)来命名,称为DoD模型。

    虽然DoD模型与OSI模型各有自己的结构,但是大体上两者仍能互相对照,如下图:
    OSI.jpg

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

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

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

    RTMP是Real Time Messaging Protocol(实时消息传输协议)。

    共同点:

    1:这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。

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

    区别:

    1:HTTP: 即超文本传送协议(FTP即文件传输协议)。HTTP将所有的数据作为文件做处理。
    (1)不是流媒体协议。
    (2)HTTP协议是共有协议,并有专门机构做维护。
    (3)HTTP协议没有特定的传输流。
    (4)HTTP传输一般需要 2-3 个通道,命令和数据通道分离。

    2:RTMP是Real Time Messaging Protocol(实时消息传输协议)。
    (1)是流媒体协议。
    (2)RTMP协议是 Adobe 的私有协议,未完全公开。
    (3)RTMP协议一般传输的是 flv,f4v 格式流。
    (4)RTMP一般在 TCP 1个通道上传输命令和数据。

    3:RTSP:(Real Time Streaming Protocol),实时流传输协议。
    (1)是流媒体协议。
    (2)RTSP协议是共有协议,并有专门机构做维护。.
    (3)RTSP协议一般传输的是 ts、mp4 格式的流。
    (4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。

    RTSP、RTCP、RTP区别

    1:RTSP实时流协议(Real Time Streaming Protocol)

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


    2:RTCP控制协议 (RTCP:RTP Control Protocol)

    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数据协议(Real-time Transport Protoco,实时传输协议)

    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字 节。以H.264 为例,如果一帧数据大于1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。

    3895050727722524814.jpg

    RTP(Real-timeTransport Protocol)是用于Internet上针对多媒体数据流的一种传输协议。RTP被定义为在一 对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP通常使用UDP来传送数据,但RTP也可以在TCP或ATM等其他协议之上工作。当应用程序开始一个RTP会话时将使用两个端口:一个给RTP,一个给RTCP。RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。通常RTP算法并不作为一个独立的网络层来实现,而是作为应用程序代码的一部分。

    实时传输控制协议RTCP。RTCP(Real-timeTransportControlProtocol)和RTP一起提供流量控制和拥塞控制服务。在RTP会话期间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

    流媒体协议RTMP,RTSP与HLS有什么不同?

    21092235-4dd211ee2a7d49e0a349b633248ab00c.jpg
    RTMP与RTSP的协同工作

    http和rtsp.jpg

    HLS (HTTP Live Streaming)
    Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

    常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5 是直接支持这个。

    但是HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。如果要实现数天的时移,索引量将会是个巨额数字,并明显影响请求速度。因此,HLS协议对存储I/O要求相当苛刻。对此,也有公司提出了非常好的解决方案。

    新型点播服务器系统,独创了内存缓存数据实时切片技术,颠覆了这种传统实现方法,从根本上解决了大量切片的碎片问题,使得单台服务器的切片与打包能力不再是瓶颈。其基本原理如下:
    不将TS切片文件存到磁盘,而是存在内存当中,这种技术使得服务器的磁盘上面不再会有“数以吨计”的文件碎片,极大减少了磁盘的I/O次数,延长了服务器磁盘的使用寿命,极大提高了服务器运行的稳定性。同时,由于使用这种技术,使得终端请求数据时直接从服务器的内存中获取,极大提高了对终端数据请求的反应速度,优化了视频观看体验。

    ########################
    前端可选的视频直播协议大致只有两种:

    RTMP(Real Time Messaging Protocol)
    HLS(HTTP Live Streaming) 其中RTMP是Adobe开发的协议,无法在iPhone中兼容,故目前兼容最好的就是HLS协议了。
    HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。原理上是将视频流分片成一系列HTTP下载文件。所以,HLS比RTMP有较高的延迟。

    应用

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

    一、应用场景
    低延时应用场景包括:
      .  互动式直播:譬如2013年大行其道的美女主播,游戏直播等等各种主播,流媒体分发给用户观看。用户可以文字聊天和主播互动。
      .  视频会议:我们要是有同事出差在外地,就用视频会议开内部会议。其实会议1秒延时无所谓,因为人家讲完话后,其他人需要思考,思考的延时也会在1秒左右。当然如果用视频会议吵架就不行。
      .  其他:监控,直播也有些地方需要对延迟有要求,互联网上RTMP协议的延迟基本上能够满足要求。

    二、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不会丢包。
    所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;
    待网络状况好了,就一起发给客户端。
    这个的对策就是,当客户端的缓冲区很大,就断开重连。

    2. HLS低延时
    主要有人老是问这个问题,如何降低HLS延迟。
    HLS解决延时,就像是爬到枫树上去捉鱼,奇怪的是还有人喊,看那,有鱼。
    你说是怎么回事?

    我只能说你在参与谦哥的魔术表演,错觉罢了。
    如果你真的确信有,请用实际测量的图片来展示出来,参考下面延迟的测量。

    3. RTMP延迟的测量
    如何测量延时,是个很难的问题,
    不过有个行之有效的方法,就是用手机的秒表,可以比较精确的对比延时。

    经过测量发现,在网络状况良好时:
      . 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秒数据。

    处理累积延迟的最好方法,是客户端检测到缓冲区有很多数据了,如果可以的话,就重连服务器。
    当然如果网络一直不好,那就没有办法了。
    踩过的脚印
  • TA的每日心情
    开心
    昨天 11:13
  • 签到天数: 1870 天

    [LV.Master]伴坛终老

    新浪微博达人勋

     楼主| 发表于 2016-12-5 18:43:00 | 显示全部楼层
    消息来自- 北京朝阳
    可用的直播流地址

    通常我们进行 RTMP/RTSP 开发时,除了可以自己搭建视频服务器来进行测试外。也可以直接使用一些电视台的直播地址,省时省力。
    下面是我收集汇总的一些视频直播地址,亲测可用。

    1,RTMP协议直播源
    香港卫视:rtmp://live.hkstv.hk.lxdns.com/live/hks

    2,RTSP协议直播源
    珠海过澳门大厅摄像头监控:
    rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp

    测了,失效了。
    大熊兔(点播):rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

    3,HTTP协议直播源
    香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
    CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
    CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
    CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
    CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
    CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
    苹果提供的测试源(点播):
    http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8


    播放软件推荐:VLC

    要播放视频直播流,或者测试一个直播视频地址是否可以使用。这里推荐 VLC 媒体播放器。功能强大且跨平台。支持 Windows、Mac OS、Linux、Android、iOS。
    官网地址:http://www.videolan.org/
    打开播放器,选择菜单中“媒体”->“打开网络串流...”。在弹出页面中填入视频地址即可。
    1.png
  • TA的每日心情
    开心
    昨天 11:13
  • 签到天数: 1870 天

    [LV.Master]伴坛终老

    新浪微博达人勋

     楼主| 发表于 2016-12-7 10:44:17 | 显示全部楼层
    消息来自- 北京朝阳
    http协议地址.jpg
    http协议地址,和编码器的IP地址配合使用。在少量用户场景使用。

    如果需要大量本地用户同时观看同一编码器的视频源,我们建议采集UDP组播方式实现。
    设置
    UDP组播地址.jpg
    播放
    UDP组播地址2.jpg

    RTSP协议地址设置见上图。理论上,采用RTSP协议,延时比http协议好很多。

    远程多用户场景RTMP对接

    如果需要大量各地用户同时观看同一编码器的视频源,我们建议采集RTMP发布服务器中转方式实现。目前我们完美支持的RTMP服务器平台有免费平台:NGINX、RED5 MEDIA SERVER 收费平台:ADOBE MEDIA SERVER5 以及些平台如:http://mudu.tv/ 等。RTMP发布设置的其它方法如下:
    由于目前RTMP协议只支持H264功能,所以你要将编码器类型设置成H.264,设置直播平台中的RTMP发布地址并启用如下图所示,设置好后请重启编码器。
    RTMP.jpg
    RTMP.jpg

    RTMP也可以设置为本地用户播放。
    1.jpg


    您需要登录后才可以回帖 登录 | 注册 新浪微博登陆

    本版积分规则

    嗨!您好:
    欢迎来到数字电视开发论坛。
    我的名字叫梦梦
    很高兴能够为您服务!
    如果已经注册【立即登录】
    还没有账号请【注册】
    嗨!您好:
    欢迎来到数字电视开发论坛。
    我的名字叫梦梦
    很高兴能够为您服务!
    如果已经注册【立即登录】
    还没有账号请

    QQ|小黑屋|手机版|Archiver|数字电视开发网 ( 京ICP备16008897号-5   

    GMT+8, 2017-9-23 01:14 , Processed in 0.358942 second(s), 40 queries , Gzip On.

    Powered by Discuz! X3.1

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表