gpt4 book ai didi

android - 使用 MediaCodec 和 MTK Codec 编码时选择 H264 Profile

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:45 25 4
gpt4 key购买 nike

我们有一个 Android 应用程序可以将视频编码为 H264。在所有以前尝试过的 Android 设备上,它都会编码为我需要的基线配置文件。

在 Lenovo Yoga 10 上,编解码器是 OMX.MTK.VIDEO.ENCODER.AVC。这会将视频编码为 High Profile,这会给接收设备带来问题。

我正在使用 MediaCodec。似乎没有办法设置要使用的配置文件。

有什么办法吗?编解码器确实声称支持基线配置文件,但没有提供使用它的方法。是否有针对此的编解码器特定参数?

最佳答案

您可以尝试将 key profile 添加到您的 MediaFormat,值为 1 (OMX_VIDEO_AVCProfileBaseline)。如果这样做,您可能还需要添加键 level,其级别值也与您的分辨率相匹配(使用来自 OMX AVC 级别常量的值)。

虽然我不确定这个编解码器是否真的符合请求的值,但它可能值得一试。

参见https://android.googlesource.com/platform/frameworks/av/+/6ade04174/media/libstagefright/ACodec.cpp中的setupAVCEncoderParameters函数有关设置过程的示例。它在输入参数中查找 profile 键(从您提供的 MediaFormat 复制),但如果存在,您还需要提供 level参数,以及使用什么级别取决于您的分辨率。参见 https://android.googlesource.com/platform/frameworks/native/+/cde4b13a/include/media/openmax/OMX_Video.h对于常量值,您可以将其用于参数。

但是在检查配置文件和级别参数之后,它似乎也将配置文件覆盖到基线,而不管设置的是什么。因此,要么这些行已从您的设备中删除,要么编码器完全忽略了 h264type.eProfile 字段。

如果有人拥有更接近设备上实际使用的源代码树,那么检查它会更好。

有关如何为您的分辨率选择合适级别的示例,请查看 http://git.videolan.org/?p=x264.git;a=blob;f=encoder/set.c;h=1a40b71284 中的 x264_validate_levels (但传递给 MediaFormat 的级别需要使用 OMX_VIDEO_AVCLEVELTYPE 常量表示)。

不确定这是否有帮助,但至少值得一试。

关于android - 使用 MediaCodec 和 MTK Codec 编码时选择 H264 Profile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com