【问题标题】:How to modify RTSP data as it is being passed through c# proxy如何在通过 c# 代理传递时修改 RTSP 数据
【发布时间】:2013-05-15 05:58:23
【问题描述】:

我正在为使用 RTSP 流式传输视频内容的应用程序编写代理。它基本上是这样工作的:

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

由于 RTSP 使用 TCP 和 UDP 通信,我必须在代理上为这两种协议设置侦听器,但是,我还没有实现 UDP 部分。目前我只是在 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)?显然,对通过代理传递的每条消息进行字符串搜索并不是最佳选择,因为这意味着在重新打包和发送之前解包和检查每条消息。

【问题讨论】:

    标签: c# proxy rtsp


    【解决方案1】:

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

    因此,如果我对通过 TCP 发送的消息进行解包、操作和重新打包,它不会导致大的性能问题。所以我只是阅读了软件包,根据需要替换了必要的 IP 地址,仅此而已。我还需要这样做来读取客户端和服务器协商的 UDP 端口,以便我的代理可以介于两者之间。由于 TCP 上的流量很低,我可以这样做。

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多