
بروزرسانی: 01 اردیبهشت 1404
Media3 1.5.0 — چه چیزی جدید است؟

این مقاله به صورت متقابل منتشر شده است متوسط
Transformer اکنون از ع، های متحرک و رمزگذاری سریع تر تصویر پشتیب، می کند. ما همچنین تنظیمات را برای آن ساده کرده ایم DefaultPreloadManager و ExoPlayer، استفاده از آن را آسان تر می کند. اما این همه ماجرا نیست! ما یک رمزگشای جدید IAMF، یک برنامه افزودنی شنونده Kotlin و بهینه سازی آسان تر پخش کننده از طریق تفویض اختیار قرار داده ایم.
برای ،ب اطلاعات بیشتر در مورد همه APIهای جدید و رفع اشکال، بررسی کنید یادداشت های انتشار کامل.
بهبود ترانسفورماتور
پشتیب، از ع، متحرک
ترانسفورماتور اکنون از صادرات ع، های متحرک پشتیب، می کند. تصویر متحرک در صورت مربوطه صادر می شود MediaItemمدت زمان تصویر تنظیم شده است (نگاه کنید به MediaItem.Builder().setImageDurationMs()) در غیر این صورت، ویدیوی ع، متحرک صادر می شود. توجه داشته باشید که EditedMediaItemمدت زمان نباید در هر دو مورد تنظیم شود زیرا به طور خودکار روی مدت زمان تصویر MediaItem مربوطه تنظیم می شود.
رمزگذاری تصویر سریعتر
این نسخه به لطف بهینه سازی های موجود، کدگذاری تصویر به ویدیو را تسریع می بخشد DefaultVideoFrameProcessor.queueInputBitmap(). پیشفرض VideoFrameProcessor اکنون Bitmap داده شده به آن را بررسی می کند queueInputBitmap() به ،وان تغییرناپذیر خط لوله GL تنها یک بار بیت مپ ورودی را مجدداً نمونه برداری و رنگ سازی می کند. در نتیجه، عملیات ترانسفورماتور که تصاویر بزرگ (مثلاً 12 مگاپی،ل) را به ،وان ورودی می گیرند، سریعتر اجرا می شوند.
AudioEncoder Settings
شبیه به VideoEncoder Settings، Transformer اکنون پشتیب، می کند AudioEncoder Settings که می توان از آن برای تنظیم پروفایل رمزگذاری و میزان بیت مورد نظر استفاده کرد.
ویرایش پشتیب، لیست
ترانسفورماتور اکنون اولین فریم ویدیو را از 0 تغییر می دهد. با این کار مشکلات همگام سازی A/V در برخی از فایل هایی که فهرست ویرایش وجود دارد، برطرف می شود.
گزارش گیری از نوع مسیر پشتیب، نشده
این نسخه شامل ثبت بهبود یافته برای انواع آهنگ پشتیب، نشده، ارائه اطلاعات دقیق تر برای عیب یابی و اشکال زدایی است.
Media3 muxer
در یکی از نسخه های قبلی ما یک نسخه جدید اضافه کردیم کتابخانه muxer که می تواند برای ایجاد فایل های کانتینری MP4 استفاده شود. Media3 muxer پشتیب، از طیف وسیعی از کدک های صوتی و تصویری، امکان مدیریت یکپارچه فرمت های رسانه های مختلف را فراهم می کند. این کتابخانه جدید همچنین ویژگی های پیشرفته ای از جمله:
کتابخانه muxer را می توان به ،وان یک وابستگی gradle گنجاند:
implementation ("androidx.media3:media3-muxer:1.5.0")
می،ر Media3 با ترانسفورماتور
برای استفاده از media3 muxer با Transformer، یک InAppMuxer.Factory (که به صورت داخلی media3 muxer را می پیچد) را به ،وان کارخانه muxer هنگام ایجاد یک Transformer تنظیم کنید:
val transformer = Transformer.Builder(context) .setMuxerFactory(InAppMuxer.Factory.Builder().build()) .build()
راه اندازی ساده تر برای DefaultPreloadManager و ExoPlayer
با Media3 1.5.0 اضافه کردیم DefaultPreloadManager.Builder، که ساخت قطعات پیش بارگذاری و پخش کننده را بسیار آسان تر می کند. قبلاً از شما خواسته بودیم چندین مؤلفه مورد نیاز را نمونه برداری کنید (RenderersFactory، TrackSelectorFactory، LoadControl، پهنای باند متر و پیش بارگذاری / پخش لوپر) ابتدا، و در هنگام تزریق آن اجزاء در به اشتراک گذاری صحیح آن ها بسیار محتاط باشید DefaultPreloadManager سازنده و ExoPlayer.Builder. با جدید DefaultPreloadManager.Builder این خیلی ساده تر می شود:
- ساختن یک DefaultPreloadManager و ExoPlayer نمونه هایی با تمام اجزای پیش فرض
val preloadManagerBuilder = DefaultPreloadManager.Builder()val preloadManager = preloadManagerBuilder.build()val player = preloadManagerBuilder.buildExoPlayer()
- ساختن یک DefaultPreloadManager و ExoPlayer نمونه هایی با اجزای اشتراک گذاری سفارشی.
val preloadManagerBuilder = DefaultPreloadManager.Builder().setRenderersFactory(customRenderersFactory)// The resulting preloadManager uses customRenderersFactoryval preloadManager = preloadManagerBuilder.build()// The resulting player uses customRenderersFactoryval player = preloadManagerBuilder.buildExoPlayer()
- ساختن یک DefaultPreloadManager و ExoPlayer موارد، در حالی که تنظیمات سفارشی فقط برای پخش را در ExoPlayers تنظیم می کنید.
val preloadManagerBuilder = DefaultPreloadManager.Builder()val preloadManager = preloadManagerBuilder.build()// Tune the playback-only configurationsval playerBuilder = ExoPlayer.Builder().setFooEnabled()// The resulting player will have playback feature "Foo" enabledval player = preloadManagerBuilder.buildExoPlayer(playerBuilder)
در حال بارگیری مورد بعدی لیست پخش
ما این قابلیت را اضافه کرده ایم که مورد بعدی را از قبل در لیست پخش قرار دهیم ExoPlayer. به طور پیش فرض، پیش بارگیری فهرست پخش غیرفعال است، اما می توان با تنظیم مدت زم، که باید از قبل در حافظه بارگذاری شود، آن را فعال کرد:
player.preloadConfiguration = PreloadConfiguration(/* targetPreloadDurationUs= */ 5_000_000L)
با Preload Configuration در بالا، پخش کننده سعی می کند پنج ث،ه از رسانه را برای آیتم بعدی در لیست پخش از قبل بارگذاری کند. بارگیری اولیه تنها زم، شروع می شود که هیچ رسانه ای که برای پخش مداوم مورد نیاز باشد بارگیری نمی شود. به این ترتیب، پیش بارگذاری برای پهنای باند با پخش اولیه رقابت نمی کند.
هنگامی که فعال باشد، پیش بارگیری می تواند به حداقل رساندن تأخیر پیوستن زم، که کاربر قبل از اینکه بافر پخش به آیتم بعدی برسد به آیتم بعدی پرش می کند، کمک کند. اولین دوره از پنجره بعدی آماده شده و نمونه های ویدئویی، صوتی و متنی در صف های نمونه آن از قبل بارگذاری می شوند. دوره از پیش بارگذاری شده بعداً در صف پخش کننده قرار می گیرد و نمونه های از پیش بارگذاری شده بلافاصله در دسترس هستند و آماده ارسال به کدک برای رندر هستند.
پس از انتخاب، بارگیری پیش لیست پخش را می توان دوباره با استفاده از آن غیرفعال کرد PreloadConfiguration.DEFAULT برای غیرفعال ، پیش بارگذاری لیست پخش:
player.preloadConfiguration = PreloadConfiguration.DEFAULT
رمزگشای جدید IAMF و ،د شنونده Kotlin
نسخه 1.5.0 شامل یک نسخه جدید است media3-decoder-iamf ماژول، که امکان پخش را فراهم می کند IAMF آهنگ های صوتی همهجانبه در فایل های MP4. برنامه هایی که می خواهند این را امتحان کنند باید آن را بسازند libiamf رمزگشای محلی را ببینید media3 README برای دستورالعمل های کامل
implementation ("androidx.media3:media3-decoder-iamf:1.5.0")
این نسخه همچنین شامل یک نسخه جدید است media3-common-ktx ماژول، خانه ای برای عملکردهای خاص کاتلین. اولین نسخه این ماژول دارای یک تابع تعلیق است که به تماس گیرنده اجازه می دهد به آن گوش دهد Player.Listener.onEvents. این یک بلوک ساختم، است که توسط آینده استفاده می شود media3-ui-compose ماژول (راه اندازی با media3 1.6.0) برای تقویت رابط کاربری پخش Jetpack Compose.
implementation ("androidx.media3:media3-common-ktx:1.5.0")
سفارشی سازی آسان تر پخش کننده از طریق نمایندگی
Media3 ارائه کرده است ForwardingPlayer از نسخه 1.0.0 پیاده سازی شده است، و ما قبلاً پیشنهاد کرده ایم که برنامه ها زم، که می خواهند روش خاصی را سفارشی کنند باید از آن استفاده کنند. بازیکن عملیات کار، با استفاده از الگوی دکوراتور. یکی از موارد استفاده بسیار رایج، مجاز یا غیرمجاز ، دستورات پخش کننده خاص (به منظور نمایش/پنهان ، دکمه های خاص در یک رابط کاربری) است. متأسفانه، انجام این کار به درستی با ForwardingPlayer به طور شگفت انگیزی سخت و مستعد خطا است، زیرا شما باید به طور مداوم چندین روش را نادیده بگیرید و شنونده را نیز مدیریت کنید. کد مثال برای نشان دادن این که چقدر این موضوع برای این وبلاگ طول، است، بنابراین ما این کار را انجام دادیم در عوض آن را در یک اصل قرار دهید.
به منظور آسان تر ، این نوع سفارشی سازی ها، 1.5.0 شامل یک نسخه جدید است ForwardingSimpleBasePlayer، که بر اساس تضمین های سازگاری ارائه شده توسط SimpleBasePlayer تا ایجاد پیاده سازی های ثابت Player به دنبال الگوی دکوراتور آسان تر شود. همان دستور اصلاح بازیکن اکنون اجرای آن بسیار ساده تر است:
cl، PlayerWit،utSeekToNext(player: Player) : ForwardingSimpleBasePlayer(player) { override fun getState(): State { val state = super.getState() return state .buildUpon() .setAvailableCommands( state.availableCommands.buildUpon().remove(COMMAND_SEEK_TO_NEXT).build() ) .build() } // We don\'t need to override handleSeek, because it is guaranteed not to be called for // COMMAND_SEEK_TO_NEXT since we\'ve marked that command unavailable.}
MediaSession: دکمه فرمان برای آیتم های رسانه ای
دکمه های فرمان برای آیتم های رسانه به یک برنامه جلسه اجازه می دهد دستورات پشتیب، شده توسط آیتم های رسانه خاصی را اعلام کند که می توانند به راحتی توسط MediaController یا MediaBrowser نمایش داده شوند و اجرا شوند:

شما مستندات دقیق را پیدا خواهید کرد android.developer.com.
این معادل Media3 API قدیمی "عملکردهای مرور سفارشی" است که Media3 با آن کاملاً قابل تعامل است. برخلاف API قدیمی، دکمه های فرمان برای آیتم های رسانه ای نیازی به a MediaLi،ryService اما یکی از ویژگی های Media3 هستند MediaSession در عوض از این رو آنها در دسترس هستند MediaController و MediaBrowser به همین ترتیب
اگر با مشکلی مواجه شدید، درخواست هایی برای ویژگی دارید یا می خواهید بازخورد خود را به اشتراک بگذارید، لطفاً با استفاده از آن به ما اطلاع دهید ردیاب مشکل Media3 در GitHub. ما مشتاقانه منتظر شنیدن شما هستیم!
این پست وبلاگ بخشی از هفته دوربین و رسانه است. ما منابعی را ارائه می کنیم - پست های وبلاگ، ویدیوها، کد نمونه و موارد دیگر - که همگی برای کمک به شما در ارتقای تجربه های رسانه ای در برنامه تان طراحی شده اند.
برای ،ب اطلاعات بیشتر در مورد آنچه هفته S،light ارائه می دهد و چگونه می تواند برای شما مفید باشد، حتما پست وبلاگ مروری ما را بخو،د.
منبع: http://android-developers.googleblog.com/2025/01/media3-150-whats-new.html