【发布时间】: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 Header和Sequence Extensionas 'CSD-0'?我没有找到任何有关如何为 MPEG2 编解码器设置CSD的信息。
标签: android android-mediacodec mpeg-2