【发布时间】: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)?显然,对通过代理传递的每条消息进行字符串搜索并不是最佳选择,因为这意味着在重新打包和发送之前解包和检查每条消息。
【问题讨论】: