다음 컨테이너 형식의 스트림은 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는 앱의 요구사항에 따라 재생 환경을 맞춤설정할 수 있는 여러 가지 방법을 제공합니다. 예시를 보려면 맞춤설정 페이지를 참조하세요.