有没有这样的RTSP Ping?

我目前正在开发一个WinForm应用程序,使用C#中的RTSP协议从IP摄像机流式传输video。 一切都很好。 该应用程序的部分要求包括检查IP摄像头是否在线的function。

所以我使用System.Net.NetworkInformation.Ping类来ping IPfunction。 假设相机的RTSPurl如下rtsp:// [CAMERA IP] :554 / Master0-RTSP / 1.0,我只需要提取[CAMERA IP]部分并使用Ping类来查看相机是否在线使用其IP。

最初,它可以工作直到出现问题,例如,如果输入的IP可能不是预期的IP摄像机(例如计算机的IP),如果输入的设备的输入IP在线,则pingfunction仍然有效。

我试图搜索像RTSP ping这样的东西但找不到。 希望对此事有任何建议或意见。 非常感谢C#中的任何示例。 谢谢你的关注。

OPTIONS可能有效,但标准指定正确的方法是使用GET_PARAMETER

RFC2326清楚地概述了这一点

http://www.ietf.org/rfc/rfc2326.txt

10.8 GET_PARAMETER

GET_PARAMETER请求检索URI中指定的表示或流的参数值。 回复和响应的内容留给实现。 没有实体主体的GET_PARAMETER可用于测试客户端或服务器活跃度(“ping”)。

虽然服务器可能不支持GET_PARAMETER ,但是没有办法告诉该服务器如何对OPTIONS请求作出反应,该请求甚至不需要sessionID。 因此无法保证它会使您现有的会话保持活跃状态​​。

通过阅读有关OPTIONS请求的相同RFC,可以清楚地看到这一点

10.1选项

该行为与[H9.2]中描述的行为相同。 可以在任何时间发出OPTIONS请求,例如,如果客户端将要尝试非标准请求。 它不会影响服务器状态。

例:

  C->S: OPTIONS * 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 

请注意,这些必然是虚构的function(人们希望我们不会故意忽略一个真正有用的function,以便我们可以在本节中有一个很好的例子)。

如果不支持GET_PARAMETER,那么您将发出一个PLAY请求,其中包含您要保持活动的会话的SessionId。

这应该工作,即使OPTIONS不是因为PLAY尊重会话ID而且如果你已经在播放那么没有不利影响。

对于C#RtspClient,请参阅我的项目@ https://net7mma.codeplex.com/

关于CodeProject的文章@ http://www.codeproject.com/Articles/507218/Managed-Media-Aggregation-using-Rtsp-and-Rtp

关于C#中的RTSP,请参阅此线程在C#中使用RTMP或RTSP协议

关于Ping …你可以实现为DESCRIBE操作…但要注意不要太频繁,设备应该受到影响。

http://www.ietf.org/rfc/rfc2326.txt

您可能希望在没有video/音频RTP流的情况下保持辅助RTSP会话,检查套接字连接的良好信誉并定期发送OPTIONSDESCRIBE命令,而不是ICMP ping,例如每分钟一次,以查看设备是否存在反应灵敏。

有人建议使用GET_PARAMETER而不是选项,但这是次要的方法。 OPTIONS是必需的, GET_PARAMETER不是。 两者都有不同的用途。 两者都有小的服务器端执行费用。 OPTIONS显然是两者中较好的。

某些服务器可能不支持设置流参数,因此不支持GET_PARAMETER和SET_PARAMETER。