在Android 2.3.3上解码h264原始流



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

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

我读过关于OpenMAX和Stagefright的文章,但找不到关于流媒体的工作示例。

有人能告诉我正确的方向吗?

此外,我在几个地方读到了关于"frameworks/av/include/media/ststageflight/MediaSource.h">和其他来源的文章,但它们似乎既不在常规SDK中,也不在NDK中。这个来源在哪里?还有其他sdk吗?

提前谢谢。

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

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

如果你想构建一个更全面的播放器管道,你可以考虑像这里那样处理rtsp,或者像这里一样处理http。请注意,NuCachedSource2实现对于流输入是必不可少的,因为这提供了充当流数据的抖动的page cache实现。

请注意一个关键点:命令行stagefright实用程序不会呈现到屏幕上。因此,如果要进行渲染,则需要通过渲染实现完整的播放管道。

与此相关的是,如果您的输入是streaming input,那么标准播放器实现确实支持流式输入,正如这里所观察到的那样。你遇到过同样的问题吗?

正如fadden已经指出的,随着Android 4.xMediaCodec的引入,您的工作变得更加简单。

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

更新:媒体编解码器直到API 16(Android 4.1)才公开,所以这对2.3.3设备不起作用。

Stagefright和OpenMAX IL曾经是(现在仍然是)Android的内部组件。您可以在上找到代码(包括MediaSource.h)https://android.googlesource.com/platform/frameworks/av/+/master注意,媒体框架最近才转移到一个单独的"树"frameworks/av。在它成为"框架/基础"的一部分之前,例如。https://android.googlesource.com/platform/frameworks/base/+/姜饼/媒体/

最新更新