2

我的要求是能够在我的 Android 应用程序中播放实时视频流。流将通过 RTSP/RTP。我无法控制来源;并且看起来 RTP 有效负载不符合开发人员指南视频编码建议中列出的要求。具体来说,视频源似乎违反了以下要求:

对于 3GPP 和 MPEG-4 容器,moov 原子必须在任何 mdat 原子之前,但必须在 ftyp 原子之后

基本上,看起来我们获得了原始 H264 数据(未包装在容器中)。

现在,

  1. 我无法使用MediaPlayerAndroid 2.2 Samsung Galaxy Tab 上的课程播放此流。
  2. 但是,我可以在 Android 2.3 Samsung Galaxy S 上播放它。
  3. 一些第三方应用程序(MX Player)也能够在 2.2 Galaxy Tab 上播放相同的流。

在上面的案例 2 和 3 中,DDMS 日志都指出内部使用了 Stage Fright 框架,而在案例 1 中,正在使用 PVP(即 OpenCore)。这一切让我得出结论:

  1. OpenCore 框架无法播放我的流。
  2. 我的流可以使用 Stagefright 播放 - 即使在 Android 2.2 上

这让我想到了我的问题:

将 stagefright 移植到 Android 2.2 涉及什么?

此外,我在 AOSP 源代码中注意到,新版本NuPlayer现在负责播放 RTSP 流。问题:

  1. 是否有可能移植NuPlayer回旧版本的 Android(2.2 或 2.3)?
  2. 如果是这样,我需要做什么才能在我的应用程序中使用它?

我知道我可以查看源代码并使用 NDK 来构建 stagefright 和 NuPlayer(尽管我从未在 NDK 级别工作过)。我不知道我的应用程序如何使用这个 NuPlayer。

4

1 回答 1

0

我遇到了类似的问题,但我找到了一种解决方案。您必须修补系统 build.prob 文件。请看看我的问题,我也发布了我的答案。

默认情况下,stagefright 在 build.prop 文件中保持禁用状态。您必须启用它并重新启动设备。然后,您可以访问支持您的要求的 stagefright 框架。

对于 RTSP 流,请在远程机器中下载 live555MediaServer.exe 文件,并将一些媒体文件保存在同一位置。打开 live555MediaServer.exe 文件。

使用以下代码 -

private final String RTSP_FILE = "rtsp://<remote machine IP>/<file name>";

mVideoView.setVideoURI(Uri.parse(RTSP_FILE));
于 2012-05-15T08:41:45.837 回答