프로그레시브

다음 컨테이너 형식의 스트림은 ExoPlayer에서 직접 재생할 수 있습니다. 포함된 오디오 및 동영상 샘플 형식도 지원되어야 합니다 (자세한 내용은 샘플 형식 섹션 참고).

컨테이너 형식 지원됨 의견
MP4
M4A : M4A : M4A : M4A : M4A
FMP4
WebM
마트로스카
MP3 일부 스트림은 상수 비트 전송률 탐색을 사용해야만 탐색 가능합니다.**
오그 Vorbis, Opus, FLAC 포함
WAV
MPEG-TS
MPEG-PS
FLV 탐색 불가*
ADTS (AAC) 상수 비트 전송률 탐색을 사용해야만 탐색 가능**
FLAC FLAC 라이브러리 또는 ExoPlayer 라이브러리의 FLAC 추출기 사용***
AMR 상수 비트 전송률 탐색을 사용해야만 탐색 가능**
JPEG 모션 사진 MP4 콘텐츠만 추출됩니다.

* 미디어 플레이어가 효율적인 방법으로 탐색을 실행할 수 있도록 컨테이너가 메타데이터 (예: 샘플 색인)를 제공하지 않으므로 탐색은 지원되지 않습니다. 탐색이 필요한 경우 더 적절한 컨테이너 형식을 사용하는 것이 좋습니다.

** 이러한 추출기에는 상수 비트 전송률 가정을 사용하여 근사치 탐색을 사용 설정하는 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING 플래그가 있습니다. 이 기능은 기본적으로 사용 설정되어 있지 않습니다. 이 기능을 지원하는 모든 추출기에 이 기능을 사용 설정하는 가장 간단한 방법은 여기에 설명된 대로 DefaultExtractorsFactory.setConstantBitrateSeekingEnabled를 사용하는 것입니다.

*** FLAC 라이브러리 추출기는 모든 API 수준에서 프레임워크에 의해 처리될 수 있는 원시 오디오를 출력합니다. ExoPlayer 라이브러리 FLAC 추출기는 FLAC 오디오 프레임을 출력하므로 FLAC 디코더(예: API 수준 27에서 필요함)를 처리하는 MediaCodec 디코더 또는 FLAC가 사용 설정된 FFmpeg 라이브러리와 같은 FLAC 디코더를 사용합니다. 애플리케이션이 FLAC 라이브러리로 빌드된 경우 DefaultExtractorsFactory는 확장 프로그램 추출기를 사용합니다. 그 외의 경우에는 ExoPlayer 라이브러리 추출기를 사용합니다.

MediaItem 사용

프로그레시브 스트림을 재생하려면 미디어 URI를 사용하여 MediaItem를 만들어 플레이어에 전달합니다.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();

ProgressiveMediaSource 사용

추가 맞춤설정 옵션을 위해 ProgressiveMediaSource를 만들고 MediaItem 대신 플레이어에 직접 연결할 수 있습니다.

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

재생 맞춤설정

ExoPlayer는 앱의 요구사항에 따라 재생 환경을 맞춤설정할 수 있는 여러 가지 방법을 제공합니다. 예시를 보려면 맞춤설정 페이지를 참조하세요.