背景:当下超清视频技术的发展正日益凸显,HDR 简称,高动态范围。它提供的颜色范围更广泛,最亮白色和最暗阴影之间的对比度更高,因此视频质量更接近肉眼感知。
目前市面上的主流HDR技术共有4种:包含基础的HDR10,广播电视采用的HLG,三星牵头的HDR10+和最火的杜比视界。
HDR要求至少10bit的色深。但对分辨率的无要求。
然而,并不是所有安卓设备都支持播放HDR视频。它是有条件的。表现为
1、片源必须是HDR技术标准制作的。
2、设备必须具备HDR解码能力,取决于硬件厂商的支持。
3、设备的显示屏【屏幕】必须支持HDR显示。
回归正题。在安卓设备上播放HDR视频。就需要播放器。作为开发者,开发播放器时,要判断设备是否支持HDR解码和HDR显示,判断视频是否是HDR视频。在安卓10或以上的系统开始支持HDR。但是,实际是否支持,完全取决于设备生产厂商的底层硬件。
判断设备是否支持HDR显示代码:返回true,说明设备的显示器【屏幕】支持显示HDR内容
public boolean supportRenderHDR() { Display.HdrCapabilities hdrCapabilities = getWindowManager() .getDefaultDisplay().getHdrCapabilities(); int[] hdrType = hdrCapabilities.getSupportedHdrTypes(); return hdrType != null && hdrType.length > 0; }
判断设备是否支持HDR解码:返回true代表支持。然后可以根据hdr种类,获取相关的解码器。
@RequiresApi(api = Build.VERSION_CODES.Q) public static boolean supportHDRDecode() { MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS); MediaFormat format = new MediaFormat(); format.setInteger(MediaFormat.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AV1ProfileMain10); String codecName = list.findDecoderForFormat(format); if (!TextUtils.isEmpty(codecName)) { return true; } return false;
}
目前(2024年4月)国内安卓手机设备厂商,真正支持HDR解码的设备还是很少的,高端机都比较少支持。很多都是只支持HDR显示,实际不支持HDR解码的,坑到嗨。不支持HDR解码的,芯片一般自动降级为SDR标准解码输出。视觉效果跟真正的HDR相比,就差了至少2个档次了。