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

问题描述 投票:0回答:4

我们正在尝试在Android平台上播放视频流,没有 成功。 使用VideoView,我们可以播放youtube移动视频(例如 这个网址工作得很好: 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。这(仍然)是真的吗? 我可以以某种方式绕过这个问题吗?

谢谢! 图里·安德拉斯

android tcp video-streaming rtp
4个回答
0
投票

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

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


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


0
投票

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

这里有一些 vlc 文档

vlc 文档vlc wiki

祝你好运


0
投票

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

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

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

您可以忽略内容长度,但我会看到更好的努力去使用

Multi-Part/Chunked
响应选项并将每个
$
块作为一个块发布回来,因为一些代理会观察内容长度中的长度并关闭连接在交错 RTP 期间这很糟糕!

© www.soinside.com 2019 - 2024. All rights reserved.