Desteklenen biçimler

ExoPlayer'ın desteklediği biçimleri tanımlarken "medya biçimlerinin" birden fazla düzeyde tanımlandığını unutmamak önemlidir. En düşükten en yükseğe doğru bu düzeyler şunlardır:

  • Ayrı medya örneklerinin biçimi (ör. bir video karesi veya bir ses karesi). Bunlar örnek biçimlerdir. Normal bir video dosyasında en az iki örnek biçimde medya bulunacağını unutmayın. Bunlardan biri video (ör. H.264), diğeri ise ses (ör. AAC) içindir.
  • Medya örneklerini ve ilişkili meta verileri barındıran kapsayıcının biçimi. Bunlar kapsayıcı biçimlerdir. Medya dosyaları, genellikle dosya uzantısıyla belirtilen tek bir kapsayıcı biçime (ör. MP4) sahiptir. Bazı yalnızca ses içeren biçimlerde (ör. MP3) örnek ve kapsayıcı biçimlerin aynı olabileceğini unutmayın.
  • DASH, SmoothStreaming ve HLS gibi uyarlanabilir akış teknolojileri Bunlar medya biçimleri olmasa da ExoPlayer'ın hangi destek düzeyini sağladığını tanımlamak gerekir.

Aşağıdaki bölümlerde, ExoPlayer'ın en yüksekten en düşüğe her düzeydeki desteği tanımlanmaktadır. Son iki bölümde, bağımsız altyazı biçimleri ve HDR video oynatma desteği açıklanmaktadır.

Uyarlanabilir akış

DASH

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 bu kuralın istisnasıdı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 sinyal verildiğinde FMP4'e yerleştirilir.
CEA-708 EVET SCTE Accessibility tanımlayıcıları kullanılarak sinyal verildiğ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 sonraki sürümler, "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

SmoothStreaming

ExoPlayer, FMP4 kapsayıcı biçimiyle SmoothStreaming'i destekler. Medya akışları demukslenmelidir. Yani video, ses ve metin, SmoothStreaming manifestindeki ayrı StreamIndex öğelerinde tanımlanmalıdır. İçerilen ses ve video örnek biçimlerinin de desteklenmesi gerekir (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
Altyazılar
TTML EVET FMP4'e yerleştirilmiş
İçerik koruma
PlayReady SL2000 EVET Yalnızca Android TV
Canlı oynatma
Normal canlı oynatma EVET
Common Media Client Data (CMCD) EVET Entegrasyon Kılavuzu

HLS

ExoPlayer, birden fazla kapsayıcı biçimiyle HLS'yi destekler. İçerilen ses ve video örnek biçimlerinin de desteklenmesi gerekir (ayrıntılar için örnek biçimler bölümüne bakın). HLS içerik üreticilerinin, bu blog yayınında açıklandığı gibi yüksek kaliteli HLS yayınları oluşturmasını önemle tavsiye ederiz.

Özellik Destekleniyor Yorumlar
Container'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 koruma
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 kontrolü
Delta güncellemeleri EVET
Oynatma listesinin yeniden yüklenmesini engelleme EVET
Önceden yükleme ipuçlarının yüklenmesini engelleme EVET Tanımlanmamış uzunluklara sahip bayt aralıkları hariç
Reklam ekleme
Sunucu tarafından yönlendirilen reklam ekleme (Geçiş reklamları) Kısmen Yalnızca X-ASSET-URI ile VOD. Canlı yayınlar ve X-ASSET-LIST daha sonra eklenecektir.
IMA sunucu tarafı ve istemci tarafı reklamları EVET Reklam ekleme kılavuzu
Canlı oynatma
Normal canlı oynatma EVET
Düşük gecikmeli HLS (Apple) EVET
Düşük gecikmeli HLS (Topluluk) HAYIR
Ortak Medya İstemcisi Verileri CMCD EVET CMCD entegrasyon kılavuzu

Aşamalı kapsayıcı biçimleri

Aşağıdaki kapsayıcı biçimlerindeki akışlar doğrudan ExoPlayer tarafından oynatılabilir. İçerilen ses ve video örnek biçimlerinin de desteklenmesi gerekir (ayrıntılar için Örnek biçimler bölümüne bakın). Resim kapsayıcısı ve biçim desteği için Resimler bölümüne bakın.

Kapsayıcı biçimi Destekleniyor Yorumlar
MP4 EVET
M4A EVET
FMP4 EVET
WebM EVET
Matroska EVET
MP3 EVET Bazı akışlarda yalnızca sabit bit hızlı arama kullanılarak arama yapılabilir.**
Ogg EVET Vorbis, Opus ve FLAC içeren
WAV EVET
MPEG-TS EVET
MPEG-PS EVET
FLV EVET Sarılamaz*
ADTS (AAC) EVET Yalnızca sabit bit hızlı arama kullanılarak aranabilir**
FLAC EVET FLAC kitaplığını veya ExoPlayer kitaplığındaki FLAC çıkarıcıyı kullanma***
AMR EVET Yalnızca sabit bit hızlı arama kullanılarak aranabilir**

* Kapsayıcı, medya oynatıcının verimli bir şekilde arama yapmasına olanak tanıyan meta veriler (örneğin, örnek dizin) sağlamadığından arama desteklenmez. Arama gerekiyorsa daha uygun bir kapsayıcı biçimi kullanmanızı öneririz.

** Bu ayıklayıcılar, sabit bit hızı varsayımı kullanarak yaklaşık arama özelliğini etkinleştirmek için FLAG_ENABLE_CONSTANT_BITRATE_SEEKING işaretlerine sahiptir. Bu işlev varsayılan olarak etkin değildir. Bu işlevi destekleyen tüm ayıklayıcılar için etkinleştirmenin en basit yolu, burada açıklandığı gibi DefaultExtractorsFactory.setConstantBitrateSeekingEnabled kullanmaktır.

*** FLAC kitaplığı ayıklayıcısı, tüm API düzeylerinde çerçeve tarafından işlenebilen ham ses çıkışı verir. ExoPlayer kitaplığı FLAC çıkarıcısı, FLAC ses çerçeveleri çıkarır ve bu nedenle FLAC kod çözücünün (ör. FLAC'ı işleyen bir MediaCodec kod çözücü (API düzeyi 27'den itibaren gereklidir) veya FLAC'ın etkinleştirildiği FFmpeg kitaplığı) olmasını gerektirir. Uygulama FLAC kitaplığı ile oluşturulduysa DefaultExtractorsFactory, uzantı ayıklayıcıyı kullanır. Aksi takdirde, ExoPlayer kitaplığı ayıklayıcısı kullanılır.

RTSP

ExoPlayer, hem canlı hem de isteğe bağlı RTSP'yi destekler. Desteklenen örnek biçimler ve ağ türleri aşağıda listelenmiştir.

Desteklenen örnek biçimleri

  • H264 (SDP medya açıklaması, kod çözücü başlatma için fmtp özelliğinde SPS/PPS verilerini içermelidir).
  • AAC (ADTS bit akışıyla).
  • AC3.

Desteklenen ağ türleri

  • UDP tek yayını üzerinden RTP (çoklu yayın desteklenmez).
  • TCP kullanarak RTSP üzerinden RTP, aralıklı RTSP.

Örnek biçimler

ExoPlayer varsayılan olarak Android'in platform kod çözücülerini kullanır. Bu nedenle, desteklenen örnek biçimleri ExoPlayer'a değil, temel alınan platforma bağlıdır. Android cihazlar tarafından desteklenen örnek biçimlerle ilgili dokümanlar için Desteklenen medya biçimleri başlıklı makaleyi inceleyin. Bazı cihazların, listelenenlerin dışında ek biçimleri destekleyebileceğini unutmayın.

ExoPlayer, Android'in platform kod çözücülerine ek olarak yazılım kod çözücü uzantılarını da kullanabilir. Bunlar manuel olarak oluşturulmalı ve kullanılmak istenen projelere dahil edilmelidir. Şu anda AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF ve MPEG-H için yazılım kod çözücü kitaplıkları sunuyoruz.

FFmpeg kitaplığı

FFmpeg kitaplığı, çeşitli ses örnek biçimlerinin kodunu çözmeyi destekler. Kitaplığı oluştururken hangi kod çözücülerin dahil edileceğini seçebilirsiniz. Bu işlem, kitaplığın README.md dosyasında açıklanmıştır. Aşağıdaki tabloda, ses örneği biçiminden ilgili FFmpeg kod çözücü adına eşleme sağlanmaktadır.

Örnek biçim Kod çözücü adları
Vorbis vorbis
Opus opus
FLAC flac
ALAC alac
PCM μ-law pcm_mulaw
PCM A-law pcm_alaw
MP1, MP2, MP3 mp3
AMR-NB amrnb
AMR-WB amrwb
AAC aac
AC-3 ac3
E-AC-3 eac3
DTS, DTS-HD dca
TrueHD mlp truehd

Resimler

ExoPlayer aşağıdaki resim biçimlerini destekler. Farklı bir biçim grubu için destek sağlayabilecek harici kitaplıklarla nasıl entegrasyon yapacağınızı öğrenmek için Resim Yükleme Kitaplıkları bölümüne bakın.

Resim biçimi Destekleniyor Notlar
BMP EVET
GIF HAYIR Extractor desteği yok
JPEG EVET
JPEG hareketli fotoğraf EVET Hareketsiz görüntü ve video desteklenir.
JPEG Ultra HDR EVET Android 14'ten önceki sürümlerde veya HDR olmayan ekranlarda SDR'ye geri döner.
PNG EVET
WebP EVET
HEIF/HEIC EVET
HEIC Hareketli Fotoğraf EVET
AVIF (temel) EVET Yalnızca Android 14 ve sonraki sürümlerde çözülür.

Bağımsız altyazı biçimleri

ExoPlayer, çeşitli biçimlerdeki bağımsız altyazı dosyalarını destekler. Altyazı dosyaları, medya öğeleri sayfasında açıklandığı gibi yan yüklenebilir.

Kapsayıcı biçimi Destekleniyor MIME türü
WebVTT EVET MimeTypes.TEXT_VTT
TTML / SMPTE-TT EVET MimeTypes.APPLICATION_TTML
SubRip EVET MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) EVET MimeTypes.TEXT_SSA

HDR video oynatma

ExoPlayer, MP4'teki Dolby Vision ve Matroska/WebM'deki HDR10+ dahil olmak üzere çeşitli kapsayıcılarda yüksek dinamik aralıklı (HDR) videoların çıkarılmasını sağlar. HDR içeriklerin kodunun çözülüp gösterilmesi, Android platformu ve cihaz desteğine bağlıdır. HDR kod çözme/görüntüleme özellikleri ve Android sürümlerinde HDR desteğinin sınırlamaları hakkında bilgi edinmek için HDR Video Oynatma başlıklı makaleyi inceleyin.

Belirli bir codec profili desteği gerektiren bir HDR akışı oynatılırken, aynı MIME türü için bu profili desteklemeyen başka bir kod çözücü, codec listesinde daha yukarıda görünse bile ExoPlayer'ın varsayılan MediaCodec seçicisi, bu profili destekleyen bir kod çözücü (varsa) seçer. Bu durum, akışın aynı MIME türü için donanım kod çözücünün özelliklerini aştığı durumlarda yazılım kod çözücünün seçilmesine neden olabilir.