news 2026/6/15 15:37:09

如何判断硬件解码器或者软件解码器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何判断硬件解码器或者软件解码器

方法一:

根据源码frameworks/av/media/libstagefright/MediaCodecList.cpp

bool MediaCodecList::isSoftwareCodec(const AString &componentName) { return componentName.startsWithIgnoreCase("OMX.google.") || componentName.startsWithIgnoreCase("c2.android.") || (!componentName.startsWithIgnoreCase("OMX.") && !componentName.startsWithIgnoreCase("c2.")); }

根据这段代码的逻辑,OMX.google和c2.android开头的就是原生的软件解码器

此外的OMX或者c2开头,就是硬件解码器,如c2.qti.avc.decoder

media_codecs.xml文件路径:
code:android/device/qcom/msm8996(平台名)或者android/frameworks/av/media/libstagefright/data
设备:/vendor/etc/media_codecs.xml

这个文件被frameworks/av/media/libstagefright/xmlparser/MediaCodecsXmlParser.cpp解析。

方法二:

在APP中从MediaCodecInfo中使用isHardwareAccelerated()获取相关信息,参考以下代码

private boolean isH265Supported() { MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS); boolean isHardware = false; for (MediaCodecInfo codecInfo : codecList.getCodecInfos()) { String name = codecInfo.getName(); if (name.contains("hevc") && name.contains("decoder")) { Log.i("硬解", "===>分析中: " + name + " ==="); String architecture = getArchitectureType(name); Log.i("硬解", "===>类型: " + architecture); isHardware = codecInfo.isHardwareAccelerated(); Log.i("硬解", "===>支持硬件加速: " + isHardware); analyzePerformanceCharacteristics(codecInfo); } } return isHardware; } private static String getArchitectureType(String codecName) { if (codecName.startsWith("OMX.qcom.")) { return "Qualcomm VPU (Video Processing Unit) - 专用视频硬件"; } else if (codecName.startsWith("OMX.")) { return "Vendor VPU - 厂商专用视频硬件"; } else if (codecName.startsWith("c2.android.")) { return "CPU Software - 中央处理器软件解码"; } else if (codecName.startsWith("c2.")) { return "Modern VPU/DSP - 现代视频处理单元"; } else if (codecName.contains("mediacodec")) { return "GPU (罕见) - 图形处理器"; } else { return "Unknown"; } } private static void analyzePerformanceCharacteristics(MediaCodecInfo codecInfo) { try { if(codecInfo.getName().contains("c2.dolby.decoder.hevc")){ Log.i("硬解","===>" + codecInfo.getName() + " MediaCodec不支持杜比: codec does not support type"); return; } MediaCodecInfo.CodecCapabilities caps = codecInfo.getCapabilitiesForType("video/hevc"); if (caps != null) { MediaCodecInfo.VideoCapabilities videoCaps = caps.getVideoCapabilities(); assert videoCaps != null; Log.i("硬解", "===>支持最高分辨率: " + videoCaps.getSupportedWidths().getUpper() + "x" + videoCaps.getSupportedHeights().getUpper()); Log.i("硬解", "===>性能级别: " + (videoCaps.getSupportedWidths().getUpper() >= 7680 ? "8K Capable" : "4K/HDR Capable")); } } catch (Exception e) { Log.e("硬解", "===>分析出错: ", e); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 9:33:10

好用的叉车智能管理系统品牌

好用的叉车智能管理系统品牌 在现代物流和仓储行业中,叉车作为重要的搬运设备,其高效、安全的管理至关重要。叉车智能管理系统的出现,为叉车的管理带来了新的变革。那么,有哪些好用的叉车智能管理系统品牌呢?广州市双…

作者头像 李华
网站建设 2026/6/14 15:44:32

浏览器自动化太复杂?n8n-nodes-puppeteer让你轻松搞定网页抓取和截图

还在为繁琐的浏览器自动化任务头疼吗?n8n-nodes-puppeteer就像你的专属网页操作助手,让你用最简单的方式完成网页内容抓取、截图生成、PDF导出等复杂任务。无论你是需要监控网站变化、生成报表,还是进行自动化测试,这个工具都能帮…

作者头像 李华
网站建设 2026/6/14 4:21:59

计算机毕业设计springboot咖啡馆商城网站 基于 SpringBoot 的咖啡主题电商系统的设计与实现 SpringBoot+MySQL 构建的线上咖啡商城平台

计算机毕业设计springboot咖啡馆商城网站1hr9nn2e (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。当“喝一杯好咖啡”从线下排队变成线上点击,咖啡零售的数字化赛道便…

作者头像 李华
网站建设 2026/6/10 16:31:43

颠覆传统船舶设计:FREE!ship Plus如何用开源技术重塑行业格局

颠覆传统船舶设计:FREE!ship Plus如何用开源技术重塑行业格局 【免费下载链接】freeship-plus-in-lazarus FreeShip Plus in Lazarus 项目地址: https://gitcode.com/gh_mirrors/fr/freeship-plus-in-lazarus 在船舶设计领域,高昂的软件成本和复杂…

作者头像 李华
网站建设 2026/6/13 20:50:14

EmotiVoice在动画配音流程中的整合尝试

EmotiVoice在动画配音流程中的整合尝试 在当代动画制作中,角色声音早已不再是简单的“对口型”工具,而是承载情感、塑造人格的核心表达手段。然而,传统配音流程却常常成为内容迭代的瓶颈:专业声优档期难定、录制成本高昂、后期修改…

作者头像 李华
网站建设 2026/6/10 16:31:32

EmotiVoice社区生态发展现状与未来展望

EmotiVoice社区生态发展现状与未来展望 在虚拟助手越来越“懂人心”的今天,你是否也曾期待它不只是冷静地回答问题,而是在你低落时语气温柔,在你兴奋时一同雀跃?这背后,正是语音合成技术从“能说”向“会感”跃迁的关键…

作者头像 李华