ExoPlayer가 지원하는 형식을 정의할 때 다음 사항에 유의해야 합니다. '미디어 형식' 여러 수준에서 정의됩니다 가장 낮은 수준에서 최고점은 다음과 같습니다.
- 개별 미디어 샘플의 형식 (예: 동영상 프레임 또는 프레임) 합니다. 이는 샘플 형식입니다. 일반적인 동영상 파일은 2개 이상의 샘플 형식으로 된 미디어 포함 하나는 동영상용 (예: H.264)이고 하나는 오디오 (예: AAC)입니다.
- 미디어 샘플과 관련 동영상이 포함된 컨테이너의 형식입니다. 메타데이터로 변환할 수 있습니다. 이러한 형식이 컨테이너 형식입니다. 미디어 파일에는 단일 컨테이너가 있습니다. 일반적으로 파일 확장자로 표시됩니다 (예: MP4). 참고 일부 오디오 전용 형식 (예: MP3)의 경우 샘플 및 컨테이너 형식이 동일할 수 있습니다.
- DASH, SmoothStreaming, HLS와 같은 적응형 스트리밍 기술 이러한 미디어 형식은 아니지만 어떤 콘텐츠를 생성할지 정의해야 합니다 ExoPlayer에서 제공하는 지원 수준입니다.
다음 섹션에서는 각 수준에서 ExoPlayer의 지원을 가장 높은 수준에서부터 있습니다. 마지막 두 섹션에서는 독립형 자막 형식 지원을 설명합니다. HDR 동영상 재생을 지원합니다
가변 품질 스트리밍
DASH
ExoPlayer는 여러 컨테이너 형식으로 DASH를 지원합니다. 미디어 스트림은
역다중화(demuxed)의 약어로, 동영상, 오디오, 텍스트를 서로 구분되는
DASH 매니페스트의 AdaptationSet
요소 (CEA-608은
아래 표에 설명) 포함된 오디오 및 동영상 샘플 형식은
도 지원됩니다 (자세한 내용은
샘플 형식 섹션을 참조하세요.)
기능 | 지원됨 | 비고 |
---|---|---|
컨테이너 | ||
FMP4는 | 예 | 역다중화된 스트림만 |
WebM | 예 | 역다중화된 스트림만 |
마트로스카 | 예 | 역다중화된 스트림만 |
MPEG-TS | 아니요 | 계획된 지원 없음 |
자막 | ||
TTML : TTML: | 예 | 원시 또는 ISO/IEC 14496-30에 따라 FMP4에 삽입됨 |
WebVTT | 예 | 원시 또는 ISO/IEC 14496-30에 따라 FMP4에 삽입됨 |
CEA-608 : CEA-608 | 예 | SCTE 접근성 설명어를 사용하여 신호를 보낼 때 FMP4에 삽입됨 |
CEA-708 : CEA-708 | 예 | SCTE 접근성 설명어를 사용하여 신호를 보낼 때 FMP4에 삽입됨 |
메타데이터 | ||
EMSG 메타데이터 | 예 | FMP4에 삽입됨 |
콘텐츠 보호 | ||
Widevine | 예 | 'cenc' 스키마: API 19 이상; 'cbcs' 스키마: API 25 이상 |
PlayReady SL2000 | 예 | Android TV, 'cenc' 스키마만 |
키 지우기 키 | 예 | API 21 이상, 'cenc' 스키마만 |
실시간 재생 | ||
일반 라이브 재생 | 예 | |
매우 짧은 지연 시간 CMAF 실시간 재생 | 예 | |
CMCD (Common Media Client Data) | 예 | 통합 가이드 |
SmoothStreaming
ExoPlayer는 FMP4 컨테이너 형식으로 SmoothStreaming을 지원합니다. 미디어 스트림 역다중화되어야 합니다. 즉, 동영상, 오디오, 텍스트가 별도로 식별되어야 합니다. SmoothStreaming 매니페스트의 StreamIndex 요소. 포함된 오디오와 동영상 샘플 형식도 지원해야 합니다 (자세한 내용은 샘플 형식 섹션을 참조하세요.)
기능 | 지원됨 | 비고 |
---|---|---|
컨테이너 | ||
FMP4는 | 예 | 역다중화된 스트림만 |
자막 | ||
TTML : TTML: | 예 | FMP4에 삽입됨 |
콘텐츠 보호 | ||
PlayReady SL2000 | 예 | Android TV만 |
실시간 재생 | ||
일반 라이브 재생 | 예 | |
CMCD (Common Media Client Data) | 예 | 통합 가이드 |
HLS
ExoPlayer는 여러 컨테이너 형식으로 HLS를 지원합니다. 포함된 오디오와 동영상 샘플 형식도 지원되어야 합니다 (자세한 내용은 샘플 형식 섹션을 참조하세요.) HLS 콘텐츠 제작자가 고품질 HLS 스트림을 생성하도록 강력하게 권장하고 설명대로 여기에서 확인할 수 있습니다.
기능 | 지원됨 | 비고 |
---|---|---|
컨테이너 | ||
MPEG-TS | 예 | |
FMP4/CMAF | 예 | |
ADTS (AAC) | 예 | |
MP3 | 예 | |
자막 | ||
CEA-608 : CEA-608 | 예 | |
CEA-708 : CEA-708 | 예 | |
WebVTT | 예 | |
메타데이터 | ||
ID3 | 예 | |
SCTE-35 | 아니요 | |
콘텐츠 보호 | ||
AES-128 | 예 | |
샘플 AES-128 | 아니요 | |
Widevine | 예 | API 19 이상('cenc' 체계) 및 25 이상('cbcs' 체계) |
PlayReady SL2000 | 예 | Android TV만 |
서버 제어 | ||
델타 업데이트 | 예 | |
차단 재생목록 새로고침 | 예 | |
미리 로드 힌트의 차단 로드 | 예 | 길이가 정의되지 않은 바이트 범위 제외 |
실시간 재생 | ||
일반 라이브 재생 | 예 | |
지연 시간이 짧은 HLS (Apple) | 예 | |
지연 시간이 짧은 HLS (커뮤니티) | 아니요 | |
CMCD (Common Media Client Data) | 예 | 통합 가이드 |
프로그레시브 컨테이너 형식
다음 컨테이너 형식의 스트림은 ExoPlayer에서 직접 재생할 수 있습니다. 포함된 오디오 및 동영상 샘플 형식도 지원해야 합니다 (자세한 내용은 샘플 형식 섹션 참조). 이미지 컨테이너 및 형식 지원은 이미지.
컨테이너 형식 | 지원됨 | 비고 |
---|---|---|
MP4 | 예 | |
모바일 앱 | 예 | |
FMP4는 | 예 | |
WebM | 예 | |
마트로스카 | 예 | |
MP3 | 예 | 일부 스트림은 고정 비트 전송률 탐색으로만 탐색 가능** |
오그 | 예 | Vorbis, Opus, FLAC 포함 |
WAV | 예 | |
MPEG-TS | 예 | |
MPEG-PS | 예 | |
FLV | 예 | 탐색할 수 없음* |
ADTS (AAC) | 예 | 고정 비트 전송률 탐색을 통해서만 탐색 가능** |
FLAC | 예 | FLAC 라이브러리 또는 ExoPlayer 라이브러리의 FLAC 추출기 사용*** |
AMR | 예 | 고정 비트 전송률 탐색을 통해서만 탐색 가능** |
* 컨테이너가 메타데이터 (예: 샘플 색인)를 사용하여 미디어 플레이어가 효율적인 방법으로 탐색을 수행할 수 있도록 합니다. 탐색이 필요한 경우 더 적합한 컨테이너 형식을 사용하는 것이 좋습니다.
** 이러한 추출기에는 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
플래그가 있습니다.
일정한 비트 전송률 가정을 사용하여 근사치 탐색을 지원합니다. 이
기능은 기본적으로 사용 설정되어 있지 않습니다. 이 기능을 사용 설정하는 가장 간단한 방법은
모든 추출기에 대해
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, 설명대로
여기를 참고하세요.
*** FLAC 라이브러리 추출기는 처리 가능한 원시 오디오를 출력합니다.
API에 의해 결정됩니다. ExoPlayer 라이브러리 FLAC 추출기는 다음을 출력합니다.
FLAC 오디오 프레임으로서 FLAC 디코더를 사용합니다 (예: MediaCodec
FLAC (API 레벨 27부터 필요)을 처리하는 디코더 또는
FLAC가 사용 설정된 FFmpeg 라이브러리)를 사용할 수 있습니다. DefaultExtractorsFactory
는
확장 프로그램 추출기(애플리케이션이 FLAC 라이브러리로 빌드된 경우)
그 외의 경우에는 ExoPlayer 라이브러리 추출기를 사용합니다.
RTSP
ExoPlayer는 실시간 및 주문형 RTSP를 모두 지원합니다. 지원되는 샘플 형식 및 네트워크 유형이 아래에 나와 있습니다.
지원되는 샘플 형식
- H264 (SDP 미디어 설명의 SPS/PPS 데이터는 속성).
- AAC (ADS 비트스트림 포함)
- AC3입니다.
지원되는 네트워크 유형
- RTP over UDP 유니캐스트 (멀티캐스트는 지원되지 않음)
- 인터리브 처리된 RTSP, TCP를 사용하는 RTSP를 통한 RTP
샘플 형식
기본적으로 ExoPlayer는 Android의 플랫폼 디코더를 사용합니다. 따라서 지원되는 샘플 형식은 ExoPlayer가 아닌 기본 플랫폼에 종속됩니다. 다음에 대해서는 지원되는 미디어 형식을 참고하세요. Android 기기에서 지원하는 샘플 형식에 대한 문서를 참조하세요. 참고: 개별 기기에서는 목록에 없는 추가 형식을 지원할 수 있습니다.
Android의 플랫폼 디코더 외에도 ExoPlayer는 인코더-디코더 확장 프로그램입니다. 이러한 작업은 수동으로 빌드하고 프로젝트에 권한을 제공해야 합니다 Google은 현재 소프트웨어 디코더 및 라이브러리 AV1 VP9, FLAC, Opus, 및 FFmpeg입니다.
FFmpeg 라이브러리
FFmpeg 라이브러리는 디코딩하는 방법을 알아보겠습니다. 특정 광고 단위를 디코더를 추가해야 합니다. 라이브러리의 README.md에 있습니다. 이 아래 표는 오디오 샘플 형식에서 해당하는 FFmpeg 디코더 이름입니다.
샘플 형식 | 디코더 이름 |
---|---|
Vorbis | Vorbis |
Opus | 오푸스 |
FLAC | FLAC |
ALAC : ALAC | Alac |
PCM μ 법 | Pcm_mulaw |
PCM A-법 | Pcm_alaw |
MP1, MP2, MP3 | mp3 |
AMR-NB | Amrnb |
AMR-WB | AMRWB |
AAC | aac |
에어컨-3 | A3 |
e-AC-3 | eAC3 |
DTS, DTS-HD | DCA |
TrueHD | MLP TrueHD |
이미지
ExoPlayer는 다음 이미지 형식을 지원합니다. 자세한 내용은 이미지 로드 라이브러리 API에 대한 지원을 제공할 수 있는 외부 라이브러리와 통합하는 방법에 대해 사용할 수 있습니다.
이미지 형식 | 지원됨 | 참고 |
---|---|---|
BMP | 예 | |
GIF | 아니요 | 추출기 지원 안 됨 |
JPEG | 예 | |
JPEG 모션 사진 | 예 | 정지 이미지 및 동영상 지원됨 |
JPEG 울트라 HDR | 예 | Android 14 및 이후 버전에서 SDR로 대체 비 HDR 디스플레이 |
PNG | 예 | |
WebP | 예 | |
HEIF/HEIC | 예 | |
HEIC 모션 포토 | 일부만 | 정지 이미지만 지원됨* |
AVIF (기준) | 예 | Android 14 이상에서만 디코딩됨 |
* HEIC 모션 사진의 동영상 부분은 MetadataRetriever 독립형 파일로 재생됩니다.
독립형 자막 형식
ExoPlayer는 다양한 형식의 독립형 자막 파일을 지원합니다. 부제목 파일은 미디어 항목 페이지에 설명된 대로 사이드로드할 수 있습니다.
컨테이너 형식 | 지원됨 | MIME 유형 |
---|---|---|
WebVTT | 예 | MIME 유형.TEXT_VTT |
TTML / SMPTE-TT | 예 | MIME 유형.APPLICATION_TTML |
SubRip | 예 | MIME 유형.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | 예 | MIME 유형.TEXT_SSA |
HDR 동영상 재생
ExoPlayer는 다양한 형식의 HDR (High Dynamic Range) 동영상 추출을 처리합니다. Dolby Vision(MP4) 및 HDR10+(Matroska/WebM) 등 컨테이너 기반 컨테이너입니다. 디코딩 HDR 콘텐츠의 표시는 Android 플랫폼의 지원에 따라 다르며 있습니다. 자세한 내용은 HDR 동영상 재생 를 방문하여 HDR 디코딩/디스플레이 기능 및 제한사항을 확인하는 방법을 여러 Android 버전에서 HDR을 지원합니다.
특정 코덱 프로필에 대한 지원이 필요한 HDR 스트림을 재생할 때는
ExoPlayer의 기본 MediaCodec
선택기가 이를 지원하는 디코더를 선택합니다.
(사용 가능한 경우), 동일한 MIME 유형의 다른 디코더가
코덱 목록 상단에 표시되는 프로필을 지원하지 않습니다. 이로 인해
소프트웨어 디코더를 선택할 때
하드웨어 디코더의 기능입니다.