在安卓设备上播放RTP/TCP/AVP视频流

3
我们正在尝试在Android平台上播放视频流,但没有成功。使用VideoView,我们能够播放Youtube移动视频(例如,此URL可以正常工作:rtsp://v3.cache7.c.youtube.com/CjYLENy73wIaLQnMYzt2FtQmqxMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYI6vr52RlLW1Sww=/0/0/0/video.3gp),但是,我们需要播放一个来自特定RTSP URL的流,对其我们没有控制权。RTSP服务器通过RTSP交错传递RTP/TCP/AVP数据包。RTSP本身支持通过端口80的HTTP隧道传输。视频格式为MPEG4-Part2(H.263)。此外,rtsp url只能使用一次;每次都要用一个关键字符串进行构建。在桌面系统上,Quicktime可以播放该流,VLC则不行。是否有可能在Android设备上以某种方式回放这样的流?通过搜索谷歌,我发现内置(OpenCore?)RTP堆栈仅支持UDP上的RTP,而不支持TCP。这是否仍然正确?我是否可以绕过这个问题?谢谢!Turi András

YouTube视频的RTSP链接在任何Android版本中都可以使用吗?我无法播放单个视频。我使用http://gdata.youtube.com/feeds/api/videos/获取YouTube视频的RTSP链接。 - Hiren Dabhi
4个回答

0

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

问题在于,RTSP Interleaved (RTP/AVP/TCP) 需要一个不固定的内容长度,这对于苹果提出的隧道方法并不好。

根据苹果公司的说法 @ https://web.archive.org/web/20130501053040/https://developer.apple.com/quicktime/icefloe/dispatch028.html

你可以忽略 Content-Length,但我建议使用 Multi-Part/Chunked 响应选项,并将每个 $ 块作为分块发送回来,因为一些代理会观察 content-length 中的长度并关闭连接,在 Interleaved RTP 过程中这是不好的!


0

我对你有一个部分的解决方案。

我目前正在从服务器向Android客户端进行RTP流媒体开发项目中研究和开发。

通过这项工作,我为自己的库smpte2022lib做出了贡献。您可以在此处找到该库:http://sourceforge.net/projects/smpte-2022lib/

借助这个库(Java实现目前是最好的),您可以解析来自专业流媒体设备、VLC RTP会话等的RTP组播流。

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

不幸的是,由于该项目受版权保护,我无法在这里放置代码段,但我向您保证,您只需使用RtpPacket构造函数解析UDP流即可轻松使用它。

如果包是有效的RTP包(即字节),它们将被解码为此类包。

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

祝好运 ;-)

亲切的问候,
David Fischer 还请查看在Android MediaPlayer上进行RTP

0
如果只是UDP,您可以将数据包转发到本地UDP端口(或每个单独一个端口,这可能会简化将其提供给内置RTP堆栈的操作)。
VLC无法播放可能是因为它不支持默认的音频编解码器。没有更多细节很难确定。

0

我正在尝试使用VLC, 如果您作为客户端打开rtsp://serveradress:port/path 在VLC中,端口通常为554。 我从未使用过Android,但是如果您在那里有VLC,则必须打开网络流并输入上述地址格式。 尝试找出发出流的端口不一定是554。 还要确保您的防火墙不会阻止发出流的端口。

这里有一些VLC文档

VLC文档VLC维基

祝你好运


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