2

我正在尝试在“旧”Android 版本上解码原始 h264 流。我试过 MediaPlayer 类,似乎不支持流格式。

我可以在市场上的其他 Cam Viewer 应用程序上看到流,所以我认为必须有办法做到这一点,可能使用 NDK。

我已经阅读了有关 OpenMAX 和 Stagefright 的信息,但找不到有关流式传输的有效示例。

有人可以指出我正确的方向吗?

此外,我在几个地方阅读了有关“frameworks/av/include/media/stagefright/MediaSource.h”和其他来源的信息,但它们似乎既不在常规 SDK 中,也不在 NDK 中。这个来源在哪里?还有另一个sdk吗?

提前致谢。

更新:我收到一个 rtsp 连接。

4

3 回答 3

3

Stagefright and OpenMAX IL were (and still are) internal components of Android. You can find the code (including MediaSource.h) at https://android.googlesource.com/platform/frameworks/av/+/master Note that the media framework has moved to a separate "tree" frameworks/av only recently. Before it was part of 'frameworks/base', e.g. https://android.googlesource.com/platform/frameworks/base/+/gingerbread/media/

于 2014-01-09T09:36:29.527 回答
3

如果您只想执行一个简单的实验来验证某些功能,您可以考虑使用命令行stagefright实用程序。请考虑这种情况,您的流式输入可能不受支持。

如果您希望构建更全面的播放器管道,您可以考虑处理rtspas in herehttpas in here。请注意,NuCachedSource2实现对于流输入至关重要,因为它提供了一种page cache实现,它充当流数据的抖动。

注意一个关键点:命令行stagefright实用程序不会呈现到屏幕上。因此,如果您希望渲染,您将使用渲染实现完整的播放管道。

在相关说明中,如果您的输入是streaming input,则标准播放器实现确实支持流输入,如可以在此处观察到的那样。你遇到过同样的问题吗?

正如fadden 已经指出的那样,引入MediaCodecin使您的工作变得更加简单Android 4.x

于 2014-01-09T00:44:45.843 回答
3

您应该使用第三方库,例如android-h264-decoder,它使用 JNI 来提高性能!也看看这个lib Intel

更新:媒体编解码器直到 API 16 (Android 4.1) 才公开,因此不适用于 2.3.3 设备。

于 2014-01-08T04:40:39.450 回答