ExoPlayer는 FMP4 컨테이너 형식으로 SmoothStreaming을 지원합니다. 미디어 스트림을 디뮤싱해야 합니다. 즉, 동영상, 오디오, 텍스트가 SmoothStreaming 매니페스트의 고유한 StreamIndex 요소에 정의되어야 합니다. 포함된 오디오 및 동영상 샘플 형식도 지원되어야 합니다(자세한 내용은 샘플 형식 섹션 참고).
기능 | 지원됨 | 비고 |
---|---|---|
컨테이너 | ||
FMP4는 | 예 | 역다중화된 스트림만 |
자막 | ||
TTML | 예 | FMP4에 삽입됨 |
콘텐츠 보호 | ||
PlayReady SL2000 | 예 | Android TV만 |
실시간 재생 | ||
일반 라이브 재생 | 예 | |
CMCD(Common Media Client Data) | 예 | 통합 가이드 |
MediaItem 사용
SmoothStreaming 스트림을 재생하려면 SmoothStreaming 또는 모듈을 마칩니다
Kotlin
implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer-smoothstreaming:1.4.1"
그런 다음 SmoothStreaming 매니페스트 URI의 MediaItem
를 만들고 플레이어에 전달할 수 있습니다.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)) // Prepare the player. player.prepare()
자바
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)); // Prepare the player. player.prepare();
URI가 .ism/Manifest
로 끝나지 않는 경우 다음을 전달할 수 있습니다.
MimeTypes.APPLICATION_SS
~setMimeType
/MediaItem.Builder
페이지
콘텐츠의 유형을 나타냅니다.
ExoPlayer는 사용 가능한 대역폭과 기기 기능을 모두 고려하여 매니페스트에 정의된 표현 간에 자동으로 조정합니다.
SsMediaSource 사용
더 많은 맞춤설정 옵션을 사용하려면 MediaItem
대신 SsMediaSource
를 만들어 플레이어에 직접 전달하면 됩니다.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a SmoothStreaming media source pointing to a manifest uri. val mediaSource: MediaSource = SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)) // 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()
자바
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a SmoothStreaming media source pointing to a manifest uri. MediaSource mediaSource = new SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)); // 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();
매니페스트 액세스
Player.getCurrentManifest
를 호출하여 현재 매니페스트를 검색할 수 있습니다.
SmoothStreaming의 경우 반환된 객체를 SsManifest
로 변환해야 합니다. 이
Player.Listener
의 onTimelineChanged
콜백도 언제든지 호출됩니다.
매니페스트가 로드됩니다 이는 주문형 콘텐츠에 대해 한 번 진행되며
여러 번 반복할 수 있습니다 다음 코드 스니펫은 앱이
뭔가를 할 수 있게 해줍니다
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is SsManifest) { // Do something with the manifest. } } } )
자바
player.addListener( new Player.Listener() { @Override public void onTimelineChanged( Timeline timeline, @Player.TimelineChangeReason int reason) { Object manifest = player.getCurrentManifest(); if (manifest != null) { SsManifest ssManifest = (SsManifest) manifest; // Do something with the manifest. } } });
재생 맞춤설정
ExoPlayer는 사용자의 기기에 맞게 재생 환경을 맞춤설정하는 다양한 방법을 파악할 수 있습니다. 예시는 맞춤설정 페이지를 참고하세요.