我们正在尝试在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。这(仍然)是真的吗? 我可以以某种方式绕过这个问题吗?
谢谢! 图里·安德拉斯
如果只是 UDP,您可以将数据包转发到本地 UDP 端口(或将每个数据包转发到单独的端口,这可能会简化馈送到内置 RTP 堆栈的操作)。
VLC 无法播放它可能是由于默认情况下不支持的音频编解码器。没有更多细节很难知道。
我为你提供了部分解决方案。
我目前正在从事一个 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。
交叉手指;-)
亲切的问候,
大卫·费舍尔
我现在正在开发这个@ https://net7mma.codeplex.com/
它特别难看,因为 RTSP Interleaved (RTP/AVP/TCP) 需要不固定的内容长度,这不利于苹果提出的隧道方法。
您可以忽略内容长度,但我会看到更好的努力去使用
Multi-Part/Chunked
响应选项并将每个$
块作为一个块发布回来,因为一些代理会观察内容长度中的长度并关闭连接在交错 RTP 期间这很糟糕!