KONTROL ET

ExoPlayer, birden fazla kapsayıcı biçimiyle DASH'i destekler. Medya akışları demukslenmelidir. Yani video, ses ve metin, DASH manifest dosyasında ayrı AdaptationSet öğeleri olarak tanımlanmalıdır (Aşağıdaki tabloda açıklandığı gibi CEA-608 bir istisnadır). İçerilen ses ve video örnek biçimleri de desteklenmelidir (ayrıntılar için örnek biçimler bölümüne bakın).

Özellik Destekleniyor Yorumlar
Container'lar
FMP4 EVET Yalnızca ayrılmış akışlar
WebM EVET Yalnızca ayrılmış akışlar
Matroska EVET Yalnızca ayrılmış akışlar
MPEG-TS HAYIR Destek planlanmıyor
Altyazılar
TTML EVET ISO/IEC 14496-30'a göre FMP4'e yerleştirilmiş veya ham
WebVTT EVET ISO/IEC 14496-30'a göre FMP4'e yerleştirilmiş veya ham
CEA-608 EVET SCTE Accessibility tanımlayıcıları kullanılarak işaretlendiğinde FMP4'e yerleştirilir.
CEA-708 EVET SCTE Accessibility tanımlayıcıları kullanılarak işaretlendiğinde FMP4'e yerleştirilir.
Meta veri
EMSG meta verileri EVET FMP4'e yerleştirilmiş
İçerik koruma
Widevine EVET "cenc" şeması: API 19+; "cbcs" şeması: API 25+
PlayReady SL2000 EVET Yalnızca Android TV, "cenc" şeması
ClearKey EVET Yalnızca API 21 ve üzeri, "cenc" şeması
Reklam ekleme
Çok dönemli oynatma EVET
Sunucu yönlendirmeli reklam ekleme (xlinks) HAYIR
IMA sunucu tarafı ve istemci tarafı reklamları EVET Reklam ekleme kılavuzu
Canlı oynatma
Normal canlı oynatma EVET
Ultra düşük gecikmeli CMAF canlı oynatma EVET
Common Media Client Data (CMCD) EVET CMCD entegrasyon kılavuzu

MediaItem kullanma

Bir DASH akışını oynatmak için DASH modülünü kullanmanız gerekir.

Kotlin

implementation("androidx.media3:media3-exoplayer-dash:1.7.1")

Groovy

implementation "androidx.media3:media3-exoplayer-dash:1.7.1"

Ardından, DASH MPD URI için bir MediaItem oluşturup oynatıcıya iletebilirsiniz.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(dashUri))
// 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(dashUri));
// Prepare the player.
player.prepare();

URI'niz .mpd ile bitmiyorsa içeriğin türünü açıkça belirtmek için MimeTypes.APPLICATION_MPD değerini MediaItem.Builder öğesinin setMimeType bölümüne iletebilirsiniz.

ExoPlayer, hem kullanılabilir bant genişliğini hem de cihaz özelliklerini dikkate alarak manifest dosyasında tanımlanan temsiller arasında otomatik olarak uyum sağlar.

DashMediaSource'u kullanma

Daha fazla özelleştirme seçeneği için DashMediaSource oluşturabilir ve bunu MediaItem yerine doğrudan oynatıcıya iletebilirsiniz.

Kotlin

val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a dash media source pointing to a dash manifest uri.
val mediaSource: MediaSource =
  DashMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(dashUri))
// Create a player instance which gets an adaptive track selector by default.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a dash media source pointing to a dash manifest uri.
MediaSource mediaSource =
    new DashMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(dashUri));
// Create a player instance which gets an adaptive track selector by default.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

Manifeste erişme

Player.getCurrentManifest yöntemini çağırarak mevcut manifesti alabilirsiniz. DASH için döndürülen nesneyi DashManifest olarak yayınlamanız gerekir. Manifest yüklendiğinde onTimelineChanged Player.Listener geri çağırması da çağrılır. Bu işlem, seç-izle içeriklerde bir kez, canlı içeriklerde ise birden çok kez gerçekleşir. Aşağıdaki kod snippet'inde, bir uygulamanın manifest yüklendiğinde nasıl işlem yapabileceği gösterilmektedir.

Kotlin

player.addListener(
  object : Player.Listener {
    override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) {
      val manifest = player.currentManifest
      if (manifest is DashManifest) {
        // Do something with the manifest.
      }
    }
  }
)

Java

player.addListener(
    new Player.Listener() {
      @Override
      public void onTimelineChanged(
          Timeline timeline, @Player.TimelineChangeReason int reason) {
        Object manifest = player.getCurrentManifest();
        if (manifest != null) {
          DashManifest dashManifest = (DashManifest) manifest;
          // Do something with the manifest.
        }
      }
    });

Oynatmayı özelleştirme

ExoPlayer, oynatma deneyimini uygulamanızın ihtiyaçlarına göre uyarlamanız için birden fazla yol sunar. Örnekler için Özelleştirme sayfasına bakın.