在OTT设备开发中,经常会遇到个设备状态同步联动需求,比如使用电视遥控器开关电视时,把机顶盒也进行同步开关;反之亦然,开关机顶盒时,电视也同步开关,这样使用一个遥控器就可以控制多个设备,提高用户使用体验。这个功能就需要用到HDMI-CEC协议功能。
android官方相关文档可以查看此处:HDMI-CEC
要实现CEC联动设备功能,前提是机顶盒和电视双方都支持CEC功能,不同的制造商实现上可能有差异,要根据具体设备来看。同时要区分源端和目标端,通常机顶盒等播放设备是源端,电视等显示设备是目标端,固件中通过build.prop属性区分:
源端:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
目标端:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
应用中需要添加cec权限:
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<permission name="android.permission.HDMI_CEC" >
<group gid="system"/>
</permission>
</permissions>
我是基于海思Hi3798MV200方案进行开发的,下面均以此平台sdk源码为例简单介绍一下CEC联动过程。

应用层主要关注两个类:HdmiControlManager HdmiControlService
源码路径:HiSTBAndroidV600R003C00SPC020\frameworks\base\core\java\android\hardware\hdmi\HdmiControlManager.java
HiSTBAndroidV600R003C00SPC020\frameworks\base\services\core\java\com\android\server\hdmi\HdmiControlService.java
所有的应用,都会间接通过HDMIControlManager或者输入通过Tv Input框架间接与HdmiControlService进行通信,HdmiControlService作为SystemServer服务的一个服务,负责处理CEC的命令并与HDMI-CEC HAl进行交互。HAL层和驱动都需要厂商去适配,最后通过CEC总线与CEC设备通信。
基本流程:获取HdmiControlManager对象,通过该对象调用HdmiControlService中的相关方法-检测设备类型源端--检测CEC功能支持--注册监听回调--发送控制命令。
简易示例:
import andr

本文讲述了在OTT设备开发中如何利用HDMI-CEC协议实现多设备联动控制,包括HDMIControlManager和HdmiControlService的应用,以及如何在海思Hi3798MV200平台SDK中处理CEC功能,包括权限申请、设备检测和操作命令发送等内容。
最低0.47元/天 解锁文章
986





