android 判断是否满足播放HDR视频

本文探讨了HDR技术在超清视频中的重要性,介绍了主流HDR标准,强调了在Android设备上播放HDR视频需要设备支持HDR解码和显示。当前,大部分安卓手机仅支持HDR显示而非解码,导致视觉效果大打折扣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:当下超清视频技术的发展正日益凸显,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个档次了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值