我正在尝试在“较旧的”Android版本上解码原始h264流。 我尝试过MediaPlayer类,似乎不支持流格式。
我可以看到市场上其他Cam Viewer应用程序的流,所以我认为必须有办法,可能使用NDK。
我读过有关OpenMAX和Stagefright的内容,但找不到有关流媒体的实例。
有人可以指出我正确的方向吗?
另外,我正在几个地方阅读“frameworks / av / include / media / stagefright / MediaSource.h”和其他来源,但它们似乎都不在常规SDK或NDK。 这个来源在哪里?还有另一个sdk吗?
提前致谢。
更新:我正在接收rtsp连接。
答案 0 :(得分:3)
您应该使用第三方库,例如 android-h264-decoder ,它们使用JNI来提高性能!另请查看此lib Intel
更新:Media codec在API 16(Android 4.1)之前未公开,因此不适用于2.3.3设备。
答案 1 :(得分:3)
如果您只想执行简单的实验来验证某些功能,可以考虑使用命令行stagefright
实用程序。请注意可能不支持流媒体输入的condition。
如果您希望构建更全面的播放器管道,可以考虑rtsp
中的http
或NuCachedSource2
中page 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/