Android媒体编解码器之HEVC

4

我正在研究使用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获取。

有人成功在Android上解码HEVC视频吗?


更新以添加我在logcat中获得的错误。 - Jack
3个回答

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。

谢谢,这很有用,能看到vlc的例子!我的数据包已经是annex b格式(每个数据包都以0x00000001或0x000001开头)。我注意到在VLC代码中所有参数集都被传递为“csd-0” - 我尝试了一下,但仍然遇到了同样的问题,没有输出。 - Jack

1
问题似乎出在分辨率上 - 512x216无法正常工作并出现了上述症状,但1920x800可以正常工作。我已经提出了另一个问题,询问支持哪些分辨率。

0

你可能还想看看 MX Player,它可以在我的 Nexus 7 上播放 HEVC。但是,由于当前 Android 硬件不支持 HEVC,高清内容的播放会出现卡顿。640p 及以下分辨率的视频可以正常播放 - 尽管在一些性能较差的 Android 设备上可能会有问题。


很遗憾,我认为MX Player不是开源的 :/ - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接