فرمت های پشتیبانی شده

هنگام تعریف فرمت هایی که 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 فراتر رود.