在Android上播放RTP / TCP / AVP视频流

时间:2010-12-13 01:22:51

标签: android tcp video-streaming rtp

我们正在尝试在Android平台上播放视频流,但没有 成功。 使用VideoView,我们可以播放youtube移动视频(例如 这个网址工作得很好: RTSP://v3.cache7.c.youtube.com/CjYLENy73wIaLQnMYzt2FtQmqxMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYI6vr52RlLW1Sww=/0/0/0/video.3gp )

但是,我们需要播放一个流(来自给定的RTSP网址) 我们没有控制权。 RTSP服务器通过RTSP交付RTP / TCP / AVP数据包。 通过端口80上的HTTP隧道支持RTSP本身。 视频格式是MPEG4-Part2(H.263)。 而且,rtsp url只能使用一次;用钥匙建造 - 每次都是字符串。在桌面系统上,quicktime可以播放 流,VLC不能。

是否可以在Android设备上播放此类流 不知何故?

我只是在网上搜索内置(openCore?)RTP堆栈 支持UDP上的RTP,而不是TCP。这(仍然)是真的吗? 我可以以某种方式绕过这个问题吗?

谢谢! 图里安德拉斯

4 个答案:

答案 0 :(得分:0)

如果它只是UDP,您可以将数据包转发到本地UDP端口(或者每个端口转发到一个单独的端口,这可能会简化为内置RTP堆栈提供的内容)。

VLC无法播放可能是由于默认情况下不支持的音频编解码器。很难知道没有更多细节。

答案 1 :(得分:0)

我正在试验vlc, 如果你作为客户端正在打开rtsp:// serveradress:port / path vlc中的端口通常为554。 我从来没有使用过android,但如果你有vlc,你必须打开网络流并输入上面的地址格式。 试图找出发出的端口流不必是554。 还要确保您的防火墙不会阻止发出流的端口。

这里有一些vlc文档

vlc documentationvlc wiki

祝你好运

答案 2 :(得分:0)

我有一个部分解决方案。

我目前正在开展一个Ra& D项目,涉及从服务器到Android客户端的媒体RTP流媒体。

通过完成这项工作,我可以在这里找到我自己的名为smpte2022lib的库:http://sourceforge.net/projects/smpte-2022lib/

帮助这样的库(Java实现目前是最好的)你可能能够解析来自专业流设备,VLC RTP会话的RTP组播流......

我已经使用SMPTE-2022 2D-FEC或使用VLC生成的简单流,使用来自捕获的专业RTP流的流成功测试了它。

不幸的是我不能把代码片段放在这里,因为使用它的项目实际上是受版权保护的,但我确保你只需通过解析与RtpPacket构造函数有关的UDP流来使用它。

如果数据包是有效的RTP数据包(字节),它们将被解码。

此时,我将对RtpPacket的构造函数的调用包装到一个线程中,该线程实际上将解码的有效负载存储为媒体文件。然后我将这个文件作为参数调用VideoView。

交叉手指; - )

亲切的问候,

David Fischer

另见RTP on Android MediaPlayer

答案 3 :(得分:0)

我正在开发这个@ https://net7mma.codeplex.com/

它特别难看,因为RTSP Interleaved(RTP / AVP / TCP)需要不固定的内容长度,这对于apple提出的隧道方法不利。

根据Apple @ https://web.archive.org/web/20130501053040/https://developer.apple.com/quicktime/icefloe/dispatch028.html

您可以忽略Content-Length但我会看到更好的努力使用Multi-Part/Chunked响应选项并将每个$块作为块发布回来,因为一些代理将观察内容中的长度-length并关闭连接,在Interleaved RTP期间,这很糟糕!