适用于HEVC的Android MediaCodec

时间:2015-01-19 16:01:10

标签: android android-ndk mediacodec hevc

我正在研究使用android MediaCodec类来解码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始终返回-1。在dequeueInputBuffer获取queueInputBuffer之前,dequeueOutputBuffer似乎正在返回{{1}}排队的索引。

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

3 个答案:

答案 0 :(得分:2)

VLC至少支持它,虽然我不确定它已经测试了哪些解码器(我可以从你的日志片段中看到你正在使用SW解码器)。据我所知,你需要关注的唯一细节是以附件b格式(带开始代码)而不是mp4 / mkv格式传递数据包 - 就像H264一样。

参见例如关于此问题的一些例子,http://git.videolan.org/?p=vlc.git;a=commitdiff;h=86630a1http://git.videolan.org/?p=vlc.git;a=commitdiff;h=5e19ce93http://git.videolan.org/?p=vlc.git;a=commitdiff;h=7b79a086

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

答案 1 :(得分:0)

可能还想看一下在我的Nexus 7上播放HEVC的MX播放器。但是,如果没有任何当前Android硬件支持HEVC,高清内容播放太过紧张。 640p和更低的分辨率可以正常运行 - 尽管可能不是大多数具有较低CPU能力的Android设备。

答案 2 :(得分:0)

问题似乎与解决方案有关 - 512x216无效并且出现上述症状,但1920x800工作正常。我已经问过another question支持哪些解决方案。