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: OPTIONSrtsp://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
 SessionDescription Protocol Version (v): 0  //SDP协议版本

    Owner/Creator, Session Id (o): -15807615279986996655 15807615279986996655 IN IP4 DESKTOP-9ONQED0     //会话的发起者信息

    Session Name(s): Unnamed     //会话名称

    SessionInformation (i): N/A   //会话信息

    ConnectionInformation (c): IN IP4 0.0.0.0   //会话连接信息,指出真正的媒体流使用的IP地址。

    Time Description, active time (t): 0 0

    SessionAttribute (a): tool:vlc 2.2.4    //会话的一些属性

    SessionAttribute (a): recvonly

    SessionAttribute (a): type:broadcast   //广播传输类型

    SessionAttribute (a): charset:UTF-8    //字符集,UTF-8是UNICODE的一种变长字符编码。UINCODE为为每一个字符添加一个唯一的数字。

    SessionAttribute (a): control:rtsp://192.168.48.113:8554/1  //协议

    MediaDescription, name and address (m): audio 0 RTP/AVP 14  //发送方所支持的媒体类型(视频等信息)。

    BandwidthInformation (b): AS:128  //视频带宽信息

    BandwidthInformation (b): RR:0

    MediaAttribute (a): rtpmap:14 MPA/90000/2   //媒体属性,视频格式(MPA为视频格式,90000为采样率)。

    MediaAttribute (a): control:rtsp://192.168.48.113:8554/1/trackID=0//协议,该媒体的track为0

    MediaDescription, name and address (m): video 0 RTP/AVP 96//媒体名称,协议以及净荷类型

    BandwidthInformation (b): RR:0

    Media Attribute(a): rtpmap:96 H264/90000   //净荷类型,支持的媒体格式,采样率   

    MediaAttribute (a):fmtp:96   //净荷类型为96

packetization-mode=1;profile-level-id=64001e;sprop-parameter-sets=Z2QAHqzZQLQ9v/ACAAGxAAADAAEAAAMAMI8WLZY=,aOvjyyLA;

    MediaAttribute (a): control:rtsp://192.168.48.113:8554/1/trackID=1//track为1

3)SETUP

SETUP消息用于确定转输机制,建立RTSP会话。客户端也可以在建立RTSP后再次发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数。若不同意,会回应 "455Method 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抓包部分报文如下:

   InternetProtocol 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)

    TotalLength: 32

   Identification: 0x54ef (21743)

    Flags: 0x00

    Fragmentoffset: 0

    Time tolive: 1

    Protocol:IGMP (2)

    Headerchecksum: 0xf408 [validation disabled]

    Source:192.168.48.53

    Destination:234.1.1.1

    [SourceGeoIP: Unknown]

    [DestinationGeoIP: Unknown]

    Options: (4bytes), Router Alert

Internet Group Management Protocol    //igmp

    [IGMPVersion: 2]    //版本2

    Type:Membership Report (0x16)    //成员报告类型

    Max RespTime: 0.0 sec (0x00)     //最大响应时间

    Headerchecksum: 0xfefc [correct]    //头校验和

    MulticastAddress: 234.1.1.1   //组播地址

2)组成员加入过程

当一个主机加入了组播组,则应该立即发送一个或多各版本2的成员关系报告给组播组。

3)查询与响应

IGMP查询器周期性的向子网内所有主机(224.0.0.1代表子网内所有主机)发送成员关系查询信息。 所有主机收到IGMPv2成员查询信息,一主机首先向组播组发送IGMPv2成员关系报告。组的其他成员监听到报告后抑制自己的成员关系报告发送。

4)查询器选择过程

从上图可以看到,路由器启动,主动发出到所有组播系统组(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

IGMPv3

查询器选举

依靠组播路由协议

自己选择

自己选择

成员离开方式

默默离开

主动发送离开报文

主动发送离开报文

指定组查询

不支持

支持

支持

指定源、组加入

不支持

不支持

支持

三.组播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时,组播报文将在二层广播。

RTSP&IGMP详解的更多相关文章

  1. RTSP协议详解

        RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流媒体提 ...

  2. (转)RTSP协议详解

    转自:https://www.cnblogs.com/lidabo/p/6553212.html RTSP简介     RTSP(Real Time Streaming Protocol)是由Real ...

  3. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  4. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  5. javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  6. linux查看端口及端口详解

    今天现场查看了TCP端口的占用情况,如下图   红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...

  7. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  8. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

  9. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  10. linux 中/proc 详解

    proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告 ...

随机推荐

  1. 这几年专注于流程管理与RPA落地

    这些年专注于流程管理与RPA落地,乙方有些辛苦,但,也得到了客户的认可,开心. 做过多个流程管理咨询,发现信息化落地后孤岛很多,RPA 刚好可以作为各个系统的有效补充,把系统有机的结合在一起. 企业信 ...

  2. MYSQL DUAL(伪表)

    #DUAL是一个伪表,不存在的表. SELECT 8*9 FROM DUAL #输出72

  3. SXSSFWorkbook 表格内换行

    起因 导出的excel需要在表格内换行,但搜索到的方法都实现不了我的需求,经同事搜查得知,这是POI的一个bug,已经在17年八月后被解决. 生成方式 pom依赖 <dependency> ...

  4. 软件工程日报——第十天(Android 开发中的异常处理问题)

    Android 开发中的异常处理问题 在代码的编写工作当中,我们会遇到很多有关错误处理的内容.这个时候,你用的最多的应该是try-catch-finally,这样的句式.系统提供的这个句式极大方便我们 ...

  5. Neo4j学习(1)--安装

    1.访问官网,下载Community版本,注意在下载页面已经提示了登录时的默认用户名和密码neo4j/neo4j.我使用的版本为3.4.10,jdk要求为java8 2.安装Windows版本,最好参 ...

  6. Matlab笔记--Matlab概述(初登场)

    Matlab概述 安装MATLAB教程 可以参考这里:https://www.cnblogs.com/sixuwuxian/p/15858196.html Matlab的启动 右键图标,选择属性,可以 ...

  7. mybatis源码-注解sql

    Mybatis-注解sql Demo 主启动类 public class MybatisHelloWorld { public static void main(String[] args) thro ...

  8. javaEE Web(Tomcat)深度理解 和 Servlet的本质

    javaEE Web(Tomcat)深度理解 和 Servlet的本质 每博一文案 我所有的进步,只为更接近你. 上天没有给予人们公平的人生,有人拥有出奇的才能,便有人只能不辞辛苦的攀登阶梯,我默默地 ...

  9. Spring AOP——源码分析

    [阅读前提]:需了解 AOP 注解开发流程:链接 一.注解 @EnableAspectJAutoProxy 在配置类中添加注解@EnableAspectJAutoProxy,便开启了 AOP(面向切面 ...

  10. 【ACM算法竞赛日常训练】DAY5题解与分析【储物点的距离】【糖糖别胡说,我真的不是签到题目】| 前缀和 | 思维

    DAY5共2题: 储物点的距离(前缀和) 糖糖别胡说,我真的不是签到题目(multiset,思维) 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式讲解算法 ...