Tiêu chuẩn Điều khiển thiết bị điện tử tiêu dùng qua giao diện đa phương tiện độ phân giải cao (HDMI-CEC) cho phép các sản phẩm đa phương tiện tiêu dùng giao tiếp và trao đổi thông tin với nhau. HDMI-CEC hỗ trợ nhiều tính năng, chẳng hạn như Truyền qua điều khiển từ xa và Điều khiển âm thanh hệ thống, nhưng một trong những tính năng phổ biến nhất là One Touch Play (Phát bằng một lần chạm). Tính năng One Touch Play cho phép một thiết bị nguồn nội dung nghe nhìn bật TV và tự động chuyển đổi cổng đầu vào, vì vậy, bạn không cần tìm điều khiển từ xa của TV để chuyển từ Chromecast sang đầu phát Blu-ray.
Với Android 12, chế độ kiểm soát nguồn của màn hình kết nối HDMI sẽ phù hợp với chế độ kiểm soát nguồn của màn hình trong. Khi một thiết bị phát qua HDMI chuyển sang trạng thái hoạt động, thiết bị đó sẽ cố gắng đánh thức TV được kết nối và trở thành nguồn đang hoạt động hiện tại thông qua tính năng Phát bằng một nút nhấn của HDMI CEC. Nếu thiết bị chuyển sang chế độ ngủ trong khi đang là nguồn hoạt động hiện tại, thì thiết bị sẽ cố gắng tắt TV đã kết nối.
Việc hỗ trợ HDMI-CEC thường là không bắt buộc. Tuy nhiên, hầu hết các nhà sản xuất đều đã áp dụng HDMI-CEC để thiết bị của họ hoạt động với thiết bị của các công ty khác. Mỗi nhà sản xuất triển khai tiêu chuẩn HDMI-CEC theo những cách khác nhau, vì vậy, các thiết bị không phải lúc nào cũng hiểu nhau và các tính năng được hỗ trợ sẽ khác nhau giữa các thiết bị. Do sự khác biệt này, người tiêu dùng không thể chắc chắn rằng hai sản phẩm có tuyên bố hỗ trợ CEC hoàn toàn tương thích với nhau.
Việc hỗ trợ HDMI-CEC 2.0 giúp cải thiện khả năng tương thích giữa các thiết bị HDMI nếu cả thiết bị gửi và thiết bị nhận đều hỗ trợ phiên bản tiêu chuẩn này.
Giải pháp
Với việc ra mắt Android TV Input Framework (TIF), HDMI-CEC sẽ kết hợp tất cả các thiết bị được kết nối và giảm thiểu các vấn đề về khả năng tương thích.
Android đã tạo một dịch vụ hệ thống có tên là HdmiControlService
để giảm bớt những điểm khó khăn này.
Bằng cách cung cấp HdmiControlService
trong hệ sinh thái Android, Android hy vọng sẽ mang đến:
- Một cách triển khai HDMI-CEC tiêu chuẩn cho tất cả các nhà sản xuất, giúp giảm tình trạng thiết bị không tương thích. Trước đây, các nhà sản xuất phải tự phát triển các cách triển khai HDMI-CEC hoặc sử dụng giải pháp của bên thứ ba.
- Một dịch vụ đã được kiểm thử kỹ lưỡng trên nhiều thiết bị HDMI-CEC hiện có trên thị trường. Android đã tiến hành nghiên cứu kỹ lưỡng về các vấn đề tương thích được phát hiện trong số các sản phẩm và thu thập những lời khuyên hữu ích từ những nhà triển khai thiết bị có kinh nghiệm về công nghệ này. Dịch vụ CEC được thiết kế để duy trì sự cân bằng hợp lý giữa tiêu chuẩn và các điểm sửa đổi đối với tiêu chuẩn đó, sao cho dịch vụ này hoạt động với những sản phẩm mà mọi người đang sử dụng.
Thiết kế tổng thể
HdmiControlService
được kết nối với phần còn lại của hệ thống, chẳng hạn như TV Input Framework (TIF), dịch vụ Âm thanh và dịch vụ Nguồn để triển khai nhiều tính năng mà tiêu chuẩn quy định.
Hãy xem sơ đồ sau để biết cách chuyển đổi từ bộ điều khiển CEC tuỳ chỉnh sang một cách triển khai lớp trừu tượng phần cứng (HAL) HDMI-CEC đơn giản hơn.

Hình 1. Dịch vụ Điều khiển HDMI thay thế
Triển khai
Hãy xem sơ đồ sau đây để biết thông tin chi tiết về dịch vụ điều khiển HDMI.

Hình 2. Thông tin chi tiết về Dịch vụ điều khiển HDMI
Sau đây là những thành phần chính để triển khai HDMI-CEC trên Android một cách phù hợp:
- Một lớp trình quản lý
HdmiControlManager
cung cấp API cho các ứng dụng có đặc quyền. Các dịch vụ hệ thống như dịch vụ Trình quản lý thiết bị đầu vào TV và dịch vụ Âm thanh có thể sử dụng trực tiếp dịch vụ này. - Dịch vụ này được thiết kế để cho phép lưu trữ nhiều loại thiết bị logic.
- HDMI-CEC được kết nối với phần cứng thông qua một lớp trừu tượng phần cứng (HAL) để đơn giản hoá việc xử lý các điểm khác biệt của giao thức và cơ chế báo hiệu giữa các thiết bị. Nhà sản xuất thiết bị có thể sử dụng định nghĩa HAL để triển khai lớp HAL.
Lưu ý: Nhà sản xuất thiết bị nên thêm dòng sau vào PRODUCT_COPY_FILES
trong device.mk
.
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
Tuỳ thuộc vào việc thiết bị của bạn là thiết bị nhận HDMI hay thiết bị nguồn HDMI, nhà sản xuất thiết bị cần đặt ro.hdmi.device_type
trong device.mk
để HdmiControlService
hoạt động đúng cách.
Đối với các thiết bị nguồn HDMI, chẳng hạn như thiết bị Over the Top (OTT) hoặc Hộp giải mã tín hiệu số (STB), hãy đặt:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4
Đối với các thiết bị nhận HDMI, chẳng hạn như TV dạng tấm, hãy đặt:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
- Bộ điều khiển CEC độc quyền do nhà sản xuất thiết bị cung cấp không thể cùng tồn tại với
HdmiControlService
. Bạn phải tắt hoặc xoá tính năng này. Các yêu cầu chung đối với việc này xuất phát từ nhu cầu xử lý các lệnh dành riêng cho nhà sản xuất. Trình xử lý lệnh dành riêng cho nhà sản xuất phải được đưa vào dịch vụ bằng cách mở rộng/sửa đổi dịch vụ đó. Công việc này do nhà sản xuất thiết bị thực hiện và không được Android chỉ định. Xin lưu ý rằng mọi thay đổi được thực hiện trong dịch vụ đối với các lệnh dành riêng cho nhà sản xuất đều không được can thiệp vào cách xử lý các lệnh tiêu chuẩn, nếu không thiết bị sẽ không tương thích với Android. - Quyền truy cập vào dịch vụ HDMI-CEC được bảo vệ bằng cấp độ bảo vệ
SignatureOrSystem
. Chỉ các thành phần hệ thống hoặc các ứng dụng được đặt trong/system/priv-app
mới có thể truy cập vào dịch vụ này. Việc này nhằm bảo vệ dịch vụ khỏi hành vi sai trái của các ứng dụng có ý đồ xấu.
Android hỗ trợ loại TV/Display(0)
, Playback
device(4)
có thể phát lệnh One Touch Play để trở thành nguồn đang hoạt động và Audio System (5)
xử lý chế độ âm thanh hệ thống và ARC.
Các loại thiết bị khác (Bộ chỉnh kênh và Máy ghi hình) hiện không được hỗ trợ.
HAL HDMI-CEC
API HAL HDMI-CEC cho phép HdmiControlService
sử dụng tài nguyên phần cứng để gửi/nhận các lệnh HDMI-CEC, định cấu hình các chế độ cài đặt cần thiết và (không bắt buộc) giao tiếp với vi xử lý trong nền tảng cơ bản sẽ tiếp quản chế độ điều khiển CEC khi hệ thống Android ở chế độ chờ.
Phiên bản | Tính năng | Tệp HAL |
---|---|---|
1.0 | Định cấu hình dữ liệu HAL (địa chỉ, tính năng). Gửi lệnh HDMI-CEC. Đăng ký lệnh gọi lại để nhận các lệnh HDMI-CEC và sự kiện cắm nóng. | IHdmiCec.hal IHdmiCecCallback.hal |
1.1 | Giới thiệu các loại HDMI-CEC 2.0 | @1.1::IHdmiCec.hal @1.1::IHdmiCecCallback.hal |
Thử nghiệm
Việc triển khai HDMI-CEC của các thiết bị được kiểm thử và xác minh thông qua các kiểm thử CTS theo tài liệu CTS về HDMI-CEC.
HDMI-CEC 2.0
Các thiết bị nguồn (phát) và thiết bị nhận (bảng điều khiển TV) chạy Android đều hỗ trợ HDMI-CEC 2.0. HDMI-CEC 2.0 mang đến khả năng tương tác tốt hơn giữa các thiết bị HDMI, những cải tiến đối với tính năng Truyền qua điều khiển từ xa và quy trình kiểm tra chứng nhận toàn diện hơn. Nhìn chung, các hoạt động tương tác của HDMI-CEC 2.0 với các thiết bị khác sẽ hiệu quả hơn, dẫn đến lưu lượng HDMI-CEC ít hơn cũng như các hoạt động tương tác nhanh hơn.
Để một thiết bị hỗ trợ HDMI-CEC 2.0, thiết bị và cấu hình người dùng phải được đặt để sử dụng HDMI-CEC 2.0. Việc triển khai HAL cũng phải báo cáo khả năng hỗ trợ HDMI-CEC 2.0 trong các lệnh gọi đến IHdmiCec#getCecVersion
.
Cấu hình CEC
Bạn có thể định cấu hình hành vi của HDMI-CEC tại cả thời gian tạo (bằng OEM sử dụng RRO) và thời gian chạy (bằng HdmiControlManager
@SystemApi).
Ví dụ về chế độ cài đặt HDMI-CEC:
Xem xét | Lựa chọn |
---|---|
HDMI-CEC có được bật hay tắt. | Đã bật Đã tắt |
Phạm vi của các thông báo điều khiển nguồn HDMI-CEC do thiết bị phát gửi. | Chỉ TV TV và hệ thống âm thanh Phát sóng Không có |
Đối với mỗi chế độ cài đặt hiện có, các ứng dụng có thể truy vấn các lựa chọn được phép tại thời gian chạy.