ExoPlayer는 FMP4 컨테이너 형식으로 SmoothStreaming을 지원합니다. 미디어 스트림 역다중화되어야 합니다. 즉, 동영상, 오디오, 텍스트가 별도로 식별되어야 합니다. SmoothStreaming 매니페스트의 StreamIndex 요소. 포함된 오디오와 동영상 샘플 형식도 지원해야 합니다 (자세한 내용은 샘플 형식 섹션을 참조하세요.)
기능 | 지원됨 | 비고 |
---|---|---|
컨테이너 | ||
FMP4는 | 예 | 역다중화된 스트림만 |
자막 | ||
TTML : 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 사용
더 많은 맞춤설정 옵션을 위해 SsMediaSource
를 만들어 전달하면 됩니다.
MediaItem
대신 플레이어에 직접 전달합니다.
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는 사용자의 기기에 맞게 재생 환경을 맞춤설정하는 여러 가지 방법을 파악할 수 있습니다. 예시는 맞춤설정 페이지를 참고하세요.