Player란?
'Player' 클래스는 미디어 재생을 관리하고 제어하는 데 핵심적인 역할을 한다. 핵심적인 역할은 다음과 같다.
- 미디어 제어 : Player는 미디어 재생을 위한 리모컨과 같다. 이를 사용하여 오디오 또는 비디오 콘텐츠의 재생을 시작, 일시 중지, 재개 및 중지한다.
- Track 관리 : 오디오, 비디오, 텍스트(자막) 등 다양한 트랙을 관리한다. 'Player'를 사용하면 활성화된 트랙을 제어하고 해당 설정을 조정할 수 있다.
- 미디어 세션 통합 : Jetpack Media3의 Player는 Android 미디어 세션 API와 통합된다. 이는 시스템 미디어 컨트롤과 원활하게 작동하여 사용자가 알림 컨트롤, 잠금 화면 및 기타 외부 인터페이스에서 재생을 제어할 수 있음을 의미한다.
- 이벤트 처리 : Player는 재생 상태, 오류, 버퍼링 및 기타 중요한 순간을 알려주는 이벤트를 생성한다. 이러한 이벤트에 응답하도록 리스너를 등록할 수 있다.
- 미디어소스 통합 : MediaSource 인터페이스를 통해 다양한 유형의 미디어 소스와 함께 작동한다. 미디어 소스는 미디어 콘텐츠의 출처를 정의하고 'Player'는 미디어 콘텐츠를 조정하여 다양한 형식과 스트리밍 프로토콜을 처리한다.
- 사용자 정의 : Player는 고도로 사용자 정의 가능하다. 재생할 트랙을 선택하는 'TrackSelector', 버퍼링을 관리하는 'LoadControl', 재생 환경을 맞춤화하는 다양한 기타 옵션과 같은 설정을 사용하여 동작을 구성할 수 있다.
- 재생 제어 : Player는 특정 위치 탐색, 재생 속도 조절, 볼륨 조절 등의 방법을 제공한다. 이를 통해 미디어 경험 방식을 세밀하게 제어할 수 있다.
- 렌더러 아키텍처 : 내부적으로 Player는 렌더러 아키텍처를 사용한다. 렌더러라고 하는 다양한 구성 요소는 오디오, 비디오 및 텍스트의 실제 렌더링을 처리한다. 이 모듈식 설계는 유연성과 확장성을 허용한다.
요약하면 Jetpack Media3의 'Player' 클래스는 Android에서 전체 미디어 재생 프로세스를 관리하는 클래스이다. 다양한 구성 요소를 통합하고, 사용자 명령을 처리하며, 강력하고 맞춤화된 미디어 플레이바를 구축하기 위한 유연한 프레임워크를 제공한다.
ExoPlayer란?
ExoPlayer는 안드로이드 애플리케이션에서 미디어 재생을 관리하는 라이브러리이다. 이 라이브러리는 안드로이드의 기본 MediaPlayer보다 더 많은 기능과 제어를 제공하여 다양한 미디어 형식 및 프로토콜을 지원한다.
Exoplayer는 player interface를 상속받고 ExoPlayer는 주로 Kotlin으로 작성되어 있으며, androidx.media3 패키지에 속해 있다. 라이브러리는 기본적으로 Android의 MediaPlayer에서 제공하는 기능을 확장하면서도, 고급 기능 및 커스터마이징 가능한 옵션을 추가로 제공한다.
ExoPlayer를 사용한 대표적인 서비스에는 Youtube가 있다.
지원하는 형식
안드로이드의 Exoplayer는 다양한 미디어 형식을 지원하는 라이브러리이다.
Exoplayer는 비디오, 오디오, 텍스트 등 다양한 종류의 미디어를 재생할 수 있다.
비디오
- H.263 - .3gp, .mp4
- H.264 (BP) - .3gp, .mp4, .ts
- H.264 (MP)
- H.265 (HEVC) - .mp4
- MPEG-4 SP - .3gp
- VP8 - .webm
- VP9 - .webm
오디오
- AAC LC - .3gp, .mp4, .m4a, .aac, .ts
- HE-AACv1(AAC+) - .3gp, .mp4, .m4a, .aac, .ts
- AAC ELD - .3gp, .mp4, .m4a, .aac, .ts
- AMR-NB - .3gp
- AMR-WB - .3gp
- FLAC - .flac
- GSM - .gsm
- MIDI - .mid, .xmf, .mxmf, .rttl, rtx, .ota, .imy
- MP3 - .mp3
- Opus - .mkv
- PCM/WAVE - .wav
- Vorbis - .ogg, .mkv
스트리밍
- DASH
- SmoothStreaming
주요 클래스
Exoplayer
미디어 재생을 조정하는 중앙 클래스이다. 렌더러, 미디어 소스, 트랙 선택기, 로드 제어 등 다양한 구성 요소를 조정하여 원활한 미디어 재생 환경을 제공한다.
SimpleExoPlayer
기본 미디어 재생을 위한 간단한 인터페이스를 제공하는 ExoPlayer의 단순화된 버전이다. 광범위한 사용자 정의가 필요 없이 간단한 미디어 재생 기능을 빠르게 구현하는 데 적합하다.
DefaultRenderersFactory
ExoPlayer에서 사용하는 기본 Renderer 구성 요소 생성을 담당한다. Renderer는 오디오, 비디오, 텍스트 등 다양한 유형의 미디어를 Renderering하는 역할을 담당한다. DefaultRenderersFactory는 미디어 형식을 기반으로 적절한 Renderer가 생성되도록 보장한다.
※ 렌더링이란 : 오디오나 비디오 텍스트 등을 보거나 들을 수 있게 만드는 작업
MediaSource
미디어 콘텐츠의 소스를 나타내는 인터페이스이다. ExoPlayer는 다양한 미디어 형식과 스트리밍 프로토콜을 처리하기 위해 다양한 MediaSource 구현을 지원한다. 예를 들면 프로그레시브 다운로드를 위한 ProgressiveMediaSource와 DASH 스트리밍을 위한 DashMediaSource가 있다.
※ 프로그래시브 다운로드란 : 영상을 즉시 시청하면서 영상은 계속 다운로드 받는 행위
TrackSelector
오디오, 비디오, 텍스트 트랙을 포함한 미디어 트랙 선택을 관리한다. 개발자는 사용자 정의 TrackSelector를 구현하거나 내장 구현 중 하나를 사용하여 재생을 위해 선택할 트랙을 제어할 수 있다.
LoadControl
미디어 데이터의 버퍼링 및 로딩을 관리한다. 이는 버퍼링할 데이터의 양, 재생 시작 시기, 네트워크 상태 변화에 대응하는 방법과 관련된 결정에 영향을 미친다.
ExoPlayer.EventListener:
개발자가 미디어 재생 중에 발생하는 이벤트를 수신하기 위해 구현할 수 있는 인터페이스이다. 이벤트에는 상태 변경(예: 재생 중, 일시 중지됨, 버퍼링), 오류 및 기타 관련 정보가 포함된다.
Extractor
컨테이너 형식에서 미디어 데이터를 추출하는 역할을 담당하는 구성 요소이다. ExoPlayer는 추출기를 사용하여 MP4, Matroska 등과 같은 다양한 컨테이너 형식을 처리한다.
참고
'Android > 오디오 및 비디오' 카테고리의 다른 글
미디어 용어 사전2 - Android (0) | 2023.11.14 |
---|---|
미디어 용어 사전1 - Basic (0) | 2023.11.12 |
MPEG-DASH 란 (1) | 2023.11.03 |
DroidKnights - Jetpack Media3로 좋은 콘텐츠 소비 경험 구현하기 (0) | 2023.11.02 |
MedioPlayer에서 ExoPlayer로 전환하는 이유(1) (2) | 2023.08.11 |