我有一个正在开发的三星 Galaxy Tab(Android 2.2 Froyo 等)。我需要应用程序通过 IP 访问流,并且流来自Axis 241Q。Axis 设置为使用 .mp4 编码,我看到Android 原生支持 .mp4。Axis 服务器还提供 RTSP URI 以通过本地网络访问来自媒体播放器的流。
让我先说一下,我对视频编码标准和容器几乎一无所知,所以如果这是一个“no duh”问题,我深表歉意。
我的问题是,如何使用 Android VideoView 访问此流?我将用于在我的 Activity 的 onCreate() 中启动视图的 Cliff's Notes 版本的代码:
VideoView v = (VideoView) findViewById(R.id.feed);
Uri video = Uri.parse("rtsp://local/path/to/feed.amp");
v.setVideoURI(video);
v.start();
我已经将它与我在互联网上找到的一些测试 .3gp 流 URI 一起使用,它似乎工作正常,但我发现的所有测试流都是通过 HTTP 而不是 RTSP 完成的,所以也许我必须做一个让 RTSP 继续运行的更多魔法;我无法想象为什么会这样。我知道 Android 在其 MediaPlayers 的 URI 字符串资源中支持 RTSP。再说一次,我对流媒体视频一无所知,所以我假设它以完全相同的方式工作可能是错误的。
无论如何,当我尝试在本地访问 Axis 提要时,提要不会加载;我的假设是,这是使用 .amp 扩展名而不是 Android 文档中列出的扩展名造成的,但我完全不知道。我可以将此 URI 传递给 QuickTime 和其他此类媒体播放器并获得积极的结果,因此我还假设 .amp 文件扩展名并不奇怪。我很难真正找到原因,因为在 HTML 转义字符中出现“amp”时,谷歌搜索 .amp 和其他任何东西,即使使用引号和诸如此类的东西,也会产生一组乏味的结果。
第一个问题是,我是否遗漏了一些明显的东西?我不这么认为,但很有可能是这样。
第二个问题:有没有一种简单的方法可以访问这个 RTSP 流,而不必自己制定一个疯狂的解决方案?任何已经在野外并且可以使这对我更容易的现有和免费库将是一个巨大的帮助。我最初打算尝试gstreamer java 绑定,但在查看项目页面后,我发现 gstreamer 依赖于 Swing,我不相信 Swing 包含在 Android Java jar 中。