هنگام تعریف فرمتهایی که ExoPlayer پشتیبانی میکند، توجه به این نکته مهم است که «فرمتهای رسانهای» در چندین سطح تعریف میشوند. از پایینترین سطح تا بالاترین سطح، این موارد عبارتند از:
- قالب نمونههای رسانهای منفرد (مانند یک فریم از ویدیو یا یک فریم از صدا). اینها قالبهای نمونه هستند. توجه داشته باشید که یک فایل ویدیویی معمولی شامل رسانهای با حداقل دو قالب نمونه خواهد بود؛ یکی برای ویدیو (مثلاً H.264) و دیگری برای صدا (مثلاً AAC).
- قالب ظرفی که نمونههای رسانهای و فرادادههای مرتبط را در خود جای میدهد. اینها قالبهای ظرف هستند. یک فایل رسانهای دارای یک قالب ظرف واحد (مثلاً MP4) است که معمولاً با پسوند فایل مشخص میشود. توجه داشته باشید که برای برخی از قالبهای فقط صوتی (مثلاً MP3)، قالبهای نمونه و ظرف ممکن است یکسان باشند.
- فناوریهای استریمینگ تطبیقی مانند DASH، SmoothStreaming و HLS. اینها به خودی خود فرمتهای رسانهای نیستند، با این حال هنوز هم لازم است تعریف شود که ExoPlayer چه سطح پشتیبانی ارائه میدهد.
بخشهای زیر پشتیبانی ExoPlayer را در هر سطح، از بالاترین تا پایینترین سطح، تعریف میکنند. دو بخش آخر پشتیبانی از فرمتهای زیرنویس مستقل و پخش ویدیوی HDR را شرح میدهند.
پخش تطبیقی
دش
ExoPlayer از DASH با فرمتهای مختلف کانتینر پشتیبانی میکند. جریانهای رسانهای باید demux شوند، به این معنی که ویدیو، صدا و متن باید در عناصر AdaptationSet مجزا در مانیفست DASH تعریف شوند (CEA-608 یک استثنا است، همانطور که در جدول زیر توضیح داده شده است). فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات بیشتر به بخش فرمتهای نمونه مراجعه کنید).
| ویژگی | پشتیبانی شده | نظرات |
|---|---|---|
| ظروف | ||
| افامپی۴ | بله | فقط استریمهای دموکسشده |
| وب ام | بله | فقط استریمهای دموکسشده |
| ماتروسکا | بله | فقط استریمهای دموکسشده |
| MPEG-TS | خیر | هیچ پشتیبانی برنامهریزی نشده است |
| زیرنویسها / زیرنویسهای بسته | ||
| تیتیامال | بله | خام، یا جاسازی شده در FMP4 طبق استاندارد ISO/IEC 14496-30 |
| وب وی تی تی | بله | خام، یا جاسازی شده در FMP4 طبق استاندارد ISO/IEC 14496-30 |
| CEA-608 | بله | هنگام ارسال سیگنال با استفاده از توصیفگرهای دسترسی SCTE، در FMP4 تعبیه میشود. |
| CEA-708 | بله | هنگام ارسال سیگنال با استفاده از توصیفگرهای دسترسی SCTE، در FMP4 تعبیه میشود. |
| فراداده | ||
| فراداده EMSG | بله | جاسازی شده در FMP4 |
| محافظت از محتوا | ||
| وایدواین | بله | طرح "cenc": API 19+؛ طرح "cbcs": API 25+ |
| پلیردی SL2000 | بله | تلویزیون اندروید، فقط طرح "cenc" |
| کلید شفاف | بله | API 21+، فقط طرح "cenc" |
| درج آگهی | ||
| پخش چند دورهای | بله | |
| درج آگهی هدایتشده توسط سرور (xlinks) | خیر | |
| تبلیغات سمت سرور و سمت کلاینت IMA | بله | راهنمای درج آگهی |
| پخش زنده | ||
| پخش زنده معمولی | بله | |
| پخش زنده CMAF با تأخیر بسیار کم | بله | |
| دادههای مشتری رسانه مشترک (CMCD) | بله | راهنمای ادغام CMCD |
پخش روان
ExoPlayer از SmoothStreaming با فرمت کانتینر FMP4 پشتیبانی میکند. جریانهای رسانهای باید demux شده باشند، به این معنی که ویدیو، صدا و متن باید در عناصر StreamIndex مجزا در مانیفست SmoothStreaming تعریف شوند. فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات بیشتر به بخش فرمتهای نمونه مراجعه کنید).
| ویژگی | پشتیبانی شده | نظرات |
|---|---|---|
| ظروف | ||
| افامپی۴ | بله | فقط استریمهای دموکسشده |
| زیرنویسها/زیرنویسهای بسته | ||
| تیتیامال | بله | جاسازی شده در FMP4 |
| محافظت از محتوا | ||
| پلیردی SL2000 | بله | فقط اندروید تیوی |
| پخش زنده | ||
| پخش زنده معمولی | بله | |
| دادههای مشتری رسانه مشترک (CMCD) | بله | راهنمای ادغام |
اچ ال اس
ExoPlayer از HLS با فرمتهای مختلف کانتینر پشتیبانی میکند. فرمتهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات بیشتر به بخش فرمتهای نمونه مراجعه کنید). ما تولیدکنندگان محتوای HLS را اکیداً تشویق میکنیم که جریانهای HLS با کیفیت بالا تولید کنند، همانطور که در این پست وبلاگ توضیح داده شده است.
| ویژگی | پشتیبانی شده | نظرات |
|---|---|---|
| ظروف | ||
| MPEG-TS | بله | |
| FMP4/CMAF | بله | |
| ADTS (AAC) | بله | |
| ام پی۳ | بله | |
| زیرنویسها / زیرنویسهای بسته | ||
| CEA-608 | بله | |
| CEA-708 | بله | |
| وب وی تی تی | بله | |
| فراداده | ||
| شناسه۳ | بله | |
| SCTE-35 | خیر | |
| محافظت از محتوا | ||
| AES-128 | بله | |
| نمونه AES-128 | خیر | |
| وایدواین | بله | API 19+ (طرح "cenc") و 25+ (طرح "cbcs") |
| پلیردی SL2000 | بله | فقط اندروید تیوی |
| کنترل سرور | ||
| بهروزرسانیهای دلتا | بله | |
| مسدود کردن بارگذاری مجدد لیست پخش | بله | |
| مسدود کردن بارگذاری نکات پیش بارگذاری | بله | به جز بایترنجهایی با طول نامشخص |
| درج آگهی | ||
| درج آگهی هدایتشده توسط سرور (بینابینیها) | تا حدی | فقط VOD با X-ASSET-URI . پخش زنده و X-ASSET-LIST بعداً اضافه خواهند شد. |
| تبلیغات سمت سرور و سمت کلاینت IMA | بله | راهنمای درج آگهی |
| پخش زنده | ||
| پخش زنده معمولی | بله | |
| HLS با تأخیر کم (اپل) | بله | |
| HLS با تأخیر کم (جامعه) | خیر | |
| دادههای مشتری رسانه مشترک CMCD | بله | راهنمای ادغام CMCD |
قالبهای کانتینری پیشرونده
پخش جریانها در قالبهای کانتینر زیر میتوانند مستقیماً توسط ExoPlayer پخش شوند. قالبهای نمونه صوتی و تصویری موجود نیز باید پشتیبانی شوند (برای جزئیات بیشتر به بخش قالبهای نمونه مراجعه کنید). برای پشتیبانی از قالب و فرمت تصویر، به بخش تصاویر مراجعه کنید.
| قالب کانتینر | پشتیبانی شده | نظرات |
|---|---|---|
| ام پی ۴ | بله | |
| M4A | بله | |
| افامپی۴ | بله | |
| وب ام | بله | |
| ماتروسکا | بله | |
| ام پی۳ | بله | برخی از جریانها فقط با استفاده از جستجوی بیتریت ثابت قابل جستجو هستند** |
| اوجی | بله | شامل Vorbis، Opus و FLAC |
| پنل های ال سی | بله | |
| MPEG-TS | بله | |
| MPEG-PS | بله | |
| اف ال وی | بله | قابل جستجو نیست* |
| ADTS (AAC) | بله | فقط با استفاده از جستجوی بیت ریت ثابت قابل جستجو است** |
| FLAC | بله | استفاده از کتابخانه FLAC یا استخراجکننده FLAC در کتابخانه ExoPlayer *** |
| عمرو | بله | فقط با استفاده از جستجوی بیت ریت ثابت قابل جستجو است** |
* جستجو پشتیبانی نمیشود زیرا کانتینر، فراداده (مثلاً یک فهرست نمونه) را ارائه نمیدهد تا به پخشکننده رسانه اجازه دهد جستجو را به روشی کارآمد انجام دهد. در صورت نیاز به جستجو، پیشنهاد میکنیم از قالب کانتینر مناسبتری استفاده کنید.
** این استخراجکنندهها دارای پرچمهای FLAG_ENABLE_CONSTANT_BITRATE_SEEKING برای فعال کردن جستجوی تقریبی با استفاده از فرض نرخ بیت ثابت هستند. این قابلیت به طور پیشفرض فعال نیست. سادهترین راه برای فعال کردن این قابلیت برای همه استخراجکنندههایی که از آن پشتیبانی میکنند، استفاده از DefaultExtractorsFactory.setConstantBitrateSeekingEnabled است، همانطور که در اینجا توضیح داده شده است.
*** استخراجکنندهی کتابخانهی FLAC ، صدای خام را خروجی میدهد که میتواند توسط فریمورک در تمام سطوح API مدیریت شود. استخراجکنندهی FLAC کتابخانهی ExoPlayer، فریمهای صوتی FLAC را خروجی میدهد و بنابراین به داشتن یک رمزگشای FLAC (مثلاً یک رمزگشای MediaCodec که FLAC را مدیریت میکند (از سطح API 27 مورد نیاز است) یا کتابخانهی FFmpeg با FLAC فعال) متکی است. اگر برنامه با کتابخانهی FLAC ساخته شده باشد، DefaultExtractorsFactory از استخراجکنندهی افزونه استفاده میکند. در غیر این صورت، از استخراجکنندهی کتابخانهی ExoPlayer استفاده میکند.
آر تی اس پی
ExoPlayer از هر دو حالت RTSP زنده و درخواستی پشتیبانی میکند. فرمتهای نمونه پشتیبانی شده و انواع شبکه در زیر فهرست شدهاند.
قالبهای نمونه پشتیبانیشده
- H264 (توضیحات رسانه SDP باید شامل دادههای SPS/PPS در ویژگی fmtp برای مقداردهی اولیه رمزگشا باشد).
- AAC (با جریان بیتی ADTS).
- ای سی۳.
انواع شبکه پشتیبانی شده
- RTP روی UDP تکپخشی (چندپخشی پشتیبانی نمیشود).
- RTSP لایهبندیشده، RTP روی RTSP با استفاده از TCP.
قالبهای نمونه
به طور پیشفرض، ExoPlayer از رمزگشاهای پلتفرم اندروید استفاده میکند. از این رو، فرمتهای نمونه پشتیبانیشده به پلتفرم اصلی بستگی دارند و نه به ExoPlayer. برای مشاهده مستندات مربوط به فرمتهای نمونه پشتیبانیشده توسط دستگاههای اندروید، به فرمتهای رسانهای پشتیبانیشده مراجعه کنید. توجه داشته باشید که دستگاههای مختلف ممکن است فرمتهای دیگری فراتر از موارد ذکر شده را پشتیبانی کنند.
علاوه بر رمزگشاهای پلتفرم اندروید، ExoPlayer میتواند از افزونههای رمزگشای نرمافزاری نیز استفاده کند. این افزونهها باید به صورت دستی ساخته شده و در پروژههایی که مایل به استفاده از آنها هستند، گنجانده شوند. ما در حال حاضر کتابخانههای رمزگشای نرمافزاری را برای AV1 ، VP9 ، FLAC ، Opus ، FFmpeg ، MIDI ، IAMF و MPEG-H ارائه میدهیم.
کتابخانه FFmpeg
کتابخانه FFmpeg از رمزگشایی انواع فرمتهای نمونه صوتی مختلف پشتیبانی میکند. همانطور که در README.md کتابخانه مستند شده است، میتوانید هنگام ساخت کتابخانه، رمزگشاهایی را که میخواهید اضافه کنید، انتخاب کنید. جدول زیر نگاشتی از فرمت نمونه صوتی به نام رمزگشای FFmpeg مربوطه را ارائه میدهد.
| قالب نمونه | نام(های) رمزگشا |
|---|---|
| وربیس | وربیس |
| اپوس | اوپوس |
| FLAC | فلک |
| آلاک | آلاک |
| قانون μ در PCM | pcm_mulaw |
| قانون PCM A | pcm_alaw |
| MP1، MP2، MP3 | ام پی3 |
| AMR-NB | آمرنب |
| AMR-WB | آمروب |
| آآک | آآک |
| ایسی-۳ | ac3 |
| ای-ای-سی-۳ | eac3 |
| DTS، DTS-HD | دی سی ای |
| ترو اچدی | mlp truehd |
تصاویر
ExoPlayer از فرمتهای تصویر زیر پشتیبانی میکند. برای نحوه ادغام با کتابخانههای خارجی که ممکن است از مجموعه فرمتهای متفاوتی پشتیبانی کنند، به بخش «کتابخانههای بارگذاری تصویر» مراجعه کنید.
| قالب تصویر | پشتیبانی شده | یادداشتها |
|---|---|---|
| بی ام پی | بله | |
| گیف | خیر | پشتیبانی از Extractor ندارد |
| JPEG | بله | |
| عکس متحرک JPEG | بله | پشتیبانی از تصویر ثابت و ویدئو |
| JPEG فوق العاده HDR | بله | به SDR قبل از اندروید ۱۴ یا روی نمایشگرهای غیر HDR برمیگردد |
| پی ان جی | بله | |
| وب پی | بله | |
| HEIF/HEIC | بله | |
| عکس متحرک HEIC | بله | |
| AVIF (پایه) | بله | فقط روی اندروید ۱۴+ رمزگشایی شده است |
قالبهای زیرنویس مستقل
ExoPlayer از فایلهای زیرنویس مستقل در فرمتهای مختلف پشتیبانی میکند. فایلهای زیرنویس را میتوان همانطور که در صفحه موارد رسانه توضیح داده شده است، به صورت جانبی بارگذاری کرد.
| قالب کانتینر | پشتیبانی شده | نوع MIME |
|---|---|---|
| وب وی تی تی | بله | MimeTypes.TEXT_VTT |
| TTML / SMPTE-TT | بله | MimeTypes.APPLICATION_TTML |
| ساب ریپ | بله | MimeTypes.APPLICATION_SUBRIP |
| پست آلفا (SSA/ASS) | بله | MimeTypes.TEXT_SSA |
پخش ویدئو HDR
ExoPlayer استخراج ویدیوی با دامنه دینامیکی بالا (HDR) را در قالبهای مختلف، از جمله Dolby Vision در MP4 و HDR10+ در Matroska/WebM، مدیریت میکند. رمزگشایی و نمایش محتوای HDR به پشتیبانی پلتفرم و دستگاه اندروید بستگی دارد. برای کسب اطلاعات در مورد بررسی قابلیتهای رمزگشایی/نمایش HDR و محدودیتهای پشتیبانی HDR در نسخههای مختلف اندروید، به بخش پخش ویدیوی HDR مراجعه کنید.
هنگام پخش یک استریم HDR که نیاز به پشتیبانی از یک پروفایل کدک خاص دارد، انتخابگر پیشفرض MediaCodec در ExoPlayer، رمزگشایی را انتخاب میکند که از آن پروفایل (در صورت وجود) پشتیبانی میکند، حتی اگر رمزگشای دیگری برای همان نوع MIME که از آن پروفایل پشتیبانی نمیکند، در بالای لیست کدکها ظاهر شود. این امر میتواند منجر به انتخاب یک رمزگشای نرمافزاری در مواردی شود که استریم از قابلیتهای یک رمزگشای سختافزاری برای همان نوع MIME فراتر رود.