繁体   English   中英

如何修改通过C#代理传递的RTSP数据

[英]How to modify RTSP data as it is being passed through c# proxy

我正在为使用RTSP传输视频内容的应用程序编写代理。 它的基本工作原理如下:

  • 应用程序(服务器)在本地主机端口8554上提供RTSP流。
  • 希望连接到此流的客户端在本地主机端口8553上连接到我的代理。
  • 我的代理服务器连接到本地主机端口8554上的RTSP流(服务器),并在客户端和服务器之间传递网络流量(字节)。 (我根本不检查数据包,我只是读取一个流中的字节,然后将这些字节传递给另一流。)

由于RTSP同时使用TCP和UDP通信,因此我必须在代理服务器上同时具有这两种协议的侦听器,但是,我还没有实现UDP部分。 目前,我只是在研究TCP,该TCP本质上处理“握手”以开始视频传输。 通过UDP进行实际的视频传输将是我的下一步。

现在,我的问题是:我成功地将消息(“ OPTIONS”,“ DESCRIBE”,“ SETUP等”)与代理一起传递。问题是消息的内容本身包含有关流服务器的某些信息。当服务器响应客户端的“ DESCRIBE”请求时,它返回以下信息:

Content-Base: rtsp://127.0.0.1:8554/nurv/

在将其传递给客户端之前,我需要将其在代理服务器上更改为:

Content-Base: rtsp://127.0.0.1:8553/nurv/

因为目前,当客户端发出后续的“ SETUP”请求时,它会请求:

SETUP rtsp://127.0.0.1:8554/nurv/track1 RTSP/1.0

这意味着对于实际的流,它绕过了端口8553上的代理,并直接连接到8554上的流。

如何修改代理上的消息,以使对实际服务器的引用(即127.0.0.1:8554)被对代理的引用(即127.0.0.1:8553)代替? 显然,对通过代理传递的每条消息进行字符串搜索不是最佳选择,因为这将意味着在重新打包并继续发送之前先对每条消息进行拆包和检查。

我已经解决了这个问题。 由于RTSP协议的TCP连接通常仅包含控制消息,因此此处传递的消息数量不是很多(如果是开始回放的简单请求,则从每一侧发送5或6条消息,最后,结束)。 大流量将通过UDP连接处理。

这样,如果我解压缩,处理和重新打包通过TCP发送的消息,就不会引起较大的性能问题。 因此,我只是阅读了该程序包,根据需要替换了必要的IP地址,仅此而已。 我还需要执行此操作以读取客户端和服务器协商的UDP端口,以便我的代理可以介于两者之间。 由于TCP上的流量很低,因此我能够做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM