关于音视频相关方面的学习,首先要了解其对应常用的协议,本文简单的对这两个协议进行说明,没有加RTMP协议
RTSP协议
一.概述
1)RTSP(Real-Time Stream Protocol)是一种基于文本的应用层协议,RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
2)基本的RTSP操作过程
首先,客户端连接到流服务器并发送一个OPTIONS命令查询服务器提供的方法收到服务器的回应后,发送DESCRIBE命令查询某个媒体文件的SDP信息。流服务器通过一个SDP描述来进行回应,回应信息包括流数量、媒体类型等信息。客户端分析该SDP描述,并为会话中的每一个流发送一个SETUP命令,SETUP命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,客户端发送一个PLAY命令,服务器就开始传送媒体流数据。在播放过程中客户端还可以向服务器发送PAUSE等其他命令控制流的播放。通信完毕,客户端可发送TERADOWN命令来结束流媒体会话。
二.RTSP消息
1)request消息
Request: OPTIONS rtsp://192.168.48.113:8554/1 RTSP/1.0\r\n
格式:方法 + URL +RTSP版本+回车换行
方法:OPTIONS
URL:rtsp://192.168.48.113:8554/1
RTSP版本:RTSP版本一般都是RTSP/1.0
2)response消息
Response: RTSP/1.0 200 OK\r\n
格式:版本+状态码+对应文本解释
版本:RTSP/1.0
状态码:200
对应文本解释:OK
除此之外,还有一些状态码+文本解释
如下:
-
状态码 | 文本解释 | 含义 |
---|---|---|
“200” | OK | 执行成功 |
“400” | Bad Request | 错误请求 |
“404” | Not Found | 未找到 |
“500” | Internal Server Error | 服务器错误 |
三. 各方法的详细介绍
1) OPTIONS
Real Time Streaming Protocol
Request: OPTIONS rtsp://192.168.48.113:8554/1 RTSP/1.0\r\n
Method: OPTIONS
URL: rtsp://192.168.48.113:8554/1
CSeq: 2\r\n
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)\r\n
\r\n
Real Time Streaming Protocol
Response: RTSP/1.0 200 OK\r\n
Status: 200
Server: VLC/2.2.4\r\n
Content-length: 0
Cseq: 2\r\n
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER\r\n
\r\n
从上面可以看出客户端使用OPTIONS方法查询服务器提供的方法,服务器同样在Public段作出回应有哪些方法: Public:DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER\r\n
Cseq字段表示请求的序号。客户端的每一个请求都被赋予一个序号,服务器同样会回应一个相同的序号。
User-Agent 该域用于标识不同的用户标识不同公司或者不同客户端。
同时上面字段还说明采用VLC作为服务器段,并且指明了版本号和使用的LIVE555库版本。
2) DESCRIBE
DESCRIBE消息是由客户端发送到服务器端,用于客户端得到请求链接中指定的媒体文件的相关描述,一般是SDP信息。SDP 完全是一种会话描述格式, 它不属于传输协议.
它使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、 实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。
SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强, 这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商, 所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现。对于流媒体服务而言,以下几个域是在SDP中一定要包含的:“a=control:” ,“a=range:” ,“a=rtpmap:”,“a=fmtp:”
以下是服务器端回应客户端的一段报文:
Real Time Streaming Protocol
Response: RTSP/1.0 200 OK\r\n
Status: 200
Server: VLC/2.2.4\r\n
Date: Thu, 18 Aug 2016 08:20:40 GMT\r\n
Content-type: application/sdp //请求类型
Content-Base: rtsp://192.168.48.113:8554/1\r\n //指明对某媒体的描述信息
Content-length: 570 //SDP长度
Cache-Control: no-cache\r\n //隐藏协议
Cseq: 3\r\n //请求序号
\r\n
Session Description Protocol
Session Description Protocol Version (v): 0 //SDP协议版本
Owner/Creator, Session Id (o): - 15807615279986996655 15807615279986996655 IN IP4 DESKTOP-9ONQED0 //会话的发起者信息
Session Name (s): Unnamed //会话名称
Session Information (i): N/A //会话信息
Connection Information (c): IN IP4 0.0.0.0 //会话连接信息,指出真正的媒体流使用的IP地址。
Time Description, active time (t): 0 0
Session Attribute (a): tool:vlc 2.2.4 //会话的一些属性
Session Attribute (a): recvonly
Session Attribute (a): type:broadcast //广播传输类型
Session Attribute (a): charset:UTF-8 //字符集,UTF-8是UNICODE的一种变长字符编码。UINCODE为为每一个字符添加一个唯一的数字。
Session Attribute (a): control:rtsp://192.168.48.113:8554/1 //协议
Media Description, name and address (m): audio 0 RTP/AVP 14 //发送方所支持的媒体类型(视频等信息)。
Bandwidth Information (b): AS:128 //视频带宽信息
Bandwidth Information (b): RR:0
Media Attribute (a): rtpmap:14 MPA/90000/2 //媒体属性,视频格式(MPA为视频格式,90000为采样率)。
Media Attribute (a): control:rtsp://192.168.48.113:8554/1/trackID=0//协议,该媒体的track为0
Media Description, name and address (m): video 0 RTP/AVP 96//媒体名称,协议以及净荷类型
Bandwidth Information (b): RR:0
Media Attribute (a): rtpmap:96 H264/90000 //净荷类型,支持的媒体格式,采样率
Media Attribute (a):fmtp:96 //净荷类型为96
packetization-mode=1;profile-level-id=64001e;sprop-parameter-sets=Z2QAHqzZQLQ9v/ACAAGxAAADAAEAAAMAMI8WLZY=,aOvjyyLA;
Media Attribute (a): control:rtsp://192.168.48.113:8554/1/trackID=1//track为1
3) SETUP
SETUP消息用于确定转输机制,建立RTSP会话。客户端也可以在建立RTSP后再次发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数。若不同意,会回应 “455 Method Not Valid In This State”
Real Time Streaming Protocol
Request: SETUP rtsp://192.168.48.113:8554/1/trackID=0 RTSP/1.0\r\n
Method: SETUP
URL: rtsp://192.168.48.113:8554/1/trackID=0
CSeq: 4\r\n //请求序号
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)\r\n //客户端版本信息
Transport: RTP/AVP;unicast;client_port=57676-57677 //传输参数,协议,单播,约定RTP客户端端口为57676-57677
\r\n
4) PLAY
PLAY方法通知服务器按照SETUP中指定的机制开始传送数据。服务器会从PLAY消息指定范围的开始时间开始传送数据,直到该范围结束。服务器可能会将PLAY请求放到队列中,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。
Range指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。
Real Time Streaming Protocol
Request: PLAY rtsp://192.168.48.113:8554/1 RTSP/1.0\r\n
Method: PLAY
URL: rtsp://192.168.48.113:8554/1
CSeq: 6\r\n
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)\r\n
Session: 64c337542cde55b1
Range: npt=0.000-\r\n //指定开始播放时间
\r\n
Real Time Streaming Protocol
Response: RTSP/1.0 200 OK\r\n
Status: 200
Server: VLC/2.2.4\r\n
Date: Thu, 18 Aug 2016 08:20:40 GMT\r\n
RTP-Info://RTP信息
url=rtsp://192.168.48.113:8554/1/trackID=0;seq=60996;rtptime=1736724464, url=rtsp://192.168.48.113:8554/1/trackID=1;seq=54288;rtptime=1736724464\r\n
//URL为流媒体对应的链接地址,seq对应的为流媒体第一个包的序列号,rtptime为range域对应的时间戳。
//时间戳,其实是一个时间字段,每次增加数据时,填入当前的时间值 是为了数据仓库中ETL部分的增量抽取模型而建立的,也就是说:“有了时间戳,我上个星期的数据已经加载好了,我现在需要增量加载这个星期的数据,该怎么办呢?最好的办法就是把那些时间戳字段的时间值大于上个星期周日的时间就加载,其他的数据就不用加载!”
Range: npt=130.379780-\r\n
Session: 64c337542cde55b1;timeout=60
Content-length: 0
Cache-Control: no-cache\r\n
Cseq: 6\r\n
\r\n
5)TEARDOWN
TEARDOWN请求终止了给定URL的媒体流传输,并释放了与该媒体流相关的资源。
IGMP协议
一.概述
IGMP是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP协议族中负责IP组播成员管理的协议,用来在IP主机和其直接相邻的组播路由器之间建立、维护组播成员关系。
到目前为止,IGMP有三个版本:
1、 IGMPv1(由RFC 1112定义)
2、 IGMPv2(由RFC 2236定义)
3、 IGMPv3(由RFC 3376定义)
二.IGMPv2
1)报文格式:
版本+类型+最大响应时间+头校验和+组地址
IGMPv2抓包部分报文如下:
Internet Protocol Version 4, Src: 192.168.48.53, Dst: 234.1.1.1
0100 …. = Version: 4
…. 0110 = Header Length: 24 bytes
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 32
Identification: 0x54ef (21743)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: IGMP (2)
Header checksum: 0xf408 [validation disabled]
Source: 192.168.48.53
Destination: 234.1.1.1
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
Options: (4 bytes), Router Alert
Internet Group Management Protocol //igmp
[IGMP Version: 2] //版本2
Type: Membership Report (0x16) //成员报告类型
Max Resp Time: 0.0 sec (0x00) //最大响应时间
Header checksum: 0xfefc [correct] //头校验和
Multicast Address: 234.1.1.1 //组播地址
2)组成员加入过程
当一个主机加入了组播组,则应该立即发送一个或多各版本2的成员关系报告给组播组。
3)查询与响应
IGMP查询器周期性的向子网内所有主机(224.0.0.1代表子网内所有主机)发送成员关系查询信息。
所有主机收到IGMPv2成员查询信息,一主机首先向组播组发送IGMPv2成员关系报告。
组的其他成员监听到报告后抑制自己的成员关系报告发送。
4)查询器选择过程
从图2可以看到
路由器启动,主动发出到所有组播系统组(224.0.0.1)的IGMPv2常规查询信息。
收到常规查询信息的路由器,会把此信息的源IP地址和接收口的IP地址作比较,拥有最低IP地址的路由器被选举为IGMP查询路由器。
非查询路由器启动一个查询计时器,周期检查IGMP查询路由器的状态。
主机向224.0.0.2发送离开组消息(报文中含有要离开的组地址224.1.1.1)。
路由器向这个组(224.1.1.1)发送特定组查询。
1秒钟内没有收到该组的报告,发送第二个特定组查询。
二个查询信息后未收到主机响应,组224.1.1.1超时,离开组。
IGMP三个版本的比较
IGMPv1 | IGMPv2 | IGMPv4 | |
---|---|---|---|
查询器选举 | 依靠组播路由协议 | 自己选择 | 自己选择 |
成员离开方式 | 默默离开 | 主动发送离开报文 | 主动发送离开报文 |
指定组查询 | 不支持 | 支持 | 支持 |
指定源、组加入 | 不支持 | 不支持 | 支持 |
三.组播IP地址
• 组播地址范围
224.0.0.0-239.255.255.255
• 保留组播地址
224.0.0.0-224.0.0.255 224.0.1.0-224.0.1.255
• 本地管理组地址
239.0.0.0-239.255.255.255
• 用户组播地址
224.0.2.0-238.255.255.255
• 组播MAC地址:
以太网: 01-00-5e-xx-xx-xx
• 常用的保留组播地址 永久组地址 含义
224.0.0.1 所有系统,包括主机与路由器
224.0.0.2 所有组播路由器
224.0.0.3 未分配
224.0.0.4 DVMRP(Distance Vector Multicast Routing Protocol ,距离矢量组播路由协议)
路由器
224.0.0.5 OSPF(Open Shortest Path First ,开放最短路径优先)路由器
224.0.0.6 OSPF 指定路由器/备用指定路由器 224.0.0.7 ST(Shared Tree ,共享树)路由器
224.0.0.8 ST 主机
224.0.0.9 RIP-2(Routing Information Protocol version 2 ,路由信息协议版本2)路由器
224.0.0.11 移动代理
224.0.0.12 DHCP(Dynamic Host Configuration Protocol ,动态主机配置协议)服务器/
中继代理 224.0.0.13 所有PIM(Protocol Independent Multicast , 协议无关组播)路由器
224.0.0.14 RSVP(Resource Reservation Protocol ,资源预留协议)封装
224.0.0.15 所有CBT(Core-Based Tree ,有核树)路由器
224.0.0.16 指定SBM(Subnetwork Bandwidth Management ,子网带宽管理)
224.0.0.17 所有SBM
224.0.0.18
VRRP(Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)
四.IGMP snooping
四、组播IP地址:
• 组播地址范围
224.0.0.0-239.255.255.255
• 保留组播地址
224.0.0.0-224.0.0.255 224.0.1.0-224.0.1.255
• 本地管理组地址
239.0.0.0-239.255.255.255
• 用户组播地址
224.0.2.0-238.255.255.255
• 组播MAC地址:
以太网: 01-00-5e-xx-xx-xx
• 常用的保留组播地址 永久组地址 含义
224.0.0.1 所有系统,包括主机与路由器
224.0.0.2 所有组播路由器
224.0.0.3 未分配
224.0.0.4 DVMRP(Distance Vector Multicast Routing Protocol ,距离矢量组播路由协议)
路由器
224.0.0.5 OSPF(Open Shortest Path First ,开放最短路径优先)路由器
224.0.0.6 OSPF 指定路由器/备用指定路由器 224.0.0.7 ST(Shared Tree ,共享树)路由器
224.0.0.8 ST 主机
224.0.0.9 RIP-2(Routing Information Protocol version 2 ,路由信息协议版本2)路由器
224.0.0.11 移动代理
224.0.0.12 DHCP(Dynamic Host Configuration Protocol ,动态主机配置协议)服务器/
中继代理 224.0.0.13 所有PIM(Protocol Independent Multicast , 协议无关组播)路由器
224.0.0.14 RSVP(Resource Reservation Protocol ,资源预留协议)封装
224.0.0.15 所有CBT(Core-Based Tree ,有核树)路由器
224.0.0.16 指定SBM(Subnetwork Bandwidth Management ,子网带宽管理)
224.0.0.17 所有SBM
224.0.0.18
VRRP(Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)
五、IGMP snooping
IGMP Snooping运行在链路层,是运行在二层以太网交换机上的组播约束机制,用于管理和控制组播数据转发。
当二层以太网交换机收到主机和路由器之间传递的IGMP报文时,IGMP Snooping分析IGMP报文所带的信息。当监听到主机发出的IGMP主机报告报文时,交换机就将该主机加入到相应的组播MAC地址表中。当监听到主机发出的IGMP离开报文时,交换机就将删除与该主机对应的组播MAC地址表中。
通过不断地监听IGMP报文,交换机就可以在二层建立和维护组播MAC地址表 ,交换机就可以根据组播MAC地址表转发从路由器下发的组播报文。没有运行IGMP Snooping时,组播报文将在二层广播。