读维基百科里的词条,记录的一点笔记。

SDP

会话描述协议 Session Description Protocol

严格来说 SDP 不是一种协议,而是一种格式约定,用于描述流媒体的参数。如协商媒体类型、格式及其它相关属性。这些属性和参数通常叫做 session profile

SDP 被广泛用于 RTP、RTSP、SIP 等协议中。

会话描述

一个会话由一系列域值来描述,每个一行,如

<character>=<value>
  • character 是一个字符,小写和大小意义不同。
  • value 是一串文本,格式取决于属性类型。UTF-8 编码。
  • = 等号两边不能有空白符。

SDP 消息内有三个主要部分:会话、时间、媒体。每个消息都有多个时间和媒体描述。

下述中有 =* 表示可选值。顺序如下所示:

会话描述
v= (protocol version number, currently only 0)
o= (originator and session identifier : username, id, version number, network address)
s= (session name : mandatory with at least one UTF-8-encoded character)
i=* (session title or short information)
u=* (URI of description)
e=* (zero or more email address with optional name of contacts)
p=* (zero or more phone number with optional name of contacts)
c=* (connection information—not required if included in all media)
b=* (zero or more bandwidth information lines)
One or more Time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more Media descriptions (each one starting by an "m=" line; see below)
时间描述(必须指定)
t= (time the session is active)
r=* (zero or more repeat times)
媒体描述
m= (media name and transport address)
i=* (media title or information field)
c=* (connection information — optional if included at session level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines — overriding the Session attribute lines)

RTP

Real-time Transport Protocol 实时传输协议。

应用于流媒体传输,如电话、视频电话应用、视频服务等。

  • RTP 常结合 RTCP 一起使用。RTP 负责传输流媒体(如:音、视频),RTCP 负责监控传输质量,以及多个流的同步。
  • RTP 是 VoIP 的基础设施,在 VoIP 领域经常与另一种会话协议搭配工作,如 SIP 协议。
  • RTP 允许使用 IP 组播技术。
  • 实时多媒体流需要时实性,因而容许包的丢失。例如音频应用中一秒中有一小部分数据丢失,并不影响接听感受。
  • RTP 可以使用 TCP,但由于 TCP 的强可靠性却较少被使用。大部分 RTP 都建立在 UDP 之上。
  • 与 RTP 相关的协议有许多,比如 SIP、Jingle, RTSP, H.225, H.245 等会话控制协议,另外如 H.264, MPEG, H.263 等协议常用来编码数据,作为 RTP 的 payload。

位域 大小 bits 说明
Version 2 RTP 协议版本号,当前版本为 2
P 1 Padding, 指示 RTP 包尾是否有填充的字节。填充字节的最后一个字节保存填充字节数(包括它自己)
X 1 Extension,指示在标准头和 payload data 之间是否有扩展头(Extension header)
CC 4 CSRC 计数器,指示 CSRC 标识符个数
M 1 Marker,标记,应用层使用。指示该 payload 是否有特殊意义。如对于视频,M=1 表示一帧的结束; 对于音频,标记会话的开始。
PT 7 Payload type,携带数据的格式。由 RTP profile 指定。便于应用解析。
Sequence number 16 每发送一个 RTP 包,序列号递增 1. 接收方用序列号来检查包丢失并恢复序列号。包丢失了 RTP 不会作任何处理,交由应用层来处理。RFC3550 规定初始序列号为一个随机数。
Timestamp 32 接收方根据时间戳来在合适的间隔处理接收数据。每个流有独立的时间戳,不能用于媒体同步。时间粒度由应用指定。
SSRC 32 Synchronization source identifier,同步源标识用来标识一个流。同一个 RTP 会话有唯一的同步标识。
CSRC 32 bits each 特约信息源,标识包含在该 RTP 报文中的所有特约信源。可以有 0~15 个。
Header extension optional 头 32 位包含 16 位的 profile-spcific 标识符和 16 位的长度,用于指示扩展头的长度。扩展以 32 bit 对齐。

RTCP

RTP Control Protocol

RTP 控制协议,与 RTP 搭配使用。

RTCP 有五种包:

1. sender report (SR)
2. receiver report (RP)
3. source description (SDES)
4. goodbye (BYE)
5. Application-specific message (APP)
6.

RTSP

实时流传输协议 Real Time Streaming Protocol

RTSP 并不负责流数据传输。大多数 RTSP 服务使用 RTP/RTCP 来进行流数据传输。

与 HTTP 类似。RTSP 使用 TCP 来进行端到端连接,且大部分 RTCP 控制消息由客户端向服务端发起。
但 HTTP 是无状态的,RTSP 有状态。RTSP 有标识符用于跟踪多个会话。

默认的传输端口是 554,默认使用 TCP 协议。

主要命令:

  • OPTIONS 询问服务器接受哪些请求类型
C->S:  OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 1
Require: implicit-play
Proxy-Require: gzipped-messages S->C: RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
  • DESCRIBE 包含一个 RTSP URL,以及允许的返回数据类型。返回数据一般是 SDP 格式。
C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 2 S->C: RTSP/1.0 200 OK
CSeq: 2
Content-Base: rtsp://example.com/media.mp4
Content-Type: application/sdp
Content-Length: 460 m=video 0 RTP/AVP 96
a=control:streamid=0
a=range:npt=0-7.741000
a=length:npt=7.741000
a=rtpmap:96 MP4V-ES/5544
a=mimetype:string;"video/MP4V-ES"
a=AvgBitRate:integer;304018
a=StreamName:string;"hinted video track"
m=audio 0 RTP/AVP 97
a=control:streamid=1
a=range:npt=0-7.712000
a=length:npt=7.712000
a=rtpmap:97 mpeg4-generic/32000/2
a=mimetype:string;"audio/mpeg4-generic"
a=AvgBitRate:integer;65790
a=StreamName:string;"hinted audio track"
  • SETUP 描述怎样传输一个流。在 PLAY 之前必须发送 SETUP 包,其中包含媒体流的 URL 和端口描述。比如本地用于接收 RTP 数据的端口和 RTCP 数据的端口。服务器的回复一般用于确认这些参数,并描述服务器上选择的端口。
C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8000-8001 S->C: RTSP/1.0 200 OK
CSeq: 3
Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001
Session: 12345678
  • PLAY 请求播放或继续播放一个或多个流。如果没有指定范围,则从头播到尾。如果中间暂停,继续播放时从暂停位置开始。
C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 4
Range: npt=5-20
Session: 12345678 S->C: RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
  • PAUSE 暂停一个或多个流。暂停后可被 PLAY 命令恢复播放。可指定 range 来表示何时暂停。未指定 range 则立即暂停。
C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 5
Session: 12345678 S->C: RTSP/1.0 200 OK
CSeq: 5
Session: 12345678记录​
  • RECORD 依据描述信息记录一段媒体数据。时间戳指定起始和结束时间。如果未指定 range,则使用描述信息里的起始和结束时间。如果会话已经开始,则立即开始记录。由服务器决定是否存储记录数据。如果不使用此命令,则应返回 201 。
C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 6
Session: 12345678 S->C: RTSP/1.0 200 OK
CSeq: 6
Session: 12345678
  • ANNOUNCE 此方法有两个作用:客户端向服务端发送,将请求的媒体数据的 URL 发给服务器。服务器向客户端发送时,立即更新会话。如果一个新的媒体流加入,则应该发送整个描述信息,而不是增加的部分。
C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 7
Date: 23 Jan 1997 15:35:06 GMT
Session: 12345678
Content-Type: application/sdp
Content-Length: 332 v=0
o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (Mark Handley)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 3456 RTP/AVP 0
m=video 2232 RTP/AVP 31 S->C: RTSP/1.0 200 OK
CSeq: 7
  • TEARDOWN 结束一个会话。停止所有媒体流,释放所有会话和相关数据。
C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 8
Session: 12345678 S->C: RTSP/1.0 200 OK
CSeq: 8
  • GET_PARAMETER 获取 URI 指定流的参数值。没有实体时可用来测试客户端和服务器的连通,类似 ping 包。
S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 9
Content-Type: text/parameters
Session: 12345678
Content-Length: 15 packets_received
jitter C->S: RTSP/1.0 200 OK
CSeq: 9
Content-Length: 46
Content-Type: text/parameters packets_received: 10
jitter: 0.3838
  • SET_PARAMETER 设置参数
C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 10
Content-length: 20
Content-type: text/parameters barparam: barstuff S->C: RTSP/1.0 451 Invalid Parameter
CSeq: 10
Content-length: 10
Content-type: text/parameters barparam
  • REDIRECT 指示客户端必须要去连接另一个服务地址。其中指定客户端要去连接的 URL。如果客户端还是想连接当前 URI,客户端必须先在当前会话发送 TEARDOWN 和 SETUP 请求。
S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 11
Location: rtsp://bigserver.com:8001
Range: clock=19960213T143205Z-
  • Embedded (Interleaved) Binary Data

RTMP

实时消息协议 Real Time Messaging Protocol

一种流媒体传输协议,在网络上传输音、视频及数据。由 Macromedia 开发,后该公司被 Adobe 收购。Flash 播放器即使用该协议。

RTMP 有多个变种
* 原始 RTMP 工作于 TCP 上,默认使用端口 1935
* RTMPS 即工作于 TLS/SSL 连接上的 RTMP
* RTMPE Adobe 使用私有机制加密的 RTMP。
* RTMPT 使用 HTTP 封装的 RTMP,可用于穿过防火墙,使用 HTTP 的端口 80 或 443.封装的会话可能携带 RTMP、RTMPS 或 RTMPE 等几种包。

最新文章

  1. Linux下安装JDK和Eclipse
  2. java内存管理机制
  3. golang笔记——IDE
  4. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
  5. mysql西文字符大小写重复键问题的解决方法
  6. TPL(Task Parallel Library)多线程、并发功能
  7. 几种JavaScript富应用MVC MVVM框架
  8. 练习生产者与消费者-PYTHON多线程中的条件变量同步-Queue
  9. Java+protobuf 实例
  10. 一起学android之怎样获取手机程序列表以及程序相关信息并启动指定程序 (26)
  11. 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)
  12. ife2018 零基础学院 day 3
  13. 利用ENVI FX从RGB提取建筑物轮廓
  14. tomcat修改端口号
  15. Android-Handler使用姿势
  16. Eclipse调试cas server 3.5.2.1
  17. UI“三重天”之selenium--封装(二)
  18. threadlocal彻底理解,深刻
  19. Warning: isMounted(...) is deprecated in plain JavaScript React classes.
  20. ibatis分页的两种方式

热门文章

  1. Linux目录结构简析
  2. spring中MessageSource的配置使用方法1
  3. mybatis如何传入一个list参数
  4. 理解 Glance
  5. set up trace code tool
  6. AC日记——背包问题 V2 51nod 1086
  7. 使用vue-cli搭建element-ui项目
  8. Java 基础【06】复合赋值运算
  9. django使用logging记录日志
  10. luogu P3119 [USACO15JAN]草鉴定Grass Cownoisseur