我正在编写一个Android的RTSP客户端。我能够收到所有请求的响应信息,即:
- DESCRIBE发送了200 OK响应信息
- SETUP传输方式:RTP/AVP:unicast:client_port=4568:4569接收到了200 OK的响应信息
- 发送PLAY操作,并收到OK的响应信息
之后如何获取音频和视频帧?
我在博客上进行了搜索,但所有内容都说要监听client_port,但我没有收到任何数据包。
请告诉我我是否做得正确。
你可能知道也可能不知道,但是Android内置了使用VideoView支持RTSP的功能。
http://developer.android.com/reference/android/widget/VideoView.html
这可能会缩短您的开发时间……但如果您想自己编写RTSP堆栈,则可能完全无用。首先,尝试在您的局域网内安装本地Darwin流媒体服务器。这样防火墙就不会成为问题,流媒体将正常工作。
如果您想从外部服务器尝试,则:
1)检查服务器响应中提到的客户端端口,有些服务器建议使用与请求的端口不同的端口。您必须使用服务器建议的端口。
2)如果端口正确,则可以从每个UDP端口向服务器发送64字节的空数据包(称为“门禁开启器”)。
3)如果以上两种方法都无法解决问题,请检查服务器端日志。服务器可能正在关闭UDP端口。
在网络上放置一个嗅探器,你应该能看到目标端口为4568的UDP数据包针对你的IP地址。
使用一个不错的嗅探器,你将能够看到rtsp对话。也许你在回答中漏掉了一些东西。
你还应该检查SETUP响应的内容,以查看你请求的端口是否被接受。
需要检查的事项:
如果你在路由器或防火墙后面,你可能收不到任何东西,因为你的路由器/防火墙不知道如何处理传入的UDP数据包。