网络流媒体协议的联系与区别 (RTP RTCP RTSP RTMP HLS)(转)
网络流媒体协议的联系与区别(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)(转)的更多相关文章
- 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)
目录 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) 简结 RTP RTCP RTSP 区别与联系 RTSP.RTMP.HLS 区别与联系 关于直播 流媒体各协议层次图 基 ...
- [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
[转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP ...
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls
http://blog.csdn.net/tttyd/article/details/12032357 RTP 参考文档 RFC3550/RFC3551 Real-time Tra ...
- 流媒体传输协议(rtp/rtcp/rtsp/rtmp/mms/hls)转
常用的流媒体协议主要有HTTP渐进下载和基于RTSP/RTP的实时流媒体协议两类.在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息,而用RTP/UDP来传输实时多媒体数据. 1 实时传输 ...
- 流媒体协议扫盲(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...
- SDP, RTP, RTCP, RTSP, RTMP 名词解释
读维基百科里的词条,记录的一点笔记. SDP 会话描述协议 Session Description Protocol 严格来说 SDP 不是一种协议,而是一种格式约定,用于描述流媒体的参数.如协商媒体 ...
- 流媒体技术 rtp/rtcp/rtsp资料精华!
流媒体技术 rtp/rtcp/rtsp资料精华! 流媒体技术 流媒体是指在网络中使用流式(Sreaming)传输技术进行传输的连续时基媒体.如音频数据流或视频数据流,而不是一种新的媒体.流媒体技 ...
- 推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐一个比较好用的流媒体服务开源代码: ZLMediaKit: 实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求 https://gitee.com/xiahcu/Z ...
- rtp rtcp rtsp sip协议了解方法
vlc有个串流功能 可以流各种推流 方便拉取. 能够方便抓包查看协议. 1.菜单媒体->流 打开对话框 分别可以选择本地文件 关盘文件 网络流 捕获设备做流化处理. 2. 选择 串流->新 ...
随机推荐
- CF763E Timofey and our friends animals题解
题目链接:CF 或者 洛谷 简单来说就是求 \([l,r]\) 这些点都存在的情况下,连通块的数量,看到七秒时限,而且每个点相连的边数很少,可以想到离线下来使用莫队类的算法解决 连通块问题,一般可以考 ...
- delphi TDBLookupComboboxEh 的项目设置
- 【Flink入门修炼】1-3 Flink WordCount 入门实现
本篇文章将带大家运行 Flink 最简单的程序 WordCount.先实践后理论,对其基本输入输出.编程代码有初步了解,后续篇章再对 Flink 的各种概念和架构进行介绍. 下面将从创建项目开始,介绍 ...
- Unicode编码的魅力:跨语言交流的桥梁
引言: Unicode编码是一种用于表示世界上所有字符的标准编码方式.它解决了字符集兼容性和多语言文本处理的难题,成为实现全球化软件的关键技术.本文将深入探讨Unicode编码的优点与缺点,并介绍它在 ...
- NEMU PA 2-3 实验报告
课程地址:https://www.bilibili.com/video/BV1yC4y1s74C 一.实验目的 了解ELF符号表的解析 进一步完善调试器的功能,理解编译器的设计原理 二.实验步骤 在P ...
- P4414题解
原题 题意简述: 有 $3$ 个整数,将他们排序,将它们存到 $a,b,c$ 三个变量中,满足 $a<b<c$,再按照规则输出. 不难发现,我们可以用到 sort 函数,这个函数的作用是将 ...
- OCR 02: Tesseract-OCR
Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR Project Host And Brief Official Site ...
- Laravel入坑指南(7)——中间件Middleware
Laravel框架中引入了"中间件"这个概念,笔者觉得不是太合适.这里的Middleware和Java Servlet中的过滤器(Filter)就是一个东西,但是想比之下Filte ...
- mantis如何更改用户密码
从MantisBT版本开始,创建用户后,必须由用户通过确认邮件进行修改密码,而管理员无权对用户的密码进行修改.这对于配置mail不成功的情况下很不方便. 以下配置就可以让管理员轻松管理用户的密 ...
- Redis 缓存过期删除/淘汰策略分析
Redis 缓存过期删除/淘汰策略分析 Redis 缓存删除 Redis 键过期删除,定期删除(主动)和惰性删除(被动) Redis 内存不足时,缓存淘汰策略 key 键过期删除 我们用 redis ...