تم إصدار Media3 1.11. يوفّر هذا الإصدار ميزات جديدة وإصلاحات للأخطاء وتحسينات في التشغيل والتعديل ومكوّنات واجهة المستخدم، وهو يتيح تشغيل معظم تطبيقات الوسائط الرائجة على Android. نعمل على توسيع نطاق وحدات واجهة المستخدم في Jetpack Compose لتشمل Player مساحات إعلانية قابلة للتخصيص وإعدادات تلقائية سهلة الاستخدام وإيماءات تفاعلية ومراقبة الحالة والتحميل المُسبَق للفيديوهات القصيرة باستخدام PlayerPool. عدّلنا أيضًا عملية دمج Media3 Cast مع إتاحة "مبدّل الإخراج" في SystemUI، وقدّمنا إضافة شبكة جديدة لبرنامج Ktor HTTP، وأضفنا أدوات جديدة لدمج ملفات Ogg وWAV.
يمكنك الاطّلاع على أهم النقاط أدناه، كما يمكنك مراجعة ملاحظات الإصدار الكاملة للاطّلاع على قائمة شاملة بالتغييرات.
واجهة مستخدم التشغيل وCompose
مع إعطاء الأولوية لاستخدام Compose في Android، نواصل توسيع نطاق وحدتَي 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، ما يتيح التنقّل بسلاسة باستخدام لوحة التحكّم ولوحة المفاتيح على أجهزة Android TV والأجهزة القابلة للطي وبيئات سطح المكتب.
الإيماءات والتحكّم في سرعة التشغيل
توفّر PlaybackSpeedState الآن واجهة برمجة تطبيقات للتقديم السريع/التصوير البطيء. تعرض demo-compose app ذلك من خلال الإيماءة بالضغط مع الاستمرار لتقديم التشغيل سريعًا والبحث من خلال النقر مرّتين. بالإضافة إلى ProgressSlider الذي تم تقديمه في الإصدار 1.10، توفّر واجهة مستخدم مشغّل Compose الآن تفاعلات غنية باللمس والإيماءات بدون الحاجة إلى أي إعدادات إضافية.
التحميل المُسبَق للفيديوهات القصيرة باستخدام PlayerPool
بالنسبة إلى التطبيقات التي تتضمّن خلاصات وسائط بنظام النافذة المنزلقة (مثل الفيديوهات القصيرة في الوضع العمودي)، تشكّل إدارة عدة مثيلات من ExoPlayer بكفاءة تحديًا شائعًا. تتضمّن Media3 1.11 PlayerPool (في common-ktx) وrememberPooledPlayer (في ui-compose) للتعامل مع إعادة استخدام المشغّل والتحميل المُسبَق تلقائيًا.
تعرض ShortFormPlayerScreen الجديدة في demo-compose هذا الإجراء، وهي خلاصة تتضمّن صفحات عمودية يتم فيها تجميع المشغّلات وتحميلها مسبقًا وإعادة استخدامها بسلاسة أثناء تنقّل المستخدم.
MiniController
يتوفّر عنصر MiniController Composable جديد في media3-ui-compose-material3 يقدّم شريط تشغيل مضغوطًا يعرض عنوان العنصر الحالي والفنان وصورة الألبوم ومستوى التقدّم إلى جانب عناصر التحكّم في التشغيل/الإيقاف المؤقت. كما هو الحال مع جميع عناصر Composables التلقائية في media3-ui-compose-material3، يتيح MiniController إمكانية دمج ميزة "الألوان الديناميكية" في Material3، ما يسمح بتكييفها تلقائيًا مع خلفية شاشة المستخدم.ويُعدّ ذلك مثاليًا لتوفير عناصر دائمة في أسفل الشاشة أو عناصر مشغّل صغير، مثلاً أثناء تصفّح المستخدم للمحتوى أو خلال جلسات Cast النشطة.
حقول حالة موسّعة للبيانات الوصفية والأخطاء
أضفنا العديد من عناصر التحكّم الجديدة في الحالة التفاعلية إلى media3-ui-compose:
rememberCurrentMediaItemState: مراقبة البيانات الوصفية للعنصر الذي يتم تشغيله حاليًاrememberPlaylistState: مراقبة قائمة التشغيل الكاملة والفهارس النشطةrememberErrorState: لتتبُّع أخطاء التشغيل، مع عنصرErrorTextComposable مطابق وErrorOverlayتلقائي في Material3
سنواصل العمل على إضافة ميزات جديدة والمزيد من خيارات التخصيص في الإصدارات القادمة. يُرجى مشاركة رأيك حول أداة تتبُّع مشاكل المشاريع.
تحديث عملية الدمج مع Cast
يضيف الإصدار 1.11 من Media3 إلى إضافة Cast خيارات إعداد آلي وإمكانية توجيه المحتوى على مستوى نظام التشغيل.
CastParams وأداة التبديل بين أجهزة التشغيل في SystemUI
يمكنك الآن ضبط إضافة Cast باستخدام CastParams:
val castParams = CastParams.Builder() .setShowSystemOutputSwitcherOnCastButtonClick(true) .build() Cast.getSingletonInstance(context).initialize(castParams)
يؤدي ضبط setShowSystemOutputSwitcherOnCastIconClick(true) إلى إعداد MediaRouteButton لفتح أداة اختيار الإخراج SystemUI الأصلية في Android على إصدارات النظام الأساسي المتوافقة، ما يوفّر تجربة موحّدة لاختيار الإخراج.
حالة Reactive MediaRouteButton في Compose
يمكن للتطبيقات التي تستخدم Jetpack Compose الآن إضافة زر "توجيه الوسائط" (المعروف أيضًا باسم زر "البث") بسهولة، والذي يتتبّع تلقائيًا حالة مربّع الحوار ويعدِّلها وفقًا لذلك. لا حاجة إلى منطق إضافي عند استخدامها مع CastPlayer في Media3.
@Composable fun TopAppBarWithCast() { Row { Text(text = "App Title") MediaRouteButton() } }
تحسينات على التشغيل الأساسي والجلسات
Eclipsa Video - HAGC dynamic HDR metadata (API 37+)
تعدك Eclipsa Video بتجربة HDR أكثر اتساقًا على جميع الأجهزة، مع توفير مستوى أساسي ثابت من اللون الأبيض في HDR، ومساحة رأسية قابلة للتكيّف حسب الشاشة والمحيط، ما يضمن الحفاظ على الهدف الإبداعي على جميع الأجهزة.
يتيح ExoPlayer الآن تشغيل البيانات الوصفية الموقّتة اللازمة لمعيار HAGC (ST 2094-50) للوسائط التقدّمية (MP4 وMatroska). يدمج المشغّل تلقائيًا مسارات البيانات الوصفية لـ HAGC مع مسار الفيديو المرتبط بها، وينقل البيانات الوصفية خارج النطاق إلى برنامج الترميز على الأجهزة التي تعمل بالإصدار 37 من واجهة برمجة التطبيقات أو الإصدارات الأحدث. على الأجهزة القديمة، يعود ExoPlayer تلقائيًا إلى توفير تجربة تشغيل عادية باستخدام النطاق العالي الديناميكية بدون إجراء التعديلات.
إضافة جديدة لبرنامج Ktor HTTP
يوفر وحدة إضافة media3-datasource-ktor جديدة KtorDataSource، وهي تستند إلى حزمة Ktor لبروتوكول HTTP. يوفّر هذا الخيار بديلاً متوافقًا مع لغة Kotlin وroutines لوحدتَي المصدر الحاليَّتَين لبيانات 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 لإنشاء ملفات صوتية .wav PCM غير مضغوطة وذات فاصلة عائمة.
تحليل الحاويات وتتبُّع المراجع
- مراجع المقاطع الصوتية بتنسيق MP4 (
tref): يتيحMp4Muxer.addTrackReferenceربط البيانات الوصفية التابعة أو المقاطع الصوتية المساعدة بتيارات الفيديو الأساسية. - استخراج الفصول: يتم الآن استخراج فصول QuickTime وNero من ملفات MP4 (
.m4a،.m4b) وفصول Matroska كإدخالات بيانات وصفيةChapterلتسهيل التنقّل في الكتب المسموعة وبرامج البودكاست.
يُرجى استخدام أداة تتبُّع المشاكل للإبلاغ عن أي أخطاء، أو إذا كانت لديك أسئلة أو طلبات ميزات. نتطلّع إلى تلقّي ردّ منك.
-
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، قدّمنا Jetpacker، وهو تطبيق تجريبي سنستخدمه في هذه السلسلة.
Caren Chang • يستغرق الاطّلاع على المقال 6 دقائق -
طرق التنفيذJetpacker هو تطبيق استعراضي تقني أنشأه فريقنا من البداية خصيصًا لمؤتمر Google I/O لهذا العام (تم إنشاؤه باستخدام Antigravity). يساعد تطبيق Jetpacker المستخدمين في التخطيط لمغامرتهم الكبيرة التالية واستكشافها والاستمتاع بها.
Jolanda Verhoef • مدّة القراءة: 4 دقائق -
طرق التنفيذمرحبًا بك مجددًا في سلسلة منشورات المدونة "إنشاء تطبيقات Android ذكية"، حيث نأخذ تطبيق Android أساسيًا ونحوّله إلى تجربة مخصّصة وذكية واستباقية. في مشاركتنا السابقة، استكشفنا كيفية الاستفادة من Firebase AI Logic لإنشاء ميزات مستنِدة إلى الذكاء الاصطناعي ومستضافة على السحابة الإلكترونية وميزات هجينة.
Ben Weiss • يستغرق الاطّلاع على المقال 6 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.