1

我正在使用 MediaCodec(和 MediaMuxer)在 android 上渲染 Mpeg4/avc 视频。

我正在测试 LG Nexus 4 和三星 Galaxy 5。

在三星上,640x640 和 480x480 帧大小的渲染视频看起来都符合预期。

但是,在 Nexus 上,480x480 生成的视频看起来很糟糕,而 640x640 生成的视频很好。

问题是:原因是什么?这是我不知道的错误还是“功能”。

是否有一个众所周知的帧大小可以依靠在所有 Android 设备上正确呈现?还是我们需要在各种设备上进行测试?

4

2 回答 2

3

关于“众所周知的帧大小” - 谷歌要求设备供应商满足要求 - http://source.android.com/compatibility/index.html,文档在这里:http ://static.googleusercontent.com/media/ source.android.com/en//compatibility/android-cdd.pdf 它具有编解码器第 5 节(5.2 和 5.3 的确切值),您可以在其中找到与编解码器相关的要求。为了检查它,谷歌提供了涵盖所有必需分辨率的 CTS 测试。所以建议是坚持这个文档中的解决方案,并包含在 CTS 测试中

于 2014-07-01T09:37:56.893 回答
1

借助 Lollipop,Google 添加了一个 API 来查询编码器的视频属性。请参阅http://developer.android.com/reference/android/media/MediaCodecInfo.VideoCapabilities.html

以下是列举可用 H.264 编码器功能的示例:

for(MediaCodecInfo codecInfo : new MediaCodecList(MediaCodecList.ALL_CODECS).getCodecInfos()){
    if(!codecInfo.isEncoder())
                continue;
    String[] types = codecInfo.getSupportedTypes();
    for(int j=0;j<types.length;j++){
        if("video/avc".equalsIgnoreCase(types[j])){
            MediaCodecInfo.CodecCapabilities codecCaps = codecInfo.getCapabilitiesForType("video/avc");
            MediaCodecInfo.VideoCapabilities vidCaps = codecCaps.getVideoCapabilities();
            Range<Integer> framerates = vidCaps.getSupportedFrameRates();
            Range<Integer> widths = vidCaps.getSupportedWidths();
            Range<Integer> heights = vidCaps.getSupportedHeights();
            Log.d("H.264Encoder", "Found encoder with\n" + widths.toString()
                            + " x " + heights.toString() + " @ " + framerates.toString() + " fps aligned to " + vidCaps.getWidthAlignment());
        }
    }
}
于 2015-06-10T17:27:48.513 回答