7

我正在 Android 中编写一个 RTSP 客户端。我能够收到所有请求的响应,即

  1. 描述它发回 200 OK
  2. SETUP with transport: RTP/AVP:unicast:client_port=4568:4569 收到 200 OK 消息
  3. 发送 PLAY,并收到 OK 消息

之后如何获取音频和视频帧?

我在博客上搜索过,但都说要在 client_port 收听,但我没有收到任何数据包。

请让我知道我做得是否正确。

4

4 回答 4

4

您可能知道也可能不知道,但 Android 已经使用 VideoView 内置了对 RTSP 的支持。

http://developer.android.com/reference/android/widget/VideoView.html

这可能会减少您的开发时间......或者如果您尝试推出自己的 RTSP 堆栈,它可能完全没用。

于 2009-07-29T22:21:45.487 回答
3

RTSP 仅用于启动流式传输。它为您提供了真实流的 SDP 描述。您必须管理每个通道(音频/视频)的 RTCP 连接和 RTP 连接。要使用的端口是“client_port”端口。

从头开始编写 RTSP/RTCP/RTP 堆栈非常复杂。您可以查看在 c++ 中实现此类堆栈的live555库。

于 2009-08-09T10:14:42.737 回答
1

在网络上放置一个嗅探器,您应该会看到目标端口为 4568 的 UDP 数据包以您的 IP 地址为目标。

使用像样的嗅探器,您将能够看到 rtsp 对话框。也许你在答案中遗漏了一些东西

您还应该检查 SETUP 响应的内容,以查看您请求的端口是否被接受。

要检查的事情:

  • 在 UDP 中侦听。
  • 防火墙规则。
  • 播放请求的范围:不要指定任何内容以确保服务器将播放某些内容。

如果您在路由器或防火墙后面,您可能不会收到任何信息,因为您的路由器/防火墙不知道如何处理传入的 UDP 数据包

于 2009-10-08T13:12:48.670 回答
1

首先尝试使用安装在 LAN 中的本地 Darwin 流媒体服务器。这样防火墙就没有问题了。流媒体将起作用。

如果您想从外部服务器尝试,那么:

1)检查服务器响应中提到的client_ports,一些服务器建议的端口与请求的端口不同。你必须使用服务器建议的端口。

2)如果端口正确,那么您可以从每个UDP端口向服务器发送64字节的空包(称为“开门器”)。

3)如果以上两个都没有解决,请检查服务器端日志。服务器可能正在关闭 UDP 端口。

于 2009-11-11T05:17:47.753 回答