미디어 앱을 Android TV로 확장

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

TV 앱 빌드

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

하지만 TV의 사용자 상호작용 모델은 스마트폰 및 태블릿 기기와는 상당히 다릅니다. 성공적인 TV 기기용 앱을 만들려면 3m 거리에서도 명확하게 이해할 수 있는 새로운 레이아웃을 디자인하고 방향 패드와 선택 버튼만으로 작동하는 탐색 기능을 제공해야 합니다.

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

Media3 ExoPlayer 사용

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

Android의 MediaPlayer API와 달리 여러 스트리밍 프로토콜, 기본 오디오 및 동영상 렌더기, 미디어 버퍼링을 처리하는 구성요소와 같은 편의성을 추가합니다.

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

Media3 MediaSession 사용

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

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

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

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

Kotlin

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

Java

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

자동 상태 처리

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

재생 제어 및 광고

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

미디어 세션은 재생을 제어하는 키입니다. 이 라이브러리를 사용하면 외부 소스의 명령어를 미디어 재생 작업을 하는 플레이어로 라우팅할 수 있습니다. 외부 클라이언트는 미디어 컨트롤러를 사용하여 미디어 앱에 재생 명령어를 실행할 수 있습니다. 재생 명령어는 미디어 세션에서 수신되고 궁극적으로 미디어 플레이어에 명령어가 위임됩니다.

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

앱 중단 방지하기

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

  • TV를 끄거나 TV 입력을 전환할 때 예상치 못한 재생과 계속되는 재생 이로 인해 TV 하드웨어의 에너지 소비도 높아집니다. MediaSession를 사용하면 앱에서 미디어 재생 중임을 플랫폼에 알릴 수 있으며, 플랫폼은 재생을 중지할 수 있다고 앱에 알릴 수 있습니다.

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

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

추가 고려사항

미디어 앱을 TV용 Android로 확장할 때 접근성 문제, 참여 유도 방법, 사용자가 콘텐츠를 찾을 수 있게 하는 방법, 게임 및 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 프로그램 가이드에 ID/음악 콘텐츠를 게시하기 위한 채널을 만듭니다.

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