TV 입력 프레임워크

Android TV HAL 아이콘

Android TV 입력 프레임워크(TIF)를 사용하면 실시간 콘텐츠를 Android TV에 제공하는 과정이 간소화됩니다. Android TIF는 제조업체에서 Android TV를 제어할 수 있도록 입력 모듈을 만드는 표준 API를 제공하며, TV 입력에 의해 게시되는 메타데이터를 통한 실시간 TV 검색 및 추천을 지원합니다.

프레임워크는 TV 표준이나 지역 요구사항을 구현하려고 하지 않지만 기기 제조업체에서 재구현 없이 지역의 디지털 TV 방송 표준을 쉽게 충족할 수 있게 해줍니다. 이 섹션의 문서는 맞춤 TV 입력 장치를 구축하고 싶어 하는 타사 앱 개발자에게도 유용할 수 있습니다.

구성요소

Android TV 입력 프레임워크에는 TV 입력 관리자가 포함되어 있습니다. TIF는 타사 앱으로 대체 불가한 시스템 앱인 TV 앱과 함께 작동하여 내장 및 IP 튜너 채널에 액세스합니다. TV 앱은 기기 제조업체 또는 다른 타사에서 TV 입력 관리자를 통해 공급하는 TV 입력 모듈과 통신합니다.

TV 입력 프레임워크는 다음으로 구성됩니다.

  • TV 서비스 제공업체(com.android.providers.tv.TvProvider): 채널, 프로그램 및 관련 권한으로 이루어진 데이터베이스
  • TV 앱(com.android.tv.TvActivity): 사용자 상호작용을 처리하는 앱
  • TV 입력 관리자(android.media.tv.TvInputManager): TV 입력이 TV 앱과 통신할 수 있도록 허용
  • TV 입력: 실제 또는 가상 튜너 및 입력 포트를 나타내는 앱
  • TV 입력 HAL(tv_input 모듈): 구현되면 시스템 TV 입력이 TV 관련 하드웨어에 액세스할 수 있게 해주는 하드웨어 정의
  • 자녀 보호 기능: 채널 및 프로그램을 차단할 수 있게 해주는 기술
  • HDMI-CEC: HDMI를 통해 다양한 기기를 원격으로 제어할 수 있게 해주는 기술
  • 튜너 프레임워크: 내장 튜너 TV 입력을 위한 프레임워크
  • MediaCas: 조건부 액세스를 위한 프레임워크
  • 튜너 리소스 관리자: TV 입력, MediaCas 및 내장 튜너 입력을 위한 하드웨어 리소스를 관리하는 서비스

이러한 구성요소는 아래에 자세하게 설명되어 있습니다. Android TV 입력 프레임워크 아키텍처를 자세히 보려면 아래의 다이어그램을 확인하세요.

Android TIF 아키텍처 개요
그림 1 Android TV 입력 프레임워크(TIF) 아키텍처

흐름

다음은 아키텍처가 실행되는 방식입니다.

  1. 사용자가 TV 앱을 보고 상호작용합니다. 이 시스템 앱은 타사 앱으로 대체할 수 없습니다.
  2. TV 앱에 TV 입력의 AV 콘텐츠가 표시됩니다.
  3. TV 앱은 TV 입력과 직접적으로 통신할 수 없습니다. TV 입력 관리자는 TV 앱의 TV 입력 상태를 식별합니다. 이러한 제한사항에 관한 자세한 내용은 아래에서 TV 입력 관리자를 참고하세요.

권한

  • signatureOrSystem TV 입력 앱 및 TV 앱만 TV 서비스 제공업체 데이터베이스에 온전히 액세스하고 KeyEvents를 수신할 수 있습니다.
  • 시스템 TV 입력만 TV 입력 관리자 서비스를 통해 TV 입력 HAL에 액세스할 수 있습니다. TV 입력은 TV 입력 관리자 세션을 통해 일대일로 액세스됩니다.
  • 서드 파티 TV 입력은 TV 서비스 제공업체 데이터베이스와 관련해 패키지로 잠긴 액세스를 보유하며, 일치하는 패키지 행에만 읽기/쓰기를 수행할 수 있습니다.
  • 타사 TV 입력은 자체 콘텐츠 또는 HDMI1과 같은 기기 제조업체의 패스 스루 TV 입력만 표시할 수 있으며, 내장 또는 IPTV 튜너와 같은 패스 스루 외 TV 입력의 콘텐츠는 표시할 수 없습니다.
  • 하드웨어 TV 입력 앱의 TV_INPUT_HARDWARE 권한은 TV 입력 관리자 서비스에 신호를 보내어 부팅 중인 TV 입력 서비스에 TV 입력 관리자 서비스를 호출하고 관련 TV 입력을 추가하도록 알립니다. 이 권한은 하드웨어 TV 입력 앱에서 TV 입력 서비스마다 여러 TV 입력을 지원함은 물론 지원되는 TV 입력을 동적으로 추가하고 제거까지 할 수 있게 해줍니다.

TV 서비스 제공업체

TV 서비스 제공업체 데이터베이스에는 TV 입력의 채널과 프로그램이 보관됩니다. 또한 TV 서비스 제공업체는 TV 입력에서 자체 기록만 확인할 수 있도록 관련 권한을 게시하고 관리합니다. 예를 들어 특정 TV 입력은 공급한 채널과 프로그램만 볼 수 있으며 다른 TV 입력의 채널과 프로그램에 관한 액세스는 금지됩니다.

TV 서비스 제공업체는 내부적으로 '방송 장르'를 '표준 장르'로 매핑합니다. TV 입력은 기본 방송 표준의 값으로 '방송 장르'를 채우는 역할을 하며, '표준 장르' 필드는 android.provider.TvContract.Genres에서 연결된 올바른 장르로 자동으로 채워집니다. 예를 들어 방송 표준 ATSC A/65, 그리고 장르가 0x25('스포츠')인 프로그램의 경우 TV 입력이 문자열 '스포츠'로 '방송 장르'를 채우며, TV 서비스 제공업체는 '표준 장르' 필드를 매핑된 값인 android.provider.TvContract.Genres.SPORTS로 채웁니다.

TV 서비스 제공업체를 자세히 살펴보려면 아래 다이어그램을 확인하세요.

Android TV 서비스 제공업체
그림 2 Android TV 서비스 제공업체

권한 있는 시스템 파티션의 앱만 TV 서비스 제공업체 데이터베이스 전체를 읽을 수 있습니다.

패스 스루 TV 입력은 채널과 프로그램을 저장하지 않습니다.

TV 서비스 제공업체 데이터베이스는 채널 및 프로그램을 위한 표준 필드는 물론 TV 입력이 임의의 데이터를 저장하는 데 사용할 수 있는 각 표의 BLOB 입력 필드, COLUMN_INTERNAL_PROVIDER_DATA까지 제공합니다. 이 BLOB 데이터에는 연결된 튜너의 주파수와 같은 맞춤 정보가 포함되며, 프로토콜 버퍼나 다른 형태로 제공될 수 있습니다. 검색 가능한 필드를 사용하면 특정 채널을 검색에 사용할 수 없게 만들 수 있습니다(예: 콘텐츠 보호를 위한 국가별 요구사항 충족).

데이터베이스 필드의 예

TV 서비스 제공업체는 채널(android.provider.TvContract.Channels) 및 프로그램(android.provider.TvContract.Programs) 표에 구조화된 데이터를 지원합니다. 이러한 표는 TV 앱과 같은 TV 입력 및 시스템 앱에 의해 채워지고 액세스됩니다. 표에는 4가지 유형의 필드가 있습니다.

  • 디스플레이: 디스플레이 필드에는 앱이 사용자에게 표시하고 싶은 정보가 포함됩니다. 채널 이름(COLUMN_DISPLAY_NAME) 또는 번호(COLUMN_DISPLAY_NUMBER), 보고 있는 프로그램 제목 등을 예로 들 수 있습니다.
  • 메타데이터: 관련 표준에 따라 콘텐츠를 식별하기 위한 3개의 필드가 있으며, 채널의 전송 스트림 ID(COLUMN_TRANSPORT_STREAM_ID), 원래 네트워크 ID(COLUMN_ORIGINAL_NETWORK_ID) 및 서비스 ID(COLUMN_SERVICE_ID) 등을 예로 들 수 있습니다.
  • 내부 데이터: TV 입력의 맞춤 사용과 관련된 필드입니다.
    COLUMN_INTERNAL_PROVIDER_DATA와 같은 일부 필드는 맞춤설정 가능한 BLOB 필드입니다. 여기서는 TV 입력이 채널 또는 프로그램에 관한 임의의 메타데이터를 저장할 수 있습니다.
  • 플래그: 플래그 필드는 채널에 관한 검색, 브라우징 또는 조회를 제한할지 나타냅니다. 이는 채널 수준에서만 설정할 수 있습니다. 모든 프로그램은 채널의 설정을 따릅니다.
    • COLUMN_SEARCHABLE: 특정 지역에서는 일부 채널에서의 검색 제한이 필수일 수도 있습니다. COLUMN_SEARCHABLE = 0은 채널이 검색결과에 노출되면 안 된다는 것을 의미합니다.
    • COLUMN_BROWSABLE: 시스템 애플리케이션에만 보입니다. 채널이 애플리케이션에 의해 브라우징되지 않도록 제한합니다. COLUMN_BROWSABLE = 0은 채널을 채널 목록에 포함하면 안 된다는 것을 의미합니다.
    • COLUMN_LOCKED: 시스템 애플리케이션에만 보입니다. PIN 코드를 입력하지 않은 상태에서 채널이 잘못된 계정에 의해 조회되지 않도록 제한합니다. COLUMN_LOCKED = 1은 채널이 자녀 보호 기능에 의해 보호되어야 함을 의미합니다.

전체 필드 목록은 android/frameworks/base/media/java/android/media/tv/TvContract.java를 참고하세요.

권한 및 액세스 제어

모든 필드는 해당하는 행에 관한 액세스를 보유한 누구에게나 표시됩니다. 어떤 필드도 사용자가 직접적으로 액세스할 수 없으며, 사용자는 TV 앱, 시스템 앱이나 TV 입력에 표시되는 내용만 볼 수 있습니다.

  • 각 행에는 PACKAGE_NAME이 있습니다. 이 패키지(앱)는 해당 행을 소유하며 TvProvider.java를 통해 쿼리, 삽입, 업데이트를 확인합니다. TV 입력은 작성한 정보에만 액세스할 수 있으며 다른 TV 입력에 의해 제공된 정보로부터 차단됩니다.
  • 가용한 채널 파악을 위한 AndroidManifest.xml(사용자 동의 필요)을 통한 읽기, 쓰기 권한
  • signatureOrSystem 앱만 전체 데이터베이스 액세스를 위한 ACCESS_ALL_EPG_DATA 권한을 얻을 수 있습니다.

TV 입력 관리자

TV 입력 관리자는 Android TV 입력 프레임워크 전체에 중앙 시스템 API를 제공합니다. 또한 앱 및 TV 입력 간의 상호작용을 중재하고 자녀 보호 기능을 제공합니다. TV 입력 관리자 세션은 TV 입력과 일대일로 생성되어야 합니다. TV 입력 관리자는 설치된 TV 입력에 관한 액세스를 허용하므로 앱에서 다음과 같은 작업을 수행할 수 있습니다.

  • TV 입력 나열 및 상태 확인
  • 세션 생성 및 리스너 관리

세션의 경우 TV 입력이 TV 서비스 제공업체 데이터베이스에 자체적으로 추가한 URI에 관해 TV 앱에 의해서만 조정될 수 있으며, TvContract.buildChannelUriForPassthroughInput()을 사용하여 조정 가능한 패스 스루 TV 입력은 예외입니다. TV 입력에는 자체 음량도 포함될 수 있습니다. 기기 제조업체에 의해 제공 및 서명된 TV 입력(서명 앱)이나 시스템 파티션에 설치된 다른 앱은 TV 서비스 제공업체 데이터베이스 전체에 액세스할 수 있게 됩니다. 이러한 액세스는 앱을 구성하여 가용한 모든 TV 채널과 프로그램을 브라우징하고 검색하는 데 사용될 수 있습니다.

앱은 TV 입력의 상태 변경이나 TV 입력 추가 또는 제거에 관해 콜백하려는 android.media.tv.TvInputManager를 포함하는 TvInputCallback을 생성하여 등록할 수 있습니다. 예를 들어 TV 앱은 TV 입력이 연결 해제되었을 때 연결 상태를 표시하고 선택을 중지하는 방식으로 반응할 수 있습니다.

TV 입력 관리자는 TV 앱과 TV 입력 간의 통신을 추상화합니다. TV 입력 관리자와 TV 입력의 표준 인터페이스는 여러 기기 제조업체에서 자체 TV 앱을 구축하는 동시에 모든 타사 TV 입력이 모든 TV 앱에서 작동할 수 있도록 도와줍니다.

TV 입력

TV 입력은 AndroidManifest.xml이 있고 Play, 사전 설치, 사이드로드 등을 통해 설치된다는 점에서 Android 앱으로 볼 수 있습니다. Android TV는 사전 설치된 시스템 앱, 기기 제조업체에서 서명한 앱과 타사 TV 입력을 지원합니다.

HDMI 입력 또는 내장 튜너 입력과 같은 일부 입력은 기존 하드웨어와 직접적으로 통신하는 만큼 제조업체에서만 제공할 수 있습니다. IPTV, 플레이스 시프팅 및 외부 STB와 같은 다른 입력은 타사가 Google Play 스토어에서 APK로 제공할 수 있습니다. 다운로드 및 설치가 완료되면 새 입력을 TV 앱 내에서 선택할 수 있습니다.

패스 스루 입력의 예

Android TV 시스템 입력
그림 3 Android TV 시스템 입력

이 예에서는 기기 제조업체에서 제공한 TV 입력이 신뢰되고 TV 서비스 제공업체에 관한 온전한 액세스를 지닙니다. 패스 스루 TV 입력으로는 어떠한 채널이나 프로그램도 TV 서비스 제공업체에 등록하지 않습니다. 패스 스루 입력을 참조하는 데 사용되는 URI를 가져오려면 android.media.tv.TvContract 유틸리티 메서드 buildChannelUriForPassthroughInput(String inputId)를 사용하세요. TV 앱은 TV 입력 관리자와 통신하여 HDMI TV 입력에 도달합니다.

내장 튜너의 예

Android TV 내장 튜너 입력
그림 4 Android TV 내장 튜너 입력

이 예에서는 기기 제조업체에서 제공한 내장 튜너 TV 입력이 신뢰되고 TV 서비스 제공업체에 관한 온전한 액세스를 지닙니다.

타사 입력의 예

Android TV 타사 입력
그림 5 Android TV 타사 입력

이 예에서는 외부 STB TV 입력이 타사에 의해 제공됩니다. 이 TV 입력은 유입되는 HDMI 동영상 피드에 직접적으로 액세스할 수 없으므로 TV 입력 관리자를 거치고 기기 제조업체에서 제공하는 HDMI TV 입력을 사용해야 합니다.

TV 입력 관리자를 통해 외부 STB TV 입력은 HDMI TV 입력과 통신하고 HDMI1에 동영상을 표시하도록 요청할 수 있습니다. 따라서 STB TV 입력이 TV를 제어하는 동안 제조업체에서 제공한 HDMI TV 입력은 동영상을 렌더링합니다.

PIP(Picture in picture)의 예

Android TV KeyEvents
그림 6. Android TV KeyEvents

위의 다이어그램은 리모컨의 버튼이 PIP 디스플레이의 특정 TV 입력에 전달되는 방식을 보여줍니다. 버튼을 누르면 기기 제조업체에서 공급한 하드웨어 드라이버에서 이를 해석한 후 하드웨어 스캔 코드를 Android 키 코드로 변환하여 표준 Android 입력 파이프라인 InputReaderInputDispatcher 함수에 KeyEvents로 전달합니다. 그러면 TV 앱에 포커스가 있을 경우 TV 앱에서 이벤트가 실행됩니다.

RECEIVE_INPUT_EVENT 시스템 권한이 있는 시스템 TV 입력만 InputEvents를 수신할 수 있습니다. TV 입력은 어떤 InputEvents를 소비할지 결정하는 역할을 하며, TV 앱에서 TV 입력이 소비할 필요가 없는 키를 처리하도록 해야 합니다.

TV 앱은 어떤 시스템 TV 입력이 활성 상태인지(사용자에 의해 선택되었는지) 인지하고 수신되는 KeyEvents를 구별하고 올바른 TV 입력 관리자 세션으로 라우팅하여 dispatchInputEvent()를 호출하고 연결된 TV 입력에 이벤트를 전달하는 역할을 합니다.

MHEG-5 입력의 예

아래 다이어그램은 KeyEvents가 Android TIF를 통해 라우팅되는 방식을 자세하게 보여줍니다.

Android TV 빨간색 버튼의 예
그림 7. Android TV 빨간색 버튼의 예

여기에는 빨간색 버튼 앱의 흐름이 묘사되어 있습니다. 유럽에서 흔히 볼 수 있는 이 버튼은 사용자가 텔레비전에서 양방향 앱에 액세스할 수 있게 해줍니다. 앱은 이 전송 스트림을 통해 제공될 수 있습니다. 버튼을 클릭하면 사용자가 이러한 방송 앱과 상호작용할 수 있습니다. 예를 들면 이러한 방송 앱을 사용하여 관련 웹페이지나 스포츠 점수에 액세스할 수 있습니다.

방송 앱이 TV 앱과 상호작용하는 방법에 관해 알아보려면 방송 앱 섹션을 참고하세요.

이 예의 과정은 다음과 같습니다.

  1. 포커스가 있는 TV 앱이 모든 키를 수신합니다.
  2. KeyEvents(예: 빨간색 버튼)가 활성화된 TV 입력에 InputEvents.로 전달됩니다.
  3. 시스템 TV 입력이 MHEG-5 스택과 통합되고 RECEIVE_INPUT_EVENT 시스템 권한을 가집니다.
  4. 활성화 키 코드(예: 빨간색 버튼)가 수신되면 TV 입력에서 방송 앱을 활성화합니다.
  5. TV 입력이 KeyEventsInputEvents로 소비하고, 방송 앱이 포커스를 취하고 포커스가 해제될 때까지 InputEvents를 처리합니다.

참고: 서드 파티 TV 입력은 키를 수신하지 않습니다.

TV 입력 HAL

TV 입력 HAL은 TV 관련 하드웨어 액세스를 위한 TV 입력 개발을 돕습니다. 다른 Android HAL과 마찬가지로, TV 입력 HAl(tv_input)은 AOSP 소스 트리에서 사용할 수 있으며 공급업체에서 구현을 개발합니다.

TV 앱

시스템 TV 앱은 사용자에게 실시간 TV 콘텐츠를 보여줍니다. Android 플랫폼과 함께 제공되는 참조용 TV 앱(실시간 TV)은 그대로 사용하거나 맞춤설정하거나 확장하거나 기기 제조업체에서 대체할 수 있습니다. 소스 코드는 Android 오픈소스 프로젝트에서 사용할 수 있으며, 참조용 TV 앱 문서에서 시작할 수 있습니다.

기기 제조업체에서는 TV 앱을 확장하여 기기 제조업체 또는 국가별 기능을 구현할 수 있지만 이는 참조용 TV 앱의 TIF 범위에 포함되지 않습니다.

시스템 TV 앱은 최소 다음과 같은 작업을 처리해야 합니다.

설정 및 구성

  • TV 입력 자동 감지
  • TV 입력이 채널 설정을 시작하도록 허용
  • 자녀 보호 설정 관리
  • 채널 수정

보기

  • 모든 TV 채널에 액세스 및 이동
  • TV 프로그램 정보 표시줄에 액세스
  • EPG(Electronic Programming Guide) 데이터 표시
  • 여러 오디오 및 자막 트랙 지원
  • 자녀 보호 기능용 PIN 확인 절차 제공
  • TV 표준과 관련된 TV 입력 UI 오버레이 허용(HbbTV 등)
  • TV 채널 및 프로그램의 검색결과 채우기
  • 앱 연결 카드 표시
  • 타임 시프팅 API 지원
  • DVR 기능 처리 및 TV 녹화 API 지원

이 기능 모음은 플랫폼 TIF API가 확장되는 새로운 Android 버전에 맞춰 늘어납니다. CTS 인증기는 호환성 테스트 범위를 제공합니다.

타사 TV 입력 지원

Android TV는 서드 파티 TV 입력을 위한 개발자 API를 제공하여 설치된 앱이 소프트웨어 채널을 실시간 TV 환경에 제공할 수 있도록 지원합니다. Android 기기 구현의 호환성을 확립하려면 서드 파티 TV 입력과 채널을 사용자에게 표시하는 일과 관련된 어느 정도의 책임을 시스템 TV 앱에서 감수해야 합니다. 참조용 실시간 TV 앱은 호환 가능한 구현을 제공합니다. 시스템 TV 앱을 대체하는 경우 기기 제조업체는 자체 앱에서 유사한 호환성을 제공하여 모든 Android TV 기기 전체에서 개발자의 기대를 충족하는지 확인해야 합니다.

시스템 TV 앱은 타사 입력을 기기의 기본적인 실시간 TV 서비스와 함께 표시해야 합니다. 개발자 API의 약속은 사용자가 표준 TV 환경 내에서 설치된 채널을 찾을 수 있어야 한다는 것입니다.

Android CDD의 TV 앱 섹션에 정의된 것처럼 내장 채널과 타사 채널 간의 시각적 차이가 허용됩니다.

다음 섹션에서는 실시간 TV 애플리케이션이 CDD 요구사항을 어떻게 이행하는지 보여줍니다.

새 채널 설정

새로운 타사 입력/채널을 추가하려면 먼저 Google Play와 같은 애플리케이션 스토어에서 TV 입력을 찾아 설치해야 합니다.

일부 서드 파티 TV 입력은 자동으로 채널을 TV 서비스 제공업체 데이터베이스에 추가합니다. 하지만 대부분의 경우 사용자가 채널을 설정하고 로그인 세부정보와 기타 작업을 제공할 수 있도록 설정 활동을 제공합니다. 시스템 TV 앱은 사용자가 이러한 설정 활동을 활성화할 수 있는지 확인해야 합니다. 이는 CDD에서 서드 파티 입력이 기본 TV 앱 외부에서 발생하는 최소한의 탐색 작업이 되도록 요구하는 이유입니다.

참조용 실시간 TV 앱은 입력 액세스를 위한 채널 소스 메뉴를 제공합니다.

설정으로 이동
그림 8. 설정으로 이동합니다.

설정에서 채널 소스로 이동
그림 9. 설정의 채널 소스로 이동합니다.

목록에서 소스 선택
그림 10. 목록에서 소스를 선택합니다.

소스에서 채널 추가
그림 11. 소스에서 채널을 추가합니다.

또한 새 TV 입력이 설치된 후에는 사용자를 바로 설정으로 안내하기 위해 TV 앱 메뉴 상단에 알림 카드가 표시됩니다.

새 채널 소스를 사용할 수 있음을 보여주는 알림
그림 12. 새 채널 소스를 사용할 수 있다는 알림이 제공됩니다.

알림을 통해 작업을 수행한 사용자는 원하는 경우 그림 10에 보이는 것처럼 자체 소스를 설정할 수 있습니다.

이 영역에서 개발자가 기대하는 바를 확인하려면 내 TV 입력 서비스 정의를 참고하세요.

채널 목록 맞춤설정

기기 제조업체는 특정 채널을 숨기고 사용자가 자체 EPG를 관리할 수 있도록 하는 UI를 제공할 수 있습니다. 실시간 TV에는 이 기능이 포함됩니다.

설정에서 채널 목록을 엽니다.
그림 13. 설정에서 채널 목록을 엽니다.

채널 목록을 맞춤설정합니다.
그림 14. 채널 목록을 맞춤설정합니다.

EPG

타사 입력 개발자는 사용자가 일반적인 사용 도중 호환되는 모든 Android TV 기기에서 쉽게 자신의 채널을 탐색할 수 있다고 확신할 수 있어야 합니다.

서드 파티 입력의 채널은 기기의 표준 실시간 TV 환경 EPG의 일부로 제시되어야 합니다. 서드 파티 채널의 시각적 구분이나 별도의 카테고리를 사용할 수 있습니다(Android CDD의 TV 앱 섹션 참고). 핵심은 사용자가 설치한 채널을 찾을 수 있어야 한다는 것입니다.

제조업체에서는 전역적 검색 요청의 검색결과를 포함하는 TV 앱을 구현하여 최상의 사용자 환경을 보장해야 합니다. 실시간 TV는 타사 입력(플랫폼 호환성에 필요)은 물론 내장 입력의 결과까지 제공하는 구현(com.android.tv.search.TvProviderSearch 참고)을 제공합니다.

타임 시프팅

Android 6.0 이상의 기기에서는 TV 앱이 Android 프레임워크 타임 시프팅 API를 지원해야 합니다. 또한 제조업체는 TV 앱에서 재생 컨트롤을 구현하여 사용자가 재생 일시중지, 재개, 되감기, 빨리 감기 기능을 사용할 수 있게 해야 합니다.

타임 시프팅을 지원하는 TV 입력의 경우에는 TV 앱에서 재생 컨트롤을 표시해야 합니다.

재생 컨트롤
그림 15. 재생 컨트롤

DVR

Android 7.0 이상의 기기에서는 TV 앱에서 Android 프레임워크 TV 녹화 API를 지원하여 녹화된 프로그램을 지원하고 나열하고 재생할 수 있어야 합니다.

이렇게 하면 기기 제조업체에서 DVR 하위 시스템을 TIF에 연결하여 DVR 기능을 TV 기기에 사용 설정하거나 통합하는 데 요구되는 노력을 크게 줄일 수 있습니다. 그뿐만 아니라 타사에서는 Android TV 기기에 연결 가능한 애프터마켓 DVR 시스템을 제공할 수 있습니다.

TV 앱은 실시간 콘텐츠를 녹화할 뿐만 아니라 리소스 충돌까지 처리합니다. 예를 들어 튜너가 두 개인 기기는 2개의 프로그램을 동시에 녹화할 수 있습니다. 사용자가 3개 녹화를 요청하면 TV 앱은 충돌을 처리한 후 알림을 표시하거나 사용자에게 우선순위 설정을 요청해야 합니다.

또한 TV 앱은 좀 더 정교한 논리를 구현해야 합니다. 예를 들어 사용자가 한 개 에피소드의 녹화를 요청할 경우 앞으로 방영될 시리즈의 나머지 에피소드까지 전부 녹화하고 싶은지 물어봐야 합니다.

Android TV에 구현 가능한 DVR을 살펴보려면 다음 다이어그램을 확인하세요.

Android TV의 디지털 동영상 녹화
그림 16. Android TV의 디지털 동영상 녹화

  1. TV 입력 서비스는 TV 앱에서 잠재적인 리소스 충돌을 처리할 수 있도록 몇 개의 튜너를 사용할 수 있는지 TV 앱에 알립니다.
  2. TV 앱에서 사용자가 시작한 요청을 수신하여 TV 프로그램을 녹화합니다.
  3. TV 앱에서 내부 데이터베이스에 녹화 일정을 저장합니다.
  4. 녹화할 시간이 되면 TV 앱은 녹화와 관련된 채널로 맞추라는 요청을 전달합니다.
  5. 이 요청을 수신한 TV 입력 서비스는 적절한 리소스가 있는지에 관한 내용으로 응답하고 채널을 맞춥니다.
  6. 그러면 TV 앱에서 요청을 전달하여 TV 입력 관리자에 녹화를 시작합니다.
  7. TV 입력 서비스에서 이 요청을 수신하고 녹화를 시작합니다.
  8. TV 입력 서비스가 외부 저장소 또는 클라우드 스토리지에 실제 동영상 데이터를 저장합니다.
  9. 녹화를 마칠 시간이 되면 TV 앱이 TV 입력 관리자에게 녹화 중지 요청을 전달합니다.
  10. 요청을 수신한 TV 입력 서비스는 요청이 있을 경우 TV 앱에서 녹화한 내용을 사용자에게 표시할 수 있도록 녹화를 중단하고 관련 메타데이터를 TV 서비스 제공업체에 추가합니다.

TV 입력 서비스에 녹화 기능을 구현하는 자세한 내용은 TV 녹화 문서를 참고하세요.

유용한 리소스

  • Android CDD와 문서화된 개발자 API는 확실한 참조 자료입니다.
  • CTS 인증기는 호환성 테스트 프로그램의 일부로 API를 실행합니다. 실시간 TV에 이를 실행할 경우 EPG, 검색, 자녀 보호 기능 및 기타 요구사항을 타사 입력의 맥락에서 확인할 수 있는 좋은 방법이 될 수 있습니다.
  • 이 영역에서 개발자가 기대하는 바를 확인하려면 내 TV 입력 서비스 정의를 참고하세요.

자녀 보호 기능

자녀 보호 기능을 사용하면 원치 않는 채널과 프로그램을 차단할 수 있지만 PIN 코드를 입력하여 차단을 우회할 수 있습니다.

자녀 보호 기능과 관련된 책임은 TV 앱, TV 입력 관리자 서비스, TV 서비스 제공업체 및 TV 입력 간에 공유됩니다.

자녀 보호 기능은 필수이며 CTS 인증기의 적용을 받습니다.

여러 국가에서는 TV 입력에서 TVContentRating API를 통해 사용할 수 있는 등급 시스템을 정의했습니다. 또한 TV 입력은 CTS 인증기 테스트에 의해 시연되는 자체 맞춤 등급 시스템을 등록할 수 있으며, 이 경우 '허위' 평가가 발생합니다. 표준 등급 시스템이 존재하는 국가의 경우에는 기기 제조업체에서 TV 입력 프레임워크 자녀 보호 기능을 포함 가능한 다른 모든 메커니즘과 결합하는 것이 좋습니다.

TV 서비스 제공업체

각 채널 행에는 PIN 코드를 입력해야만 볼 수 있도록 특정 채널을 잠그는 데 사용되는 COLUMN_LOCKED 필드가 있습니다. 프로그램 필드 COLUMN_CONTENT_RATING은 디스플레이에 사용되며 자녀 보호 기능을 실행하기 위한 용도로 사용되지 않습니다.

TV 입력 관리자

TV 입력 관리자는 모든 차단된 TvContentRating을 저장하고 isRatingBlocked()에 응답하여 특정 등급의 콘텐츠를 차단해야 할지 조언합니다.

TV 입력

표시된 콘텐츠의 등급이 변경(프로그램 또는 채널 변경 시)되거나 자녀 보호 기능 설정이 변경(ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED에서)되면 TV 입력은 TV 입력 관리자에 isRatingBlocked()을 호출하여 현재의 콘텐츠를 차단해야 할지 확인합니다. 콘텐츠를 차단해야 하는 경우 TV 입력은 오디오와 동영상을 중지하고 notifyContentBlocked(TvContentRating)을 호출하여 현재 콘텐츠가 차단되었음을 TV 앱에 알립니다. 콘텐츠를 차단하지 않아야 하는 경우에는 TV 입력이 오디오 및 동영상을 사용 설정하고 notifyContentAllowed()를 호출하여 현재 콘텐츠를 허용하도록 TV 앱에 알립니다.

TV 앱

자녀 보호 기능 API를 준수하여 호환 가능한 플랫폼을 구축하려면 시스템 TV 앱은 사용자가 자녀 보호 기능(특정 앱에 의해 등록된 모든 맞춤 등급 포함)을 관리할 수 있는 방법을 제공해야 합니다.

TV 앱은 TV 입력에 의해 현재 콘텐츠가 차단되었다는 알림을 수신하거나 사용자가 차단된 채널을 보려고 시도하면 PIN 코드 UI를 표시합니다.

TV 앱은 자녀 보호 기능 설정을 직접 저장하지 않습니다. 사용자가 자녀 보호 기능 설정을 변경하면 모든 차단된 TvContentRating이 TV 입력 관리자에 의해 저장되며, 차단된 채널이 TV 서비스 제공업체에 의해 저장됩니다.

자녀 보호 기능 설정을 변경하려면 TV 앱에서 android.permission.MODIFY_PARENTAL_CONTROLS 권한을 선언해야 합니다.

기기 제조업체는 다음과 같은 권장사항을 따르는 것이 좋습니다.

  • 호환성 요구사항 증명과 관련하여 참조용 실시간 TV 애플리케이션에 관한 CTS 인증기 자녀 보호 기능 테스트를 실행합니다.
  • 실시간 TV 앱을 자체 TV 앱의 참조 요소로 활용합니다. 특히 ContentRatingsManagerRatingSystemsFragment, 그리고 이러한 요소가 맞춤 등급을 처리하는 방식을 확인합니다.

HDMI-CEC

HDMI-CEC는 기기가 다른 기기를 제어할 수 있도록 하여 하나의 리모컨으로 홈시어터의 여러 어플라이언스를 제어할 수 있게 해줍니다. Android TV는 이를 활용하여 설정 시간을 단축하고 중앙 TV 앱을 통해 다양한 TV 입력을 먼 거리에서 제어할 수 있도록 합니다. 예를 들면 입력을 전환하거나 기기를 켜고 끄는 등의 작업을 수행할 수 있습니다.

Android TIF는 기기 제조업체가 경량 Android TV HAL과 상호작용하는 하위 수준의 드라이버만 개발하면 되도록 HDMI-CEC를 HDMI 제어 서비스로 구현하여 훨씬 복잡한 비즈니스 로직을 생략할 수 있게 해줍니다. 표준 구현을 제공하는 과정에서 Android는 세분화된 구현과 선택적 기능 지원을 줄임으로써 호환성 문제를 완화하려고 노력합니다. HDMI 제어 서비스는 입력 및 전력을 비롯한 기존 Android 서비스를 사용합니다.

즉, Android TIF와 상호운용될 수 있도록 기존 HDMI-CEC 구현을 재설계해야 합니다. 하드웨어 플랫폼에는 CEC 파워온 및 기타 명령어 수신을 위한 마이크로프로세서를 포함하는 것이 좋습니다.

Android TV의 CEC 통합
그림 17. Android TV의 CEC 통합

  1. CEC 버스가 현재 활성화된 소스에서 명령어를 수신하여 다른 소스로 전환합니다.
  2. 드라이버가 명령어를 HDMI-CEC HAL에 전달합니다.
  3. HAL이 모든 ActiveSourceChangeListeners에 알립니다.
  4. HDMI 제어 서비스가 ActiveSourceChangeListener를 통해 소스 변경사항에 관한 알림을 받습니다.
  5. TV 입력 관리자 서비스에서 TV 앱의 인텐트를 생성하여 소스를 전환합니다.
  6. 그러면 TV 앱이 전환 대상인 TV 입력의 TV 입력 관리자 세션을 생성하고 해당 세션에 setMain을 호출합니다.
  7. TV 입력 관리자 세션이 이 정보를 HDMI TV 입력에 전달합니다.
  8. HDMI TV 입력이 측파대 노출 영역 설정을 요청합니다.
  9. 노출 영역이 설정되면 TV 입력 관리자 서비스가 해당하는 라우팅 제어 명령어를 다시 HDMI 제어 서비스에 생성합니다.

TV 통합 가이드라인

방송 앱

각 국가에는 방송 관련 요구사항(MHEG, Teletext, HbbTV 등)이 있습니다. 따라서 제조업체는 방송 앱과 관련된 자체 솔루션을 제공해야 합니다. 예를 들면 다음과 같습니다.

  • MHEG: 네이티브 스택
  • Teletext: 네이티브 스택
  • HbbTV: Vewd Software의 HbbTV 솔루션

Android L 버전의 Android TV는 기기 제조업체가 지역 TV 스택과 관련하여 시스템 통합자 또는 Android 솔루션을 사용하거나 노출 영역을 TV 소프트웨어 스택에 전달하거나 필요한 키 코드를 전달하여 레거시 스택과 상호작용할 것으로 기대합니다.

방송 앱과 TV 앱이 상호작용하는 방식은 다음과 같습니다.

  1. TV 앱이 포커스가 되어 모든 키를 수신합니다.
  2. TV 앱이 키(예: 빨간색 버튼)를 TV 입력 기기에 전달합니다.
  3. TV 입력 기기가 내부적으로 레거시 TV 스택과 통합됩니다.
  4. 활성화 키 코드(예: 빨간색 버튼)를 수신하면 TV 입력 기기가 방송 앱을 활성화합니다.
  5. 방송 앱이 TV 앱에서 포커스를 취하고 사용자 작업을 처리합니다.

음성 검색/추천의 경우 방송 앱이 음성 검색의 인앱 검색을 지원할 수 있습니다.