RTSP 详细消息交互

2024-06-23 23:48
文章标签 详细 消息 交互 rtsp

本文主要是介绍RTSP 详细消息交互,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RTSP(Real Time Streaming Protocol)实时流协议,是TCP/IP协议体系中的一个应用层协议。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。

RTSP没有“连接”这个概念,而由RTSP会话(session)代替(服务器端保持一个由识别符标记的会话)。RTSP会话没有绑定传输层连接(如TCP连接)。在RTSP会话期间,RTSP客户端可以打开或关闭多个到服务器端的可靠传输连接以发出RTSP请求。但也可以使用无连接传输协议,比如UDP,来发送RTSP请求。

rtsp前缀要求使用可靠协议(在Internet上指TCP协议)发出命令,而rtspu前缀则说明使用不可靠协议(在Internet指UDP协议)。

RTSP建立并控制一个或几个时间同步的连续流媒体,比如音频或视频。尽管在连续媒体流中有可能插入控制流但RTSP本身通常并不发送连续媒体流。换言之,RTSP充当多媒体服务器的“网络遥控器”。RTSP所控制的流可能用到RTP,但RTSP的操作并不依赖用来传送连续媒体的传输机制。实时流协议在语法和操作上有意地类似于HTTP/1.1,但有重要的不同。

RTSP引入了很多新方法并且有不同的协议标识符。

  1. RTSP服务器在绝大多数默认情况下需要维持状态,而HTTP是无状态协议。

  2. RTSP客户机和服务器都可以发出请求。

  3. 数据由信带外的另一个协议传送(但有一个特例)。

  4. RTSP使用ISO 10646(UTF-8) 而不是ISO 8859-1,以配合当前HTML的国际化。

  5. RTSP的URI请求时总是包含绝对URI。而由于历史原因造成的后向兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的头部域中。

  6. 当只有一个IP的主机要提供多个文档树时,可使“虚拟主机”的实现更简单。

方法描述

OPTIONS:

OPTIONS请求在任何时候都可能产生,例如:当一个客户端准备尝试一个非标准的请求时。它不影响服务器的状态。

DESCRIBE:

服务器取得请求URL所标识的表示或者媒体对象的描述。它可能使用同意头部(Accept header)来指出客户端能理解的描述格式。服务器以所请求的资源的描述作为回应。DESCRIBE 回复-响应对继续了RTSP的媒体初始化阶段。DESCRIBE响应必须包含它所描述的资源的所有媒体初始化信息。

ANNOUNCE:

该方法方法有两个目的:

当从客户端发往服务器端,ANNOUNCE向服务器端上传请求URL所标识的表示或媒体对象的描述。当从服务器端发往客户端,ANNOUNCE实时更新会话描述。

当一个新的媒体流加入一个表示(例如:在一个现场表示活动期间)时,整个表示而不仅是所增加的部分,应该被重发,以便部分删除。

SETUP:

让服务器给流分配资源,启动RTSP会话。

PLAY与RECORD:

启动SETUP所分配的流的数据传输。

PAUSE:

临时暂停流,而不释放服务器资源。

GET_PARAMETER:

请求用于获取URI所标识的一个表示或者流的参数的值。回复和响应的内容被留给具体实现。没有实体的GET_PARAMETER可能被用于测试客户端或者服务器端是否现场直播("ping")。

TEARDOWN:

释放流占用的资源,RTSP会话停止,从服务器端退出。

 

在VLC播放器中的抓包(正常播放)-vlcServer

(粉红色部分是客户端发出的请求,黑色部分是服务器的响应,//后面是注释)

OPTIONS rtsp://219.219.218.224:554/m RTSP/1.0     

CSeq: 1

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Server: vlc 1.0.1

Content-Length: 0

Cseq: 1

Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER

DESCRIBE rtsp://219.219.218.224:554/m RTSP/1.0

CSeq: 2

Accept: application/sdp

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Content-type: application/sdp

Server: VLC Server

Content-Length: 544

CSeq: 2

Cache-Control: no-cache

v=0 //协议版本

o=- 78967746000 3 IN IP4 219.219.218.224 //拥有者,即会话的创建者

c=IN IP4 0.0.0.0  //连接信息,此处表示本机

t=0 0 //如果stop-time设置为0,则会话没有时间限制。如果start-time也设置为0,则会话被认为是永久的.

a=tool:vlc 1.0.1  //创建任务描述的工具的名称及版本号

a=range:npt=0-7.741 //视频的正常播放范围

m=audio 0 RTP/AVP 96  //音频流使用的协议 m=<media> <port>/<number of ports> <proto> <fmt> …

a=rtpmap:96 mpeg4-generic/32000 //a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]

a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1290; SizeLength=13;IndexLength=3; IndexDeltaLength=3; Profile=1; //a=fmtp:<format> <format specific parameters>

a=control:rtsp://219.219.218.224:554/m/trackID=0

m=video 0 RTP/AVP 97 //视频流使用的协议

a=rtpmap:97 MP4V-ES/90000

a=fmtp:97 profile-level-id=3; config=000001b022000001b50900000100000001200084456a285020f0a300;

a=control:rtsp://219.219.218.224:554/m/trackID=1

SETUP rtsp://219.219.218.224:554/m/trackID=0 RTSP/1.0

CSeq: 3

Transport: RTP/AVP;unicast;client_port=3106-3107

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Transport: RTP/AVP/UDP;client_port=3106-3107

Server: VLC Server

Content-Length: 0

Cseq: 3

Cache-Control: no-cache

Session: 11478

SETUP rtsp://219.219.218.224:554/m/trackID=1 RTSP/1.0

CSeq: 4

Transport: RTP/AVP;unicast;client_port=3108-3109

Session: 11478

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Transport: RTP/AVP/UDP;client_port=3108-3109

Server: VLC Server

Content-Length: 0

Cseq: 4

Cache-Control: no-cache

Session: 11478

PLAY rtsp://219.219.218.224:554/m RTSP/1.0

CSeq: 5

Session: 11478

Range: npt=0.000-

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Server: VLC Server

Content-Length: 0

CSeq: 5

Cache-Control: no-cache

Session: 11478;timeout=5

GET_PARAMETER rtsp://219.219.218.224:554/m RTSP/1.0

CSeq: 6

Session: 11478

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Server: VLC Server

Content-Length: 0

CSeq: 6

Cache-Control: no-cache

TEARDOWN rtsp://219.219.218.224:554/m RTSP/1.0

CSeq: 7

Session: 11478

User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)

RTSP/1.0 200 OK

Server: VLC Server

Content-Length: 0

CSeq: 7

Cache-Control: no-cache

Session: 11478;timeout=5

以上是利用RTSP协议进行流媒体播放的一个完整过程,其中setup,play是必须用到的方法,其它方法是可选。上述红色的标注部分是对sdp协议的一些主要参数进行的解释。

在RealPlayer中(无法播放)-VlcServer

OPTIONS rtsp://219.219.218.224:554 RTSP/1.0

CSeq: 1

User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)

Supported: ABD-1.0

ClientChallenge: ffa50e558e3986073c2da8888484e48c

ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686

CompanyID: 7S3jofzYT7kR2j8sdJG0vA==

GUID: 00000000-0000-0000-0000-000000000000

PlayerStarttime: [28/09/2009:19:04:13 08:00]

Pragma: initiate-session

RegionData: 0

RTSP/1.0 200 OK

Server: vlc 1.0.1

Content-Length: 0

Cseq: 1

Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER

DESCRIBE rtsp://219.219.218.224:554/jiao RTSP/1.0

CSeq: 2

Accept: application/sdp

User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)

Bandwidth: 3531079

ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686

GUID: 00000000-0000-0000-0000-000000000000

Language: zh-CN, zh, *

RegionData: 0

Require: com.real.retain-entity-for-setup

SupportsMaximumASMBandwidth: 1

RTSP/1.0 200 OK

Content-type: application/sdp

Server: VLC Server

Content-Length: 381

CSeq: 2

Cache-Control: no-cache

v=0

o=- 435378000 3 IN IP4 219.219.218.224

c=IN IP4 0.0.0.0

t=0 0

a=tool:vlc 1.0.1

a=range:npt=0-203.000

m=audio 0 RTP/AVP 14

a=rtpmap:14 MPA/90000

a=control:rtsp://219.219.218.224:554/jiao/trackID=0

m=video 0 RTP/AVP 96

a=rtpmap:96 MP4V-ES/90000

a=fmtp:96 profile-level-id=3; config=0000012008868400670c4e10c0518f;

a=control:rtsp://219.219.218.224:554/jiao/trackID=1

SETUP rtsp://219.219.218.224:554/jiao/trackID=0 RTSP/1.0

CSeq: 3

Transport: RTP/AVP;unicast;client_port=6970-6971;mode=play,RTP/AVP/TCP;unicast;mode=play

User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)

RTSP/1.0 200 OK

Transport: RTP/AVP/UDP;client_port=6970-6971 //此处没有返回服务器端口

vlcClient——Helix Server

RTSP响应:Transport: RTP/AVP;unicast;client_port=3190-3191;server_port=18044-18045 返回了服务器端口

rtp协议实现传输,服务器向客户端推送报文,客户端利用rtcp协议通过提供的端口接收报文。

realPlayer——Helix Server

RTSP响应:Transport: x-real-rdt/udp;client_port=6970;server_port=15728 返回了服务器端口。

利用real专有的rdt协议实现传输,客户端主动发起请求,服务器响应后通过返回的端口进行传输数据。

vlc——vlcServer

RTSP响应:Transport: RTP/AVP/UDP;client_port=2926-2927 vlcServer不返回服务器端口

rtp协议传输,服务器向客户端推送报文,客户端利用rtcp协议通过tcpmux端口(传输控制协议端口服务多路开关选择器,不关心发送请求时提供的什么样的服务)接收报文。

由以上可知,当realPlayer—–vlcServer时,服务器向客户端推送报文,但是realPlayer无法利用rtcp协议通过tcpmux端口来接收报文(需要一个确切的端口号),导致了无法播放。但是目前并没有找到合适的解决方案。

Server: VLC Server

Content-Length: 0

Cseq: 3

Cache-Control: no-cache

Session: 19169

TEARDOWN rtsp://219.219.218.224:554 RTSP/1.0

CSeq: 4

User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)

Session: 19169

RTSP/1.0 404 Not found

Content-Length: 311

Content-Type: text/html

经过抓包发现,在KMPlayer,暴风影音中的流媒体播放是借用了Real的库函数,所以与RealPlayer效果是一样的。

这篇关于RTSP 详细消息交互的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088629

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑