3

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

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

是否可以以某种方式在 Android 设备上播放这样的流?

我读了谷歌搜索,内置(openCore?)RTP 堆栈仅支持 RTP over UDP,不支持 TCP。这(仍然)是真的吗?我能以某种方式绕过这个问题吗?

谢谢!图里安德拉斯

4

4 回答 4

0

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

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

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

借助此类库(Java 实现是目前最好的库),您可以解析来自专业流媒体设备、VLC RTP 会话的 RTP 多播流......

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

不幸的是,我不能在这里放一个代码片段,因为使用它的项目实际上是受版权保护的,但我确保你可以通过解析 RtpPacket 构造函数帮助的 UDP 流来简单地使用它。

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

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

交叉手指;-)

亲切的问候,

大卫·费舍尔

另请参阅Android MediaPlayer 上的 RTP

于 2013-02-27T18:19:46.170 回答
0

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

它特别难看,因为 RTSP 交错 (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 期间这很糟糕!

于 2014-06-11T18:11:51.210 回答
0

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

在这里你有一些 vlc 文档

vlc 文档vlc wiki

祝你好运

于 2011-12-27T11:08:04.040 回答
0

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

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

于 2011-01-08T03:57:01.000 回答