ExoPlayer'ın desteklediği biçimleri tanımlarken "medya biçimlerinin" birden fazla düzeyde tanımlandığını unutmayın. En düşükten en yükseğe doğru sırasıyla:
- Medya örneklerinin biçimi (ör. video karesi veya ses karesi). Bunlar örnek biçimlerdir. Tipik bir video dosyasının en az iki örnek biçiminde medya içerdiğini unutmayın: biri video (ör. H.264) ve biri ses (ör. AAC).
- Medya örneklerini ve ilişkili meta verileri barındıran kapsayıcının biçimi. Bunlar kapsayıcı biçimleridir. Medya dosyalarının tek bir kapsayıcı biçimi (ör. MP4) vardır ve bu biçim genellikle dosya uzantısında belirtilir. Yalnızca işitsel olan bazı biçimler (ör. MP3) için örnek ve kapsayıcı biçimlerinin aynı olabileceğini unutmayın.
- DASH, SmoothStreaming ve HLS gibi uyarlanabilir akış teknolojileri. Bunlar medya biçimleri değildir ancak ExoPlayer'ın ne düzeyde destek sağladığını tanımlamak yine de gereklidir.
Aşağıdaki bölümlerde, ExoPlayer'ın en yüksekten en düşüğe her düzeyde sunduğu destek 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, DASH'ı birden fazla kapsayıcı biçimiyle destekler. Medya akışları, video, ses ve metnin DASH manifestinde ayrı AdaptationSet
öğelerinde tanımlanması gerektiği anlamına gelen bir şekilde demuxed olmalıdır (CEA-608, aşağıdaki tabloda açıklandığı gibi bir istisnadır). İçerdiği ses ve video örnek biçimleri de desteklenmelidir (ayrıntılar için örnek biçimleri bölümüne bakın).
Özellik | Destekleniyor | Yorumlar |
---|---|---|
Kapsayıcılar | ||
FMP4 | EVET | Yalnızca demuxed akışlar |
WebM | EVET | Yalnızca demuxed akışlar |
Matroska | EVET | Yalnızca demuxed akışlar |
MPEG-TS | HAYIR | Planlanmış destek yok |
Altyazılar | ||
TTML | EVET | Ham veya ISO/IEC 14496-30'a göre FMP4'e yerleştirilmiş |
WebVTT | EVET | Ham veya ISO/IEC 14496-30'a göre FMP4'e yerleştirilmiş |
CEA-608 | EVET | SCTE Erişilebilirlik tanımlayıcıları kullanılarak sinyal verildiğinde FMP4'e yerleştirilir |
CEA-708 | EVET | SCTE Erişilebilirlik tanımlayıcıları kullanılarak sinyal verildiğinde FMP4'e yerleştirilir |
Meta veri | ||
EMSG meta verileri | EVET | FMP4'e yerleştirilmiş |
İçerik koruması | ||
Widevine | EVET | "cenc" şeması: API 19 ve üzeri; "cbcs" şeması: API 25 ve üzeri |
PlayReady SL2000 | EVET | Android TV, yalnızca "cenc" şeması |
ClearKey | EVET | API 21 ve üzeri, yalnızca "cenc" şeması |
Canlı oynatma | ||
Normal canlı oynatma | EVET | |
Ultra düşük gecikmeli CMAF canlı oynatma | EVET | |
Ortak Medya İstemcisi Verileri (CMCD) | EVET | Entegrasyon Kılavuzu |
SmoothStreaming
ExoPlayer, FMP4 kapsayıcı biçimiyle SmoothStreaming'i destekler. Medya akışları, video, ses ve metnin SmoothStreaming manifest'indeki farklı StreamIndex öğelerinde tanımlanması gerektiği anlamına gelen bir şekilde birleştirilmelidir. İçerdiği ses ve video örnek biçimleri de desteklenmelidir (Ayrıntılar için örnek biçimleri bölümüne bakın).
Özellik | Destekleniyor | Yorumlar |
---|---|---|
Kapsayıcılar | ||
FMP4 | EVET | Yalnızca demuxed akışlar |
Altyazılar | ||
TTML | EVET | FMP4'e yerleştirilmiş |
İçerik koruması | ||
PlayReady SL2000 | EVET | Yalnızca Android TV |
Canlı oynatma | ||
Normal canlı oynatma | EVET | |
Ortak Medya İstemcisi Verileri (CMCD) | EVET | Entegrasyon Kılavuzu |
HLS
ExoPlayer, birden fazla kapsayıcı biçimiyle HLS'yi destekler. İçerdiği ses ve video örnek biçimleri de desteklenmelidir (Ayrıntılar için örnek biçimleri bölümüne bakın). HLS içerik üreticilerini, burada açıklandığı gibi yüksek kaliteli HLS akışları oluşturmaya teşvik ediyoruz.
Ö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 ve üzeri ("cenc" şeması) ve 25 ve üzeri ("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 | Uzunluğu tanımlanmamış bayt aralıkları hariç |
Canlı oynatma | ||
Normal canlı oynatma | EVET | |
Düşük gecikmeli HLS (Apple) | EVET | |
Düşük gecikmeli HLS (Topluluk) | HAYIR | |
Ortak Medya İstemcisi Verileri (CMCD) | EVET | Entegrasyon Kılavuzu |
Kademeli kapsayıcı biçimleri
Aşağıdaki kapsayıcı biçimlerindeki akışlar doğrudan ExoPlayer tarafından oynatılabilir. İçerdiği ses ve video örnek biçimleri de desteklenmelidir (Ayrıntılar için Örnek biçimleri 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ışlar yalnızca sabit bit hızı araması kullanılarak aranabilir** |
Ogg | EVET | Vorbis, Opus ve FLAC içeren |
WAV | EVET | |
MPEG-TS | EVET | |
MPEG-PS | EVET | |
FLV | EVET | Atlanabilir değil* |
ADTS (AAC) | EVET | Yalnızca sabit bit hızı araması kullanılarak aranabilir** |
FLAC | EVET | FLAC kitaplığını veya ExoPlayer kitaplığındaki FLAC çıkarıcısını kullanma*** |
AMR | EVET | Yalnızca sabit bit hızı araması kullanılarak aranabilir** |
* Kapsayıcı, medya oynatıcının etkili bir şekilde ilerleme yapmasına olanak tanıyacak meta veriler (ör. örnek dizin) sağlamadığından ilerleme desteklenmez. Arama yapılması gerekiyorsa daha uygun bir kapsayıcı biçimi kullanmanızı öneririz.
** Bu ayıklayıcılar, sabit bit hızı varsayımı kullanılarak yaklaşık aramayı 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ılarda etkinleştirmenin en kolay yolu, burada açıklandığı gibi DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
kullanmaktır.
*** FLAC kitaplığı çıkarıcı, tüm API düzeylerinde çerçeve tarafından işlenebilir ham ses çıkışı sağlar. ExoPlayer kitaplığı FLAC çıkarıcı, FLAC ses çerçeveleri çıkışı verir ve bu nedenle bir FLAC kod çözücüye (ör. FLAC'ı işleyen bir MediaCodec
kod çözücü (API düzeyi 27'den itibaren gereklidir) veya FLAC'ın etkin olduğu FFmpeg kitaplığı) ihtiyaç duyar. Uygulama FLAC kitaplığı ile oluşturulduysa DefaultExtractorsFactory
, uzantı çıkarıcıyı kullanır.
Aksi takdirde ExoPlayer kitaplığı çıkarıcı 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ışı ile).
- AC3.
Desteklenen ağ türleri
- UDP tek yayın üzerinden RTP (çoklu yayın desteklenmez).
- TCP kullanan RTSP üzerinden RTP, ardışık RTSP.
Örnek biçimler
ExoPlayer varsayılan olarak Android'in platform kod çözücülerini kullanır. Bu nedenle, desteklenen örnek biçimleri ExoPlayer yerine temel platforma bağlıdır. Android cihazlar tarafından desteklenen örnek biçimlerle ilgili dokümanlar için Desteklenen medya biçimleri bölümüne bakın. Cihazların, listelenenler dışında ek biçimleri de destekleyebileceğini unutmayın.
ExoPlayer, Android'in platform kod çözücülerine ek olarak yazılım kod çözücü uzantılarından da yararlanabilir. Bunlar manuel olarak oluşturulmalı ve bunlardan yararlanmak isteyen projelere dahil edilmelidir. Şu anda AV1, VP9, FLAC, Opus, FFmpeg, MIDI ve IAMF için yazılım kod çözücü kitaplıkları sağlıyoruz.
FFmpeg kitaplığı
FFmpeg kitaplığı, çeşitli ses örneği biçimlerinin kodunu çözmeyi destekler. Kitaplığı oluştururken hangi kod çözücülerin ekleneceğini kitaplığın README.md dosyasında belirtildiği gibi seçebilirsiniz. Aşağıdaki tabloda, ses örneği biçiminden ilgili FFmpeg kod çözücü adına bir 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 sağlayacağınızı öğrenmek için Resim Yükleme Kitaplıkları başlıklı makaleyi inceleyin.
Resim biçimi | Destekleniyor | Notlar |
---|---|---|
BMP | EVET | |
GIF | HAYIR | Ayıklayıcı desteği yok |
JPEG | EVET | |
JPEG Hareketli Fotoğraf | EVET | Hareketsiz resim 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 | Kısmen | Yalnızca hareketsiz resim desteklenir* |
AVIF (referans) | EVET | Yalnızca Android 14 ve sonraki sürümlerde kodu çözülür |
* HEIC hareketli fotoğrafların video kısmı MetadataRetriever ile elde edilebilir ve bağımsız bir dosya olarak oynatılabilir.
Bağımsız altyazı biçimleri
ExoPlayer, çeşitli biçimlerde bağımsız altyazı dosyalarını destekler. Altyazı dosyaları, medya öğeleri sayfasında açıklandığı şekilde harici olarak 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'te Dolby Vision ve Matroska/WebM'de HDR10+ dahil olmak üzere çeşitli kapsayıcılarda yüksek dinamik aralıklı (HDR) videoyu ayıklama işlemini yönetir. HDR içeriğin kodunu çözme ve görüntüleme, Android platformu ve cihazın desteğine bağlıdır. HDR kod çözme/görüntüleme özelliklerini kontrol etme ve Android sürümleri genelinde HDR desteğinin sınırlamaları hakkında bilgi edinmek için HDR Video Oynatma başlıklı makaleyi inceleyin.
Belirli bir codec profilinin desteğini gerektiren bir HDR akışı oynatırken ExoPlayer'ın varsayılan MediaCodec
seçicisi, codec listesinin üst kısmında aynı MIME türü için bu profili desteklemeyen başka bir kod çözücü olsa bile bu profili destekleyen bir kod çözücü (varsa) seçer. Bu durum, akış aynı MIME türü için donanım kod çözücüsünün kapasitesini aştığında yazılım kod çözücü seçilmesine neden olabilir.