미디어 앱을 Android TV로 확장

Android는 고화질 TV와 같은 대형 화면 기기에서 실행되는 앱에 최적화된 풍부한 사용자 환경을 제공합니다. Android TV용으로 앱을 개발하여 앱의 잠재고객을 확대할 수 있습니다. 이 문서에서는 이를 효과적으로 수행하는 방법을 안내합니다.

TV 앱 빌드

TV 앱은 스마트폰 및 태블릿 앱과 동일한 구조를 사용합니다. 이 접근 방식을 사용하면 Android용 앱 빌드에 관해 이미 알고 있는 내용을 기반으로 새 TV 앱을 만들거나 기존 앱을 확장하여 TV 기기에서도 실행할 수 있습니다.

그러나 TV의 사용자 상호작용 모델은 휴대전화 및 태블릿 기기와 상당히 다릅니다. TV 기기에서 앱을 성공적으로 실행하려면 3미터 거리에서도 명확하게 이해할 수 있는 새로운 레이아웃을 설계하고 방향 패드와 선택 버튼만으로 작동하는 탐색 기능을 제공해야 합니다.

TV 하드웨어 컨트롤러 처리 방법, TV 레이아웃 빌드, TV 탐색 만들기 등의 고려사항에 관한 자세한 내용은 TV 앱 빌드를 참고하세요.

Media3 ExoPlayer 사용

Jetpack Media3는 재생, 일시중지, 탐색, 트랙 정보 표시와 같은 기본 기능을 정의하는 Player 인터페이스를 제공합니다. ExoPlayer는 Media3에서 이 인터페이스의 기본 구현입니다.

Android의 MediaPlayer API와 비교하면 여러 스트리밍 프로토콜, 기본 오디오 및 동영상 렌더러, 미디어 버퍼링을 처리하는 구성요소 지원과 같은 추가 편의 기능이 있습니다.

ExoPlayer를 맞춤설정하고 확장할 수 있으며 Play 스토어 애플리케이션 업데이트를 통해 업데이트할 수 있습니다. 자세한 내용은 Media3 ExoPlayer를 참고하세요.

Media3 MediaSession 사용

미디어 세션은 시스템이 앱의 오디오 또는 동영상 플레이어와 상호작용할 수 있는 보편적인 방법을 제공합니다. Media3를 이전 미디어 API와 구별하는 주요 특징 중 하나는 구성요소 간에 더 이상 커넥터가 필요하지 않다는 것입니다.

새 MediaSession 클래스는 Player 인터페이스를 구현하는 모든 클래스를 사용합니다. ExoPlayer와 MediaController는 모두 이 인터페이스를 구현하는 클래스입니다. 이렇게 하면 구성요소 간의 상호작용이 훨씬 간단해집니다. 자세한 내용은 플레이어 인터페이스를 참고하세요.

미디어 재생 앱을 만드는 방법에 관한 자세한 내용은 ExoPlayer를 사용하여 기본 미디어 플레이어 만들기를 참고하세요.

미디어 앱의 최종 사용자에게 최상의 환경을 제공하려면 MediaSession를 구현해야 합니다. 이렇게 하려면 Player를 초기화하고 다음과 같이 MediaSession.Builder에 제공합니다.

Kotlin

val player = ExoPlayer.Builder(context).build()
val mediaSession = MediaSession.Builder(context, player).build()

자바

ExoPlayer player = new ExoPlayer.Builder(context).build();
MediaSession mediaSession = new MediaSession.Builder(context, player).build();

자동 상태 처리

Media3 라이브러리는 플레이어의 상태를 사용하여 미디어 세션을 자동으로 업데이트합니다. 따라서 플레이어에서 세션으로의 매핑을 수동으로 처리할 필요가 없습니다. 이렇게 하면 사용자가 나우 플레잉 카드를 비롯하여 재생 중인 미디어에 관한 최신 정보를 항상 확인할 수 있습니다.

재생 제어 및 광고

Media3에서 기본 플레이어는 Player 인터페이스를 구현하는 ExoPlayer 클래스입니다. 미디어 세션을 플레이어에 연결하면 앱이 외부에서 미디어 재생을 알리고 외부 소스로부터 재생 명령어를 수신할 수 있습니다. 미디어 세션은 이러한 명령어를 미디어 앱의 플레이어에 위임합니다.

미디어 세션은 재생을 제어하는 핵심 요소입니다. 이를 통해 외부 소스의 명령어를 미디어를 재생하는 플레이어로 라우팅할 수 있습니다. 외부 클라이언트는 미디어 컨트롤러를 사용하여 미디어 앱에 재생 명령어를 실행할 수 있습니다. 이러한 명령어는 미디어 세션에서 수신되며, 미디어 세션은 궁극적으로 명령어를 미디어 플레이어에 위임합니다.

재생 명령어 동작을 맞춤설정하는 방법과 같은 재생에 관한 자세한 내용은 MediaSession을 사용하여 재생 제어 및 알리기를 참고하세요.

앱 중단 방지

MediaSession를 사용하면 다음과 같은 불필요한 중단을 방지할 수 있습니다.

  • TV를 끄거나 TV 입력을 전환할 때 예기치 않은 재생이 계속됩니다. 이로 인해 TV 하드웨어의 에너지 소비도 증가합니다. MediaSession를 사용하면 앱이 미디어를 재생 중임을 플랫폼에 알릴 수 있고 플랫폼은 재생을 중지할 수 있음을 앱에 알릴 수 있습니다.

  • 앱을 전환하거나 TV 디스플레이를 끌 때 음악 재생이 예기치 않게 중지됩니다. MediaSession API를 사용하면 백그라운드 서비스에서 계속 재생할 수 있습니다.

  • 콘텐츠와의 상호작용 제한: 사용자가 재생을 제어하지 못하도록 합니다. 예를 들어 백그라운드에서 음악을 재생 중인 경우 앱으로 돌아가거나 음성 명령을 지원합니다. 앱에 MediaSession를 사용하면 사용자가 음성 명령을 사용하여 노래나 에피소드를 탐색하고 건너뛸 수 있습니다.

추가 고려사항

미디어 앱을 Android TV로 확장할 때는 접근성 문제, 참여 유도 방법, 사용자가 콘텐츠를 찾을 수 있도록 하는 방법, 게임 및 TV 입력 서비스를 빌드하는 방법을 고려해야 합니다.

TV 접근성

보조 기술은 저시력 사용자에게 도움이 될 수 있지만 TV 앱의 콘텐츠 탐색 여정에서 접근성을 지원하는 것이 중요합니다.

예를 들어 탐색 안내를 제공하고 요소에 적절하게 라벨을 지정하는 데 특히 주의를 기울이고 TV 앱이 TalkBack과 같은 접근성 기능과 잘 작동하도록 합니다. 이러한 단계를 통해 시각 장애가 있는 사용자의 환경을 크게 개선할 수 있습니다.

접근성을 개선하기 위한 첫 번째 단계는 인식입니다. 텍스트 크기 조정, 키보드 레이아웃, 오디오 설명에 관한 자세한 내용은 접근성 리소스를 참고하세요.

Google TV에 사용자 참여를 유도하기 위한 권장사항

Android TV용으로 빌드된 모든 앱은 Google TV를 실행하는 기기에서 작동합니다. Google TV에서 최상의 사용자 환경을 제공하려면 다음 권장사항을 적용하는 것이 좋습니다.

MediaSession를 사용하여 오디오 또는 동영상 플레이어와 상호작용할 보편적인 방법을 제공해야 합니다. 이를 구현하는 방법에 관한 자세한 내용은 Media3 MediaSession 사용을 참고하세요.

기본적으로 앱은 Google Cast를 지원해야 합니다. 이를 통해 Android, iOS, Chrome 앱을 확장하여 Android TV는 물론 Chromecast 기기 및 어시스턴트 기기로 오디오 및 동영상 스트리밍을 사용 설정할 수 있습니다. 자세한 내용은 Google Cast 문서를 참고하세요.

또한 사용자가 다음 작업을 할 수 있도록 지원할 수 있습니다.

  • 미디어 작업 피드를 제공하거나 다음 볼만한 동영상을 통합하여 여러 표시 경로에서 콘텐츠를 검색합니다.

  • 계정 연결 및 사용 권한 동기화를 지원하고, 음성 전송을 제공하고, Cast Connect를 사용 설정하여 음성 및 참여를 활용합니다.

  • Google Play 결제를 통합하고 원활한 정기 결제를 제공하여 더 쉽게 결제하세요.

TV 입력 프레임워크 빌드

라이브 TV 프로그램 및 기타 연속적인 채널 기반 콘텐츠를 시청하는 것은 TV 환경에서 큰 부분을 차지합니다. 사용자는 채널 탐색을 통해 TV에서 프로그램을 선택하고 시청하는 데 익숙합니다. TV 입력 프레임워크는 TV 편성표에 동영상 또는 음악 콘텐츠를 게시하기 위한 채널을 만듭니다.

TV 입력 프레임워크는 HDMI 포트 및 내장 튜너와 같은 하드웨어 소스와 인터넷을 통해 스트리밍되는 동영상과 같은 소프트웨어 소스에서 라이브 동영상 콘텐츠를 수신하고 재생하는 통합된 방법을 제공합니다. 자세한 내용은 TV 입력 서비스 빌드를 참고하세요.