هنگام تعریف فرمت هایی که ExoPlayer پشتیبانی می کند، مهم است که توجه داشته باشید که "فرمت های رسانه ای" در چندین سطح تعریف شده اند. از پایین ترین سطح تا بالاترین، اینها عبارتند از:
- قالب نمونههای رسانهای جداگانه (مانند فریم ویدیو یا فریم صدا). اینها فرمت های نمونه هستند. توجه داشته باشید که یک فایل ویدئویی معمولی حاوی رسانه حداقل در دو فرمت نمونه است. یکی برای ویدئو (به عنوان مثال، H.264) و یکی برای صدا (به عنوان مثال، AAC).
- قالب ظرفی که نمونه های رسانه و ابرداده های مرتبط را در خود جای می دهد. اینها فرمت های کانتینری هستند. یک فایل رسانه ای دارای یک فرمت محفظه واحد است (به عنوان مثال MP4) که معمولاً با پسوند فایل نشان داده می شود. توجه داشته باشید که برای برخی از فرمتهای فقط صوتی (مثلا MP3)، قالبهای نمونه و کانتینر ممکن است یکسان باشند.
- فناوریهای جریان تطبیقی مانند DASH، SmoothStreaming و HLS. اینها فرمت های رسانه ای نیستند، اما هنوز باید مشخص شود که ExoPlayer چه سطحی از پشتیبانی را ارائه می دهد.
بخش های زیر پشتیبانی ExoPlayer را در هر سطح، از بالاترین تا پایین ترین، تعریف می کند. دو بخش آخر پشتیبانی از فرمتهای زیرنویس مستقل و پخش ویدیوی HDR را توضیح میدهند.
جریان تطبیقی
داش
ExoPlayer از DASH با چندین فرمت کانتینر پشتیبانی می کند. جریانهای رسانه باید دموکس شوند، به این معنی که ویدیو، صدا و متن باید در عناصر AdaptationSet
مجزا در مانیفست DASH تعریف شوند (CEA-608 یک استثنا است که در جدول زیر توضیح داده شده است). فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات به بخش قالبهای نمونه مراجعه کنید).
ویژگی | پشتیبانی می شود | نظرات |
---|---|---|
ظروف | ||
FMP4 | بله | فقط جریان های دیموکس |
WebM | بله | فقط جریان های دیموکس |
ماتروسکا | بله | فقط جریان های دیموکس |
MPEG-TS | نه | هیچ حمایتی برنامه ریزی نشده است |
زیرنویس/زیرنویس بسته | ||
TTML | بله | خام، یا تعبیه شده در FMP4 طبق ISO/IEC 14496-30 |
WebVTT | بله | خام، یا تعبیه شده در FMP4 طبق ISO/IEC 14496-30 |
CEA-608 | بله | هنگامی که با استفاده از توصیفگرهای دسترسی SCTE سیگنال داده می شود، در FMP4 تعبیه شده است |
CEA-708 | بله | هنگامی که با استفاده از توصیفگرهای دسترسی SCTE سیگنال داده می شود، در FMP4 تعبیه شده است |
فراداده | ||
فراداده EMSG | بله | تعبیه شده در FMP4 |
حفاظت از محتوا | ||
وایدواین | بله | طرح "cenc": API 19+; طرح "cbcs": API 25+ |
PlayReady SL2000 | بله | Android TV، فقط طرح "cenc". |
ClearKey | بله | API 21+، فقط طرح "cenc". |
پخش زنده | ||
پخش زنده منظم | بله | |
پخش زنده CMAF با تاخیر بسیار کم | بله | |
داده های مشترک رسانه مشتری (CMCD) | بله | راهنمای ادغام |
SmoothStreaming
ExoPlayer از SmoothStreaming با فرمت ظرف FMP4 پشتیبانی می کند. جریانهای رسانه باید دموکس شوند، به این معنی که ویدیو، صدا و متن باید در عناصر StreamIndex مجزا در مانیفست SmoothStreaming تعریف شوند. فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات به بخش قالبهای نمونه مراجعه کنید).
ویژگی | پشتیبانی می شود | نظرات |
---|---|---|
ظروف | ||
FMP4 | بله | فقط جریان های دیموکس |
زیرنویسها/زیرنویسهای بسته | ||
TTML | بله | تعبیه شده در FMP4 |
حفاظت از محتوا | ||
PlayReady SL2000 | بله | فقط Android TV |
پخش زنده | ||
پخش زنده منظم | بله | |
داده های مشترک رسانه مشتری (CMCD) | بله | راهنمای ادغام |
HLS
ExoPlayer از HLS با چندین فرمت کانتینر پشتیبانی می کند. فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات به بخش قالبهای نمونه مراجعه کنید). ما قویاً تولیدکنندگان محتوای HLS را تشویق میکنیم که جریانهای HLS با کیفیت بالا تولید کنند، همانطور که در اینجا توضیح داده شده است.
ویژگی | پشتیبانی می شود | نظرات |
---|---|---|
ظروف | ||
MPEG-TS | بله | |
FMP4/CMAF | بله | |
ADTS (AAC) | بله | |
MP3 | بله | |
زیرنویسها/زیرنویسهای بسته | ||
CEA-608 | بله | |
CEA-708 | بله | |
WebVTT | بله | |
فراداده | ||
ID3 | بله | |
SCTE-35 | نه | |
حفاظت از محتوا | ||
AES-128 | بله | |
نمونه AES-128 | نه | |
وایدواین | بله | API 19+ (طرح "cenc") و 25+ (طرح "cbcs") |
PlayReady SL2000 | بله | فقط Android TV |
کنترل سرور | ||
به روز رسانی دلتا | بله | |
مسدود کردن بارگیری مجدد لیست پخش | بله | |
مسدود کردن بار نکات پیش بارگذاری | بله | به جز فرگهای فرعی با طول نامشخص |
پخش زنده | ||
پخش زنده منظم | بله | |
HLS کم تأخیر (Apple) | بله | |
HLS با تأخیر کم (انجمن) | نه | |
داده های مشترک رسانه مشتری (CMCD) | بله | راهنمای ادغام |
فرمت های کانتینری پیشرفته
استریمها در قالبهای کانتینر زیر میتوانند مستقیماً توسط ExoPlayer پخش شوند. فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات به بخش فرمتهای نمونه مراجعه کنید). برای پشتیبانی از محفظه تصویر و فرمت، به تصاویر مراجعه کنید.
قالب کانتینر | پشتیبانی می شود | نظرات |
---|---|---|
MP4 | بله | |
M4A | بله | |
FMP4 | بله | |
WebM | بله | |
ماتروسکا | بله | |
MP3 | بله | برخی از جریانها فقط با استفاده از جستجوی نرخ بیت ثابت قابل جستجو هستند** |
اوگ | بله | حاوی Vorbis، Opus و FLAC |
WAV | بله | |
MPEG-TS | بله | |
MPEG-PS | بله | |
FLV | بله | جستجو نشدنی* |
ADTS (AAC) | بله | فقط با استفاده از جستجوی نرخ بیت ثابت قابل جستجو است** |
FLAC | بله | استفاده از کتابخانه FLAC یا استخراج کننده FLAC در کتابخانه ExoPlayer *** |
AMR | بله | فقط با استفاده از جستجوی نرخ بیت ثابت قابل جستجو است** |
* جستجو پشتیبانی نمیشود زیرا کانتینر متادیتا (مثلاً یک نمایه نمونه) ارائه نمیکند تا به یک پخش کننده رسانه اجازه دهد جستجو را به روشی کارآمد انجام دهد. در صورت نیاز به جستجو، پیشنهاد می کنیم از قالب کانتینر مناسب تری استفاده کنید.
** این استخراجکنندهها دارای پرچمهای FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
برای فعال کردن جستجوی تقریبی با استفاده از یک فرض نرخ بیت ثابت هستند. این عملکرد به طور پیش فرض فعال نیست. ساده ترین راه برای فعال کردن این عملکرد برای همه استخراج کننده هایی که از آن پشتیبانی می کنند، استفاده از DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
است، همانطور که در اینجا توضیح داده شده است.
*** استخراجکننده کتابخانه FLAC صدای خام را خروجی میدهد که میتواند توسط چارچوب در تمام سطوح API کنترل شود. استخراج کننده FLAC کتابخانه ExoPlayer فریم های صوتی FLAC را خروجی می دهد و بنابراین به داشتن یک رمزگشا FLAC متکی است (به عنوان مثال، رمزگشای MediaCodec
که FLAC را کنترل می کند (مورد نیاز سطح API 27) یا کتابخانه FFmpeg با FLAC فعال است. اگر برنامه با کتابخانه FLAC ساخته شده باشد، DefaultExtractorsFactory
از استخراج کننده افزونه استفاده می کند. در غیر این صورت، از استخراج کننده کتابخانه ExoPlayer استفاده می کند.
RTSP
ExoPlayer از RTSP زنده و درخواستی پشتیبانی می کند. فرمت های نمونه پشتیبانی شده و انواع شبکه در زیر فهرست شده است.
فرمت های نمونه پشتیبانی شده
- H264 (توضیح رسانه SDP باید شامل داده های SPS/PPS در ویژگی fmtp برای مقداردهی اولیه رمزگشا باشد).
- AAC (با جریان بیت ADTS).
- AC3.
انواع شبکه های پشتیبانی شده
- RTP روی UDP unicast (چندپست پشتیبانی نمی شود).
- RTSP درهم، RTP روی RTSP با استفاده از TCP.
فرمت های نمونه
به طور پیش فرض ExoPlayer از رمزگشاهای پلتفرم اندروید استفاده می کند. از این رو فرمتهای نمونه پشتیبانی شده به جای ExoPlayer به پلتفرم اصلی بستگی دارند. برای مستندات مربوط به قالبهای نمونه پشتیبانی شده توسط دستگاههای Android، به فرمتهای رسانه پشتیبانی شده مراجعه کنید. توجه داشته باشید که دستگاههای جداگانه ممکن است فرمتهای دیگری فراتر از موارد ذکر شده را پشتیبانی کنند.
علاوه بر رمزگشاهای پلتفرم اندروید، ExoPlayer می تواند از پسوندهای رمزگشای نرم افزاری نیز استفاده کند. اینها باید به صورت دستی ساخته شده و در پروژه هایی که مایل به استفاده از آنها هستند گنجانده شوند. ما در حال حاضر کتابخانه های رمزگشای نرم افزاری را برای AV1 , VP9 , FLAC , Opus و FFmpeg ارائه می دهیم .
کتابخانه FFmpeg
کتابخانه FFmpeg از رمزگشایی انواع فرمت های نمونه صوتی مختلف پشتیبانی می کند. همانطور که در README.md کتابخانه مستند شده است، میتوانید انتخاب کنید که کدام رمزگشاها در هنگام ساخت کتابخانه شامل شوند. جدول زیر یک نگاشت از فرمت نمونه صوتی به نام رمزگشا FFmpeg مربوطه را ارائه می دهد.
فرمت نمونه | نام(های) رمزگشا |
---|---|
وربیس | گرداب |
اپوس | اپوس |
FLAC | flac |
ALAC | الک |
PCM μ-قانون | pcm_mulaw |
قانون PCM A | pcm_alaw |
MP1، MP2، MP3 | mp3 |
AMR-NB | امرنب |
AMR-WB | amrwb |
AAC | aac |
AC-3 | ac3 |
E-AC-3 | eac3 |
DTS، DTS-HD | dca |
TrueHD | mlp truehd |
تصاویر
ExoPlayer از فرمت های تصویر زیر پشتیبانی می کند. برای نحوه ادغام با کتابخانه های خارجی که ممکن است از مجموعه فرمت های متفاوتی پشتیبانی کنند، به کتابخانه های بارگیری تصویر مراجعه کنید.
فرمت تصویر | پشتیبانی می شود | یادداشت ها |
---|---|---|
BMP | بله | |
GIF | نه | بدون پشتیبانی Extractor |
JPEG | بله | |
عکس حرکت JPEG | بله | تصویر ثابت و ویدیو پشتیبانی می شود |
JPEG Ultra HDR | بله | قبل از Android 14 یا در نمایشگرهای غیر HDR به SDR برمی گردد |
PNG | بله | |
وب پی | بله | |
HEIF/HEIC | بله | |
عکس حرکت HEIC | تا حدی | فقط تصویر ثابت پشتیبانی می شود* |
AVIF (خط پایه) | بله | فقط در Android 14+ رمزگشایی شده است |
* بخش ویدیویی عکس های حرکتی HEIC را می توان با MetadataRetriever دریافت کرد و به عنوان یک فایل مستقل پخش کرد.
فرمت های زیرنویس مستقل
ExoPlayer از فایل های زیرنویس مستقل در فرمت های مختلف پشتیبانی می کند. فایلهای زیرنویس را میتوان بهصورت جانبی بارگذاری کرد، همانطور که در صفحه موارد رسانه توضیح داده شده است.
قالب کانتینر | پشتیبانی می شود | نوع MIME |
---|---|---|
WebVTT | بله | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | بله | MimeTypes.APPLICATION_TTML |
SubRip | بله | MimeTypes.APPLICATION_SUBRIP |
SubstationAlpha (SSA/ASS) | بله | MimeTypes.TEXT_SSA |
پخش فیلم HDR
ExoPlayer استخراج ویدیو با محدوده دینامیکی بالا (HDR) را در کانتینرهای مختلف، از جمله Dolby Vision در MP4 و HDR10+ در Matroska/WebM انجام میدهد. رمزگشایی و نمایش محتوای HDR به پشتیبانی از پلتفرم و دستگاه اندروید بستگی دارد. برای آشنایی با بررسی قابلیتهای رمزگشایی/نمایش HDR و محدودیتهای پشتیبانی HDR در نسخههای Android، به پخش ویدیوی HDR مراجعه کنید.
هنگام پخش یک جریان HDR که نیاز به پشتیبانی از یک نمایه کدک خاص دارد، انتخابگر MediaCodec
پیشفرض ExoPlayer رمزگشایی را انتخاب میکند که از آن نمایه (در صورت موجود بودن) پشتیبانی میکند، حتی اگر رمزگشای دیگری برای همان نوع MIME که آن نمایه را پشتیبانی نمیکند در بالاترین قسمت ظاهر شود. لیست کدک این می تواند منجر به انتخاب یک رمزگشای نرم افزاری در مواردی شود که جریان از قابلیت های یک رمزگشای سخت افزاری برای همان نوع MIME فراتر رود.