چگونه‌ها

مدیا۳ ۱.۱۱ - چه خبر؟

۳ دقیقه مطالعه
نمایه Toni Heidenreich را مشاهده کنید
Toni Heidenreich مهندس نرم افزار اندروید

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، دستگاه‌های تاشو و محیط‌های دسکتاپ فراهم می‌کند.

پخش کننده_ویدئو.png
مثالی برای یک پخش‌کننده‌ی ترکیبی با کنترل‌های سفارشی

حرکات و کنترل سرعت پخش

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، ایده‌آل است.

مینی_پلیر.png
مینی‌کنترلر Media3 که تصویر آلبوم، ابرداده رسانه و کنترل‌های اولیه را نشان می‌دهد

نگهدارنده‌های وضعیت توسعه‌یافته برای ابرداده‌ها و خطاها

ما چندین نگهدارنده حالت واکنشی جدید به media3-ui-compose اضافه کردیم:

  • rememberCurrentMediaItemState - مشاهده فراداده‌های مربوط به آیتم در حال پخش
  • rememberPlaylistState - مشاهده لیست پخش کامل و شاخص‌های فعال
  • rememberErrorState - خطاهای پخش را با یک ErrorText Composable منطبق و 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()
  }
}
دکمه_قالب_2.png
دکمه مسیر رسانه Media3 در برنامه‌ای که پنجره تعویض خروجی پیش‌فرض را اجرا می‌کند

بهبودهای پخش اصلی و جلسه

ویدیوی Eclipsa - فراداده پویای HDR HAGC (API 37+)

Eclipsa Video نوید یک تجربه HDR سازگارتر را در بین دستگاه‌ها می‌دهد، با یک HDR سفید پایه ثابت، فضای سر تطبیقی ​​بسته به صفحه نمایش و محیط اطراف، که تضمین می‌کند هدف خلاقانه در همه دستگاه‌ها حفظ شود.

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

گرفتگی.png
تصویری برای نشان دادن مزایای Eclipsa Video 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 برای پیمایش کتاب صوتی و پادکست استخراج می‌شوند.

لطفاً از ردیاب مشکلات برای گزارش هرگونه اشکال، یا اگر سؤالی یا درخواست ویژگی دارید، استفاده کنید. مشتاقانه منتظر شنیدن نظرات شما هستیم!

نوشته شده توسط:
ادامه مطلب