rtsp协议传输音视频,保持客户端和服务器连接的方法

系列文章目录

《rtsp协议理解》
《rtsp(udp、tcp)协议详解》



前言

👉本节总结了在实际开发项目中有关rtsp交互通信的细节部分,如何保持rtsp连接方法❓;有rtsp基础的话,会更好的阅读该文章。需要了解rtsp协议的童鞋,可以看往期的文章《rtsp协议理解》《rtsp(udp、tcp)协议详解》

为什么要监测rtsp的连接状态

在实际应用场景中,会遇到rtsp不正常断开的问题,除了正常的四次挥手断开连接,正常结束网络连接外,还会遇到意想不到的网络环境,这就需要监测设备和客户端之间的连接状态,当发现异常时可以及时处理。

使用RTSP协议中的GET_PARAMETER方法保持连接

GET_PARAMETER作用👇
在rtsp协议中该方法属于选择实现的,用作向服务器获取参数,一般用于获取时间范围。当发送的请求中没有相关请求参数时,则用作保持RTSP连接;在暂停流媒体播放,定期发送GET_PARAMETER作为心跳包维持连接。

请求参数格式👇
在这里插入图片描述
(1)RTSP URI表示请求的rtsp地址;
(2)RTSP version表示版本号;
(3)CSeq表示消息序列号;
(4)Authorization表示认证信息;
(5)User-Agent表示用户代理;
(6)Session表示会话ID,SETUP请求时server发回的session id。

请求抓包报文:👇
在这里插入图片描述
从抓包报文中看,没有携带任何请求信息,客户端请求的是一个空包,其左右就是为了维持rtsp连接,类似于心跳机制或ping的左右,服务端需要正确回复报文就可以。

服务端回复报文格式:👇
在这里插入图片描述
(1)RTSP Version表示RTSP的版本号;
(2)状态码表示服务器返回的状态,正常为200;
(3)状态描述为对状态码的描述,如对200状态码的描述为OK;
(4)Date为消息发送的日期。

服务端回复报文:👇
在这里插入图片描述
回复报文中需要携带设备的当前时间,由于请求的报文中没有额外的请求参数,所以也不需要回复其他参数。

👏小节:以上主要介绍了RTSP中的GET PARAMETER命令的交互,当客户端和服务器支持该命令的时候是可以使用这种方法来维持RTSP的连接。使用这种方式和交互报文的组包也是非常简单。那么你是否有疑问❔,当客户端或服务器不支持该命令时应该怎么处理呢😞,我们带着疑问往下看,下面就会讲到另外一种方式。

使用RTCP保持连接

RTCP👇
定义: Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。
作用: RTCP的主要功能是为应用程序提供会话质量或者广播性能质量的信息。每个RTCP信息包不封装声音数据或者电视数据,而是封装发送端(和 / 或者)接收端的统计报表。这些信息包括发送的信息包数目、丢失的信息包数目和信息包的抖动等情况,这些反馈信息反映了当前的网络状况,对发送端、接收端或者网络管理员都非常有用。RTCP规格没有指定应用程序应该使用这些反馈信息做什么,这完全取决于应用程序开发人员。例如,发送端可以根据反馈信息来调整传输速率,接收端可以根据反馈信息判断问题是本地的、区域性的还是全球性的,网络管理员也可以使用RTCP信息包中的信息来评估网络用于多目标广播的性能。

有关RTCP协议的具体内容暂不展开,先简单介绍,后期会更新上。这里重点讲述一下rtcp如何保持rtsp连接的。

RTCP报文类型:👇
RTCP 协议规范中定义了五种类型的 RTCP 包:
(1)接收⽅报告( RR )
(2)发送⽅报告( SR )
(3)源描述( SDES )
(4)成员管理( BYE )
(5)应⽤程序定义( APP )

在这里插入图片描述
客户端或服务端通过发送接收报告,对音视频流的质量进行控制,那么在这个交互的过程中,服务端可以知道客户端的连接是正常的,如果在一段时间内没有接收到客户端的RR包,那么就有可能网络环境发生了变化,服务端可以及时做出相应的操作,设置超时时间,如果在超时时间内没有接收到RR包,那么就认为连接状态发生的变化,可以主动断开连接或采取其他措施。
在这里插入图片描述

👏小节:使用RTCP的方式检测rtsp连接的方式,需要客户端和服务端支持RTCP协议,一般客户端会主动发送报告,也方便服务端控制检测rtsp连接状态。

总结

实际生产环境中,可以选择其中一种或两种方法检测rtsp的连接状态,如果是服务端程序的话,可能需要考虑的就比较多些,因为需要对接各个厂家的客户端,每个厂家的客户端处理方式不一样,都需要进行兼容。希望本篇文章对大家有帮助。
看官,点赞、收藏、关注 再走呗💗😚👍

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫手的热山药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值