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

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