Khung đầu vào TV

Biểu tượng Android TV HAL

Android TV Input Framework (TIF) đơn giản hóa việc phân phối nội dung trực tiếp tới Android TV. Android TIF cung cấp một API tiêu chuẩn cho các nhà sản xuất để tạo các mô-đun đầu vào để điều khiển Android TV, đồng thời cho phép tìm kiếm và đề xuất truyền hình trực tiếp thông qua siêu dữ liệu do Đầu vào TV xuất bản.

Khung này không tìm cách thực hiện các tiêu chuẩn TV hoặc các yêu cầu của khu vực, nhưng giúp các nhà sản xuất thiết bị dễ dàng đáp ứng các tiêu chuẩn phát sóng TV kỹ thuật số của khu vực mà không cần thực hiện lại. Tài liệu trong phần này cũng có thể hữu ích cho các nhà phát triển ứng dụng bên thứ ba muốn tạo Đầu vào TV tùy chỉnh.

Các thành phần

Việc triển khai Khung đầu vào của Android TV bao gồm Trình quản lý đầu vào TV. TIF hoạt động với Ứng dụng TV, một ứng dụng hệ thống không thể thay thế bằng ứng dụng của bên thứ ba, để truy cập các kênh tích hợp sẵn và bộ chỉnh IP. Ứng dụng TV giao tiếp với các mô-đun Đầu vào TV do nhà sản xuất thiết bị hoặc các bên khác cung cấp thông qua Trình quản lý đầu vào TV.

Khung đầu vào TV bao gồm:

  • Nhà cung cấp TV ( com.android.providers.tv.TvProvider ): cơ sở dữ liệu về các kênh, chương trình và các quyền liên quan
  • Ứng dụng TV ( com.android.tv.TvActivity ): ứng dụng xử lý tương tác của người dùng
  • Trình quản lý đầu vào TV ( android.media.tv.TvInputManager ): cho phép Đầu vào TV giao tiếp với Ứng dụng TV
  • Đầu vào TV: một ứng dụng đại diện cho bộ điều chỉnh vật lý hoặc ảo và cổng đầu vào
  • Đầu vào TV HAL ( mô-đun tv_input ): định nghĩa phần cứng cho phép Đầu vào TV của hệ thống truy cập vào phần cứng dành riêng cho TV khi được triển khai
  • Parental Control: công nghệ cho phép chặn các kênh và chương trình
  • HDMI-CEC: công nghệ cho phép điều khiển từ xa nhiều thiết bị khác nhau qua HDMI
  • Tuner Framework: khung cho đầu vào TV tích hợp trong Tuner
  • MediaCas: khung truy cập có điều kiện
  • Tuner Resource Manager: dịch vụ quản lý tài nguyên phần cứng cho đầu vào TV, MediaCas và đầu vào Bộ dò sóng tích hợp

Các thành phần này được đề cập chi tiết dưới đây. Xem sơ đồ sau để có cái nhìn chi tiết về kiến ​​trúc Khung đầu vào của Android TV.

Tổng quan về kiến ​​trúc Android TIF
Hình 1. Kiến trúc Android TV Input Framework (TIF)

Chảy

Đây là cách kiến ​​trúc được thực hiện:

  1. Người dùng nhìn thấy và tương tác với Ứng dụng TV, một ứng dụng hệ thống không thể thay thế bằng ứng dụng của bên thứ ba.
  2. Ứng dụng TV hiển thị nội dung AV từ Đầu vào TV.
  3. Ứng dụng TV không thể giao tiếp trực tiếp với Đầu vào TV. Trình quản lý đầu vào TV xác định trạng thái của Đầu vào TV cho Ứng dụng TV. Xem Trình quản lý đầu vào TV bên dưới để biết thêm chi tiết về những giới hạn này.

Quyền

  • Chỉ các Đầu vào TV signatureOrSystem và Ứng dụng TV mới có toàn quyền truy cập vào cơ sở dữ liệu Nhà cung cấp TV và có thể nhận các Sự kiện chính.
  • Chỉ Đầu vào TV của hệ thống mới có thể truy cập HAL Đầu vào TV thông qua dịch vụ Trình quản lý đầu vào TV. Đầu vào TV được truy cập trực tiếp qua các phiên Trình quản lý đầu vào TV.
  • Đầu vào TV của bên thứ ba có quyền truy cập khóa gói vào cơ sở dữ liệu Nhà cung cấp TV và chỉ có thể ĐỌC/VIẾT đối với các hàng gói phù hợp.
  • Đầu vào TV của bên thứ ba có thể hiển thị nội dung của chính họ hoặc nội dung từ đầu vào TV thông qua của nhà sản xuất thiết bị, chẳng hạn như HDMI1. Chúng không thể hiển thị nội dung từ các đầu vào TV không thông qua, chẳng hạn như bộ điều chỉnh IPTV hoặc tích hợp sẵn.
  • Quyền TV_INPUT_HARDWARE cho ứng dụng Đầu vào TV phần cứng, báo hiệu Dịch vụ quản lý đầu vào TV để thông báo cho dịch vụ Đầu vào TV khi khởi động để gọi Dịch vụ quản lý đầu vào TV và thêm Đầu vào TV của nó. Quyền này cho phép ứng dụng Đầu vào TV phần cứng hỗ trợ nhiều Đầu vào TV trên mỗi dịch vụ Đầu vào TV, cũng như có thể tự động thêm và xóa Đầu vào TV được hỗ trợ.

nhà cung cấp truyền hình

Cơ sở dữ liệu Nhà cung cấp TV lưu trữ các kênh và chương trình từ Đầu vào TV. Nhà cung cấp TV cũng xuất bản và quản lý các quyền được liên kết để Đầu vào TV chỉ có thể xem các bản ghi của chính họ. Chẳng hạn, một Đầu vào TV cụ thể chỉ có thể xem các kênh và chương trình mà nó đã cung cấp và bị cấm truy cập bất kỳ kênh và chương trình nào của Đầu vào TV khác.

Nhà cung cấp TV ánh xạ nội bộ "thể loại phát sóng" thành "thể loại chính tắc". Đầu vào TV chịu trách nhiệm điền "thể loại phát sóng" với giá trị trong tiêu chuẩn phát sóng cơ bản và trường "thể loại chính tắc" sẽ tự động được điền đúng thể loại được liên kết từ android.provider.TvContract.Genres . Ví dụ: với tiêu chuẩn phát sóng ATSC A/65 và chương trình có thể loại 0x25 (có nghĩa là “Thể thao”), Đầu vào TV sẽ điền “thể loại phát sóng” với Chuỗi “Thể thao” và Nhà cung cấp TV sẽ điền trường “thể loại chính tắc” với giá trị được ánh xạ android.provider.TvContract.Genres.SPORTS .

Xem sơ đồ bên dưới để biết chi tiết về Nhà cung cấp TV.

Nhà cung cấp Android TV
Hình 2. Nhà cung cấp Android TV

Chỉ các ứng dụng trong phân vùng hệ thống đặc quyền mới có thể đọc toàn bộ cơ sở dữ liệu Nhà cung cấp TV.

Đầu vào truyền qua TV không lưu trữ các kênh và chương trình.

Ngoài các trường tiêu chuẩn cho các kênh và chương trình, cơ sở dữ liệu Nhà cung cấp TV cũng cung cấp một trường loại BLOB, COLUMN_INTERNAL_PROVIDER_DATA , trong mỗi bảng mà Đầu vào TV có thể sử dụng để lưu trữ dữ liệu tùy ý. Dữ liệu BLOB đó có thể bao gồm thông tin tùy chỉnh, chẳng hạn như tần suất của bộ dò được liên kết và có thể được cung cấp trong bộ đệm giao thức hoặc một dạng khác. Trường Có thể tìm kiếm khả dụng để làm cho một số kênh nhất định không khả dụng trong tìm kiếm (chẳng hạn như để đáp ứng các yêu cầu cụ thể của quốc gia về bảo vệ nội dung).

Ví dụ trường cơ sở dữ liệu

Nhà cung cấp TV hỗ trợ dữ liệu có cấu trúc trong bảng kênh ( android.provider.TvContract.Channels ) và chương trình ( android.provider.TvContract.Programs ). Các bảng này được điền và truy cập bởi Đầu vào TV và các ứng dụng hệ thống như Ứng dụng TV. Các bảng này có bốn loại trường:

  • Hiển thị: Các trường hiển thị chứa thông tin mà ứng dụng có thể muốn hiển thị cho người dùng, chẳng hạn như tên kênh ( COLUMN_DISPLAY_NAME ) hoặc số ( COLUMN_DISPLAY_NUMBER ) hoặc tiêu đề của chương trình đang được xem.
  • Siêu dữ liệu: Có ba trường để xác định nội dung, theo các tiêu chuẩn có liên quan, như ID luồng truyền tải của kênh ( COLUMN_TRANSPORT_STREAM_ID ), ID mạng ban đầu ( COLUMN_ORIGINAL_NETWORK_ID ) và id dịch vụ ( COLUMN_SERVICE_ID ).
  • Dữ liệu nội bộ : Các trường dành cho việc sử dụng tùy chỉnh Đầu vào TV.
    Một số trường, chẳng hạn như COLUMN_INTERNAL_PROVIDER_DATA , là các trường BLOB có thể tùy chỉnh trong đó Đầu vào TV có thể lưu trữ siêu dữ liệu tùy ý về kênh hoặc chương trình của chúng.
  • Gắn cờ: Các trường gắn cờ biểu thị liệu kênh có bị hạn chế tìm kiếm, duyệt hoặc xem hay không. Điều này chỉ có thể được đặt ở cấp độ kênh. Tất cả các chương trình tuân theo cài đặt trên kênh.
    • COLUMN_SEARCHABLE : Hạn chế tìm kiếm từ một số kênh có thể là một yêu cầu ở một số vùng nhất định. COLUMN_SEARCHABLE = 0 có nghĩa là kênh không được hiển thị trong kết quả tìm kiếm.
    • COLUMN_BROWSABLE : Chỉ hiển thị với các ứng dụng hệ thống. Hạn chế kênh được duyệt bởi các ứng dụng. COLUMN_BROWSABLE = 0 có nghĩa là kênh không được đưa vào danh sách kênh.
    • COLUMN_LOCKED : Chỉ hiển thị với các ứng dụng hệ thống. Hạn chế xem kênh bằng tài khoản không hợp lệ nếu không nhập mã PIN. COLUMN_LOCKED = 1 có nghĩa là kênh phải được bảo vệ bởi quyền kiểm soát của phụ huynh.

Để có danh sách đầy đủ hơn về các trường, hãy xem android/frameworks/base/media/java/android/media/tv/TvContract.java

Quyền và kiểm soát truy cập

Tất cả các trường được hiển thị cho bất kỳ ai có quyền truy cập vào hàng tương ứng. Người dùng không thể truy cập trực tiếp vào trường nào; họ chỉ nhìn thấy những gì Ứng dụng TV, Ứng dụng hệ thống hoặc Đầu vào TV hiển thị.

  • Mỗi hàng có PACKAGE_NAME , gói (ứng dụng) sở hữu hàng đó, được kiểm tra trên Truy vấn, Chèn, Cập nhật qua TvProvider.java. Đầu vào TV chỉ có thể truy cập thông tin mà nó đã viết và được tách biệt khỏi thông tin được cung cấp bởi các Đầu vào TV khác.
  • Quyền ĐỌC, VIẾT thông qua AndroidManifest.xml (yêu cầu sự đồng ý của người dùng) để xác định các kênh khả dụng.
  • Chỉ các ứng dụng signatureOrSystem có quyền ACCESS_ALL_EPG_DATA để truy cập toàn bộ cơ sở dữ liệu.

Trình quản lý đầu vào TV

Trình quản lý đầu vào TV cung cấp API hệ thống trung tâm cho Khung đầu vào Android TV tổng thể. Nó phân xử sự tương tác giữa các ứng dụng và Đầu vào TV, đồng thời cung cấp chức năng kiểm soát của phụ huynh. Các phiên Trình quản lý đầu vào TV phải được tạo trực tiếp với Đầu vào TV. Trình quản lý đầu vào TV cho phép truy cập vào Đầu vào TV đã cài đặt để các ứng dụng có thể:

  • Liệt kê đầu vào TV và kiểm tra trạng thái của chúng
  • Tạo phiên và quản lý người nghe

Đối với các phiên, Ứng dụng TV chỉ có thể điều chỉnh Đầu vào TV cho các URI mà nó đã thêm vào cơ sở dữ liệu Nhà cung cấp TV, ngoại trừ Đầu vào TV truyền qua có thể được điều chỉnh để sử dụng TvContract.buildChannelUriForPassthroughInput() . Đầu vào TV cũng có thể được đặt âm lượng. Đầu vào TV được cung cấp và ký bởi nhà sản xuất thiết bị (ứng dụng chữ ký) hoặc các ứng dụng khác được cài đặt trong phân vùng hệ thống sẽ có quyền truy cập vào toàn bộ cơ sở dữ liệu của Nhà cung cấp TV. Quyền truy cập này có thể được sử dụng để xây dựng các ứng dụng để duyệt và tìm kiếm trên tất cả các kênh và chương trình TV có sẵn.

Một ứng dụng có thể tạo và đăng ký TvInputCallback với android.media.tv.TvInputManager để được gọi lại khi thay đổi trạng thái của Đầu vào TV hoặc khi thêm hoặc xóa Đầu vào TV. Ví dụ: Ứng dụng TV có thể phản ứng khi Đầu vào TV bị ngắt kết nối bằng cách hiển thị nó là đã ngắt kết nối và ngăn lựa chọn của nó.

Trình quản lý đầu vào TV trừu tượng hóa giao tiếp giữa Ứng dụng TV và Đầu vào TV. Giao diện tiêu chuẩn của Trình quản lý đầu vào TV và Đầu vào TV cho phép nhiều nhà sản xuất thiết bị tạo Ứng dụng TV của riêng họ đồng thời giúp tất cả Đầu vào TV của bên thứ ba hoạt động trên tất cả Ứng dụng TV.

Đầu vào TV

Đầu vào TV là ứng dụng Android theo nghĩa là chúng có AndroidManifest.xml và được cài đặt (thông qua Play, được cài đặt sẵn hoặc được tải sẵn). Android TV hỗ trợ các ứng dụng hệ thống được cài đặt sẵn, ứng dụng được ký bởi nhà sản xuất thiết bị và Đầu vào TV của bên thứ ba.

Một số đầu vào, chẳng hạn như đầu vào HDMI hoặc đầu vào bộ dò sóng tích hợp, chỉ có thể được cung cấp bởi nhà sản xuất khi chúng giao tiếp trực tiếp với phần cứng bên dưới. Những thứ khác, chẳng hạn như IPTV, dịch chuyển vị trí và STB bên ngoài, có thể được cung cấp bởi các bên thứ ba dưới dạng APK trên Cửa hàng Google Play. Sau khi tải xuống và cài đặt, đầu vào mới có thể được chọn trong Ứng dụng TV.

Ví dụ đầu vào thông qua

Đầu vào hệ thống Android TV
Hình 3. Đầu vào hệ thống Android TV

Trong ví dụ này, Đầu vào TV do nhà sản xuất thiết bị cung cấp được tin cậy và có toàn quyền truy cập vào Nhà cung cấp TV. Là Đầu vào TV thông qua, nó không đăng ký bất kỳ kênh hoặc chương trình nào với Nhà cung cấp TV. Để lấy URI được sử dụng để tham chiếu đầu vào thông qua, hãy sử dụng phương thức tiện ích android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . Ứng dụng TV giao tiếp với Trình quản lý đầu vào TV để tiếp cận Đầu vào TV HDMI.

Ví dụ về bộ điều chỉnh tích hợp

Đầu vào bộ thu sóng tích hợp Android TV
Hình 4. Đầu vào bộ thu sóng tích hợp trong Android TV

Trong ví dụ này, Đầu vào TV Tuner tích hợp do nhà sản xuất thiết bị cung cấp được tin cậy và có toàn quyền truy cập vào Nhà cung cấp TV.

Ví dụ đầu vào của bên thứ ba

Android TV đầu vào của bên thứ ba
Hình 5. Đầu vào bên thứ ba của Android TV

Trong ví dụ này, Đầu vào TV STB bên ngoài được cung cấp bởi bên thứ ba. Vì Đầu vào TV đó không thể truy cập trực tiếp nguồn cấp dữ liệu video HDMI đi vào, nên nó phải thông qua Trình quản lý đầu vào TV và sử dụng Đầu vào TV HDMI do nhà sản xuất thiết bị cung cấp.

Thông qua Trình quản lý đầu vào TV, Đầu vào TV STB bên ngoài có thể giao tiếp với Đầu vào TV HDMI và yêu cầu đầu vào đó hiển thị video trên HDMI1. Vì vậy, Đầu vào TV STB có thể điều khiển TV trong khi Đầu vào TV HDMI do nhà sản xuất cung cấp hiển thị video.

Ví dụ về hình trong hình (PIP)

Android TV KeySự kiện
Hình 6. Sự kiện chính của Android TV

Sơ đồ trên cho thấy cách các nút trên điều khiển từ xa được chuyển đến một Đầu vào TV cụ thể để hiển thị hình trong hình (PIP). Các thao tác nhấn nút đó được trình điều khiển phần cứng do nhà sản xuất thiết bị cung cấp diễn giải, chuyển đổi mã quét phần cứng thành mã phím Android và chuyển chúng tới đường dẫn đầu vào Android tiêu chuẩn InputReaderInputDispatcher hoạt động dưới dạng KeyEvents . Những sự kiện này lần lượt kích hoạt các sự kiện trên Ứng dụng TV nếu nó được lấy nét.

Chỉ Đầu vào TV của hệ thống mới đủ điều kiện nhận InputEvents và chỉ khi chúng có quyền hệ thống RECEIVE_INPUT_EVENT . Đầu vào TV chịu trách nhiệm xác định những Sự kiện đầu vào nào sẽ sử dụng và sẽ cho phép Ứng dụng TV xử lý các khóa mà nó không cần sử dụng.

Ứng dụng TV chịu trách nhiệm biết Đầu vào TV của hệ thống nào đang hoạt động, nghĩa là do người dùng chọn và phân biệt KeyEvents đến và định tuyến chúng đến đúng phiên Trình quản lý đầu vào TV, gọi dispatchInputEvent() để chuyển sự kiện đến Đầu vào TV được liên kết .

Ví dụ đầu vào MHEG-5

Sơ đồ sau đây cho thấy chế độ xem chi tiết hơn về cách KeyEvents được định tuyến thông qua TIF của Android.

Ví dụ về nút Đỏ trên Android TV
Hình 7. Ví dụ về nút đỏ của Android TV

Nó mô tả quy trình của ứng dụng nút Đỏ, phổ biến ở Châu Âu để cho phép người dùng truy cập các ứng dụng tương tác trên TV của họ. Một ứng dụng có thể được phân phối qua luồng truyền tải này. Khi nhấp vào nút, nó cho phép người dùng tương tác với các ứng dụng phát sóng này. Ví dụ: bạn có thể sử dụng các ứng dụng phát sóng này để truy cập các trang web hoặc tỷ số thể thao có liên quan.

Xem phần Ứng dụng truyền phát để tìm hiểu cách các ứng dụng truyền phát tương tác với Ứng dụng TV.

Trong ví dụ này:

  1. Ứng dụng TV đang được lấy nét và nhận tất cả các phím.
  2. KeyEvents (ví dụ: nút Màu đỏ) được chuyển đến Đầu vào TV đang hoạt động dưới dạng InputEvents.
  3. Đầu vào TV của hệ thống tích hợp với ngăn xếp MHEG-5 và có quyền hệ thống RECEIVE_INPUT_EVENT .
  4. Khi nhận được mã khóa kích hoạt (ví dụ: nút Màu đỏ), Đầu vào TV sẽ kích hoạt ứng dụng phát sóng.
  5. Đầu vào TV sử dụng KeyEvents dưới dạng InputEvents và ứng dụng truyền phát là tiêu điểm và xử lý InputEvents cho đến khi loại bỏ.

Lưu ý : Đầu vào TV của bên thứ ba không bao giờ nhận được phím.

Đầu vào TV HAL

Đầu vào TV HAL hỗ trợ phát triển Đầu vào TV để truy cập phần cứng dành riêng cho TV. Cũng như các Android HAL khác, HAL đầu vào TV ( tv_input ) có sẵn trong cây nguồn AOSP và nhà cung cấp phát triển triển khai của nó.

ứng dụng truyền hình

Ứng dụng TV hệ thống trình bày nội dung truyền hình trực tiếp cho người dùng. Ứng dụng TV tham chiếu (Truyền hình trực tiếp) được cung cấp cùng với nền tảng Android, ứng dụng này có thể được sử dụng nguyên trạng, tùy chỉnh, mở rộng hoặc thay thế bởi các nhà sản xuất thiết bị. Mã nguồn có sẵn trong Dự án nguồn mở Android và bạn có thể bắt đầu với nó trong bài viết về ứng dụng Reference TV .

Các nhà sản xuất thiết bị có thể mở rộng Ứng dụng TV của họ để triển khai các tính năng dành riêng cho nhà sản xuất thiết bị hoặc quốc gia, tuy nhiên điều này không thuộc phạm vi của TIF hoặc Ứng dụng TV tham chiếu.

Ở mức tối thiểu, Ứng dụng TV của hệ thống cần xử lý các tác vụ sau:

Thiết lập và cấu hình

  • Tự động phát hiện đầu vào TV
  • Để Đầu vào TV bắt đầu thiết lập kênh
  • Kiểm soát cài đặt của cha mẹ
  • chỉnh sửa kênh

Đang xem

  • Truy cập và điều hướng tất cả các kênh truyền hình
  • Truy cập thanh thông tin chương trình truyền hình
  • Hiển thị dữ liệu Hướng dẫn lập trình điện tử (EPG)
  • Hỗ trợ nhiều bản âm thanh và phụ đề
  • Cung cấp thử thách mã PIN kiểm soát của phụ huynh
  • Cho phép lớp phủ giao diện người dùng đầu vào TV cho tiêu chuẩn TV (HbbTV, v.v.)
  • Điền kết quả tìm kiếm cho các kênh và chương trình truyền hình
  • Hiển thị thẻ liên kết ứng dụng
  • Hỗ trợ API dịch chuyển thời gian
  • Xử lý chức năng DVR và hỗ trợ API ghi TV

Bộ tính năng này sẽ tăng lên cùng với các phiên bản Android mới nơi các API TIF của nền tảng được mở rộng. CTS Verifier cung cấp phạm vi kiểm tra khả năng tương thích.

Hỗ trợ cho đầu vào TV của bên thứ ba

Android TV cung cấp API dành cho nhà phát triển cho đầu vào TV của bên thứ ba, cho phép các ứng dụng đã cài đặt đưa các kênh phần mềm vào trải nghiệm TV trực tiếp. Để đảm bảo triển khai thiết bị Android tương thích, Ứng dụng TV của hệ thống có một số trách nhiệm liên quan đến việc hiển thị các kênh và đầu vào TV của bên thứ ba cho người dùng. Ứng dụng Live TV tham chiếu cung cấp cách triển khai tương thích; nếu thay thế Ứng dụng TV hệ thống, các nhà sản xuất thiết bị phải đảm bảo các ứng dụng của riêng họ cung cấp khả năng tương thích tương tự, để đáp ứng kỳ vọng của nhà phát triển trên tất cả các thiết bị Android TV.

Ứng dụng TV của hệ thống phải hiển thị thông tin đầu vào của bên thứ ba cùng với dịch vụ truyền hình trực tiếp mặc định của thiết bị. Lời hứa của API dành cho nhà phát triển là người dùng sẽ có thể tìm thấy các kênh (sau khi được cài đặt) trong trải nghiệm TV tiêu chuẩn của họ.

Cho phép phân biệt trực quan giữa các kênh tích hợp và kênh của bên thứ ba, như được định nghĩa trong phần Ứng dụng TV của Android CDD.

Các phần sau đây cho biết ứng dụng Live TV đáp ứng các yêu cầu của CDD như thế nào.

Thiết lập kênh mới

Việc bổ sung các đầu vào/kênh mới của bên thứ ba bắt đầu bằng việc người dùng tìm và cài đặt Đầu vào TV từ cửa hàng ứng dụng, chẳng hạn như Google Play.

Một số đầu vào TV của bên thứ ba tự động thêm kênh vào cơ sở dữ liệu TvProvider. Tuy nhiên, hầu hết sẽ cung cấp hoạt động Thiết lập để cho phép người dùng thiết lập kênh của họ, cung cấp chi tiết đăng nhập và các hành động khác. Ứng dụng TV của hệ thống cần đảm bảo người dùng có thể kích hoạt hoạt động Thiết lập này, đó là lý do tại sao CDD yêu cầu đầu vào của bên thứ ba là các hành động điều hướng tối thiểu từ Ứng dụng TV chính.

Ứng dụng Live TV tham chiếu cung cấp menu Nguồn kênh để truy cập đầu vào.

Chuyển đến Cài đặt
Hình 8. Vào Cài đặt .

Chuyển đến Nguồn kênh trong Cài đặt
Hình 9. Chuyển đến Nguồn kênh trong Cài đặt.

Chọn nguồn của bạn từ danh sách.
Hình 10. Chọn nguồn của bạn từ danh sách.

Thêm kênh từ nguồn của bạn
Hình 11. Thêm kênh từ nguồn của bạn.

Ngoài ra, một thẻ thông báo được hiển thị ở đầu menu Ứng dụng TV sau khi TvInput mới được cài đặt, để đưa người dùng trực tiếp đến Cài đặt:

Có thông báo hiển thị các nguồn kênh mới.
Hình 12. Thông báo cho biết có sẵn các nguồn kênh mới.

Nếu người dùng thực hiện hành động thông qua thông báo, họ có thể chọn thiết lập nguồn của mình như trong Hình 10.

Xem Xác định dịch vụ đầu vào TV của bạn để biết kỳ vọng của nhà phát triển trong lĩnh vực này.

Tùy chỉnh danh sách kênh

Nhà sản xuất thiết bị có thể cung cấp giao diện người dùng để ẩn một số kênh nhất định và cho phép người dùng quản lý EPG của riêng họ. Truyền hình trực tiếp bao gồm cơ sở này.

Mở danh sách kênh trong Cài đặt.
Hình 13. Mở danh sách kênh trong Cài đặt .

Tùy chỉnh danh sách kênh của bạn.
Hình 14. Tùy chỉnh danh sách kênh của bạn.

EPG

Các nhà phát triển đầu vào của bên thứ ba cần tin tưởng rằng người dùng có thể dễ dàng điều hướng đến các kênh của họ trong quá trình sử dụng chung, trên tất cả các thiết bị Android TV tương thích.

Các kênh từ đầu vào của bên thứ ba phải được trình bày như một phần của EPG trải nghiệm truyền hình trực tiếp tiêu chuẩn của thiết bị. Có thể sử dụng phân tách trực quan hoặc các danh mục riêng biệt cho các kênh của bên thứ ba (xem phần Ứng dụng TV của Android CDD) —điều quan trọng là người dùng có thể tìm thấy các kênh mà họ đã cài đặt.

Các nhà sản xuất phải triển khai Ứng dụng TV để đưa vào kết quả tìm kiếm cho các yêu cầu tìm kiếm toàn cầu nhằm đảm bảo trải nghiệm người dùng tốt nhất. Truyền hình trực tiếp cung cấp cách triển khai (xem phần này cung cấp kết quả từ đầu vào của bên thứ ba (cần thiết để tương thích với nền tảng) cũng như đầu vào tích hợp sẵn.

dịch chuyển thời gian

Đối với các thiết bị trên Android 6.0 trở lên, Ứng dụng TV phải hỗ trợ API dịch chuyển thời gian của khung Android . Ngoài ra, các nhà sản xuất phải triển khai các điều khiển phát lại trong Ứng dụng TV, cho phép người dùng tạm dừng, tiếp tục, tua lại và tua nhanh quá trình phát lại.

Đối với Đầu vào TV hỗ trợ dịch chuyển thời gian, Ứng dụng TV cần hiển thị các điều khiển phát lại.

Điều khiển phát lại
Hình 15. Điều khiển phát lại

ĐẦU GHI HÌNH

Đối với các thiết bị trên Android 7.0 trở lên, Ứng dụng TV phải hỗ trợ API ghi TV của khung Android để hỗ trợ, liệt kê và phát các chương trình đã ghi.

Điều này cho phép các nhà sản xuất thiết bị cắm các hệ thống con DVR của họ vào TIF và giảm đáng kể nỗ lực tích hợp cần thiết để kích hoạt hoặc tích hợp chức năng DVR trên thiết bị TV. Nó cũng cho phép các bên thứ ba cung cấp các hệ thống DVR hậu mãi có thể cắm vào thiết bị Android TV.

Ngoài việc ghi nội dung trực tiếp, Ứng dụng TV còn xử lý xung đột tài nguyên. Ví dụ: nếu thiết bị có hai bộ dò, thiết bị có thể ghi hai chương trình cùng một lúc. Nếu người dùng yêu cầu ghi ba, Ứng dụng TV phải xử lý xung đột và sẽ hiển thị thông báo hoặc yêu cầu người dùng lên lịch ưu tiên cho các yêu cầu này.

Ứng dụng TV cũng có thể triển khai logic phức tạp hơn như hỏi người dùng xem họ có muốn ghi lại tất cả các tập trong tương lai trong một bộ khi họ yêu cầu ghi một tập hay không.

Xem sơ đồ sau để biết cách triển khai DVR có thể có trong Android TV.

Quay video kỹ thuật số trong Android TV
Hình 16. Quay video kỹ thuật số trong Android TV

  1. Dịch vụ Đầu vào TV cho Ứng dụng TV biết có bao nhiêu bộ chỉnh để Ứng dụng TV có thể xử lý xung đột tài nguyên có thể xảy ra.
  2. Ứng dụng TV nhận được yêu cầu do người dùng thực hiện để ghi lại chương trình TV.
  3. Ứng dụng TV lưu trữ lịch trình ghi trong cơ sở dữ liệu nội bộ của nó.
  4. Khi đến lúc ghi, Ứng dụng TV sẽ chuyển yêu cầu dò kênh được liên kết với bản ghi.
  5. Dịch vụ đầu vào TV nhận được yêu cầu này, phản hồi xem có tài nguyên phù hợp hay không và điều chỉnh kênh.
  6. Sau đó, Ứng dụng TV chuyển yêu cầu bắt đầu ghi tới Trình quản lý đầu vào TV.
  7. Dịch vụ đầu vào TV nhận được yêu cầu này và bắt đầu ghi.
  8. Dịch vụ đầu vào TV lưu trữ dữ liệu video thực tế trong bộ lưu trữ của nó, có thể là bộ nhớ ngoài hoặc bộ nhớ đám mây.
  9. Khi đến lúc kết thúc quá trình ghi, Ứng dụng TV sẽ chuyển yêu cầu dừng ghi tới Trình quản lý đầu vào của TV.
  10. Khi Dịch vụ đầu vào TV nhận được yêu cầu, nó sẽ dừng ghi và thêm siêu dữ liệu được liên kết của nó vào Nhà cung cấp TV để Ứng dụng TV có thể hiển thị bản ghi cho người dùng khi được yêu cầu.

Để biết thêm thông tin về cách triển khai các tính năng Ghi trong dịch vụ Đầu vào TV của bạn, hãy xem bài viết Ghi TV này.

tài nguyên hữu ích

  • CDD Android và các API dành cho nhà phát triển được lập thành tài liệu là những tài liệu tham khảo cuối cùng.
  • Trình xác minh CTS thực hiện các API như một phần của chương trình kiểm tra khả năng tương thích. Chạy ứng dụng này với Live TV có thể là một cách hữu ích để xem EPG, Tìm kiếm, Kiểm soát của phụ huynh và các yêu cầu khác trong bối cảnh đầu vào của bên thứ ba.
  • Xem Xác định dịch vụ đầu vào TV của bạn để biết kỳ vọng của nhà phát triển trong lĩnh vực này.

Kiểm soát của cha mẹ

Kiểm soát của phụ huynh cho phép người dùng chặn các kênh và chương trình không mong muốn, nhưng bỏ qua việc chặn bằng cách nhập mã PIN.

Trách nhiệm đối với chức năng kiểm soát của phụ huynh được chia sẻ giữa Ứng dụng TV, dịch vụ Trình quản lý đầu vào TV, Nhà cung cấp TV và Đầu vào TV.

Kiểm soát của phụ huynh là bắt buộc và được CTS Verifier bảo vệ.

Một số quốc gia đã xác định các hệ thống xếp hạng mà Đầu vào TV có thể sử dụng thông qua API TVContentRating . Ngoài ra, Đầu vào TV có thể đăng ký hệ thống xếp hạng tùy chỉnh của riêng chúng như đã được chứng minh bằng thử nghiệm Trình xác minh CTS, đưa ra xếp hạng 'giả mạo'. Đối với các quốc gia tồn tại hệ thống xếp hạng tiêu chuẩn, các nhà sản xuất thiết bị được khuyến khích kết hợp Kiểm soát của phụ huynh trong Khung đầu vào TV với bất kỳ cơ chế nào khác mà họ có thể đưa vào.

nhà cung cấp truyền hình

Mỗi hàng kênh có trường COLUMN_LOCKED được sử dụng để khóa không cho các kênh cụ thể xem mà không cần nhập mã PIN. Trường chương trình COLUMN_CONTENT_RATING được dùng để hiển thị và không được sử dụng để thực thi quyền kiểm soát của phụ huynh.

Trình quản lý đầu vào TV

Trình quản lý đầu vào TV lưu trữ mọi TvContentRating bị chặn và phản hồi isRatingBlocked() để thông báo xem có nên chặn nội dung có xếp hạng nhất định hay không.

Đầu vào TV

Đầu vào TV kiểm tra xem có nên chặn nội dung hiện tại hay không bằng cách gọi isRatingBlocked() trên Trình quản lý đầu vào TV khi xếp hạng của nội dung được hiển thị đã thay đổi (về thay đổi chương trình hoặc kênh) hoặc cài đặt kiểm soát của phụ huynh đã thay đổi (trên ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Nếu nội dung bị chặn, Đầu vào TV sẽ tắt âm thanh và video, đồng thời thông báo cho ứng dụng TV rằng nội dung hiện tại bị chặn bằng cách gọi notifyContentBlocked(TvContentRating) . Nếu nội dung không bị chặn, Đầu vào TV sẽ bật âm thanh và video và thông báo cho Ứng dụng TV rằng nội dung hiện tại được cho phép bằng cách gọi notifyContentAllowed() .

ứng dụng truyền hình

Để tôn trọng API kiểm soát của phụ huynh và do đó tạo ra một nền tảng tương thích, Ứng dụng TV của hệ thống cần cung cấp cách để người dùng quản lý kiểm soát của phụ huynh, bao gồm mọi xếp hạng tùy chỉnh được đăng ký bởi các ứng dụng cụ thể.

Ứng dụng TV hiển thị giao diện người dùng mã PIN khi được Đầu vào TV thông báo rằng nội dung hiện tại bị chặn hoặc khi người dùng cố gắng xem một kênh bị chặn.

Ứng dụng TV không trực tiếp lưu trữ cài đặt kiểm soát của phụ huynh. Khi người dùng thay đổi cài đặt kiểm soát của phụ huynh, mọi TvContentRating bị chặn sẽ được lưu trữ bởi Trình quản lý đầu vào TV và các kênh bị chặn sẽ được lưu trữ bởi Nhà cung cấp TV.

Ứng dụng TV cần khai báo quyền android.permission.MODIFY_PARENTAL_CONTROLS để thay đổi cài đặt kiểm soát của phụ huynh.

Các nhà sản xuất thiết bị được khuyến khích:

  • Thực hiện kiểm tra kiểm soát của phụ huynh của CTS Verifier đối với ứng dụng Live TV tham chiếu để minh họa các yêu cầu tương thích.
  • Sử dụng ứng dụng Live TV làm tài liệu tham khảo cho Ứng dụng TV của riêng họ: cụ thể là xem nguồn ContentRatingsManagerRatingSystemsFragment cũng như cách họ xử lý xếp hạng tùy chỉnh.

HDMI-CEC

HDMI-CEC cho phép một thiết bị điều khiển một thiết bị khác, do đó cho phép một điều khiển từ xa duy nhất điều khiển nhiều thiết bị trong rạp hát gia đình. Nó được Android TV sử dụng để tăng tốc độ thiết lập và cho phép điều khiển từ xa đối với các Đầu vào TV khác nhau thông qua Ứng dụng TV trung tâm. Chẳng hạn, nó có thể chuyển đổi đầu vào, bật hoặc tắt nguồn thiết bị, v.v.

Android TIF triển khai HDMI-CEC dưới dạng Dịch vụ điều khiển HDMI để các nhà sản xuất thiết bị chỉ cần phát triển trình điều khiển cấp thấp tương tác với Android TV nhẹ HAL, bỏ qua logic nghiệp vụ phức tạp hơn. Khi cung cấp triển khai tiêu chuẩn, Android tìm cách giảm thiểu các sự cố tương thích bằng cách giảm triển khai phân mảnh và hỗ trợ tính năng chọn lọc. Dịch vụ điều khiển HDMI sử dụng các dịch vụ Android hiện có, bao gồm đầu vào và nguồn.

Điều này có nghĩa là việc triển khai HDMI-CEC hiện tại sẽ cần được thiết kế lại để tương tác với Android TIF. Chúng tôi khuyến nghị nền tảng phần cứng chứa một bộ vi xử lý để nhận các lệnh bật nguồn CEC và các lệnh khác.

Tích hợp CEC trên Android TV
Hình 17. Tích hợp CEC trên Android TV

  1. Xe buýt CEC nhận lệnh từ nguồn hiện đang hoạt động để chuyển sang một nguồn khác.
  2. Trình điều khiển chuyển lệnh tới HDMI-CEC HAL.
  3. HAL thông báo cho tất cả ActiveSourceChangeListeners .
  4. Dịch vụ điều khiển HDMI được thông báo về thay đổi nguồn thông qua ActiveSourceChangeListener .
  5. Dịch vụ Trình quản lý đầu vào TV tạo ý định cho Ứng dụng TV để chuyển đổi nguồn.
  6. Sau đó, Ứng dụng TV tạo Phiên quản lý đầu vào TV cho Đầu vào TV được chuyển sang và gọi setMain trên phiên đó.
  7. Phiên Trình quản lý đầu vào TV chuyển thông tin này đến Đầu vào TV HDMI.
  8. Đầu vào TV HDMI yêu cầu đặt bề mặt dải bên.
  9. Dịch vụ quản lý đầu vào TV tạo lệnh điều khiển định tuyến tương ứng trở lại Dịch vụ điều khiển HDMI khi bề mặt được đặt.

Nguyên tắc tích hợp TV

ứng dụng phát sóng

Vì mỗi quốc gia có các yêu cầu dành riêng cho chương trình phát sóng (MHEG, Teletext, HbbTV, v.v.), nên các nhà sản xuất phải cung cấp các giải pháp của riêng họ cho ứng dụng phát sóng, ví dụ:

  • MHEG: ngăn xếp gốc
  • Teletext: ngăn xếp gốc
  • HbbTV: Giải pháp HbbTV từ Vewd Software

Trong bản phát hành Android L, Android TV mong muốn các nhà sản xuất thiết bị sử dụng các bộ tích hợp hệ thống hoặc giải pháp Android cho ngăn xếp TV khu vực, chuyển bề mặt sang ngăn xếp phần mềm TV hoặc chuyển mã khóa cần thiết để tương tác với ngăn xếp kế thừa.

Sau đây là cách ứng dụng phát sóng và Ứng dụng TV tương tác:

  1. Ứng dụng TV đang được lấy nét, nhận tất cả các phím.
  2. Ứng dụng TV chuyển các phím (ví dụ: nút Màu đỏ) tới thiết bị Đầu vào TV.
  3. Thiết bị Đầu vào TV tích hợp bên trong với ngăn xếp TV cũ.
  4. Khi nhận được mã khóa kích hoạt (ví dụ: nút Màu đỏ), thiết bị Đầu vào TV sẽ kích hoạt các ứng dụng phát sóng.
  5. Một ứng dụng truyền phát tập trung vào Ứng dụng TV và xử lý các hành động của người dùng.

Đối với đề xuất/tìm kiếm bằng giọng nói, ứng dụng phát sóng có thể hỗ trợ tìm kiếm trong ứng dụng cho tìm kiếm bằng giọng nói.

, Biểu tượng Android TV HAL

Android TV Input Framework (TIF) đơn giản hóa việc phân phối nội dung trực tiếp tới Android TV. Android TIF cung cấp một API tiêu chuẩn cho các nhà sản xuất để tạo các mô-đun đầu vào để điều khiển Android TV, đồng thời cho phép tìm kiếm và đề xuất truyền hình trực tiếp thông qua siêu dữ liệu do Đầu vào TV xuất bản.

Khung này không tìm cách thực hiện các tiêu chuẩn TV hoặc các yêu cầu của khu vực, nhưng giúp các nhà sản xuất thiết bị dễ dàng đáp ứng các tiêu chuẩn phát sóng TV kỹ thuật số của khu vực mà không cần thực hiện lại. Tài liệu trong phần này cũng có thể hữu ích cho các nhà phát triển ứng dụng bên thứ ba muốn tạo Đầu vào TV tùy chỉnh.

Các thành phần

Việc triển khai Khung đầu vào của Android TV bao gồm Trình quản lý đầu vào TV. TIF hoạt động với Ứng dụng TV, một ứng dụng hệ thống không thể thay thế bằng ứng dụng của bên thứ ba, để truy cập các kênh tích hợp sẵn và bộ chỉnh IP. Ứng dụng TV giao tiếp với các mô-đun Đầu vào TV do nhà sản xuất thiết bị hoặc các bên khác cung cấp thông qua Trình quản lý đầu vào TV.

Khung đầu vào TV bao gồm:

  • Nhà cung cấp TV ( com.android.providers.tv.TvProvider ): cơ sở dữ liệu về các kênh, chương trình và các quyền liên quan
  • Ứng dụng TV ( com.android.tv.TvActivity ): ứng dụng xử lý tương tác của người dùng
  • Trình quản lý đầu vào TV ( android.media.tv.TvInputManager ): cho phép Đầu vào TV giao tiếp với Ứng dụng TV
  • Đầu vào TV: một ứng dụng đại diện cho bộ điều chỉnh vật lý hoặc ảo và cổng đầu vào
  • Đầu vào TV HAL ( mô-đun tv_input ): định nghĩa phần cứng cho phép Đầu vào TV của hệ thống truy cập vào phần cứng dành riêng cho TV khi được triển khai
  • Parental Control: công nghệ cho phép chặn các kênh và chương trình
  • HDMI-CEC: công nghệ cho phép điều khiển từ xa nhiều thiết bị khác nhau qua HDMI
  • Tuner Framework: khung cho đầu vào TV tích hợp trong Tuner
  • MediaCas: khung truy cập có điều kiện
  • Tuner Resource Manager: dịch vụ quản lý tài nguyên phần cứng cho đầu vào TV, MediaCas và đầu vào Bộ dò sóng tích hợp

Các thành phần này được đề cập chi tiết dưới đây. Xem sơ đồ sau để có cái nhìn chi tiết về kiến ​​trúc Khung đầu vào của Android TV.

Tổng quan về kiến ​​trúc Android TIF
Hình 1. Kiến trúc Android TV Input Framework (TIF)

Chảy

Đây là cách kiến ​​trúc được thực hiện:

  1. Người dùng nhìn thấy và tương tác với Ứng dụng TV, một ứng dụng hệ thống không thể thay thế bằng ứng dụng của bên thứ ba.
  2. Ứng dụng TV hiển thị nội dung AV từ Đầu vào TV.
  3. Ứng dụng TV không thể giao tiếp trực tiếp với Đầu vào TV. Trình quản lý đầu vào TV xác định trạng thái của Đầu vào TV cho Ứng dụng TV. Xem Trình quản lý đầu vào TV bên dưới để biết thêm chi tiết về những giới hạn này.

Quyền

  • Chỉ các Đầu vào TV signatureOrSystem và Ứng dụng TV mới có toàn quyền truy cập vào cơ sở dữ liệu Nhà cung cấp TV và có thể nhận các Sự kiện chính.
  • Chỉ Đầu vào TV của hệ thống mới có thể truy cập HAL Đầu vào TV thông qua dịch vụ Trình quản lý đầu vào TV. Đầu vào TV được truy cập trực tiếp qua các phiên Trình quản lý đầu vào TV.
  • Đầu vào TV của bên thứ ba có quyền truy cập khóa gói vào cơ sở dữ liệu Nhà cung cấp TV và chỉ có thể ĐỌC/VIẾT đối với các hàng gói phù hợp.
  • Đầu vào TV của bên thứ ba có thể hiển thị nội dung của chính họ hoặc nội dung từ đầu vào TV thông qua của nhà sản xuất thiết bị, chẳng hạn như HDMI1. Chúng không thể hiển thị nội dung từ các đầu vào TV không thông qua, chẳng hạn như bộ điều chỉnh IPTV hoặc tích hợp sẵn.
  • Quyền TV_INPUT_HARDWARE cho ứng dụng Đầu vào TV phần cứng, báo hiệu Dịch vụ quản lý đầu vào TV để thông báo cho dịch vụ Đầu vào TV khi khởi động để gọi Dịch vụ quản lý đầu vào TV và thêm Đầu vào TV của nó. Quyền này cho phép ứng dụng Đầu vào TV phần cứng hỗ trợ nhiều Đầu vào TV trên mỗi dịch vụ Đầu vào TV, cũng như có thể tự động thêm và xóa Đầu vào TV được hỗ trợ.

nhà cung cấp truyền hình

The TV Provider database stores the channels and programs from TV Inputs. The TV Provider also publishes and manages the associated permissions so that TV Inputs can see only their own records. For instance, a specific TV Input can see only the channels and programs it has supplied and is prohibited from accessing any other TV Inputs' channels and programs.

The TV Provider maps "broadcast genre" to "canonical genre" internally. TV Inputs are responsible for populating "broadcast genre" with the value in the underlying broadcast standard, and the "canonical genre" field will automatically be populated with the correct associated genre from android.provider.TvContract.Genres . For example, with broadcast standard ATSC A/65 and program with genre 0x25 (meaning “Sports”), the TV Input will populate the “broadcast genre” with the String “Sports” and TV Provider will populate the “canonical genre” field with the mapped value android.provider.TvContract.Genres.SPORTS .

See the diagram below for a detailed view of the TV Provider.

Android TV Provider
Figure 2. Android TV Provider

Only apps in the privileged system partition can read the entire TV Provider database.

Passthrough TV inputs do not store channels and programs.

In addition to the standard fields for channels and programs, the TV Provider database also offers a BLOB type field, COLUMN_INTERNAL_PROVIDER_DATA , in each table that TV Inputs may use to store arbitrary data. That BLOB data can include custom information, such as frequency of the associated tuner, and may be provided in a protocol buffer or another form. A Searchable field is available to make certain channels unavailable in search (such as to meet country-specific requirements for content protection).

Database field examples

The TV Provider supports structured data in channel ( android.provider.TvContract.Channels ) and program ( android.provider.TvContract.Programs ) tables. These tables are populated and accessed by TV Inputs and system apps like the TV App. These tables have four types of fields:

  • Display: Display fields contain information that apps may want to make visible to the user, like a channel's name ( COLUMN_DISPLAY_NAME ) or number ( COLUMN_DISPLAY_NUMBER ), or the title of the program being viewed.
  • Metadata: There are three fields for identifying content, according to relevant standards, like a channel's transport stream ID ( COLUMN_TRANSPORT_STREAM_ID ), original network ID ( COLUMN_ORIGINAL_NETWORK_ID ) and service id ( COLUMN_SERVICE_ID ).
  • Internal data : Fields that are for the custom use of TV Inputs.
    Some fields, like COLUMN_INTERNAL_PROVIDER_DATA , are customizable BLOB fields where a TV Input can store arbitrary metadata about their channel or program.
  • Flag: Flag fields represent whether a channel should be restricted from search, browse, or viewing. This can be set only at the channel level. All programs defer to the setting on the channel.
    • COLUMN_SEARCHABLE : Restricting search from some channels may be a requirement in certain regions. COLUMN_SEARCHABLE = 0 means the channel should not be exposed in search results.
    • COLUMN_BROWSABLE : Visible to system applications only. Restricting channel from being browsed by applications. COLUMN_BROWSABLE = 0 means the channel should not be included in the channel list.
    • COLUMN_LOCKED : Visible to system applications only. Restricting channel from being viewed by invalid accounts without entering PIN code. COLUMN_LOCKED = 1 means the channel should be protected by parental control.

For a more exhaustive list of the fields, see android/frameworks/base/media/java/android/media/tv/TvContract.java

Permissions and access control

All fields are visible to anyone with access to the corresponding row. No fields are directly accessible to users; they see only what the TV App, System apps, or TV Inputs surface.

  • Each row has PACKAGE_NAME , the package (app) that owns that row, checked on Query, Insert, Update via TvProvider.java. A TV Input may access only the information it wrote and is cordoned off from the information provided by other TV Inputs.
  • READ, WRITE permissions via AndroidManifest.xml (requires user consent) to determine available channels.
  • Only signatureOrSystem apps can acquire ACCESS_ALL_EPG_DATA permission to access the entire database.

TV Input Manager

The TV Input Manager provides a central system API to the overall Android TV Input Framework. It arbitrates interaction between apps and TV Inputs and provides parental control functionality. TV Input Manager sessions must be created one-to-one with TV Inputs. The TV Input Manager allows access to installed TV Inputs so apps may:

  • List TV inputs and check their status
  • Create sessions and manage listeners

For sessions, a TV Input may be tuned by the TV App only to URIs it has added to the TV Provider database, except for passthrough TV Inputs which can be tuned to using TvContract.buildChannelUriForPassthroughInput() . A TV Input may also have its volume set. TV Inputs provided and signed by the device manufacturer (signature apps) or other apps installed in the system partition will have access to the entire TV Provider database. This access can be used to construct apps to browse and search across all available TV channels and programs.

An app may create and register a TvInputCallback with the android.media.tv.TvInputManager to be called back on a TV Input's state change or on the addition or removal of a TV Input. For example, a TV App can react when a TV Input is disconnected by displaying it as disconnected and preventing its selection.

The TV Input Manager abstracts communication between the TV App and TV Inputs. The standard interface of TV Input Manager and TV Input allows multiple device manufacturers to create their own TV Apps while helping all third-party TV Inputs work on all TV Apps.

TV Inputs

TV Inputs are Android apps in the sense they have an AndroidManifest.xml and are installed (via Play, pre-installed, or sideloaded). Android TV supports pre-installed system apps, apps signed by the device manufacturer and third-party TV Inputs.

Some inputs, like the HDMI input or built-in tuner input, can be provided only by the manufacturer as they speak directly with the underlying hardware. Others, such as IPTV, place-shifting, and external STB, can be supplied by third parties as APKs on Google Play Store. Once downloaded and installed, the new input can be selected within the TV App.

Passthrough input example

Android TV System Input
Figure 3. Android TV System Input

In this example, the TV Input provided by the device manufacturer is trusted and has full access to the TV Provider. As a passthrough TV Input, it does not register any channels or programs with the TV Provider. To obtain the URI used to reference the passthrough input, use the android.media.tv.TvContract utility method buildChannelUriForPassthroughInput(String inputId) . The TV App communicates with the TV Input Manager to reach the HDMI TV Input.

Built-in tuner example

Android TV Built-in Tuner Input
Figure 4. Android TV Built-in Tuner Input

In this example, the Built-in Tuner TV Input provided by the device manufacturer is trusted and has full access to the TV Provider.

Third-party input example

Android TV third-party input
Figure 5. Android TV third-party input

In this example, the external STB TV Input is provided by a third party. Since that TV Input can't directly access the HDMI video feed coming in, it must go through the TV Input Manager and use the HDMI TV Input provided by the device manufacture.

Through the TV Input Manager, the external STB TV Input can speak with the HDMI TV Input and ask it to show the video on HDMI1. So the STB TV Input can control the TV while the manufacturer-provided HDMI TV Input renders the video.

Picture in picture (PIP) example

Android TV KeyEvents
Figure 6. Android TV KeyEvents

The diagram above shows how buttons on a remote control are passed to a specific TV Input for picture in picture (PIP) display. Those button presses are interpreted by the hardware driver supplied by the device manufacturer, converting hardware scancodes to Android keycodes and passing them to the standard Android input pipeline InputReader and InputDispatcher functions as KeyEvents . These in turn trigger events on the TV App if it is in focus.

Only system TV Inputs are eligible to receive InputEvents , and only if they have the RECEIVE_INPUT_EVENT system permission. The TV Input is responsible to determine which InputEvents to consume and should allow the TV App to handle the keys it does not need to consume.

The TV App is responsible for knowing which system TV Input is active, meaning selected by the user, and to disambiguate incoming KeyEvents and route them to the correct TV Input Manager session, calling dispatchInputEvent() to pass on the event to the associated TV Input.

MHEG-5 input example

The following diagram shows a more detailed view of how KeyEvents are routed through the Android TIF.

Android TV Red button example
Figure 7. Android TV Red button example

It depicts the flow of a Red button app, common in Europe for letting users access interactive apps on their televisions. An app can be delivered over this transport stream. When the button is clicked, it lets users interact with these broadcast apps. For example, you might use these broadcast apps to access related web pages or sports scores.

See the Broadcast app section to learn how broadcast apps interact with the TV App.

In this example:

  1. The TV App is in focus and receives all keys.
  2. KeyEvents (eg the Red button) is passed to the active TV Input as InputEvents.
  3. The system TV Input integrates with MHEG-5 stack and has the RECEIVE_INPUT_EVENT system permission.
  4. On receiving activation keycode (eg Red button), the TV Input activates broadcast app.
  5. TV input consumes KeyEvents as InputEvents and the broadcast app is the focus and handles InputEvents until dismissed.

Note : Third-party TV inputs never receive keys.

TV Input HAL

The TV Input HAL aids development of TV Inputs to access TV-specific hardware. As with other Android HALs, the TV Input HAL ( tv_input ) is available in the AOSP source tree and the vendor develops its implementation.

TV App

The system TV App presents live TV content to the user. A reference TV App (Live TV) is provided alongside the Android platform, which can be used as-is, customized, extended, or replaced by device manufacturers. The source code is available in the Android Open Source Project, and you can get started with it in the Reference TV app article.

Device manufacturers may extend their TV Apps to implement device manufacturer or country-specific features, however this is not in the scope of TIF or the reference TV App.

At a minimum, the system TV App needs to handle the following tasks:

Setup and configuration

  • Auto-detect TV Inputs
  • Let TV Inputs initiate channel setup
  • Control parental settings
  • Edit channels

Viewing

  • Access and navigate all TV channels
  • Access TV program information bar
  • Display Electronic Programming Guide (EPG) data
  • Support multiple audio and subtitle tracks
  • Supply parental control PIN challenge
  • Allow TV Input UI overlay for TV standard (HbbTV, etc.)
  • Populate search results for TV channels and programs
  • Display app linking cards
  • Support timeshifting APIs
  • Handle DVR functionality and support TV recording APIs

This feature set will increase in line with new Android versions where the platform TIF APIs are extended. CTS Verifier provides the compatibility test coverage.

Support for third-party TV Inputs

Android TV provides developer APIs for third-party TV inputs, enabling installed apps to deliver software channels into the live TV experience. To ensure a compatible Android device implementation, the system TV App has some responsibilities regarding surfacing third-party TV inputs and channels to the user. The reference Live TV app provides a compatible implementation; if replacing the system TV App, device manufacturers must ensure their own apps provide similar compatibility, to meet developer expectations across all Android TV devices.

The system TV App must surface third-party inputs alongside the device's default live TV service. The promise of the developer APIs is that users will be able to find channels (once installed) within their standard TV experience.

Visual differentiation between built-in channels and third-party channels is allowed, as defined in the TV App section of the Android CDD.

The following sections show how the Live TV application fulfills the CDD requirements.

New channel setup

The addition of new third-party inputs/channels begins with the user finding and installing a TV Input from an application store, such as Google Play.

Some third-party TV inputs automatically add channels to the TvProvider database. However most will provide a Setup activity to enable the user to set up their channels, provide login details, and other actions. The system TV App needs to ensure the user can activate this Setup activity, which is why the CDD requires third-party inputs be minimal navigation actions away from the main TV App.

The reference Live TV app provides the Channel Sources menu for accessing inputs.

Go to Settings
Figure 8. Go to Settings .

Go to Channel source in Settings
Figure 9. Go to Channel sources in Settings.

Select your source from the list.
Figure 10. Select your source from the list.

Add channels from your source
Figure 11. Add channels from your source.

In addition a notification card is shown at the top of the TV App menu after a new TvInput is installed, to take the user directly to the Setup:

Notification that shows new channel sources are available.
Figure 12. Notification that shows new channel sources are available.

If the user takes action through the notification, they can select to set up their sources as seen in Figure 10.

See Define Your TV Input Service for developer expectations in this area.

Customize the channel list

Device manufacturers may provide a UI to hide certain channels and enable users to manage their own EPGs. Live TV includes this facility.

Open the channel list in Settings.
Figure 13. Open the channel list in Settings .

Customize your channel list.
Figure 14. Customize your channel list.

EPG

Third-party input developers need to have confidence that users can easily navigate to their channels during general usage, across all compatible Android TV devices.

Channels from third-party inputs must be presented as part of the device's standard live TV experience EPG. Visual separation or separate categories for third-party channels can be used (see the TV App section of the Android CDD) —what's key is that users are able to find the channels they have installed.

Manufacturers must implement the TV App to include search results for global search requests in order to ensure the best user experience. Live TV provides an implementation (see which provides results from third-party inputs (required for platform compatibility) as well as built-in inputs.

Time shifting

For devices on Android 6.0 and above, the TV App must support the Android framework time shifting APIs . Additionally, manufacturers must implement playback controls in the TV App, which allow users to pause, resume, rewind, and fast forward the playback.

For TV Inputs that support time shifting, the TV App needs to display playback controls.

Playback controls
Figure 15. Playback controls

DVR

For devices on Android 7.0 and above, the TV App must support the Android framework TV recording APIs , to support, list, and play recorded programs.

This allows device manufacturers to plug their DVR subsystems into TIF and dramatically reduce the integration effort it takes to enable or integrate DVR functionality on a TV device. It also enables third parties to provide aftermarket DVR systems that can be plugged into an Android TV device.

In addition to recording live content, the TV App also handles resource conflict. For example, if the device has two tuners, it can record two programs at the same time. If the user asks to record three, the TV App must handle the conflict and should either surface a notification or request that the user schedules a priority for these requests.

TV Apps can also implement more sophisticated logic like asking a user if they'd like to record all future episodes in a series when they request to record one episode.

See the following diagram for a view into a possible DVR implementation in Android TV.

Digital video recording in Android TV
Figure 16. Digital video recording in Android TV

  1. The TV Input Service tells the TV App how many tuners are available so that the TV App can handle possible resource conflict.
  2. The TV App receives a user-initiated request to record a TV program.
  3. The TV App stores the recording schedule in its internal database.
  4. When it's time to record, the TV App passes a request to tune to the channel associated with the recording.
  5. The TV Input Service receives this request, responds with whether or not there are appropriate resources, and tunes to the channel.
  6. Then the TV App passes a request to start recording to the TV Input Manager.
  7. The TV Input Service receives this request and starts recording.
  8. The TV Input Service stores the actual video data in its storage, which can be external storage or cloud storage.
  9. When it's time to finish the recording, the TV App passes the stop recording request to the TV Input Manager.
  10. Once the TV Input Service receives the request, it stops the recording and adds its associated metadata to the TV Provider so that the TV App can show the recording to users when requested.

For more information about implementing Recording features in your TV Input service, see this TV Recording article.

Useful resources

  • The Android CDD and documented developer APIs are the definitive references.
  • CTS Verifier exercises the APIs as part of the compatibility testing program. Running this against Live TV may be a useful way to see the EPG, Search, Parental Control, and other requirements in the context of third-party inputs.
  • See Define Your TV Input Service for developer expectations in this area.

Parental control

Parental control lets a user block undesired channels and programs, but bypass the block by entering a PIN code.

Responsibility for parental control functionality is shared amongst the TV App, TV Input Manager service, TV Provider, and TV Input.

Parental control is mandatory, and is covered by CTS Verifier.

A number of countries have defined rating systems that TV Inputs can use via the TVContentRating API . Additionally, TV Inputs can register their own custom rating systems as demonstrated by the CTS Verifier test, which introduces a 'fake' rating. For countries where a standard rating system exists, device manufacturers are encouraged to combine the TV Input Framework Parental Control with any other mechanisms they may include.

TV provider

Each channel row has a COLUMN_LOCKED field that is used to lock specific channels from viewing without entering a PIN code. The program field COLUMN_CONTENT_RATING is intended for display and is not used to enforce parental control.

TV Input Manager

The TV Input Manager stores every blocked TvContentRating and responds to isRatingBlocked() to advise if content with the given rating should be blocked.

TV Input

The TV Input checks if the current content should be blocked by calling isRatingBlocked() on the TV Input Manager when the rating of the displayed content has changed (on program or channel change), or parental control settings have changed (on ACTION_BLOCKED_RATINGS_CHANGED and ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ). If the content should be blocked, the TV Input disables the audio and video and notifies the TV app that the current content is blocked by calling notifyContentBlocked(TvContentRating) . If the content should not be blocked, the TV Input enables audio and video and notifies the TV App the current content is allowed by calling notifyContentAllowed() .

TV App

To honor the parental control APIs, and therefore create a compatible platform, the system TV App needs to provide a way for users to manage parental control, including for any custom ratings registered by specific apps.

The TV App shows a PIN code UI when it is notified by a TV Input that the current content is blocked or when the user attempts to view a blocked channel.

The TV App does not directly store the parental control settings. When the user changes the parental control settings, every blocked TvContentRating is stored by the TV Input Manager, and blocked channels are stored by the TV Provider.

The TV App needs to declare the permission android.permission.MODIFY_PARENTAL_CONTROLS in order to change the parental control settings.

Device manufacturers are encouraged to:

  • Exercise the CTS Verifier parental controls test against the reference Live TV application for a demonstration of the compatibility requirements.
  • Use the Live TV app as reference for their own TV App: in particular see ContentRatingsManager and RatingSystemsFragment source, and how they handle custom ratings.

HDMI-CEC

HDMI-CEC allows one device to control another, thereby enabling a single remote to control multiple appliances in a home theater. It is used by Android TV to speed setup and allow distant control over various TV Inputs via the central TV App. For instance, it may switch inputs, power up or down devices, and more.

The Android TIF implements HDMI-CEC as the HDMI Control Service so that device manufacturers merely need to develop low-level drivers that interact with the lightweight Android TV HAL, skipping more complex business logic. In providing a standard implementation, Android seeks to mitigate compatibility issues by reducing fragmented implementations and selective feature support. The HDMI Control Service uses the existing Android services, including input and power.

This means existing HDMI-CEC implementations will need to be redesigned to interoperate with the Android TIF. We recommend the hardware platform contain a microprocessor to receive CEC power on and other commands.

CEC integration on Android TV
Figure 17. CEC integration on Android TV

  1. The CEC bus receives a command from the currently active source to switch to a different source.
  2. The driver passes the command to the HDMI-CEC HAL.
  3. The HAL notifies all ActiveSourceChangeListeners .
  4. THe HDMI Control Service is notified of source change via ActiveSourceChangeListener .
  5. The TV Input Manager service generates an intent for the TV App to switch the source.
  6. The TV App then creates a TV Input Manager Session for the TV Input being switched to and calls setMain on that session.
  7. The TV Input Manager Session passes this information on to the HDMI TV Input.
  8. The HDMI TV input requests to set sideband surface.
  9. The TV Input Manager Service generates a corresponding routing control command back to HDMI Control Service when the surface is set.

TV integration guidelines

Broadcast app

Because each country has broadcast-specific requirements (MHEG, Teletext, HbbTV, and more), manufacturers are expected to supply their own solutions for the broadcast app, for example:

  • MHEG: native stack
  • Teletext: native stack
  • HbbTV: HbbTV solution from Vewd Software

In the Android L release, Android TV expects device manufacturers to use systems integrators or the Android solutions for regional TV stacks, pass the surface to TV software stacks, or pass the necessary key code to interact with legacy stacks.

Here's how the broadcast app and TV App interact:

  1. The TV App is in focus, receiving all keys.
  2. The TV App passes keys (eg Red button) to the TV Input device.
  3. The TV Input device internally integrates with legacy TV stack.
  4. On receiving an activation keycode (eg Red button), the TV Input device activates broadcast apps.
  5. A broadcast app takes focus in the TV App and handles user actions.

For voice search/recommendation, the broadcast app may support In-app search for voice search.