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.