HDMI 连线获取EDID数据及解析相关
名词解释
延伸顯示能力識別(Extended display identification data,簡稱EDID)是指螢幕解析度的資料,包括廠商名稱與序號。一般EDID存在於顯示器的PROM或EEPROM內。一般如要讀取EDID都是透過I2C,slave address是0x50[1]。目前HDMI 1.0 - 1.3c使用EDID結構1.3版
市场上显示器五花八门,一般我们连接电脑之后都是十分方便的适配,甚至连分辨率啥的都不用调。这就是因为我们EDID
的功劳 ,EDID是显示器存储的关于显示器的一些基本信息,例如分辨率,声音支持的格式,厂商ID,机器型号等。
物理结构
喜欢玩游戏的童鞋 拿手机投屏到电视机打荣耀也可以这样操作
若要使用有線連接,必須具備以下設備:
• HDMI 線
• HDMI 輸出線
• 支援 HDMI 功能的電視型號
• 支援 HDMI 功能的行動裝置
获取EDID数据:
PC电脑EDID数据存放路径:
通过regedit(注册表)-HKEY_LOCAL_MACHINE/STYTEM/ControlSet001/Enum/DISPLAY 选择所属的显示屏编号 Device Parameters
获取到数据我们就可以进行EDID数据解析:
一份EDID数据是由128个字节的基本数据块(block0)与扩展数据块(block1)组成block0必须要有
block1 是可选的,没一个字节对应相应的display信息,参考如下文章
http://www.360doc.com/content/19/1018/17/496343_867654968.shtml
也可以使用工具 Monitor Asset Manager 查看 EDID数据及解析结果
直接百度下载
我是在西西软件下载没有乱七八糟的东西 https://www.cr173.com/soft/9229.html
android 程序也可以获取EDID 核心代码:
通过一个广播来监听HDMI的插拔 public static String HDMIINTENT = "android.intent.action.HDMI_PLUGGED"; 获取HDMI的状态 File switchFile = new File("/sys/devices/virtual/switch/hdmi/state"); if (!switchFile.exists()) { switchFile = new File("/sys/class/switch/hdmi/state"); }
如果前面都是2步都是true,获取EDID数据文件: File localFile = new File("/sys/devices/virtual/graphics/fb1/edid_raw_data"); 读取文件内容,然后进行对照前面提到的EDID数据块格式,解析EDID数据
对于HDMI设备连接状态的监听
https://juejin.im/post/59f04fcb6fb9a0451a759700
网课EDID解析
http://www.bamn.cn/course/volume/5919
希望以上内容对你有所帮助