在Android 2.3.3上解码h264原始流

时间:2014-01-08 04:02:34

标签: android android-ndk h.264 stagefright rtsp-client

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

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

我读过有关OpenMAX和Stagefright的内容,但找不到有关流媒体的实例。

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

另外,我正在几个地方阅读“frameworks / av / include / media / stagefright / MediaSource.h”和其他来源,但它们似乎都不在常规SDK或NDK。 这个来源在哪里?还有另一个sdk吗?

提前致谢。

更新:我正在接收rtsp连接。

3 个答案:

答案 0 :(得分:3)

您应该使用第三方库,例如 android-h264-decoder ,它们使用JNI来提高性能!另请查看此lib Intel

更新:Media codec在API 16(Android 4.1)之前未公开,因此不适用于2.3.3设备。

答案 1 :(得分:3)

如果您只想执行简单的实验来验证某些功能,可以考虑使用命令行stagefright实用程序。请注意可能不支持流媒体输入condition

如果您希望构建更全面的播放器管道,可以考虑rtsp中的httpNuCachedSource2page cache的处理。请注意stagefright实现对于流输入至关重要,因为这提供了streaming input实现,其充当流数据的抖动。

请执行 note 一个关键点:命令行MediaCodec实用程序无法呈现到屏幕上。因此,如果您希望渲染,您将使用渲染实现完整的回放管道。

在相关的说明中,如果您的输入是Android 4.x,则标准播放器实现确实支持流输入,可以观察here。您是否面临同样的问题?

正如fadden已经指出的那样,通过在{{1}}中引入{{1}},您的工作变得更加简单。

答案 2 :(得分:3)

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

相关问题