网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)

RTP RTCP RTSP RTMP HLS 区别与联系

RTP传输流媒体数据、RTCP对RTP进行控制,同步、RTSP发起/终止流媒体RTP和RTCP互为姐妹关系,RTSP可以使用RTP来传输数据,但并没有绑定关系也可以使用TCP/UDPRTSP、RTMP、HLS都可以做直播和点播,它们是三种不同的应用层协议

流媒体各协议层次图



关于RTP(RTCP)协议位置的理解:

RTP 实际上介于应用层和传输层之间。同时具有应用层和传输层的各种特点。这个特点需要仔细甄别。

从应用开发者的角度看,RTP 应该是应用层的一个部分。在应用程序的发送端,开发者必须编写用 RTP 封装分组(数据包)的程序代码,然后把该 RTP 分组交给 UDP 套接字接口。在接收端设备,RTP 分组通过 UDP 套接字接口进入应用层程序后,会利用开发者编写的程序代码把 RTP 分组从应用数据块提取出来。RTP 实际上为视频程序的开发者提供了一个开发平台。

RTP 也可以理解为运输层协议,实际上 RTP 协议偏重于传输层,是 UDP 协议(用户数据报)上边的一层协议。因为 RTP 封装了多媒体应用(包括视频流、音频流)的数据块,关键是提供运输层的服务(时间戳,序号、同步源标识符等),因此可以把 RTP 看成一层 UDP 上的运输层子层协议,特别要注意是子层协议。

综合来看,RTP 协议实际上是一个介于传输层和应用层之间的协议,作用是在 UDP 协议之上完成一次对媒体流的封装。

基于 RTP 的流式媒体

流式传输是实现流媒体的关键技术。使用流式传输可以边下载边观看流媒体节目。由于 Internet 是基于分组传输的,所以接收端收到的数据包往往有延迟和乱序(流式传输构建在 UDP 上)

要实现流式传输,就要从降低延迟和恢复数据包时序入手。

「在发送端,为降低延迟,往往对传输数据进行预处理(降低质量和高效压缩(常见压缩格式如aac/h264...))」

「在接收端为了恢复时序,常采用接收缓冲,而为了实现媒体的流畅播放,一般会使用播放缓冲」

RTP

RTP(Real-time Transport Protocol)协议创建在 UDP 协议上常配合 RTSP 和 RTCP 一起使用。用于实时传输网络中的多媒体数据,提供端到端的实时传输服务,但并不保证服务质量,服务质量由 RTCP 来提供。

RTP 是流媒体协议族中最基础的一个协议了,它是 IETF 提出的一个标准,对应 RFC 文档 RFC3550,RFC3550 不仅定义了 RTP 还定义了配套相关协议 RTCP。

RTP协议主要职责就是负责流媒体数据包和媒体流的实时传输,每个RTP数据报文由头(header)和装载(Payload)两部分组成,其中头的前12个字节的含义是固定的,装载的数据可以是音频或视频数据。RTP数据报的报头格式如下所示:

「可以将RTP比作一辆货车,货车里面可以随意装东西,但是容积有限制,如果太大你就需要分包,一辆一辆装车发送过,另外可能也不一定按序到达对端,甚至可能失踪」

RTP载荷类型

因为有些类型由于诞生的较晚,没有具体的 PT 值,只能使用动态(dynamic)PT 值,即 96-127,这就是为什么大家普遍指定 H264 的 PT 值为 96。

rtp_payload_types[] = {
{0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1},
{3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{4, "G723", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_G723_1, 8000, 1},
{5, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{6, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 16000, 1},
{7, "LPC", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{8, "PCMA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW, 8000, 1},
{9, "G722", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_ADPCM_G722, 8000, 1},
{10, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 2},
{11, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 1},
{12, "QCELP", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_QCELP, 8000, 1},
{13, "CN", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP2, -1, -1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3, -1, -1},
{15, "G728", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{16, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 11025, 1},
{17, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 22050, 1},
{18, "G729", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{25, "CelB", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{26, "JPEG", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MJPEG, 90000, -1},
{28, "nv", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{31, "H261", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H261, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG1VIDEO, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO, 90000, -1},
{33, "MP2T", AVMEDIA_TYPE_DATA, AV_CODEC_ID_MPEG2TS, 90000, -1},
{34, "H263", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H263, 90000, -1},
{-1, "", AVMEDIA_TYPE_UNKNOWN, AV_CODEC_ID_NONE, -1, -1}
};

RTCP

RTCP(Real-time Transport Control Protocol 或 RTP Control Protocol)是实时传输协议(RTP)的一个姐妹协议。

RTCP 常与 RTP 联合工作,RTP 实施实际数据的传输,RTCP 则负责将控制包送至电话中的每个人。其主要功能就是为RTP提供的服务质量做出反馈,同时同步音视频数据,它本身没不传递任何数据。它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

在 RTP 会话期间,各参与者周期性地传送 RTCP 包。RTCP 包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。

RTCP 根据所携带的控制信息不同 RTCP 信息包可分为RR (接收者报告包)、SR (源报告包)、SEDS (源描述包)、BYE (离开申明)和APP (特殊应包)5 类

RTSP

实时流协议(RTSP,Real-time Streaming Protocol)是一种用于控制声音或图像的流媒体议,并且允许控制多条流,但 RTSP 连接并没有被绑定传输层的连接(如 RTP),服务器甚至可以选择TCP或者UDP来传输流内容。

它的语法类似于 HTTP 1.1,但不强调时间的同步,因此比较可以容忍网络延迟,是一种基于文本的多媒体播放控制协议。RTSP 定义流格式,流数据可经由 RTP 传输;所以 RTSP 的实时效果非常好,适合视频聊天,视频监控等方向。

RTSP 的请求主要包括,如「描述(describe),设置(setup),播放(play),暂停(pause),回放(teardown),选项(options)」等,在 RTSP 对话期间,Setup可以指定 RTP/RTCP 使用的端口,「play,pause,teardown」可以开始和暂停 RTP 的发送。

RTSP 请求例

SETUP 请求SETUP 请求指定如何传输单个媒体流。这必须在发送 PLAY 请求之前完成。请求包含媒体流 URL 和传输说明符。该说明符通常包括用于接收 RTP 数据(音频或视频)的本地端口,另一个用于 RTCP 数据(元信息))。服务器回复通常会确认所选参数,并填写缺少的部分,例如服务器选择的端口。必须在发送聚合播放请求之前,使用 SETUP 配置每个媒体流。

C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0CSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001

S->C: RTSP/1.0 200 OKCSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCDSession: 12345678

Play 播放请求Play 播放请求 将导致播放一个或所有媒体流。可以通过发送多个播放请求来堆叠播放请求。URL 可以是聚合 URL(播放所有媒体流)或单个媒体流 URL(仅播放该流)。可以指定范围。如果没有指定范围,流将从头开始播放,并播放到最后,或者如果流暂停,则在暂停点恢复播放。

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0CSeq: 4Range: npt=5-20Session: 12345678

S->C: RTSP/1.0 200 OKCSeq: 4Session: 12345678RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012

PAUSE 暂停请求PAUSE 暂停请求 暂时停止一个或所有媒体流,因此稍后可以通过播放请求恢复。请求包含聚合或媒体流 URL。PAUSE 请求中的范围参数指定何时暂停。当省略范围参数时,暂停会立即无限期地发生。

C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 5Session: 12345678

S->C: RTSP/1.0 200 OKCSeq: 5Session: 12345678

RTMP

RTMP(Real Time Messaging Protocol)实时消息传送协议是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放应用层协议.

RTMP 传输层是 TCP 协议,不过这种可靠的保障也会造成一些问题,也就是说前面的数据包没有交付到目的地,后面的数据也无法进行传输。幸运的是,目前的网络带宽基本上可以满足 RTMP 协议传输普通质量视频的要求,而且一般延迟在延迟在 1-3 秒内。

RTMP 传输的数据的基本单元为 Message,但是实际上传输的最小单元是 Chunk(消息块),因为 RTMP 协议为了提升传输速度,在传输数据的时候,会把 Message 拆分开来,形成更小的块,这些块就是 Chunk。

RTMP 扩展

RTMP 是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种:

工作在 TCP 之上的明文协议,使用端口 1935;

RTMPE 在 RTMP 的基础上增加了加密功能;

RTMPT 封装在 HTTP 请求之中,可穿越防火墙;

RTMPS 类似 RTMPT,但使用的是 HTTPS 连接;

RTMP 协议(Real Time Messaging Protocol)是被 Flash 用于对象,视频,音频的传输.这个协议建立在 TCP 协议或者轮询 HTTP 协议之上.

RTMP 协议就像一个用来装数据包的容器,这些数据既可以是 AMF 格式的数据,也可以是 FLV 中的视/音频数据.一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.

HLS

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于 HTTP 的流媒体传输协议,可实现流媒体的直播和点播,主要应用在 iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案。HLS 点播,基本上就是常见的分段 HTTP 点播,不同在于,它的分段非常小。

相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议、MMS 协议等,HLS 直播最大的不同在于,「直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。」由此可见,基本上可以认为,HLS 是以点播的技术方式来实现直播。由于数据通过 HTTP 协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过 HLS 的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。 

HLS 提供一个 m3u8 地址,Apple 的 Safari 浏览器直接就能打开 m3u8 地址,譬如香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8

总结

RTP RTCP RTSP 区别与联系

RTP传输流媒体数据、RTCP对RTP进行控制,同步、RTSP发起/终止流媒体RTP和RTCP互为姐妹关系,RTSP可以使用RTP来传输数据,但并没有绑定关系也可以使用TCP/UDPRTSP、RTMP、HLS都可以做直播和点播,它们是三种不同的应用层协议

RTSP、RTMP、HLS 区别与联系

RTSP、RTMP、HLS都可以做直播和点播,它们是三种不同的应用层协议

HLS 延迟大,适合视频点播

RTSP 实时性最好,但是实现复杂,适合视频聊天和视频监控

RTMP 强在浏览器支持好,加载 flash 插件后就能直接播放,非常火,相反在浏览器里播放 rtsp 就很困难了

关于直播

直播应用中,RTMP 和 HLS 基本上可以覆盖所有客户端观看。

・RTSP 优势主要在于传输层可以使用 udp/rtp,实时性好,延迟可控制到 1s 内,・RTMP 主要优势在于延时相对较低(1-3s),而且 RTMP 支持的很完善,能做到 flash 播放 RTMP 流长时间不断流,以前很多 SIP 的视频会议已被 RTMP 所取代。・HLS 的优势就是直接使用 http 协议请求流数据,可以在不同速率的版本间自由切换,实现无缝播放,缺点是延时比较大(10s 以上)。

三种协议各有各的优势,主要还是看场景选择,当然大点公司,可以做些私有协议来提供更好更符合场景的服务。

网络流媒体协议的联系与区别 (RTP RTCP RTSP RTMP HLS)(转)的更多相关文章

  1. 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)

    目录 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) 简结 RTP RTCP RTSP 区别与联系 RTSP.RTMP.HLS 区别与联系 关于直播 流媒体各协议层次图 基 ...

  2. [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP       ...

  3. 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTP           参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...

  4. 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls

    http://blog.csdn.net/tttyd/article/details/12032357 RTP           参考文档 RFC3550/RFC3551 Real-time Tra ...

  5. 流媒体传输协议(rtp/rtcp/rtsp/rtmp/mms/hls)转

    常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议两类.在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息,而用RTP/UDP来传输实时多媒体数据. 1 实时传输 ...

  6. 流媒体协议扫盲(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTP           参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...

  7. SDP, RTP, RTCP, RTSP, RTMP 名词解释

    读维基百科里的词条,记录的一点笔记. SDP 会话描述协议 Session Description Protocol 严格来说 SDP 不是一种协议,而是一种格式约定,用于描述流媒体的参数.如协商媒体 ...

  8. 流媒体技术 rtp/rtcp/rtsp资料精华!

     流媒体技术 rtp/rtcp/rtsp资料精华! 流媒体技术 流媒体是指在网络中使用流式(Sreaming)传输技术进行传输的连续时基媒体.如音频数据流或视频数据流,而不是一种新的媒体.流媒体技 ...

  9. 推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求

    推荐一个比较好用的流媒体服务开源代码: ZLMediaKit: 实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求 https://gitee.com/xiahcu/Z ...

  10. rtp rtcp rtsp sip协议了解方法

    vlc有个串流功能 可以流各种推流 方便拉取. 能够方便抓包查看协议. 1.菜单媒体->流 打开对话框 分别可以选择本地文件 关盘文件 网络流 捕获设备做流化处理. 2. 选择 串流->新 ...

随机推荐

  1. CF763E Timofey and our friends animals题解

    题目链接:CF 或者 洛谷 简单来说就是求 \([l,r]\) 这些点都存在的情况下,连通块的数量,看到七秒时限,而且每个点相连的边数很少,可以想到离线下来使用莫队类的算法解决 连通块问题,一般可以考 ...

  2. delphi TDBLookupComboboxEh 的项目设置

  3. 【Flink入门修炼】1-3 Flink WordCount 入门实现

    本篇文章将带大家运行 Flink 最简单的程序 WordCount.先实践后理论,对其基本输入输出.编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍. 下面将从创建项目开始,介绍 ...

  4. Unicode编码的魅力:跨语言交流的桥梁

    引言: Unicode编码是一种用于表示世界上所有字符的标准编码方式.它解决了字符集兼容性和多语言文本处理的难题,成为实现全球化软件的关键技术.本文将深入探讨Unicode编码的优点与缺点,并介绍它在 ...

  5. NEMU PA 2-3 实验报告

    课程地址:https://www.bilibili.com/video/BV1yC4y1s74C 一.实验目的 了解ELF符号表的解析 进一步完善调试器的功能,理解编译器的设计原理 二.实验步骤 在P ...

  6. P4414题解

    原题 题意简述: 有 $3$ 个整数,将他们排序,将它们存到 $a,b,c$ 三个变量中,满足 $a<b<c$,再按照规则输出. 不难发现,我们可以用到 sort 函数,这个函数的作用是将 ...

  7. OCR 02: Tesseract-OCR

    Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR Project Host And Brief Official Site ...

  8. Laravel入坑指南(7)——中间件Middleware

    Laravel框架中引入了"中间件"这个概念,笔者觉得不是太合适.这里的Middleware和Java Servlet中的过滤器(Filter)就是一个东西,但是想比之下Filte ...

  9. mantis如何更改用户密码

    从MantisBT版本开始,创建用户后,必须由用户通过确认邮件进行修改密码,而管理员无权对用户的密码进行修改.这对于配置mail不成功的情况下很不方便.     以下配置就可以让管理员轻松管理用户的密 ...

  10. Redis 缓存过期删除/淘汰策略分析

    Redis 缓存过期删除/淘汰策略分析 Redis 缓存删除 Redis 键过期删除,定期删除(主动)和惰性删除(被动) Redis 内存不足时,缓存淘汰策略 key 键过期删除 我们用 redis ...