در ExoPlayer، هر قطعه رسانه با یک MediaItem
نشان داده می شود. با این حال، در داخل، پخش کننده برای پخش محتوا به نمونه های MediaSource
نیاز دارد. پخش کننده این موارد را از آیتم های رسانه ای با استفاده از MediaSource.Factory
ایجاد می کند.
بهطور پیشفرض، پخشکننده از DefaultMediaSourceFactory
استفاده میکند، که میتواند نمونههایی از اجرای MediaSource
محتوای زیر را ایجاد کند:
-
DashMediaSource
برای DASH . -
SsMediaSource
برای SmoothStreaming . -
HlsMediaSource
برای HLS . -
ProgressiveMediaSource
برای فایل های رسانه ای معمولی . -
RtspMediaSource
برای RTSP .
DefaultMediaSourceFactory
همچنین می تواند منابع رسانه ای پیچیده تری را بسته به ویژگی های آیتم های رسانه مربوطه ایجاد کند. این با جزئیات بیشتر در صفحه آیتم های رسانه توضیح داده شده است.
برای برنامههایی که نیاز به تنظیمات منبع رسانه دارند که توسط پیکربندی پیشفرض پخشکننده پشتیبانی نمیشوند، چندین گزینه برای سفارشیسازی وجود دارد.
سفارشی سازی ایجاد منبع رسانه
هنگام ساختن پخش کننده، می توان MediaSource.Factory
را تزریق کرد. برای مثال، اگر برنامهای بخواهد تبلیغات را درج کند و از CacheDataSource.Factory
برای پشتیبانی از کش استفاده کند، میتوان نمونهای از DefaultMediaSourceFactory
را برای مطابقت با این الزامات پیکربندی کرد و در طول ساخت پخشکننده تزریق کرد:
کاتلین
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
جاوا
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
DefaultMediaSourceFactory
JavaDoc گزینه های موجود را با جزئیات بیشتری شرح می دهد.
همچنین میتوان یک پیادهسازی MediaSource.Factory
سفارشی را تزریق کرد، برای مثال برای پشتیبانی از ایجاد یک نوع منبع رسانه سفارشی. createMediaSource(MediaItem)
کارخانه برای ایجاد یک منبع رسانه برای هر آیتم رسانه ای که به لیست پخش اضافه می شود فراخوانی می شود.
API فهرست پخش مبتنی بر منبع رسانه
رابط ExoPlayer
روش های لیست پخش اضافی را تعریف می کند که منابع رسانه ای را به جای موارد رسانه ای می پذیرد. این امکان دور زدن MediaSource.Factory
داخلی پخش کننده و ارسال مستقیم نمونه های منبع رسانه به پخش کننده را فراهم می کند:
کاتلین
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
جاوا
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
ترکیب منبع رسانه پیشرفته
ExoPlayer چندین پیاده سازی MediaSource
را برای اصلاح و ترکیب سایر نمونه های MediaSource
فراهم می کند. این موارد در مواردی که چندین سفارشی سازی باید ترکیب شوند و هیچ یک از مسیرهای راه اندازی ساده تر کافی نیستند، بسیار مفید هستند.
-
ClippingMediaSource
: اجازه میدهد تا رسانهها را به یک محدوده مُهر زمانی مشخص بریده شود. اگر این تنها تغییر است، ترجیحاً ازMediaItem.ClippingConfiguration
استفاده کنید. -
FilteringMediaSource
: تراکهای موجود را به انواع مشخصشده فیلتر میکند، بهعنوان مثال، فقط نمایش آهنگ ویدیویی از فایلی که هم صدا و هم ویدیو دارد. اگر این تنها تغییر است، ترجیحاً به جای آن از پارامترهای انتخاب مسیر استفاده کنید. -
MergingMediaSource
: چندین منبع رسانه را برای پخش به صورت موازی ادغام می کند. تقریباً در همه موارد، توصیه میشود سازنده را باadjustPeriodTimeOffsets
وclipDurations
روی true فراخوانی کنید تا اطمینان حاصل شود که همه منابع همزمان شروع و پایان مییابند. اگر این اصلاح برای افزودن زیرنویسهای بارگذاریشده جانبی انجام میشود، ترجیحاً ازMediaItem.SubtitleConfiguration
استفاده کنید. -
ConcatenatingMediaSource2
: چندین منبع رسانه را برای پخش متوالی ادغام می کند. ساختار رسانه قابل مشاهده برای کاربر یکTimeline.Window
را نشان می دهد، به این معنی که شبیه یک آیتم واحد است. اگر این اصلاح برای پخش چندین آیتم انجام می شود که قرار نیست یک آیتم واحد به نظر برسند، ترجیحاً از روش های API لیست پخش مانندPlayer.addMediaItem
استفاده کنید. -
SilenceMediaSource
: سکوت را برای مدت زمان مشخصی ایجاد می کند که برای پر کردن شکاف ها مفید است. -
AdsMediaSource
: یک منبع رسانه را با قابلیت درج آگهی در سمت مشتری گسترش می دهد. برای جزئیات بیشتر به راهنمای درج آگهی مراجعه کنید. -
ServerSideAdInsertionMediaSource
: یک منبع رسانه را با قابلیت درج آگهی سمت سرور گسترش می دهد. برای جزئیات بیشتر به راهنمای درج آگهی مراجعه کنید.