ExoPlayer, birden fazla container biçimiyle HLS'yi destekler. İçerikteki ses ve video örnek biçimleri de desteklenmelidir (bkz. örnek biçimler bölümüne bakın). Biz HLS içerik üreticilerini yüksek kaliteli HLS akışları oluşturmaya kesinlikle teşvik eder. açıklandığı gibi burada bulabilirsiniz.
Özellik | Destekleniyor | Yorumlar |
---|---|---|
Kapsayıcılar | ||
MPEG-TS | EVET | |
FMP4/CMAF | EVET | |
ADTS (AAC) | EVET | |
MP3 | EVET | |
Altyazılar | ||
CEA-608 | EVET | |
CEA-708 | EVET | |
WebVTT | EVET | |
Meta veri | ||
ID3 | EVET | |
SCTE-35 | HAYIR | |
İçerik koruması | ||
AES-128 | EVET | |
Örnek AES-128 | HAYIR | |
Widevine | EVET | API 19+ ("cenc" şeması) ve 25+ ("cbcs" şeması) |
PlayReady SL2000 | EVET | Yalnızca Android TV |
Sunucu denetimi | ||
Delta güncellemeleri | EVET | |
Oynatma listesinin yeniden yüklenmesini engelleme | EVET | |
Önceden yükleme ipuçlarının yüklenmesini engelleme | EVET | Uzunlukları tanımlanmamış bayt aralıkları hariç |
Canlı oynatma | ||
Düzenli canlı oynatma | EVET | |
Düşük gecikmeli HLS (Apple) | EVET | |
Düşük gecikmeli HLS (Topluluk) | HAYIR | |
Ortak Medya İstemci Verileri (CMCD) | EVET | Entegrasyon Kılavuzu |
MediaItem'i Kullanma
HLS akışı oynatmak için HLS modülüne bağlı olmanız gerekir.
Kotlin
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
Eski
implementation "androidx.media3:media3-exoplayer-hls:1.4.1"
Ardından bir HLS oynatma listesi URI'si için MediaItem
oluşturabilir ve bunu
oynatıcıya gitmiş olur.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(hlsUri)) // 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(hlsUri)); // Prepare the player. player.prepare();
URI'niz .m3u8
ile bitmiyorsa MimeTypes.APPLICATION_M3U8
parametresini iletebilirsiniz
to setMimeType
/MediaItem.Builder
içerik.
Medya öğesinin URI'sı bir medya oynatma listesine veya çok değişkenli bir öğeye işaret edebilir
oynatma listesi. URI, birden fazla varyant bildiren çok değişkenli bir oynatma listesine işaret ediyorsa
#EXT-X-STREAM-INF
etiketleri arasında yer alır, ardından ExoPlayer
seçenekleri (hem mevcut bant genişliği hem de cihaz özellikleri dikkate alınarak)
HlsMediaSource'u Kullanma
Daha fazla özelleştirme seçeneği için HlsMediaSource
oluşturup iletebilirsiniz
doğrudan oynatıcıya gönderilir.MediaItem
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a HLS media source pointing to a playlist uri. val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(hlsUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the HLS media source as the playlist with a single media item. player.setMediaSource(hlsMediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a HLS media source pointing to a playlist uri. HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(hlsUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the HLS media source as the playlist with a single media item. player.setMediaSource(hlsMediaSource); // Prepare the player. player.prepare();
Manifest dosyasına erişme
Player.getCurrentManifest
öğesini çağırarak geçerli manifesti alabilirsiniz.
HLS için döndürülen nesneyi HlsManifest
öğesine yayınlamanız gerekir. İlgili içeriği oluşturmak için kullanılan
Player.Listener
için onTimelineChanged
geri çağırması her zaman
manifest yüklendi. Bu durum yalnızca seç-izle içeriklerde ve
bunu, canlı içeriklerde de yapabilirsiniz. Aşağıdaki kod snippet'i bir uygulamanın,
manifest dosyası her yüklendiğinde bir işlem yapabilir.
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is HlsManifest) { // 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) { HlsManifest hlsManifest = (HlsManifest) manifest; // Do something with the manifest. } } });
Oynatmayı özelleştirme
ExoPlayer, oynatma deneyimini kendi tercihinize göre uyarlamanız için çeşitli yöntemler sunar. iyi bir fikir olabilir. Örnekler için Özelleştirme sayfasına göz atın.
Yığınsız hazırlığı devre dışı bırakma
ExoPlayer, varsayılan olarak parçasız hazırlık kullanır. Bu komut, ExoPlayer uygulamasının
öğesini hazırlamak için yalnızca çok değişkenli oynatma listesindeki bilgileri kullanır.
akışı (#EXT-X-STREAM-INF
etiketleri CODECS
içeriyorsa çalışır)
özelliğini gönderin.
Medya segmentlerinizde muğlak dosya bulunuyorsa bu özelliği devre dışı bırakmanız gerekebilir.
çok değişkenli oynatma listesinde bir
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS
etiketi. Aksi halde bu altyazı parçaları
algılanmaz ve oynatılmaz. Yığınsız hazırlamayı,
HlsMediaSource.Factory
öğesini aşağıdaki snippet'te gösterildiği gibi ekleyin. Bu
ExoPlayer'ın bir medya segmenti indirmesi gerektiğinden başlama süresini uzatacaktır
ek yolları keşfedeceksiniz ve tercih ettiğiniz e-posta adresini
altyazı parçalarını çok değişkenli oynatma listesinde
belirler.
Kotlin
val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory) .setAllowChunklessPreparation(false) .createMediaSource(MediaItem.fromUri(hlsUri))
Java
HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory) .setAllowChunklessPreparation(false) .createMediaSource(MediaItem.fromUri(hlsUri));
Yüksek kaliteli HLS içeriği oluşturma
ExoPlayer'dan en iyi şekilde yararlanmak için kullanabileceğiniz belirli yönergeler vardır HLS içeriğinizi iyileştirmek için aşağıdaki adımları uygulayın. ExoPlayer makalesini inceleyebilirsiniz. Temel noktalar şunlardır:
- Kesin segment sürelerini kullanın.
- Sürekli bir medya akışı kullanma, Google Analytics 4'teki medya yapısında segment'e göz atın.
#EXT-X-INDEPENDENT-SEGMENTS
etiketini kullanın.- Hem video hem de ses içeren dosyalar yerine, sesi kapatılmış akışları tercih edin.
- Çok Değişkenli Oynatma Listesi'nde bulabildiğiniz tüm bilgileri ekleyin.
Aşağıdaki kurallar özellikle canlı yayınlar için geçerlidir:
#EXT-X-PROGRAM-DATE-TIME
etiketini kullanın.#EXT-X-DISCONTINUITY-SEQUENCE
etiketini kullanın.- Uzun bir yayın aralığı belirleyin. Bir dakika veya daha uzun süre iyidir.