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 tiêu dùng đa phương tiện 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à Phát bằng một lần chạm. Tính năng Phát bằng một lần chạm cho phép 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 phải 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, tính năng điều khiển nguồn của màn hình được kết nối qua HDMI sẽ phù hợp với tính năng điều khiển nguồn của màn hình bên trong. Khi một thiết bị phát lại HDMI thức dậy, 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 lần chạm của HDMI CEC. Nếu thiết bị chuyển sang chế độ ngủ khi đang là nguồn đang hoạt động hiện tại, thì thiết bị đó sẽ cố gắng tắt TV được 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 đã á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 tuyên bố hỗ trợ CEC hoàn toàn tương thích.
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 Khung đầu vào Android TV (TIF), HDMI-CEC 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 vấn đề này.
Bằng cách cung cấp HdmiControlService như một phần của hệ sinh thái Android, Android hy vọng sẽ cung cấp:
- Một cách triển khai tiêu chuẩn của HDMI-CEC cho tất cả các nhà sản xuất, giúp giảm khả năng không tương thích giữa các thiết bị. Trước đây, các nhà sản xuất phải tự phát triển cách triển khai HDMI-CEC hoặc sử dụng các 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 nghiêm ngặt về các vấn đề tương thích được phát hiện giữa các sản phẩm và thu thập lời khuyên hữu ích từ những người 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 sửa đổi đối với tiêu chuẩn đó để dịch vụ này hoạt động với các sản phẩm mà mọi người đã 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 như Khung đầu vào TV (TIF), dịch vụ Âm thanh và dịch vụ Nguồn để triển khai các tính năng khác nhau mà tiêu chuẩn chỉ định.
Hãy xem sơ đồ sau để biết cách chuyển từ bộ điều khiển CEC tuỳ chỉnh sang 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. Thay thế Dịch vụ điều khiển HDMI
Triển khai
Hãy xem sơ đồ sau để 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
Dưới đây là các thành phần chính để triển khai đúng cách HDMI-CEC trên Android:
- Một lớp trình quản lý
HdmiControlManagercung 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ý đầ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 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 nghĩa HAL có sẵn để các nhà sản xuất thiết bị sử dụng nhằm triển khai lớp HAL.
Lưu ý: Các 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, các 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 thiết bị 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á bộ điều khiển này. Các yêu cầu chung cho 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 tích hợp 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 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 ứng dụng được đặt trong/system/priv-appmới có thể truy cập vào dịch vụ này. Điều này nhằm bảo vệ dịch vụ khỏi việc bị các ứng dụng có ý đồ xấu lợi dụng.
Android hỗ trợ loại TV/Display(0), Playback
device(4) có thể phát lệnh Phát bằng một lần chạm để trở thành nguồn đang hoạt động và Audio System (5) xử lý chế độ phát âm thanh hệ thống và ARC.
Các loại thiết bị khác (Bộ dò kênh và Trình ghi) 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 bộ vi xử lý trong nền tảng cơ bản sẽ tiếp quản việc đ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.halIHdmiCecCallback.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
Các cách triển khai HDMI-CEC của thiết bị được kiểm thử và xác minh thông qua các bài kiểm thử CTS theo tài liệu HDMI-CEC CTS.
HDMI-CEC 2.0
Các thiết bị nguồn (phát lại) và thiết bị nhận (tấm TV) của Android hỗ trợ HDMI-CEC 2.0. HDMI-CEC 2.0 mang lại khả năng tương tác tốt hơn giữa các thiết bị HDMI, cải thiện tính năng Truyền qua điều khiển từ xa và kiểm thử chứng nhận mở rộng hơn. Nhìn chung, các tương tác của HDMI-CEC 2.0 với các thiết bị khác hiệu quả hơn, dẫn đến lưu lượng truy cập HDMI-CEC ít hơn cũng như các tương tác nhanh hơn.
Để một thiết bị hỗ trợ HDMI-CEC 2.0, bạn phải đặt cấu hình thiết bị và người dùng để sử dụng HDMI-CEC 2.0. Cách triển khai HAL cũng phải báo cáo việc 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 HDMI-CEC tại cả thời gian xây dựng (do OEM sử dụng RRO) và thời gian chạy (do HdmiControlManager @SystemApi).
Ví dụ về các chế độ cài đặt HDMI-CEC:
| Cài đặt | Lựa chọn |
|---|---|
| HDMI-CEC đượ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 lại gửi. | Chỉ gửi đến TV Gửi đến TV và Hệ thống âm thanh Truyền tin 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.