Android HEVC 的 MediaCodec

Android MediaCodec for HEVC

我正在考虑使用 android MediaCodec class 来解码 HEVC。有没有这样做的项目示例?

目前我对解码器的配置如下:

AMEDIAFORMAT_KEY_MIME: "video/hevc"
AMEDIAFORMAT_KEY_MAX_HEIGHT: 4320
AMEDIAFORMAT_KEY_MAX_WIDTH: 8192
AMEDIAFORMAT_KEY_HEIGHT: 1600
AMEDIAFORMAT_KEY_WIDTH: 3840
AMEDIAFORMAT_KEY_FRAME_RATE: 24
AMEDIAFORMAT_KEY_PUSH_BLANK_BUFFERS_ON_STOP: 1

使用此设置时,没有视频输出。我也试过将 csd-0csd-1csd-2 分别设置为 VPS、SPS 和 PPS,但没有成功。

我在控制台中收到以下错误,但已确定它与此无关:

01-19 15:40:36.048: E/OMXNodeInstance(17230): OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
01-19 15:40:36.048: E/ACodec(17230): [OMX.google.hevc.decoder] storeMetaDataInBuffers failed w/ err -2147483648

我发现 dequeueOutputBuffer 总是返回 -1dequeueInputBuffer 似乎正在返回索引,这些索引在从 dequeueOutputBuffer.

获得之前已由 queueInputBuffer 排队

有没有人设法在 Android 上解码 HEVC 视频?

VLC 至少支持它,尽管我不确定它用哪些解码器进行了测试(我可以从您的日志片段中看出您使用的是 SW 解码器)。据我所知,您需要注意的唯一细节是以附件 b 格式(带有起始代码)而不是 mp4/mkv 格式传递数据包 - 就像 H264 一样。

参见例如http://git.videolan.org/?p=vlc.git;a=commitdiff;h=86630a1, http://git.videolan.org/?p=vlc.git;a=commitdiff;h=5e19ce93 and http://git.videolan.org/?p=vlc.git;a=commitdiff;h=7b79a086 一些例子。

此外,关于 storeMetaDataInBuffers 失败的日志消息与此无关,无需担心,请参阅 http://bigflake.com/mediacodec/ 处的问题 12。

可能还想看看 MX Player,它可以在我的 Nexus 7 上播放 HEVC。但是,由于目前 Android 没有任何对 HEVC 的硬件支持,高清内容播放太不稳定了。 640p 和更低的分辨率可以很好地播放 - 尽管在大多数 Android 具有较小 cpu 功能的设备中可能不是这样。

问题似乎与分辨率有关 - 512x216 不工作并出现上述症状,但 1920x800 工作正常。我已经询问 支持哪些分辨率。