본문 바로가기
Android/오디오 및 비디오

Jetpack Media3

by 안스 인민군 2023. 11. 15.

 

나오게 된 배경

Media3는 기존에 존재하던 라이브러리(ex. Jetpack Media, Media2,Exoplayer 등등)에서 UI 재생, 그리고 Media Session 과 같은 공통 기능을 정의했으며 파편화 되었던 각 라이브러리들간의 복잡성을 추상화 하였다. 또한 공통으로 사용할 수 있는 Player인터페이스를 정의하여 편의성을 증대 시켰다. 이번 글은 Media3에 대해 알아보도록 하자.

☆중요
Media3이 이전 미디어 API와 구별되는 주요 특징 중 하나는 더 이상 구성요소 간 커넥터가 필요하지 않다는 것이다. 새로운 
MediaSession클래스는 UI와 마찬가지로 Player 인터페이스를 구현하는 모든 클래스를 사용한다. 
ExoPlayer와 MediaController는 모두 이 인터페이스를 구현하는 클래스이다. 이렇게 하면 구성요소 간의 상호작용이 훨씬 더 단순해진다.

재생 구성 요소

다음 다이어그램은 일반적인 앱에서 이러한 구성요소가 어떻게 함께 작동하는지 보여준다.

미디어 플레이어

미디어 플레이어는 미디어 파일의 재생을 허용하는 앱의 구성요소이다.

  • Player
    • Player는 재생, 일시중지, 탐색 기능과 같은 미디어 플레이어의 기존 상위 수준 기능을 정의하는 인터페이스
    • Media3에서 Player 인터페이스는 MediaSession 및 MediaController를 비롯한 여러 구성요소에 의해 구현되거나 사용되는 공통 API
  • ExoPlayer
    • ExoPlayer는 Media3에서 Player 인터페이스의 기본 구현
    • Mediaitem : 미디어 콘텐츠를 표현

MediaSession(미디어 세션)

MediaSession은 UI와 Player 간의 상호작용할 수 있는 범용적인 방법을 제공한다. 이렇게 하면 앱이 외부 소스에 미디어 재생을 알리고 외부 소스로부터 재생 제어 요청을 수신할 수 있다.

  • MediaSession
    • 미디어 세션을 사용하면 앱이 오디오 또는 동영상 플레이어와 상호작용 할 수 있다. 미디어 재생을 외부에 알리고 외부 소스로부터 재생 명령어를 수신한다.
    • Media3에서 MediaSession에 명령어를 실행하고 현재 상태를 가져오려면 Player가 필요하다.
  • MediaSessionService
    • MediaSessionService는 백그라운드 재생을 용이하게 하기 위해 앱의 기본 Activity와 별도로 서비스에 미디어 세션 및 관련 플레이어를 보유한다.
  • MediaController
    • MediaController 클래스는 일반적으로 앱 외부에서(예: 다른 앱이나 시스템 자체) 명령어를 전송하는 데 사용된다. 명령어는 연결된 MediaSession의 기본 Player로 전송된다.
    • MediaController 클래스는 Player 인터페이스를 구현하지만 메서드를 호출하면 명령어가 연결된 MediaSession로 전송된다. Google 어시스턴트와 같은 클라이언트 앱은 MediaController를 사용하여 연결된 세션에서 재생을 제어할 수 있다.
  • MediaLibrayService
    • MediaLibraryService는 클라이언트 앱에 콘텐츠 라이브러리를 제공할 수 있도록 추가 API가 포함되어 있다는 점을 제외하면 MediaSessionService와 유사하다.
  • MediaBrowser
    • MediaBrowser 클래스를 사용하면 사용자가 미디어 앱의 콘텐츠 라이브러리를 탐색하고 재생할 항목을 선택할 수 있다.
    • MediaBrowser 클래스는 MediaController 및 Player 인터페이스를 모두 구현한다. MediaController와 마찬가지로 Android Auto와 같은 클라이언트 앱은 일반적으로 MediaBrowser를 구현한다.

UI 구성요소

Media3은 동영상을 보고 재생을 제어하기 위한 기본 UI 구성요소를 제공한다.

  • PlayerView
    • 동영상 및 재생 컨트롤을 표시하는 기본 View
    • ExoPlayerMediaController 또는 기타 맞춤 Player에 연결한다.

출처

https://developer.android.com/guide/topics/media/media3?hl=ko