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-0
、csd-1
和 csd-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
似乎正在返回索引,这些索引在从 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 工作正常。我已经询问 支持哪些分辨率。
我正在考虑使用 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-0
、csd-1
和 csd-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
似乎正在返回索引,这些索引在从 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 工作正常。我已经询问