我的要求是能够在我的 Android 应用程序中播放实时视频流。流将通过 RTSP/RTP。我无法控制来源;并且看起来 RTP 有效负载不符合开发人员指南视频编码建议中列出的要求。具体来说,视频源似乎违反了以下要求:
对于 3GPP 和 MPEG-4 容器,moov 原子必须在任何 mdat 原子之前,但必须在 ftyp 原子之后
基本上,看起来我们获得了原始 H264 数据(未包装在容器中)。
现在,
- 我无法使用
MediaPlayer
Android 2.2 Samsung Galaxy Tab 上的课程播放此流。 - 但是,我可以在 Android 2.3 Samsung Galaxy S 上播放它。
- 一些第三方应用程序(MX Player)也能够在 2.2 Galaxy Tab 上播放相同的流。
在上面的案例 2 和 3 中,DDMS 日志都指出内部使用了 Stage Fright 框架,而在案例 1 中,正在使用 PVP(即 OpenCore)。这一切让我得出结论:
- OpenCore 框架无法播放我的流。
- 我的流可以使用 Stagefright 播放 - 即使在 Android 2.2 上
这让我想到了我的问题:
将 stagefright 移植到 Android 2.2 涉及什么?
此外,我在 AOSP 源代码中注意到,新版本NuPlayer
现在负责播放 RTSP 流。问题:
- 是否有可能移植
NuPlayer
回旧版本的 Android(2.2 或 2.3)?- 如果是这样,我需要做什么才能在我的应用程序中使用它?
我知道我可以查看源代码并使用 NDK 来构建 stagefright 和 NuPlayer(尽管我从未在 NDK 级别工作过)。我不知道我的应用程序如何使用这个 NuPlayer。