Media3 1.11 منتشر شد. این نسخه که اکثر برنامههای برتر رسانهای اندروید را پشتیبانی میکند، ویژگیهای جدید، رفع اشکالات و بهبودهایی را در پخش، ویرایش و اجزای رابط کاربری به همراه دارد. ما در حال گسترش ماژولهای رابط کاربری Jetpack Compose خود با اسلاتهای قابل تنظیم Player و پیشفرضهای آسان برای استفاده، حرکات تعاملی، ناظران وضعیت و پیشبارگذاری ویدیوی کوتاه با استفاده از PlayerPool هستیم. ما همچنین ادغام Media3 Cast را با پشتیبانی از SystemUI Output Switcher مدرن کردهایم، یک افزونه جدید برای شبکه کلاینت Ktor HTTP معرفی کردهایم و ابزارهای جدید muxing را برای فایلهای Ogg و WAV اضافه کردهایم.
برای نکات برجسته کلیدی ادامه مطلب را بخوانید و برای فهرست جامع تغییرات، یادداشتهای کامل انتشار را بررسی کنید.
رابط کاربری پخش و آهنگسازی
با اولویت قرار گرفتن اندروید در Compose، ما همچنان به گسترش ماژولهای media3-ui-compose و media3-ui-compose-material3 ادامه میدهیم. این بهروزرسانی کنترل دقیقتری بر طرحبندی پخشکننده شما، الگوهای تعاملی غنیتر و ادغام عمیقتر با Material3 را ارائه میدهد.
طرحبندی پخشکننده قابل تنظیم
کامپوننت پلیر Material 3 اکنون از اسلاتهای محتوای اختصاصی برای topControls ، centerControls ، bottomControls و errorOverlay پشتیبانی میکند. میتوانید Composables خودتان را وارد کنید یا از پیشفرضهای آماده منتشر شده در PlayerDefaults استفاده کنید:
Player( player = player, topControls = { PlayerDefaults.TopControls(player) }, centerControls = { PlayerDefaults.CenterControls(player) }, bottomControls = { PlayerDefaults.BottomControls(player) }, )
Player Composable همچنین از FocusRequester پشتیبانی میکند و امکان پیمایش یکپارچه با D-pad و صفحه کلید را در Android TV، دستگاههای تاشو و محیطهای دسکتاپ فراهم میکند.

حرکات و کنترل سرعت پخش
PlaybackSpeedState اکنون یک API برای جلو بردن/آهسته کردن ویدیو ارائه میدهد. demo-compose app این قابلیت را با یک حرکت فشار طولانی برای جلو بردن سریع ویدیو و جستجو با دوبار ضربه زدن نمایش میدهد. رابط کاربری پخشکنندهی Compose، در ترکیب با ProgressSlider که در نسخهی ۱.۱۰ معرفی شد، اکنون تعاملات لمسی و حرکتی غنی را از همان ابتدا ارائه میدهد.
پیش بارگذاری ویدیوی کوتاه با PlayerPool
برای برنامههایی که فیدهای رسانهای پنجره کشویی دارند (برای مثال، ویدیوی عمودی کوتاه)، مدیریت کارآمد چندین نمونه ExoPlayer یک چالش رایج است. Media3 1.11 PlayerPool (در common-ktx ) و rememberPooledPlayer (در ui-compose ) را برای مدیریت خودکار بازیافت و پیش بارگذاری پخشکننده معرفی میکند.
ShortFormPlayerScreen جدید در demo-compose این را در عمل نشان میدهد، یک فید صفحهبندی عمودی که در آن پخشکنندهها جمعآوری، از قبل بارگذاری و با اسکرول کاربر بهطور یکپارچه بازیافت میشوند.
مینی کنترلر
یک MiniController Composable جدید در media3-ui-compose-material3 یک نوار پخش فشرده ارائه میدهد که عنوان، هنرمند، آثار هنری و پیشرفت آیتم فعلی را در کنار کنترلهای پخش/مکث نمایش میدهد. همانند تمام Composableهای پیشفرض ما در media3-ui-compose-material3 ، MiniController از ادغام رنگ پویای Material3 پشتیبانی میکند و به آن اجازه میدهد تا به طور خودکار با تم تصویر زمینه کاربر سازگار شود. این برای قابلیتهای پایدار صفحه پایین یا مینیپلیر، به عنوان مثال در حالی که کاربر محتوا را مرور میکند یا در طول جلسات فعال Cast، ایدهآل است.

نگهدارندههای وضعیت توسعهیافته برای ابردادهها و خطاها
ما چندین نگهدارنده حالت واکنشی جدید به media3-ui-compose اضافه کردیم:
-
rememberCurrentMediaItemState- مشاهده فرادادههای مربوط به آیتم در حال پخش -
rememberPlaylistState- مشاهده لیست پخش کامل و شاخصهای فعال -
rememberErrorState- خطاهای پخش را با یکErrorTextComposable منطبق وErrorOverlayپیشفرض در Material3 ردیابی میکند.
ما در نسخههای آینده به کار بر روی افزونههای جدید و گزینههای سفارشیسازی بیشتر ادامه خواهیم داد. لطفاً نظرات خود را در مورد ردیاب مشکلات پروژه به اشتراک بگذارید.
ادغام بازیگران مدرن
Media3 1.11 افزونه Cast را با گزینههای پیکربندی برنامهنویسی و پشتیبانی از مسیریابی در سطح سیستم عامل بهروزرسانی میکند.
تغییر دهنده خروجی CastParams و SystemUI
اکنون میتوانید افزونهی Cast را با استفاده از CastParams پیکربندی کنید:
val castParams = CastParams.Builder() .setShowSystemOutputSwitcherOnCastButtonClick(true) .build() Cast.getSingletonInstance(context).initialize(castParams)
تنظیم setShowSystemOutputSwitcherOnCastIconClick(true) باعث میشود MediaRouteButton طوری پیکربندی شود که در نسخههای پشتیبانیشدهی پلتفرم، SystemUI Output Switcher بومی اندروید را باز کند و یک تجربهی انتخاب خروجی یکپارچه را ارائه دهد.
حالت واکنشی MediaRouteButton در Compose
برنامههایی که از Jetpack Compose استفاده میکنند، اکنون میتوانند به راحتی دکمه مسیریابی رسانه (که با نام دکمه Cast نیز شناخته میشود) را اضافه کنند، که به طور خودکار وضعیت کادر محاورهای را مشاهده کرده و بر اساس آن بهروزرسانی میکند. هنگام استفاده همزمان با CastPlayer از Media3، به منطق بیشتری نیاز نیست!
@Composable fun TopAppBarWithCast() { Row { Text(text = "App Title") MediaRouteButton() } }

بهبودهای پخش اصلی و جلسه
ویدیوی Eclipsa - فراداده پویای HDR HAGC (API 37+)
Eclipsa Video نوید یک تجربه HDR سازگارتر را در بین دستگاهها میدهد، با یک HDR سفید پایه ثابت، فضای سر تطبیقی بسته به صفحه نمایش و محیط اطراف، که تضمین میکند هدف خلاقانه در همه دستگاهها حفظ شود.
ExoPlayer اکنون از پخش فرادادههای زمانبندیشدهی HAGC (ST 2094-50) لازم برای رسانههای پیشرفته (MP4، Matroska) پشتیبانی میکند. این پخشکننده بهطور خودکار ترکهای فرادادهی HAGC را با ترک ویدیویی مرتبط ادغام میکند و فراداده را بهصورت خارج از باند به رمزگشا در دستگاههای API 37+ تحویل میدهد. در دستگاههای قدیمیتر، ExoPlayer بهطور یکپارچه به ارائه یک تجربه پخش HDR استاندارد بدون تنظیمات برمیگردد.

پسوند جدید سرویس گیرنده Ktor HTTP
یک ماژول الحاقی جدید media3-datasource-ktor ، KtorDataSource را ارائه میدهد که توسط پشته HTTP Ktor پشتیبانی میشود. این ماژول، جایگزینی سازگار با Kotlin و Coroutine برای ماژولهای منبع داده Cronet و OkHttp موجود ارائه میدهد.
اتصالات ناهمزمان MediaSession
MediaSession.Callback اکنون شامل onConnectAsync() است که به شما امکان میدهد تلاشهای اتصال به کنترلر را به صورت ناهمگام پردازش کنید - برای مثال، برای تأیید مجوز قبل از پذیرش یک اتصال. میتوانید یک Future فوری را با Futures.immediateFuture(ConnectionResult) برای همان رفتار onConnect موجود برگردانید.
override fun onConnectAsync( session: MediaSession, controller: MediaSession.ControllerInfo ): ListenableFuture<MediaSession.ConnectionResult> { return authenticateControllerAsync(controller) }
پیشفرضهای امنتر MediaSession
برای برنامههایی که onConnect یا onConnectAsync در MediaSession.Callback لغو نمیکنند، کتابخانه اکنون به طور پیشفرض پیکربندی امنتری را در پیش میگیرد. به طور خاص، دادههای جلسه دیگر به طور پیشفرض با کنترلکنندههای غیرقابل اعتماد به اشتراک گذاشته نمیشوند، به این معنی که برنامههای شخص ثالث یا غیرسیستمی که فاقد دسترسی به اعلان هستند، از دسترسی به دادههای جلسه محدود میشوند، مگر اینکه شما به صراحت این متدهای فراخوانی را برای تأیید اتصال پیادهسازی کنید.
پیادهسازیهای جدید Muxer و تجزیه کانتینر
OggMuxer و WavMuxer
ما دو میکسر اختصاصی جدید اضافه کردهایم: OggMuxer برای میکسر کردن جریانهای OPUS و VORBIS به فایلهای استاندارد .ogg، و WavMuxer برای تولید فایلهای صوتی PCM .wav غیرفشرده و ممیز شناور.
تجزیه کانتینر و ردیابی ارجاعات
- ارجاعات آهنگ MP4 (
tref):Mp4Muxer.addTrackReferenceامکان پیوند دادن متادیتای وابسته یا آهنگهای کمکی را به جریانهای ویدیویی اصلی فراهم میکند. - استخراج فصل: فصلهای QuickTime و Nero از فایلهای MP4 (
.m4a،.m4b) و فصلهای Matroska، اکنون به عنوان ورودیهای فرادادهChapterبرای پیمایش کتاب صوتی و پادکست استخراج میشوند.
لطفاً از ردیاب مشکلات برای گزارش هرگونه اشکال، یا اگر سؤالی یا درخواست ویژگی دارید، استفاده کنید. مشتاقانه منتظر شنیدن نظرات شما هستیم!
چگونههابه مجموعه پستهای وبلاگ «ساخت برنامههای هوشمند اندروید» خوش آمدید، جایی که ما یک برنامه اندروید ساده را میگیریم و آن را به یک تجربه شخصیسازیشده، هوشمند و عاملگرا تبدیل میکنیم. در پست قبلیمان، Jetpacker را معرفی کردیم، برنامه آزمایشی که در طول این مجموعه از آن استفاده خواهیم کرد.
Caren Chang • 6 دقیقه مطالعه
چگونههاجتپکر یک اپلیکیشن نمایشی فنی است که تیم ما آن را از پایه برای کنفرانس Google I/O امسال (با استفاده از Antigravity) ساخت. در هسته خود، جتپکر به کاربران کمک میکند تا ماجراجویی بزرگ بعدی خود را برنامهریزی، کاوش و از آن لذت ببرند.
Jolanda Verhoef • 4 دقیقه خواندن
چگونههابه مجموعه پستهای وبلاگ «ساخت برنامههای هوشمند اندروید» خوش آمدید، جایی که ما یک برنامه اندروید پایه را میگیریم و آن را به یک تجربه شخصیسازیشده، هوشمند و عاملمحور تبدیل میکنیم. در پست قبلیمان، نحوه استفاده از منطق هوش مصنوعی فایربیس برای ساخت ویژگیهای هوش مصنوعی ابری و ترکیبی را بررسی کردیم.
Ben Weiss • ۶ دقیقه مطالعه
جدیدترین مطالب مربوط به توسعه اندروید را هر هفته در ایمیل خود دریافت کنید.





