【问题标题】:Android MediaCodec usage for decoding MPEG2 video streamAndroid MediaCodec 用于解码 MPEG2 视频流
【发布时间】:2014-05-16 22:37:54
【问题描述】:

我正在尝试使用MediaCodec API 来解码和显示MPEG2 编码流。我使用MediaExtractor 从 MPEG 传输流 (TS) 中提取流。

我注意到解码器的configure() 在我尝试过的所有设备上都失败了 - Nexus7(2012)、Nexus7(2013)、Nexus10,错误代码为 0x80001001。

使用configure() API 时唯一可能出错的参数是提供的MediaFormat 配置,这是从Android MediaExtractor 获得的。我不明白是什么问题导致了这个问题被注意到。

MediaFormat 对象中存在的配置参数是:

            1. `CSD-0` - Containing Sequence header and sequence extension header.

                            Seq_Hdr    - 00 00 01 B3 2D 01 E0 24 09 C4 23 80 

                            Seq_extnsn - 00 00 01 B5 14 8A 00 01 00 80

            2. Height - 480

            3. Width - 720

            4. KEY_MIME - `video/mpeg2`

该错误在所有设备上都有些相似,这可能意味着该错误可能源自MediaCodec 堆栈中的一个公共实体。这是来自 Nexus7 (2013) 的错误。 (0x80001001 – OMX_ErrorUndefined)

E/ACodec  ( 6504): [OMX.qcom.video.decoder.mpeg2] configureCodec returning error -1010
E/MediaCodec( 6504): Codec reported an error. (omx error 0x80001001, internalError -1010)

这种行为是因为MPEG2 不是 Android 平台支持的强制编解码器,还是我做错了什么?任何有关MPEG2 解码器行为的信息将不胜感激。

【问题讨论】:

  • 看起来在 Android 4.4 及更早版本上,MediaCodec API 不支持 MPEG2。如果您查看 MXPlayer 的 HW+ logcat 输出,似乎 MXPlayer 直接使用 libstagefright(或 C++ API),而不是 MediaCodec API。
  • 同时查看 ACodec.cpp:SetComponentRole(),它看起来像 Android 检查 mime 类型,如果 mime 不在列表中,则返回不支持的错误 (-1010)。 (提示:mpeg2 不在列表中)
  • 我有同样的问题,我猜它与csd有关。问题是,你怎么知道 MPEG2 的编解码器期望 Sequence HeaderSequence Extensionas 'CSD-0'?我没有找到任何有关如何为 MPEG2 编解码器设置 CSD 的信息。

标签: android android-mediacodec mpeg-2


【解决方案1】:

在您的设备上,查看/system/etc/media_codecs.xml 以查看列表。

我的理解是,目前的 Nexus 设备不支持 MPEG-2 视频压缩。

【讨论】:

  • 我查看了编解码器列表,并且 MPEG-2 出现在此列表中。事实上,MX Player 在此设备上支持 MPEG-2 剪辑的 HW+ 模式,这意味着该设备支持硬件加速 MPEG-2 解码。
  • 列表条目是什么样的?在哪个设备上?
  • 啊,在 Nexus 7 (2013) 的 <Decoders> 部分中找到了它。我在 N5 或 N10 上看不到它。
猜你喜欢
  • 1970-01-01
  • 2017-12-16
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2020-03-21
  • 2015-01-02
  • 1970-01-01
相关资源
最近更新 更多