安卓中的RTSP客户端

7

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

  1. DESCRIBE发送了200 OK响应信息
  2. SETUP传输方式:RTP/AVP:unicast:client_port=4568:4569接收到了200 OK的响应信息
  3. 发送PLAY操作,并收到OK的响应信息

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

我在博客上进行了搜索,但所有内容都说要监听client_port,但我没有收到任何数据包。

请告诉我我是否做得正确。

4个回答

4

它在设备和模拟器上都无法工作。它在PLAYER_INIT阶段以PVMFFailure失败。 - Vinay
1
我发现它在模拟器上无法工作,但在我手头的所有设备上都能正常工作。其中一些设备要求您在清单中设置唤醒锁权限(想象一下)。 - haseman
我已经在清单文件中设置了唤醒锁权限。但仍然出现PVMFFailure错误。 - Emre Köse

3
RTSP仅用于启动流媒体,它会提供真实流的SDP描述。您需要为每个通道(音频/视频)管理一个RTCP连接和RTP连接。使用的端口是“client_port”端口。
从头开始编写RTSP / RTCP / RTP堆栈相当复杂。您可以查看live555库,该库使用c ++实现了这样的堆栈。

1

首先,尝试在您的局域网内安装本地Darwin流媒体服务器。这样防火墙就不会成为问题,流媒体将正常工作。

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

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

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

3)如果以上两种方法都无法解决问题,请检查服务器端日志。服务器可能正在关闭UDP端口。


1

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

使用一个不错的嗅探器,你将能够看到rtsp对话。也许你在回答中漏掉了一些东西。

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

需要检查的事项:

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

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


SETUP响应是正确的,即使用200 OK成功。如何使用嗅探器?是否有关于在Android平台上使用它的文档? - Vinay
如果你在路由器或防火墙后面,可能收不到任何东西,因为你的路由器/防火墙不知道如何处理传入的UDP数据包。那么如何处理这种情况呢?目前我就在防火墙后面。 - Vinay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接