【问题标题】:Decoding h264 raw stream on Android 2.3.3在 Android 2.3.3 上解码 h264 原始流
【发布时间】:2014-01-26 00:44:22
【问题描述】:

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

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

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

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

另外,我在几个地方阅读了有关 "frameworks/av/include/media/stagefright/MediaSource.h" 和其他来源的信息,但它们似乎都没有出现在常规 SDK 或 NDK。 这个来源在哪里?还有其他sdk吗?

提前致谢。

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

【问题讨论】:

  • 您可能需要使用 ffmpeg 等第三方库。相关的 Android 组件直到 API 16 才公开。

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


【解决方案1】:

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

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

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

在相关说明中,如果您的输入是 streaming input,则标准播放器实现确实支持流输入,如 here 所示。你遇到过同样的问题吗?

正如fadden 已经指出的那样,通过在Android 4.x 中引入MediaCodec,您的工作变得更加简单。

【讨论】:

    【解决方案2】:

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

    更新:Media codec 直到 API 16 (Android 4.1) 才公开,因此不适用于 2.3.3 设备。

    【讨论】:

    • MediaCodec 直到 API 16 (Android 4.1) 才公开,因此不适用于 2.3.3 设备。
    • +1 获取信息。 android-h264-decoder 呢?更新了答案!
    • 我找不到任何关于 android-h264-decoder 如何工作的文档。看代码,我猜我需要一些东西来解包 rtsp 包……我说的对吗?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 1970-01-01
      • 2014-02-06
      • 2020-08-12
      • 1970-01-01
      • 2017-12-16
      • 2013-12-03
      • 1970-01-01
      • 2014-01-13
      相关资源
      最近更新 更多