Media3
آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
---|---|---|---|---|
2 يوليو 2025 | 1.7.1 | - | 1.8.0-beta01 | 1.8.0-alpha01 |
تعريف التبعيات
لإضافة تبعية على Media3، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle
لتطبيقك أو وحدتك:
Groovy
dependencies { def media3_version = "1.6.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.6.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يمكنك استخدام أداة تتبُّع المشاكل في Media3 للعثور على إجابات عن الأسئلة والمشاكل المعروفة وطلبات الميزات، ولتسجيل مشاكل جديدة.
الإصدار 1.8.0
الإصدار 1.8.0-beta01
2 يوليو 2025
تم طرح androidx.media3:media3-*:1.8.0-beta01
.
يحتوي الإصدار 1.8.0-beta01 على عمليات الإيداع هذه.
- المكتبة المشتركة:
- إضافة إمكانية استبدال مشغّل الفيديو في
ForwardingSimpleBasePlayer
- إضافة إمكانية استبدال مشغّل الفيديو في
- ExoPlayer:
- إضافة إمكانية استخدام معرّف الجهاز الافتراضي من
Context
الذي تم تمريره إلىExoPlayer.Builder
- تفعيل الجدولة الديناميكية تلقائيًا في وضع التقديم السريع
- تجنَّب إعادة تحميل مصدر غير ضرورية عند الانتقال إلى نهاية عنصر.
- استخدام
MediaCodec.BUFFER_FLAG_DECODE_ONLY
تلقائيًا في وضع التقديم السريع والترجيع - يتم عرض الخطأ
IllegalStateException
عند تشغيلPreloadMediaSource
بواسطةExoPlayer
مع سلسلة تشغيل مختلفة عن سلسلة التحميل المُسبَق (#2495). - إضافة
cloneAndMove
إلىShuffleMode
مع تنفيذ تلقائي (#2226) - تغيير السلوك التلقائي للدالة
Renderer.getMinDurationToProgressUs
لعرض قيمة أكبر إذا لم يكن من الضروري استدعاء الدالةrender
- تم إصلاح الخطأ الذي كان يتسبّب في تأخير عرض الإطار الأخير عند الانتقال إلى نهاية الفيديو أثناء الإيقاف المؤقت. في الوقت الحالي، لن يتم تطبيق إصلاح الخطأ إلا في حال تفعيل
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
.
- إضافة إمكانية استخدام معرّف الجهاز الافتراضي من
- المحوّل:
- أضِف
CodecDbLite
التي تتيح تحسينات خاصة بشرائح المعالجة لإعدادات ترميز الفيديو. - أضِف العلامة
setEnableCodecDbLite
إلىDefaultEncoderFactory
لتفعيل ميزة تحسين إعدادات CodecDB Lite. ويتم ضبط هذا الخيار تلقائيًا على "خطأ".
- أضِف
- أدوات استخراج البيانات:
- إضافة إمكانية البحث في ملفات MP4 المجزّأة التي تحتوي على عدة عناصر
sidx
يمكن تفعيل هذا السلوك باستخدام العلامةFLAG_MERGE_FRAGMENTED_SIDX
علىFragmentedMp4Extractor
(#9373). - تجاهُل جداول البحث الفارغة في ملفات FLAC (بما في ذلك تلك التي تحتوي على نقاط بحث نائبة فقط)، والرجوع إلى البحث الثنائي إذا كانت مدة الملف معروفة (#2327)
- تم إصلاح مشكلة تحليل وحدات معلومات SEI في H.265 لتخطّي أنواع معلومات SEI غير المعروفة بالكامل (#2456).
- عدِّل
WavExtractor
لاستخدام بيانات SubFormat الخاصة بإضافة العنوان لتحديد تنسيق الصوت عند تحليل ملف من النوعWAVE_FORMAT_EXTENSIBLE
. - MP4: تمت إضافة إمكانية استخدام مربّعات
ipcm
وfpcm
لتحديد مقاطع صوت PCM الأولية (لا تتوفّر إمكانية استخدام PCM بنقطة عائمة 64 بت). - MP4: التعامل مع جزء التدوير في مصفوفات التحويل
tkhd
التي تدور وتعكس الفيديو. يضمن ذلك أن تعرض الفيديوهات المعكوسة التي تم التقاطها باستخدام الكاميرا الأمامية في iPhone الاتجاه الصحيح، ولكنها ستظهر معكوسة بشكل غير صحيح على المحور الصادي (#2012).
- إضافة إمكانية البحث في ملفات MP4 المجزّأة التي تحتوي على عدة عناصر
- الصوت:
- إضافة دعم لجميع تنسيقات عيّنات PCM الخطية في
ChannelMappingAudioProcessor
وTrimmingAudioProcessor
- إتاحة استخدام فجوات صوتية في
CompositionPlayer
- إزالة المكالمة غير المرغوب فيها إلى
BaseAudioProcessor#flush()
منBaseAudioProcessor#reset()
- إضافة دعم لجميع تنسيقات عيّنات PCM الخطية في
- الفيديو:
- تحسين عرض الفيديو بسلاسة عند بدء التشغيل عندما لا تبدأ عيّنات الصوت في الموضع المطلوب تمامًا
- توسيع نطاق الحلّ البديل للأسطح المنفصلة ليشمل أجهزة "realme" (#2059)
- النص:
- إصلاح مشكلة توقّف التشغيل مؤقتًا عندما يتعذّر تحميل جزء من الترجمة والشرح في البداية ثم يتم تحميله بنجاح، يليه عدّة أجزاء فارغة من الترجمة والشرح (#2517)
- البيانات الوصفية:
- تمت إضافة إمكانية استرداد مدة الوسائط و
Timeline
إلىMetadataRetriever
، وتم نقلها إلى واجهة برمجة تطبيقاتAutoCloseable
مستندة إلى مثيل. استخدِمBuilder
الجديد لإنشاء مثيل منMediaItem
، ثم استدعِretrieveTrackGroups()
وretrieveTimeline()
وretrieveDurationUs()
للحصول علىListenableFuture
للبيانات الوصفية. تم الآن إيقاف استخدام الطرق الثابتة السابقة (#2462).
- تمت إضافة إمكانية استرداد مدة الوسائط و
- الصورة:
- يجب حصر وحدات البكسل التي تم فك ترميزها بحجم الشاشة في
BitmapFactoryImageDecoder
، وذلك لتجنُّب تعطُّل التطبيق معCanvas: trying to draw too large bitmap.
منPlayerView
عند محاولة عرض صور كبيرة جدًا (مثل 50 ميغابكسل). - غيِّر توقيع الدالة
DefaultRenderersFactory.getImageDecoderFactory()
لتأخذ المَعلمةContext
. - يجب أن يكون الحد الأقصى لحجم إخراج الصورة النقطية المستخدَم في
CompositionPlayer
مطابقًا للحجم المستخدَم فيTransformer
(ما يعني أنّCompositionPlayer
لا يأخذ حجم الشاشة في الاعتبار عند فك ترميز الصور النقطية، على عكسExoPlayer
).
- يجب حصر وحدات البكسل التي تم فك ترميزها بحجم الشاشة في
- Muxers:
- إصلاح الخطأ الذي كان يؤدي إلى عدم ضبط علامات العيّنات الصحيحة لعيّنات الصوت في ملفات MP4 المجزّأة.
- الجلسة:
- تم إصلاح الخطأ الذي كان يتسبّب في ظهور
IllegalStateException
(#2265) عند استدعاءsetSessionExtras
من سلسلة المحادثات الرئيسية عند تشغيل المشغّل من سلسلة محادثات تطبيق مختلفة عن سلسلة المحادثات الرئيسية. - عدم عرض إشعار تلقائيًا إذا تم إعداد مشغّل باستخدام عناصر وسائط بدون إعدادها أو تشغيلها
(#2423https://github.com/androidx/media/issues/2423). يمكن ضبط هذا السلوك من خلال
MediaSessionService.setShowNotificationForIdlePlayer
. - إضافة
PlaybackException
مخصّص إلى جميع وحدات التحكّم أو وحدات التحكّم المحدّدة - إصلاح الخطأ الذي يؤدي إلى ظهور
IllegalArgumentException
عند محاولة التقديم أو الترجيع في بث مباشر على جهازMediaController
- بالنسبة إلى أحداث البث المباشر، أوقِف نشر موضع التشغيل وإمكانية البحث في العنصر الحالي لوحدات التحكّم في الوسائط على المنصة، وذلك لتجنُّب حدوث تشوّهات في الموضع في واجهة مستخدم Android Auto (وغيرها من وحدات التحكّم التي تستخدم هذه المعلومات من جلسة الوسائط على المنصة) (#1758).
- تم إصلاح الخطأ الذي كان يتسبّب في ظهور
- إضافة Cronet:
- إضافة معالجة تلقائية لملفات تعريف الارتباط (#5975)
- إضافة HLS:
- إصلاح تحليل قائمة التشغيل لقبول
\f
(تغذية النموذج) في قيم سمات السلسلة المقتبسة (#2420). - إتاحة تعديل الإعلانات البينية التي تحمل المعرّف نفسه (#2427)
- تم إصلاح الخطأ الذي كان يتسبّب أحيانًا في عدم نشر أخطاء تحميل قائمة التشغيل عند نفاد مقاطع البث المباشر (#2401https://github.com/androidx/media/issues/2401).
- تجميع عروض الترجمة والشرح حسب علامة NAME، على غرار طريقة تجميع عروض الصوت الحالية (#1666).
- إصلاح تحليل قائمة التشغيل لقبول
- إضافة DASH:
- إضافة RTSP:
- تم إصلاح الخطأ
RtspClient
لاستخدام معرّف الموارد المنتظم الخاص بالموقع الجغرافي كما هو محدّد عند معالجة الردّ HTTP 302 (#2398).
- تم إصلاح الخطأ
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- تم إصلاح الخطأ الذي لا يؤدي فيه استخدام
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
إلى أي تأثير في إضافات برامج فك ترميز الصوت (#2258).
- تم إصلاح الخطأ الذي لا يؤدي فيه استخدام
- إضافة البث:
- إضافة دعم
setVolume()
وgetVolume()
(#2279) - منع CastPlayer من الانتقال إلى STATE_BUFFERING عندما يكون المخطط الزمني فارغًا.
- إضافة دعم
- أدوات الاختبار:
- أضِف
advance(player).untilPositionAtLeast
وuntilMediaItemIndex
إلىTestPlayerRunHelper
من أجل تقدّم اللاعب إلى أن يتم الوصول إلى موضع محدّد. في معظم الحالات، تكون هذه الطرق أكثر موثوقية من طريقتَيuntilPosition
وuntilStartOfMediaItem
الحالية. - انقل
FakeDownloader
إلى الوحدةtest-utils-robolectric
لإعادة استخدامه في اختبارات أخرى.
- أضِف
الإصدار 1.8.0-alpha01
19 مايو 2025
تم طرح androidx.media3:media3-*:1.8.0-alpha01
.
يحتوي الإصدار 1.8.0-alpha01 على
عمليات الدمج هذه.
- ExoPlayer:
- أضِف طريقة الدفع
ExoPlayer.setScrubbingModeEnabled(boolean)
. ويؤدي ذلك إلى تحسين أداء المشغّل عند إجراء عمليات بحث متكررة (على سبيل المثال، عندما يسحب المستخدم شريط التمرير). يمكن تخصيص سلوك وضع التقديم السريع باستخدامsetScrubbingModeParameters(..)
علىExoPlayer
وExoPlayer.Builder
. - السماح بتخصيص مدى التفاوت في البحث الجزئي في وضع البحث السريع
- زيادة معدّل تشغيل الترميز في وضع التقديم السريع أو الترجيع
- تم إصلاح الخطأ الذي قد يؤدي إلى عدم الإبلاغ عن أخطاء الإعداد في محتوى
AdsMediaSource
(#2337). - إصلاح تسريب الذاكرة في
MergingMediaSource
، على سبيل المثال، عند تحميل الترجمة والشرح بشكل جانبي (#2338) - السماح بعرض
CmcdConfiguration.Factory
لإيقاف تسجيل بيانات CMCD لعناصر وسائط معيّنة (#2386).null
- زيادة حجم المخزن المؤقت التلقائي للصور من 128 كيلوبايت (خطأ في النسخ واللصق من مسارات النص) إلى 26 ميغابايت، وهو حجم كبير بما يكفي لصور Ultra HDR بدقة 50 ميغابكسل (#2417).
- أضِف
PreCacheHelper
الذي يتيح للتطبيقات التخزين المؤقت المسبق لوسائط فردية مع تحديد موضع البدء والمدة.
- أضِف طريقة الدفع
- المحوّل:
- عند ملء فجوة أولية (تمت إضافتها من خلال
addGap()
) بمقطع صوتي صامت، يجب الآن ضبطexperimentalSetForceAudioTrack(true)
بشكل صريح فيEditedMediaItemSequence.Builder
. إذا كانت الفجوة في منتصف التسلسل، لن تكون هذه العلامة مطلوبة. - نقل واجهة
Muxer
منmedia3-transformer
إلىmedia3-muxer
- اجعل الإعداد
MediaItem.Builder().setImageDuration(long)
إلزاميًا لاستيراد عنصر وسائط كصورة. - أضِف
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
الذي يتضمّن قائمة تعديل بتنسيق MP4 عند الاقتصاص لتوجيه اللاعبين إلى تجاهل العيّنات بين إطار المفتاح قبل نقطة بداية الاقتصاص ونقطة بداية الاقتصاص. - تعديل تطبيق Composition Demo لاستخدام Kotlin وJetpack Compose، وإضافة
VideoCompositorSettings
مخصّص لترتيب التسلسلات في تنسيق 2x2 أو "صورة داخل صورة"
- عند ملء فجوة أولية (تمت إضافتها من خلال
- أدوات استخراج البيانات:
- MP3: استخدام المدة وحجم البيانات من البيانات الوصفية غير القابلة للبحث الخاصة بمعدل نقل البيانات المتغير (VBRI) وXing وما شابه ذلك
عند الرجوع إلى البحث بمعدل نقل بيانات ثابت
بسبب
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194).
- MP3: استخدام المدة وحجم البيانات من البيانات الوصفية غير القابلة للبحث الخاصة بمعدل نقل البيانات المتغير (VBRI) وXing وما شابه ذلك
عند الرجوع إلى البحث بمعدل نقل بيانات ثابت
بسبب
- الصوت:
- السماح بتعديل مستوى الصوت باستمرار في DefaultAudioMixer
- إتاحة
ChannelMappingAudioProcessor
وTrimmingAudioProcessor
وToFloatPcmAudioProcessor
للجميع (#2339) - استخدِم
AudioTrack#getUnderrunCount()
فيAudioTrackPositionTracker
للكشف عن نقص البيانات فيDefaultAudioSink
بدلاً من التقدير بأفضل جهد. - تحسين تسوية الطابع الزمني للصوت عند حدوث انحراف غير متوقّع في الموضع من جهاز إخراج الصوت
- تم إصلاح الخطأ الذي يؤدي إلى عدم مزامنة الصوت والفيديو خلال أول 10 ثوانٍ بعد استئناف التشغيل من الإيقاف المؤقت عند الاتصال بأجهزة بلوتوث.
- تم إصلاح الخطأ الذي كان يتسبّب في عدم تسجيل
AnalyticsListener.onAudioPositionAdvancing
للوقت الذي بدأ فيه الصوت بالتقدّم، بل كان يسجّل وقت القياس الأول.
- الفيديو:
- أضِف واجهة برمجة التطبيقات التجريبية
ExoPlayer
لتضمين العلامةMediaCodec.BUFFER_FLAG_DECODE_ONLY
عند وضع مخازن مؤقتة للإدخال مخصّصة لفك الترميز فقط في قائمة الانتظار. ستشير هذه العلامة إلى برنامج الترميز بتخطّي المخازن المؤقتة التي يتم فك ترميزها فقط، ما يؤدي إلى تسريع عملية البحث. يمكنك تفعيلها باستخدامDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
. - تحسين عمليات التحقّق من أداء برامج ترميز الفيديو. وقد يؤدي ذلك إلى تصنيف بعض الأغاني الإضافية على أنّها
EXCEEDS_CAPABILITIES
. - إصلاح أخطاء تشغيل VP9 Widevine على بعض الأجهزة (#2408).
- أضِف واجهة برمجة التطبيقات التجريبية
- النص:
- إصلاح SSA وSubRip لعرض إشارة قيد التقدم عند تفعيل الترجمة والشرح (#2309)
- تم إصلاح مشكلة توقّف التشغيل عند التبديل من بث مباشر يتضمّن خطأ في الترجمة والشرح إلى بث مباشر يتضمّن مسار ترجمة وشرح فارغًا (#2328).
- إصلاح مشكلة ظهور ترجمة وشرح مشوّشة بتنسيق CEA-608 عند تشغيل بث H.262 يتضمّن إطارات B (#2372)
- إضافة دعم لترجمة SSA مع
CodecId = S_TEXT/SSA
في ملفات Matroska في السابق، كانMatroskaExtractor
يتيح استخدامCodecId = S_TEXT/ASS
فقط، وهو مصمّم لتمثيل الإصدار "المتقدّم" (الإصدار 4 أو الإصدارات الأحدث) من ترجمات SubStation Alpha (ولكن منطق تحليل ExoPlayer هو نفسه لكلا الإصدارَين) (#2384). - إضافة إمكانية استخدام السمة
layer
في ملفات ترجمة SubStation Alpha (SSA) التي تُستخدَم لتحديد ترتيب العرض على المحور Z للإشارات عندما يتم عرض أكثر من إشارة واحدة على الشاشة في الوقت نفسه (#2124)
- التأثير:
- أضِف
Presentation.createForShortSide(int)
لإنشاءPresentation
يضمن أنّ الجانب الأقصر يتطابق دائمًا مع القيمة المحدّدة، بغض النظر عن اتجاه الإدخال.
- أضِف
- Muxers:
- تستخدم واجهة برمجة التطبيقات
writeSampleData()
الآن الفئةBufferInfo
الخاصة ببرنامج دمج الصوت والفيديو بدلاً منMediaCodec.BufferInfo
. - أضِف
Muxer.Factory#supportsWritingNegativeTimestampsInEditList
التي تكون قيمتها التلقائية خطأ.
- تستخدم واجهة برمجة التطبيقات
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح الخطأ الذي يؤدي إلى إبطال مجموعة إعلانية أخرى عن طريق الخطأ عند حدوث خطأ في تحميل إعلان واحد.
- تم إصلاح الخطأ الذي كان يؤدي إلى توقّف التشغيل مؤقتًا في المجموعات الإعلانية بعد انتهاء فترة عرض الفيديو عند الطلب.
لم تعُد المجموعات الإعلانية التي يتجاوز وقت بدئها الفترة الزمنية المحدّدة تتم إضافتها إلى قائمة الانتظار في
MediaPeriodQueue
(#2215).
- الجلسة:
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
NullPointerException
عند تمرير قيمة فارغة إلىgetLibraryRoot
فيMediaBrowser
مرتبط بـMediaBrowserServiceCompat
قديم. - تم إصلاح الخطأ الذي كان يؤدي إلى تعطُّل تطبيق الجلسة القديم عند إرسال إجراءات مخصّصة أو نتيجة بحث أو طلب getItem مع ظهور
ClassNotFoundException
. - تم إصلاح الخطأ الذي كان يؤدي إلى مشاركة
MediaItem.LocalConfiguration.uri
معMediaMetadata
في جلسات المنصة. لمشاركة معرّف موارد منتظم (URI) عن قصد للسماح لأدوات التحكّم بإعادة طلب الوسائط، اضبطMediaItem.RequestMetadata.mediaUri
بدلاً من ذلك.
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
- UI:
- تم إصلاح خطأ في Compose أدّى إلى حدوث فجوة بين ضبط حالات الزر الأولية ومراقبة التغيير في الحالة (مثل أشكال الرموز أو التفعيل). يتم الآن رصد أي تغييرات يتم إجراؤها على "اللاعب" خارج فترة المراقبة (#2313).
- أضِف عناصر الاحتفاظ بالحالة وعناصر قابلة للإنشاء إلى الوحدة
media3-ui-compose
الخاصة بـSeekBackButtonState
وSeekForwardButtonState
. - أضِفنا إمكانية استخدام وضع التنظيف في ExoPlayer إلى
PlayerControlView
. عند تفعيل هذا الخيار، يتم وضع المشغّل في وضع التقديم السريع أو الترجيع عندما يبدأ المستخدم في سحب شريط التقديم السريع أو الترجيع، ويتم إصدار طلبplayer.seekTo
لكل حركة، ثم يتم الخروج من وضع التقديم السريع أو الترجيع عند رفع الإصبع عن الشاشة. يمكن تفعيل عملية التكامل هذه باستخدامtime_bar_scrubbing_enabled = true
في XML أو الطريقةsetTimeBarScrubbingEnabled(boolean)
من Java/Kotlin. - اجعل
PlayerSurface
تقبل وسيطةPlayer
تقبل القيم الخالية.
- عمليات التنزيل:
- إضافة إمكانية التنزيل الجزئي للجداول المتدفقة التدريجية يمكن للتطبيقات إعداد بث تدريجي باستخدام
DownloadHelper
، وطلبDownloadRequest
من التطبيق المساعد مع تحديد مواضع البدء والانتهاء للوسائط المستندة إلى الوقت التي يجب أن يغطيها التنزيل. يحملDownloadRequest
نطاق البايت الذي تم تحديده، والذي يمكن استخدامه لإنشاءProgressiveDownloader
وتنزيل المحتوى المناسب. - أضِف
DownloadHelper.Factory
التي سيتم استبدال طرقDownloadHelper.forMediaItem()
الثابتة بها. - أضِف
Factory
لعمليات التنفيذSegmentDownloader
. - إضافة إمكانية التنزيل الجزئي لعمليات البث التكيّفي يمكن للتطبيقات إعداد بث متكيّف باستخدام
DownloadHelper
، وطلبDownloadRequest
من التطبيق المساعد مع تحديد مواضع البدء والانتهاء للوسائط المستندة إلى الوقت التي يجب أن يغطيها التنزيل. تحمل السمةDownloadRequest
النطاق الزمني الذي تم تحديده، والذي يمكن من خلاله إنشاءSegmentDownloader
ملموس وتنزيل المحتوى وفقًا لذلك.
- إضافة إمكانية التنزيل الجزئي للجداول المتدفقة التدريجية يمكن للتطبيقات إعداد بث تدريجي باستخدام
- إضافة HLS:
- تتيح هذه السمة استخدام X-ASSET-LIST وعمليات البث المباشر مع
HlsInterstitialsAdsLoader
.
- تتيح هذه السمة استخدام X-ASSET-LIST وعمليات البث المباشر مع
- إضافة RTSP:
- إضافة إمكانية تحليل SessionDescriptions التي تحتوي على أسطر تتضمّن أحرف مسافات بيضاء لاحقة (#2357)
- إضافة البث:
- إتاحة استخدام
getDeviceVolume()
وsetDeviceVolume()
وgetDeviceMuted()
وsetDeviceMuted()
(#2089).
- إتاحة استخدام
- أدوات الاختبار:
- تمت إزالة
transformer.TestUtil.addAudioDecoders(String...)
وtransformer.TestUtil.addAudioEncoders(String...)
وtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)
. يمكنك استخدامShadowMediaCodecConfig
لضبط برامج الترميز وفك الترميز الثانوية بدلاً من ذلك. - تم استبدال البادئة "exotest" بالبادئة "media3" في أسماء برامج الترميز التي تعرضها السمة
ShadowMediaCodecConfig
.
- تمت إزالة
- إزالة الرموز المتوقّفة نهائيًا:
- تمت إزالة الدالة الإنشائية
SegmentDownloader
المتوقّفة نهائيًاSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
والدوال الإنشائية المقابلة في فئاتها الفرعيةDashDownloader
وHlsDownloader
وSsDownloader
. - تمت إزالة
Player.hasNext()
وPlayer.hasNextWindow()
اللذين تم إيقافهما نهائيًا. استخدِمPlayer.hasNextMediaItem()
بدلاً من ذلك. - تمت إزالة
Player.next()
التي تم إيقافها نهائيًا. استخدِمPlayer.seekToNextMediaItem()
بدلاً من ذلك. - تمت إزالة
Player.seekToPreviousWindow()
التي تم إيقافها نهائيًا. استخدِمPlayer.seekToPreviousMediaItem()
بدلاً من ذلك. - تمت إزالة
Player.seekToNextWindow()
التي تم إيقافها نهائيًا. استخدِمPlayer.seekToNextMediaItem()
بدلاً من ذلك. - تمت إزالة
BaseAudioProcessor
المتوقّفة نهائيًا في الوحدةexoplayer
. استخدِمBaseAudioProcessor
ضمن وحدةcommon
. - إزالة الدالة الإنشائية المتوقّفة نهائيًا
MediaCodecVideoRenderer
MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
- تمت إزالة الدالة الإنشائية
الإصدار 1.7.0
الإصدار 1.7.1
16 مايو 2025
يحتوي هذا الإصدار على الرمز البرمجي نفسه المتوفّر في الإصدار 1.6.1، ويتم إطلاقه لضمان ظهوره كإصدار "أحدث" من الإصدار 1.7.0 الذي كان إصدارًا أوليًا تم تصنيفه عن طريق الخطأ على أنّه إصدار ثابت (راجِع ما يلي).
الإصدار 1.7.0
16 مايو 2025
كان من المفترض أن يكون هذا الإصدار 1.7.0-alpha01
، ولكن تم تصنيفه عن طريق الخطأ على أنّه
1.7.0
(أي إصدار ثابت) على maven.google.com. يُرجى عدم استخدامه. يمكنك البقاء على الإصدار 1.6.1 أو الترقية إلى الإصدار 1.7.1 (الذي يتضمّن الرمز البرمجي نفسه المتوفّر في الإصدار 1.6.1).
الإصدار 1.6.0
1.6.1
14 أبريل 2025
تم طرح androidx.media3:media3-*:1.6.1
.
يحتوي الإصدار 1.6.1 على عمليات الدمج هذه.
- المكتبة المشتركة:
- تمت إضافة طريقة
PlaybackParameters.withPitch(float)
لتسهيل نسخPlaybackParameters
مع قيمةpitch
جديدة (#2257).
- تمت إضافة طريقة
- ExoPlayer:
- تم إصلاح المشكلة التي يتعذّر فيها الانتقال إلى عنصر وسائط بسبب خطأ قابل للاسترداد في أداة العرض أثناء تهيئة عنصر الوسائط التالي (#2229).
- تم إصلاح المشكلة التي تؤدي إلى ظهور الخطأ
ProgressiveMediaPeriod
IllegalStateException
عندما يحاولPreloadMediaSource
استدعاءgetBufferedDurationUs()
قبل أن يصبح جاهزًا (#2315). - تم إصلاح مشكلة إرسال
CmcdData
في طلبات البيان الخاصة ببروتوكولات DASH وHLS وSmoothStreaming (#2253). - التأكّد من إمكانية استخدام
AdPlaybackState.withAdDurationsUs(long[][])
بعد إزالة المجموعات الإعلانية سيظل على المستخدم إدخال مصفوفة من المدد لمجموعات الإعلانات التي تمت إزالتها، ويمكن أن تكون فارغة أو بقيمة فارغة (#2267).
- أدوات استخراج البيانات:
- MP4: يجب تحليل
alternate_group
من المربّعtkhd
وعرضه كإدخالMp4AlternateGroupData
فيFormat.metadata
لكل مقطع (#2242).
- MP4: يجب تحليل
- الصوت:
- تم إصلاح مشكلة إيقاف التحميل مؤقتًا حيث قد يتوقف الموضع عند تشغيل قائمة تشغيل تتضمّن محتوًى قصيرًا (#1920).
- الجلسة:
- تقليل مهلة التجميع لعمليات ردّ الاتصال في النظام الأساسي
MediaSession
من 500 إلى 100 ملي ثانية وإضافة أداة ضبط تجريبية للسماح للتطبيقات بضبط هذه القيمة - تم إصلاح المشكلة التي تؤدي إلى ظهور الإشعارات مجددًا بعد أن يرفضها المستخدم (#2302).
- تم إصلاح خطأ كان يؤدي إلى عرض الجلسة لمخطط زمني يتضمّن عنصرًا واحدًا عندما يكون المشغّل المضمّن فارغًا في الواقع. حدث ذلك عندما لا يتوفّر
COMMAND_GET_TIMELINE
في المشغّل المضمّن، بينما يتوفّرCOMMAND_GET_CURRENT_MEDIA_ITEM
، وكان المشغّل المضمّن فارغًا (#2320). - تم إصلاح خطأ كان يؤدي إلى تجاهل طلب الاتصال بـ
MediaSessionService.setMediaNotificationProvider
بدون إشعار بعد التفاعل مع الخدمة بطرق أخرى، مثلsetForegroundServiceTimeoutMs
(#2305).
- تقليل مهلة التجميع لعمليات ردّ الاتصال في النظام الأساسي
- UI:
- فعِّل
PlayerSurface
للعمل معExoPlayer.setVideoEffects
وCompositionPlayer
. - تم إصلاح الخطأ الذي كان يؤدي إلى عدم إمكانية إعادة إنشاء
PlayerSurface
باستخدامPlayer
جديد.
- فعِّل
- إضافة HLS:
- تم إصلاح المشكلة المتمثّلة في عدم ضبط مدة الأجزاء في
CmcdData
لوسائط HLS، ما يؤدي إلى حدوث خطأ في التأكيد عند معالجة مقاطع الوسائط المشفّرة (#2312).
- تم إصلاح المشكلة المتمثّلة في عدم ضبط مدة الأجزاء في
- إضافة RTSP:
- إضافة إمكانية استخدام معرّف الموارد المنتظم (URI) مع نظام RTSPT كطريقة لإعداد جلسة RTSP لاستخدام TCP (#1484)
- إضافة البث:
- إضافة إمكانية استخدام البيانات الوصفية لقوائم التشغيل (#2235)
1.6.0
26 مارس 2025
تم طرح androidx.media3:media3-*:1.6.0
.
يحتوي الإصدار 1.6.0 على
عمليات الدمج هذه.
- المكتبة المشتركة:
- أضِف
AudioManagerCompat
وAudioFocusRequestCompat
لاستبدال الفئات المكافئة فيandroidx.media
. - ترقية Kotlin من الإصدار 1.9.20 إلى الإصدار 2.0.20 واستخدام المكوّن الإضافي Compose Compiler Gradle تمت ترقية مكتبة KotlinX Coroutines من الإصدار 1.8.1 إلى الإصدار 1.9.0.
- أزِل طريقة
Format.toBundle(boolean excludeMetadata)
واستخدِمFormat.toBundle()
بدلاً منها. - تم إصلاح الخطأ في
SimpleBasePlayer
حيث لا تؤدي إضافةcurrentMediaItemIndex
جديد فيState
بعدsetPlaylist
باستخدامnull
MediaMetadata
إلى إعادة تقييم البيانات الوصفية (#1940). - تغيير إذن الوصول إلى
SimpleBasePlayer.State
من "محمي" إلى "عام" لتسهيل التعامل مع التحديثات في صفوف أخرى (#2128)
- أضِف
- ExoPlayer:
- أضِف
MediaExtractorCompat
، وهي فئة جديدة توفّر ميزات مكافئة للمنصةMediaExtractor
. - إضافة دعم تجريبي لعملية "التسخين المُسبَق" في ExoPlayer لتشغيل المحتوى باستخدام
MediaCodecVideoRenderer
. يمكنك ضبطDefaultRenderersFactory
من خلالexperimentalSetEnableMediaCodecVideoRendererPrewarming
لتوفيرMediaCodecVideoRenderer
ثانوي إلىExoPlayer
. في حال تفعيل هذه الميزة، تعالجExoPlayer
مسبقًا فيديو عناصر الوسائط المتتالية أثناء التشغيل لتقليل وقت استجابة الانتقال بين عناصر الوسائط. - خفض القيم التلقائية لكل من
bufferForPlaybackMs
وbufferForPlaybackAfterRebufferMs
فيDefaultLoadControl
إلى 1000 و2000 ملي ثانية على التوالي - يمكنك ضبط
DeviceInfo
ومستوى صوت الجهاز بشكل غير متزامن (في حال تفعيلsetDeviceVolumeControlEnabled
). لا تتوفّر هذه القيم فورًا بعدExoPlayer.Builder.build()
، وتُعلمPlayer.Listener
بالتغييرات من خلالonDeviceInfoChanged
وonDeviceVolumeChanged
. - لم يعُد رقم تعريف جلسة الصوت الأولية متاحًا على الفور بعد إنشاء المشغّل. يمكنك استخدام
AnalyticsListener.onAudioSessionIdChanged
للاستماع إلى التحديث الأولي إذا لزم الأمر. - يجب مراعاة اللغة عند اختيار مقطع فيديو. يتم تلقائيًا اختيار مقطع فيديو "رئيسي" يتطابق مع لغة المقطع الصوتي المحدّد، إذا كان متاحًا. يمكن التعبير عن إعدادات اللغة المفضّلة للفيديوهات التي تتضمّن محتوًى فاضحًا باستخدام
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
. - أضِف المَعلمة
selectedAudioLanguage
إلى الطريقةDefaultTrackSelector.selectVideoTrack()
. - أضِف المَعلمة
retryCount
إلىMediaSourceEventListener.onLoadStarted
وطُرقMediaSourceEventListener.EventDispatcher
المقابلة. - تم إصلاح الخطأ الذي كان يؤدي إلى توقّف عرض الإطارات في نهاية عناصر قائمة التشغيل أو الفترات في بثوق DASH المتعددة الفترات التي تتضمّن مدة لا تتطابق مع المحتوى الفعلي (1698#).
- انقل
BasePreloadManager.Listener
إلىPreloadManagerListener
على مستوى أعلى. - يمكن تنفيذ
RenderersFactory.createSecondaryRenderer
لتوفير عارضات ثانوية لعملية التسخين المُسبَق. تتيح ميزة "التحضير المسبق" الانتقال بشكل أسرع بين عناصر الوسائط أثناء التشغيل. - فعِّل إرسال
CmcdData
لطلبات ملفات البيان بتنسيقات البث التكيّفي DASH وHLS وSmoothStreaming (#1951). - يجب تقديم
MediaCodecInfo
لبرنامج الترميز الذي سيتم إعداده فيMediaCodecRenderer.onReadyToInitializeCodec
(#1963). - غيِّر
AdsMediaSource
للسماحAdPlaybackStates
بالنمو من خلال إضافة مجموعات إعلانية. يتم رصد التعديلات غير الصالحة ويتم طرح استثناء. - تم إصلاح مشكلة عرض لقطات إضافية مخصّصة لفك الترميز فقط بشكل متسلسل وسريع عند الانتقال إلى وسائط المحتوى بعد عرض إعلان أثناء التشغيل.
- اجعل
DefaultRenderersFactory
يضيف مثيلَين منMetadataRenderer
لتمكين التطبيقات من تلقّي مخطّطَين مختلفَين للبيانات الوصفية تلقائيًا. - إعادة تقييم ما إذا كان يجب إلغاء التحميل المستمر لجزء من المحتوى عند إيقاف التشغيل مؤقتًا (#1785)
- إضافة خيار إلى
ClippingMediaSource
للسماح بقص مقاطع من الوسائط التي لا يمكن البحث فيها - تم إصلاح الخطأ الذي كان يؤدي إلى حظر الانتقال إلى عنصر الوسائط التالي عند البحث باستخدام ميزة "التحميل المسبق".
- تم إصلاح الخطأ الذي يتسبّب في بقاء
ExoPlayer.isLoading()
علىtrue
حتى بعد الانتقال إلىSTATE_IDLE
أوSTATE_ENDED
(#2133). - إضافة
lastRebufferRealtimeMs
إلىLoadControl.Parameter
(#2113)
- أضِف
- المحوّل:
- إضافة إمكانية تحويل الترميز إلى تنسيقات بديلة متوافقة مع الأنظمة القديمة
- إضافة إمكانية تحويل الترميز وتغيير تنسيق Dolby Vision (الملف الشخصي 8).
- تعديل مَعلمات
VideoFrameProcessor.registerInputStream
وVideoFrameProcessor.Listener.onInputStreamRegistered
لاستخدامFormat
- إنشاء بيانات وصفية ثابتة بتنسيق HDR عند استخدام
DefaultEncoderFactory
- فعِّل إمكانية استخدام بيانات تشخيص النظام الأساسي Android باستخدام
MediaMetricsManager
. تعيد خدمة Transformer توجيه أحداث التعديل وبيانات الأداء إلى المنصة، ما يساعد في توفير معلومات عن أداء النظام وتصحيح الأخطاء على الجهاز. ويمكن أن تجمع Google هذه البيانات أيضًا إذا فعّل المستخدم خيار مشاركة بيانات الاستخدام والتشخيص. يمكن للتطبيقات إيقاف المشاركة في بيانات تشخيص Transformer على المنصة باستخدامTransformer.Builder.setUsePlatformDiagnostics(false)
. - قسِّم
InAppMuxer
إلىInAppMp4Muxer
وInAppFragmentedMp4Muxer
. يمكنك استخدامInAppMp4Muxer
لإنشاء ملف MP4 غير مقسَّم، بينما يمكنك استخدامInAppFragmentedMp4Muxer
لإنشاء ملف MP4 مقسَّم. - نقل واجهة
Muxer
منmedia3-muxer
إلىmedia3-transformer
- أضِف
MediaProjectionAssetLoader
، الذي يوفّر وسائط منMediaProjection
لتسجيل الشاشة، وأضِف إمكانية تسجيل الشاشة إلى تطبيق Transformer التجريبي. - أضِف
#getInputFormat()
إلى واجهةCodec
. - يجب نقل مسؤولية تحرير
GlObjectsProvider
إلى المتصل فيDefaultVideoFrameProcessor
وDefaultVideoCompositor
عندما يكون ذلك ممكنًا.
- أدوات استخراج البيانات:
- AVI: إصلاح معالجة الملفات التي تتضمّن صوتًا مضغوطًا بمعدل بت ثابت حيث يخزّن عنوان البث عدد وحدات البايت بدلاً من عدد الأجزاء.
- إصلاح معالجة وحدات NAL التي يتم التعبير عن أطوالها ببايت واحد أو بايتَين (بدلاً من 4 بايتات).
- إصلاح
ArrayIndexOutOfBoundsException
في قوائم تعديل ملفات MP4 عندما تبدأ قائمة التعديل بإطار غير متزامن بدون إطار متزامن سابق (#2062) - تم إصلاح المشكلة التي قد تؤدي إلى توقّف بث TS على بعض الأجهزة (#2069).
- FLAC: إضافة إمكانية استخدام ملفات FLAC بمعدّل 32 بت في السابق، كان يتعذّر تشغيل هذه الفيديوهات مع
IllegalStateException: Playback stuck buffering and not loading
(#2197).
- الصوت:
- تم تعديل
onAudioPositionAdvancing
ليتم استدعاؤه عند استئناف التشغيل (كان يتم استدعاؤه سابقًا عند إيقاف التشغيل مؤقتًا). - عدم تجاوز
SonicAudioProcessor
عندما يتم ضبطSpeedChangingAudioProcessor
باستخدام المَعلمات التلقائية - تم إصلاح مشكلة نقص سعة التخزين المؤقت في
Sonic#getOutputSize()
التي قد تؤدي إلى توقّفDefaultAudioSink
. - يجب إصلاح
MediaCodecAudioRenderer.getDurationToProgressUs()
وDecoderAudioRenderer.getDurationToProgressUs()
لكي تؤدي عمليات البحث إلى إعادة ضبط المدد المقدَّمة بشكل صحيح. - اجعل الرقم
androidx.media3.common.audio.SonicAudioProcessor
نهائيًا. - أضفنا إمكانية استخدام PCM ذي الفاصلة العائمة في
ChannelMappingAudioProcessor
وTrimmingAudioProcessor
.
- تم تعديل
- الفيديو:
- تغيير
MediaCodecVideoRenderer.shouldUsePlaceholderSurface
إلى محمي حتى تتمكّن التطبيقات من تجاهل ذلك وحظر استخدام مساحات العناصر النائبة (#1905). - إضافة تحليل تجريبي
ExoPlayer
لاعتمادية عيّنات AV1 من أجل تسريع عملية البحث يمكنك تفعيلها باستخدام واجهة برمجة التطبيقات الجديدةDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
. - أضِف واجهة برمجة التطبيقات التجريبية
ExoPlayer
لإسقاط مخازن مؤقتة لبيانات إدخال برنامج الترميزMediaCodecVideoRenderer
المتأخرة التي لا تعتمد عليها. يمكنك تفعيلها باستخدامDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
. - تم إصلاح مشكلة كان فيها اللاعب الذي لا يملك سطحًا جاهزًا على الفور، وكان فك ترميز أي إطارات معلّقة بطيئًا جدًا (#1973).
- استبعِد أجهزة Xiaomi وOPPO من وضع "السطح المنفصل" لتجنُّب وميض الشاشة (#2059).
- تغيير
- النص:
- إتاحة ترجمة VobSub (#8260)
- إيقاف التحميل المسبق لجميع ملفات الترجمة والشرح التي تم ضبطها باستخدام
MediaItem.Builder.setSubtitleConfigurations
، والتحميل المسبق لملف واحد فقط في حال اختياره من خلال أداة اختيار مقاطع الفيديو (#1721) - TTML: إضافة إمكانية الإشارة إلى
tts:origin
وtts:extent
باستخدامstyle
(#2953) - يجب أن تكون الطوابع الزمنية في ملفات WebVTT وSubRip مؤلّفة من 3 منازل عشرية بالضبط. في السابق، كنا نحلّل بشكل غير صحيح أي عدد من المنازل العشرية، ولكننا كنا نفترض دائمًا أنّ القيمة بالملي ثانية، ما يؤدي إلى طوابع زمنية غير صحيحة (#1997).
- إصلاح مشكلة تعليق التشغيل عندما تحتوي قائمة تشغيل على مقاطع تتضمّن ترجمة وشرحًا بتنسيق CEA-608 أو CEA-708
- إصلاح الخطأ
IllegalStateException
عندما يحتوي ملف SSA على إشارة مدتها صفر (وقت البدء ووقت الانتهاء متساويان) (#2052) - إخفاء (وتسجيل) أخطاء تحليل الترجمة والشرح عند دمجها في الحاوية نفسها التي تضم الصوت والفيديو (#2052)
- تم إصلاح مشكلة معالجة أحرف UTF-8 المتعددة البايتات في ملفات WebVTT باستخدام نهايات الأسطر CR (#2167).
- DRM:
- تم إصلاح الخطأ
MediaCodec$CryptoException: Operation not supported in this configuration
الذي يحدث عند تشغيل محتوى ClearKey على الأجهزة التي تعمل بإصدار أقل من 27 لواجهة برمجة التطبيقات (#1732).
- تم إصلاح الخطأ
- التأثير:
- تم نقل وظيفة
OverlaySettings
إلىStaticOverlaySettings
. يمكن إنشاء فئة فرعية منOverlaySettings
للسماح بإعدادات تراكب ديناميكية.
- تم نقل وظيفة
- Muxers:
- تم نقل
MuxerException
خارج واجهةMuxer
لتجنُّب اسم مؤهَّل طويل جدًا. - تمت إعادة تسمية طريقة
setSampleCopyEnabled()
إلىsetSampleCopyingEnabled()
في كل منMp4Muxer.Builder
وFragmentedMp4Muxer.Builder
. - تعرض الآن
Mp4Muxer.addTrack()
وFragmentedMp4Muxer.addTrack()
معرّف مسارint
بدلاً منTrackToken
. - لم يعُد
Mp4Muxer
وFragmentedMp4Muxer
ينفّذان واجهةMuxer
. - إيقاف
Mp4Muxer
تجميع العيّنات ونسخها تلقائيًا - تم إصلاح خطأ في
FragmentedMp4Muxer
يؤدي إلى إنشاء الكثير من الأجزاء عند كتابة المقطع الصوتي فقط.
- تم نقل
- الجلسة:
- الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو إيقافه أو تعذّره ويسمح ذلك للمستخدمين باستئناف التشغيل خلال فترة المهلة هذه بدون التعرّض لخطر فرض قيود على الخدمة التي تعمل في المقدّمة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد بإمكانك استخدام استدعاء
player.pause()
لإيقاف الخدمة التي تعمل في المقدّمة قبلstopSelf()
عند إلغاءonTaskRemoved
، بل عليك استخدامMediaSessionService.pauseAllPlayersAndStopSelf()
بدلاً من ذلك. - إبقاء الإشعار مرئيًا عندما يحدث خطأ في التشغيل أو يتوقف. لا تتم إزالة الإشعار إلا إذا تم محو قائمة التشغيل أو تم إيقاف المشغّل.
- تحسين طريقة التعامل مع إجراءات MediaSession في منصة Android، ACTION_PLAY وACTION_PAUSE، لضبط أحدهما فقط وفقًا للأوامر المتاحة، وقبول ضبط أحدهما فقط.
- أضِف
Context
كمَعلمة إلىMediaButtonReceiver.shouldStartForegroundService
(#1887). - تم إصلاح الخطأ الذي كان يؤدي إلى تجاهل التغييرات من عملية تعديل معلّقة عند استدعاء طريقة
Player
فيMediaController
مرتبطة بجلسة قديمة. - إتاحة قبول قيمة فارغة في
MediaSession.setSessionActivity(PendingIntent)
(#2109) - إصلاح الخطأ الذي كان يؤدي إلى بقاء إشعار قديم مرئيًا عند محو قائمة التشغيل (#2211)
- الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو إيقافه أو تعذّره ويسمح ذلك للمستخدمين باستئناف التشغيل خلال فترة المهلة هذه بدون التعرّض لخطر فرض قيود على الخدمة التي تعمل في المقدّمة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد بإمكانك استخدام استدعاء
- UI:
- أضِف عناصر قابلة للإنشاء وحاويات للحالة إلى الوحدة
media3-ui-compose
من أجلPlayerSurface
وPresentationState
وPlayPauseButtonState
وNextButtonState
وPreviousButtonState
وRepeatButtonState
وShuffleButtonState
وPlaybackSpeedState
.
- أضِف عناصر قابلة للإنشاء وحاويات للحالة إلى الوحدة
- عمليات التنزيل:
- إصلاح الخطأ في
CacheWriter
الذي يترك مصادر البيانات مفتوحة ومناطق ذاكرة التخزين المؤقت مقفلة في حال عرض مصدر البيانات للخطأException
غيرIOException
(#9760).
- إصلاح الخطأ في
- إضافة HLS:
- أضِف الإصدار الأول من
HlsInterstitialsAdsLoader
. يقرأ أداة تحميل الإعلانات الإعلانات البينية المتوافقة مع بروتوكول HLS في قائمة تشغيل الوسائط المتوافقة مع بروتوكول HLS، ويربطها بـAdPlaybackState
الذي يتم تمريره إلىAdsMediaSource
. لا يتوافق هذا الإصدار الأوّلي إلا مع بث HLS VOD الذي يتضمّن سماتX-ASSET-URI
. - أضِف
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
. ويمكن للتطبيقات استخدامها لإنشاء مثيلاتAdsMediaSource
تستخدمHlsInterstitialsAdsLoader
بطريقة مريحة وآمنة. - تحليل العلامة
SUPPLEMENTAL-CODECS
من قائمة تشغيل HLS لرصد تنسيقات Dolby Vision (#1785) - تخفيف شرط البحث عن مزامنة المواضع في بث مباشر وفق بروتوكول HTTP (HLS) (2209#)
- أضِف الإصدار الأول من
- إضافة DASH:
- إضافة دعم تنسيق AC-4 المستوى 4 إلى DASH (#1898)
- تم حلّ مشكلة عند احتساب الفاصل الزمني للتحديث من أجل إدراج الإعلانات في عمليات البث المباشر المتعددة الفترات (#1698).
- تحليل السمة
scte214:supplementalCodecs
من بيان DASH لرصد تنسيقات Dolby Vision (#1785) - تحسين معالجة عمليات الانتقال بين الفترات في أحداث البث المباشر التي تحتوي فيها الفترة على عيّنات وسائط تتجاوز مدة الفترة المحدّدة (#1698)
- تم إصلاح المشكلة التي يتم فيها دمج مجموعات التكيّف التي تحمل العلامة
adaptation-set-switching
ولكنها تتضمّن لغات أو علامات أدوار مختلفة (#2222).
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- أضِف وحدة فك ترميز MPEG-H التي تستخدم أداة فك ترميز MPEG-H المضمّنة لفك ترميز الصوت MPEG-H (#1826).
- إضافة MIDI:
- إدخال مثيلات
AudioSink
وAudioRendererEventListener
المخصّصة فيMidiRenderer
- إدخال مثيلات
- إضافة البث:
- تمت ترقية إصدار التبعية
play-services-cast-framework
إلى 21.5.0 لإصلاح عطلFLAG_MUTABLE
في التطبيقات التي تستهدف المستوى 34 من واجهة برمجة التطبيقات أو المستويات الأحدث على الأجهزة التي تم تثبيت "خدمات Google Play" عليها ولكن تم إيقافها (#2178).
- تمت ترقية إصدار التبعية
- التطبيق التجريبي:
- يمكنك توسيع نطاق
demo-compose
باستخدام أزرار إضافية وتحسين تكاملPlayerSurface
من خلال إتاحة التكبير/التصغير واستخدام الغالق.
- يمكنك توسيع نطاق
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة الطريقة المتوقّفة نهائيًا
AudioMixer.create()
استخدِمDefaultAudioMixer.Factory().create()
بدلاً من ذلك. - أزِل طرق
Transformer.Builder
المتوقّفة نهائيًا التالية:setTransformationRequest()
، يُرجى استخدامsetAudioMimeType()
وsetVideoMimeType()
وsetHdrMode()
بدلاً منها.setAudioProcessors()
، اضبط معالج الصوت فيEditedMediaItem.Builder.setEffects()
، ثم مرِّره إلىTransformer.start()
بدلاً من ذلك.setVideoEffects()
، اضبط تأثير الفيديو فيEditedMediaItem.Builder.setEffects()
، ثم أرسِله إلىTransformer.start()
بدلاً من ذلك.setRemoveAudio()
، استخدِمEditedMediaItem.Builder.setRemoveAudio()
لإزالة الصوت منEditedMediaItem
الذي تم تمريره إلىTransformer.start()
بدلاً من ذلك.setRemoveVideo()
، استخدِمEditedMediaItem.Builder.setRemoveVideo()
لإزالة الفيديو منEditedMediaItem
الذي تم تمريره إلىTransformer.start()
بدلاً من ذلك.setFlattenForSlowMotion()
، استخدِمEditedMediaItem.Builder.setFlattenForSlowMotion()
لتسويةEditedMediaItem
التي تم تمريرها إلىTransformer.start()
بدلاً من ذلك.setListener()
، يُرجى استخدامaddListener()
أوremoveListener()
أوremoveAllListeners()
بدلاً منها.
- أزِل طرق
Transformer.Listener
المتوقّفة نهائيًا التالية:onTransformationCompleted(MediaItem)
، استخدِمonCompleted(Composition, ExportResult)
بدلاً من ذلك.onTransformationCompleted(MediaItem, TransformationResult)
، استخدِمonCompleted(Composition, ExportResult)
بدلاً من ذلك.onTransformationError(MediaItem, Exception)
، استخدِمonError(Composition, ExportResult, ExportException)
بدلاً من ذلك.onTransformationError(MediaItem, TransformationException)
، استخدِمonError(Composition, ExportResult, ExportException)
بدلاً من ذلك.onTransformationError(MediaItem, TransformationResult, TransformationException)
، استخدِمonError(Composition, ExportResult, ExportException)
بدلاً من ذلك.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
، استخدِمonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
بدلاً من ذلك.
- إزالة الفئة
TransformationResult
المتوقّفة نهائيًا استخدِمExportResult
بدلاً من ذلك. - إزالة الفئة
TransformationException
المتوقّفة نهائيًا استخدِمExportException
بدلاً من ذلك. - إزالة
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
المتوقّف نهائيًا استخدِمTransformer.PROGRESS_STATE_NOT_STARTED
بدلاً من ذلك. - إزالة
Transformer.setListener()
المتوقّف نهائيًا استخدِمTransformer.addListener()
أوTransformer.removeListener()
أوTransformer.removeAllListeners()
بدلاً من ذلك. - إزالة
Transformer.startTransformation()
المتوقّف نهائيًا استخدِمTransformer.start(MediaItem, String)
بدلاً من ذلك. - إزالة
SingleFrameGlShaderProgram
المتوقّف نهائيًا استخدِمBaseGlShaderProgram
بدلاً من ذلك. - إزالة
Transformer.flattenForSlowMotion
استخدِمEditedMediaItem.flattenForSlowMotion
بدلاً من ذلك. - تمت إزالة
ExoPlayer.VideoComponent
وExoPlayer.AudioComponent
وExoPlayer.TextComponent
وExoPlayer.DeviceComponent
. - تمت إزالة
androidx.media3.exoplayer.audio.SonicAudioProcessor
. - تمت إزالة طرق
DownloadHelper
المتوقّفة نهائيًا التالية:- استخدِم الدالة الإنشائية
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
بدلاً منDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
. - يمكن تحقيق وظائف مكافئة
getRendererCapabilities(RenderersFactory)
من خلال إنشاءDefaultRendererCapabilitiesList
باستخدامRenderersFactory
واستدعاءDefaultRendererCapabilitiesList.getRendererCapabilities()
.
- استخدِم الدالة الإنشائية
- تمت إزالة الطريقة
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
. استخدِمPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
و(MediaSession.Token) compatToken.getToken()
بدلاً من ذلك.
- إزالة الطريقة المتوقّفة نهائيًا
1.6.0-rc02
19 مارس 2025
استخدِم الإصدار الثابت 1.6.0.
1.6.0-rc01
12 مارس 2025
استخدِم الإصدار الثابت 1.6.0.
1.6.0-beta01
26 فبراير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha03
6 فبراير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha02
30 يناير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha01
20 ديسمبر 2024
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.5
الإصدار 1.5.1
19 ديسمبر 2024
تم طرح androidx.media3:media3-*:1.5.1
.
يحتوي الإصدار 1.5.1 على عمليات الدمج هذه.
- ExoPlayer:
- إيقاف استخدام فك التشفير غير المتزامن في MediaCodec لتجنُّب مشاكل انتهاء المهلة التي تم الإبلاغ عنها في برنامج الترميز مع واجهة برمجة التطبيقات هذه (#1641).
- أدوات استخراج البيانات:
- MP3: لا توقِف التشغيل مبكرًا عندما لا يغطّي جدول محتويات إطار
VBRI
جميع بيانات MP3 في ملف (#1904).
- MP3: لا توقِف التشغيل مبكرًا عندما لا يغطّي جدول محتويات إطار
- الفيديو:
- تم التراجع عن استخدام قيم نسبة عرض البكسل إلى ارتفاعه
MediaCodecAdapter
المقدَّمة عند توفيرها أثناء معالجةonOutputFormatChanged
(#1371).
- تم التراجع عن استخدام قيم نسبة عرض البكسل إلى ارتفاعه
- النص:
- إصلاح الخطأ في
ReplacingCuesResolver.discardCuesBeforeTimeUs
الذي كان يؤدي إلى تجاهل الإشارة النشطة فيtimeUs
(بدأت قبل ذلك ولكنها لم تنتهِ بعد) بشكل غير صحيح (#1939)
- إصلاح الخطأ في
- البيانات الوصفية:
- استخراج أرقام الأقراص/المقاطع الموسيقية والنوع من تعليقات Vorbis إلى
MediaMetadata
(#1958).
- استخراج أرقام الأقراص/المقاطع الموسيقية والنوع من تعليقات Vorbis إلى
الإصدار 1.5.0
27 نوفمبر 2024
تم طرح androidx.media3:media3-*:1.5.0
.
يحتوي الإصدار 1.5.0 على عمليات الدمج هذه.
- المكتبة المشتركة:
- أضِف
ForwardingSimpleBasePlayer
التي تتيح إعادة التوجيه إلى مشغّل آخر مع إجراء تعديلات بسيطة مع ضمان التوافق الكامل والتعامل مع المستمعين (#1183). - استبدِل
SimpleBasePlayer.State.playlist
بالطريقةgetPlaylist()
. - أضِف عملية إلغاء لـ
SimpleBasePlayer.State.Builder.setPlaylist()
لتحديدTimeline
وTracks
وMetadata
الحالية مباشرةً بدلاً من إنشاء بنية قائمة تشغيل. - زيادة قيمة
minSdk
إلى 21 (Android Lollipop) يتوافق ذلك مع جميع مكتبات AndroidX الأخرى. - أضِف حزمة
androidx.media3:media3-common-ktx
توفّر وظائف خاصة بلغة Kotlin تستند إلى المكتبة المشتركة. - أضِف دالة تعليق مؤقت إلى دالة الإضافة لتشغيل روتين فرعي للاستماع إلى
Player.Events
في مكتبةmedia3-common-ktx
.Player.listen
- إزالة التعليقات التوضيحية
@DoNotInline
من الفئات الداخلية التي تم إعدادها يدويًا خارج السطر لتجنُّب أخطاء التحقّق من الفئة في وقت التشغيل تتجاهل الإصدارات الحديثة من R8 تلقائيًا عمليات الاستدعاء غير المضمّنة لتجنُّب حدوث أخطاء أثناء وقت التشغيل (وبالتالي، لم يعُد من الضروري تجاهل عمليات الاستدعاء يدويًا). يجب أن يكون جميع مستخدمي Gradle الذين يستخدمون إصدارًا أقدم من 0x0A قد استخدموا إصدارًا من "مكوّن Android الإضافي في Gradle" يستخدِم إصدارًا من R8 يتيح ذلك، بسببcompileSdk = 35
. على مستخدمي المكتبة الذين لديهم أنظمة إنشاء غير Gradle التأكّد من أنّ خطوة التصغير/التشويش المكافئة لـ R8 تنفّذ عملية مماثلة تلقائية لإزالة التداخل لتجنُّب حدوث أخطاء في التحقّق من فئة وقت التشغيل. تم إجراء هذا التغيير في مكتبات AndroidX الأخرى.
- أضِف
- ExoPlayer:
- يمكن الآن طلب
MediaCodecRenderer.onProcessedStreamChange()
لكل عنصر وسائط. في السابق، لم يكن يتم تحصيل رسوم مقابل أول عملية. استخدِمMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
لتفعيل هذه الميزة. - أضِف
PreloadMediaSource.PreloadControl.onPreloadError
للسماح بتنفيذPreloadMediaSource.PreloadControl
لإجراءات عند حدوث خطأ. - أضِف
BasePreloadManager.Listener
لنشر أحداث التحميل المُسبَق إلى التطبيقات. - السماح بتغيير مهلة برنامج SNTP وإعادة محاولة العناوين البديلة عند انتهاء المهلة (#1540)
- إزالة الحقل
MediaCodecAdapter.Configuration.flags
لأنّ قيمته كانت دائمًا صفرًا. - السماح للمستخدم باختيار مكبّر الصوت المدمج لتشغيل المحتوى على الإصدار 35 من Wear OS API أو الإصدارات الأحدث (حيث يعلن الجهاز عن إتاحة هذه الميزة)
- تأجيل حظر المكالمة إلى
Context.getSystemService(Context.AUDIO_SERVICE)
إلى حين تفعيل ميزة التعامل مع التركيز الصوتي يضمن ذلك عدم حظر المكالمة إذا لم يتم تفعيل ميزة معالجة التركيز الصوتي (#1616). - السماح بالتشغيل بغض النظر عن مدة التخزين المؤقت عند تعذُّر التحميل (#1571)
- أضِف
AnalyticsListener.onRendererReadyChanged()
للإشارة إلى الوقت الذي تسمح فيه أدوات العرض الفردية بأن يصبح التشغيل جاهزًا. - تم إصلاح المشكلة التي تؤدي إلى ظهور الخطأ
MediaCodec.CryptoException
أحيانًا على أنّه "خطأ غير متوقّع في وقت التشغيل" عند تشغيلMediaCodec
في الوضع غير المتزامن (السلوك التلقائي على الإصدار 31 من واجهة برمجة التطبيقات أو الإصدارات الأحدث). - مرِّر
bufferedDurationUs
بدلاً منbufferedPositionUs
معPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. تتضمّن هذه السمة أيضًا تغييرًا منDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
إلىDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
، ويجب أن تمرّر التطبيقات بعد ذلك قيمة تمثّل مدة معيّنة من موضع البدء التلقائي الذي يجب أن يتم التحميل المُسبَق لمصدر الوسائط المقابل باستخدام IntDef هذا، بدلاً من موضع. - أضِف عملية تنفيذ
ForwardingRenderer
تعيد توجيه جميع طلبات الطرق إلى أداة عرض أخرى (1703). - إضافة ميزة التحميل المُسبَق لقوائم التشغيل للعنصر التالي في قائمة التشغيل يمكن للتطبيقات تفعيل التحميل المُسبَق من خلال استدعاء
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
وفقًا لذلك. يكون التحميل المُسبق غير مفعَّل تلقائيًا. عند تفعيل ميزة التحميل المسبق، لا تتداخلDefaultLoadControl
مع التشغيل، بل تقتصر على البدء والاستمرار فقط عندما لا يتم تحميل المشغّل للتشغيل. يمكن للتطبيقات تغيير هذا السلوك من خلال تنفيذLoadControl.shouldContinuePreloading()
وفقًا لذلك (مثلما يحدث عند تجاوز هذه الطريقة فيDefaultLoadControl
). يؤدي التنفيذ التلقائي لـLoadControl
إلى إيقاف التحميل المُسبَق في حال كان التطبيق يستخدم تنفيذًا مخصّصًا لـLoadControl
. - إضافة الطريقة
MediaSourceEventListener.EventDispatcher.dispatchEvent()
للسماح باستدعاء أحداث أدوات معالجة الفئة الفرعية (1736) - أضِف
DefaultPreloadManager.Builder
الذي ينشئ مثيلاتDefaultPreloadManager
وExoPlayer
باستخدام إعدادات مشتركة بشكل متّسق. - أزِل المَعلمة
Renderer[]
منLoadControl.onTracksSelected()
لأنّ عملية تنفيذDefaultLoadControl
يمكنها استرداد أنواع البث منExoTrackSelection[]
. - تم إيقاف
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
نهائيًا وتم وضع علامة على الطريقة باعتبارها نهائية لمنع عمليات التجاوز. يجب استخدامDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
الجديد بدلاً من ذلك. - تسجيل بيانات أحداث
MediaSourceEventListener
من مصادر ثانوية فيMergingMediaSource
سيؤدي ذلك إلى تسجيل أحداث بدء التحميل/الخطأ/الإلغاء/الاكتمال للترجمة والشرح المحمّلة بشكل جانبي (تلك التي تمت إضافتها باستخدامMediaItem.LocalConfiguration.subtitleConfigurations
)، والتي قد تظهر كأحداث تحميل مكرّرة صادرة منAnalyticsListener
. - منع أخطاء الترجمة والبيانات الوصفية من إيقاف التشغيل تمامًا
بدلاً من ذلك، يتم إيقاف المقطع الصوتي الذي يتضمّن المشكلة ويستمر تشغيل المقاطع الصوتية المتبقية
(#1722).
- في عملية معالجة الترجمة والشرح الجديدة (أثناء الاستخراج)، يتم إرسال أخطاء التحليل المرتبطة (مثل بيانات الترجمة والشرح غير الصالحة) وأخطاء التحميل (مثل HTTP 404) من خلال عمليات معاودة الاتصال
onLoadError
. - في معالجة الترجمة والشرح القديمة (أثناء العرض)، يتم إرسال أخطاء التحميل المرتبطة فقط من خلال عمليات رد الاتصال
onLoadError
، بينما يتم تجاهل أخطاء التحليل بدون إشعار (هذا السلوك موجود مسبقًا).
- في عملية معالجة الترجمة والشرح الجديدة (أثناء الاستخراج)، يتم إرسال أخطاء التحليل المرتبطة (مثل بيانات الترجمة والشرح غير الصالحة) وأخطاء التحميل (مثل HTTP 404) من خلال عمليات معاودة الاتصال
- تم إصلاح الخطأ الذي كان يؤدي إلى توقّف عرض الإطارات في نهاية عناصر قائمة التشغيل أو الفترات في بثوق DASH المتعددة الفترات التي تتضمّن مدة لا تتطابق مع المحتوى الفعلي (1698#).
- إضافة دالة setter إلى
SntpClient
لضبط الحد الأقصى للوقت المنقضي منذ آخر تعديل، وبعده تتم إعادة تهيئة العميل (#1794).
- يمكن الآن طلب
- المحوّل:
- أضِف
SurfaceAssetLoader
، الذي يتيح وضع بيانات الفيديو في قائمة انتظار Transformer من خلالSurface
. - تعرض الدالة
ImageAssetLoader
تقارير عن الإدخال غير المتوافق من خلالAssetLoader.onError
بدلاً من عرضIllegalStateException
. - اجعل ضبط مدة عرض الصورة باستخدام
MediaItem.Builder.setImageDurationMs
إلزاميًا عند تصدير الصورة. - إضافة إمكانية تصدير الفجوات في تسلسلات EditedMediaItems الصوتية
- أضِف
- اختيار المقطع الصوتي:
-
DefaultTrackSelector
: يجب تفضيل الصوت المستند إلى عناصر على الصوت المستند إلى قنوات عندما تكون العوامل الأخرى متساوية.
-
- أدوات استخراج البيانات:
- السماح لـ
Mp4Extractor
وFragmentedMp4Extractor
بتحديد عيّنات H264 التي لا تستخدم كمرجع للعيّنات اللاحقة - إضافة خيار لتفعيل البحث المستند إلى الفهرس في
AmrExtractor
- يجب التعامل مع ملفات MP3 التي تتضمّن أكثر من 128 كيلوبايت بين الإطارات الصالحة على أنّها مقطوعة (بدلاً من غير صالحة). هذا يعني أنّ الملفات التي تتضمّن بيانات غير MP3 في نهايتها،
بدون أي بيانات وصفية أخرى للإشارة إلى طول وحدات بايت MP3، ستتوقف الآن
عن التشغيل عند نهاية بيانات MP3 بدلاً من عرض الخطأ
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563). - تم إصلاح مشكلة معالجة عيّنات الإعلانات التمهيدية لمواضع بدء الوسائط غير إطارات المفاتيح عند معالجة قوائم التعديل في ملفات MP4 (#1659).
- تم تحسين عملية احتساب عدد اللقطات في الثانية من خلال استخدام مدة الوسائط من المربّع
mdhd
فيMp4Extractor
وFragmentedMp4Extractor
(#1531). - إصلاح مشكلة تغيير الحجم بشكل غير صحيح في
media_time
في قوائم تعديل ملفات MP4 مع أنّsegment_duration
كان يتم قياسه بشكل صحيح باستخدام مقياس الوقت الخاص بالفيلم، يتم الآن قياسmedia_time
بشكل صحيح باستخدام مقياس الوقت الخاص بالمقطع، كما هو محدّد في معيار تنسيق MP4 (#1792). - التعامل مع اللقطات غير المرتبة في عملية احتساب
endIndices
لملفات MP4 التي تتضمّن قائمة تعديل (#1797) - تم إصلاح تحليل مدة الوسائط في المربّع
mdhd
لملفات MP4 من أجل التعامل مع القيم-1
(#1819). - إضافة إمكانية تحديد المربّع
h263
في ملفات MP4 لفيديو H.263 (#1821) - إضافة دعم لتنسيق ملفات الوسائط الأساسية ISO من المستوى 4 بتنسيق AC-4 (#1265)
- السماح لـ
- DataSource:
- تعديل
HttpEngineDataSource
للسماح باستخدامه بدءًا من الإصدار S extension 7 بدلاً من المستوى 34 لواجهة برمجة التطبيقات (#1262) DataSourceContractTest
: تأكَّد من أنّDataSource.getUri()
تعرض عنوان URI الذي تم تحويله (كما هو موضّح في المستندات). وفي حال اختلاف ذلك عن معرّف الموارد الموحّد المطلوب، يمكن أن تشير الاختبارات إلى ذلك باستخدام الطريقة الجديدةDataSourceContractTest.TestResource.Builder.setResolvedUri()
.DataSourceContractTest
: تأكَّد من أنّDataSource.getUri()
وgetResponseHeaders()
تعرضان القيمة "مفتوح" بعد تعذُّر إجراء طلب إلىopen()
(بسبب عدم العثور على المورد) وقبل إجراء طلبclose()
لاحق.- تتيح عملية إلغاء
DataSourceContractTest.getNotFoundResources()
لفئات الاختبار الفرعية توفير مراجع متعددة "لم يتم العثور عليها"، كما تتيح توفير أي عناوين متوقّعة أيضًا. يتيح ذلك التمييز بين الخطأ HTTP 404 (مع العناوين) والخطأ "لم يتم العثور على الخادم" (بدون عناوين).
- تتيح عملية إلغاء
- تعديل
- الصوت:
- ضبط البيانات الوصفية لمستوى الصوت وفقًا لمعيار CTA-2075 تلقائيًا على برنامج الترميز إذا كانت متوفّرة في الوسائط
- ضمان خفض مستوى الصوت بسلاسة عند البحث
- إصلاح أصوات النقر التي قد تحدث أثناء عمليات البحث
- إصلاح تراكم أخطاء الاقتطاع في خوارزمية Sonic لتغيير سرعة التشغيل/درجة الصوت
- تم إصلاح الخطأ في
SpeedChangingAudioProcessor
الذي يتسبب في حذف إطارات الإخراج.
- الفيديو:
- يتجنّب
MediaCodecVideoRenderer
فك ترميز العيّنات التي لا يتم عرضها ولا يتم استخدامها كمرجع من قِبل عيّنات أخرى. - في الإصدار 35 من واجهة برمجة التطبيقات والإصدارات الأحدث، يمكن أن تتلقّى
MediaCodecAdapter
الآنnull
Surface
فيconfigure
واستدعاءات إلى طريقة جديدةdetachOutputSurface
لإزالةSurface
تم ضبطه سابقًا إذا كان برنامج الترميز يتيح ذلك (MediaCodecInfo.detachedSurfaceSupported
). - استخدِم قيم نسبة عرض البكسل إلى ارتفاعه
MediaCodecAdapter
المقدَّمة إذا تم توفيرها عند معالجةonOutputFormatChanged
(#1371). - تمت إضافة حلّ بديل لمشكلة في جهاز Galaxy Tab S7 FE تؤدي إلى وضع علامة "غير متوافق" على عمليات بث H264 الآمنة بمعدل 60 إطارًا في الثانية (#1619).
- إضافة حلّ بديل لبرامج الترميز التي تتوقف بعد آخر عيّنة بدون عرض إشارة نهاية البث.
- يتجنّب
- النص:
- أضِف
VoiceSpan
مخصّصًا واملأه بـ فترات صوت WebVTT (#1632). - يجب التأكّد من عرض ملفات WebVTT في HLS التي تتضمّن طوابع زمنية كبيرة جدًا للترجمة والشرح (والتي تتجاوز
long
64 بت عند تمثيلها بالميكروثانية وضربها في90,000
MPEG timebase) (#1763). - إتاحة ترجمة CEA-608 في محتوى Dolby Vision (#1820)
- إصلاح مشكلة تعليق التشغيل في أحداث البث المتعددة الفترات بتنسيق DASH عند تفعيل الترجمة والشرح بتنسيق CEA-608 (#1863)
- أضِف
- البيانات الوصفية:
- عيِّن النوع
C.TRACK_TYPE_METADATA
للمقاطع الصوتية التي تتضمّن محتوى icy أو vnd.dvb.ait.
- عيِّن النوع
- الصورة:
- إضافة
ExternallyLoadedImageDecoder
لتبسيط عملية الدمج مع مكتبات تحميل الصور الخارجية، مثل Glide أو Coil
- إضافة
- DataSource:
- أضِف
FileDescriptorDataSource
، وهوDataSource
جديد يمكن استخدامه للقراءة منFileDescriptor
(#3757).
- أضِف
- التأثير:
- إضافة
DefaultVideoFrameProcessor
حلّ بديل لمشكلةSurfaceTexture
تغيير الحجم الطفيف قد يتضمّنSurfaceTexture
تغييرًا بسيطًا في الحجم يؤدي إلى قطع حدود بعرض بكسل واحد حول حافة المخزن المؤقت الذي تم اقتصاصه. يتم الآن التعامل مع هذه الحالة بطريقة تجعل الناتج أقرب إلى المتوقّع. - تسريع
DefaultVideoFrameProcessor.queueInputBitmap()
نتيجةً لذلك، أصبح بإمكانك تصدير الصور إلى فيديوهات باستخدامTransformer
بشكل أسرع.
- إضافة
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح الخطأ الذي قد يؤدي فيه محو قائمة التشغيل إلى حدوث خطأ
ArrayIndexOutOfBoundsException
فيImaServerSideAdInsertionMediaSource
. - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
ArrayIndexOutOfBoundsException
عند تشغيل بث مباشر يتضمّن إعلانات ديناميكية مدرَجة من جهة الخادم بدون إعلان تمهيدي، وذلك بعد تجاوز آخر إعلان أثناء التشغيل (#1741).
- تم إصلاح الخطأ الذي قد يؤدي فيه محو قائمة التشغيل إلى حدوث خطأ
- الجلسة:
- أضِف
MediaButtonReceiver.shouldStartForegroundService(Intent)
للسماح للتطبيقات بمنع تنفيذ أمر تشغيل وارد لاستئناف التشغيل من خلال إلغاء هذه الطريقة. يتم بدء الخدمة دائمًا بشكل تلقائي، ولا يمكن إيقاف التشغيل بدون أن يعطّل النظام الخدمة بسبب الخطأForegroundServiceDidNotStartInTimeException
(#1528). - تم إصلاح الخطأ الذي كان يتسبّب في إرسال الأوامر المخصّصة من
MediaBrowser
إلىMediaSessionCompat.Callback
بدلاً من إصدارMediaBrowserServiceCompat
من الطريقة عند الاتصال بخدمة قديمة. وقد أدّى ذلك إلى منعMediaBrowser
من تلقّي قيمة العائد الفعلية التي أرسلتها الخدمة القديمة (#1474). - التعامل مع الخطأ
IllegalArgumentException
الذي تعرضه أجهزة بعض الشركات المصنّعة عند ضبط أداة استقبال البث لتلقّي طلبات تنفيذ إجراءات زر الوسائط (#1730) - إضافة أزرار أوامر لعناصر الوسائط يؤدي ذلك إلى إضافة Media3 API إلى ما كان يُعرف باسم
Custom browse actions
مع المكتبة القديمة التي تحمل الرقمMediaBrowserCompat
. يُرجى العِلم أنّ أزرار أوامر Media3 لعناصر الوسائط متاحة لكل منMediaBrowser
وMediaController
. يمكنك الاطّلاع على إجراءات التصفّح المخصّصة في نظام التشغيل Android Automotive. - تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى عدم تمكُّن وحدة التحكّم Media3 من السماح لتطبيق جلسة ببدء خدمة تعمل في المقدّمة بعد طلب
play()
. - يجب حصر
CommandButton.Builder.setIconUri
في قبول معرّفات الموارد المنتظمة (URI) الخاصة بالمحتوى فقط. - تمرير إشارات ربط متصفّح Media3 إلى
MediaBrowserCompat
الأولي عند الربط بـMediaBrowserCompat
قديم يمكن للخدمة تلقّي تلميحات الاتصال التي تم تمريرها كتلميحات جذرية مع أول طلب إلىonGetRoot()
. - تم إصلاح الخطأ الذي كان يؤدي إلى عدم تلقّي
MediaBrowser
المرتبط بخدمة متصفّح قديمة للخطأ الذي أرسلته الخدمة بعد اشتراك المتصفّح فيparentid
. - تحسين سلوك التشغيل التفاعلي، كي لا يطلب متصفّح Media3 المرتبط بـ
MediaBrowserService
القديم عناصرparentId
مرتين عند الاشتراك في عنصر رئيسي
- أضِف
- UI:
- تفعيل الحلّ البديل للفيديوهات الممدّدة/المقتصة في
PlayerView
ComposeAndroidView
بسبب المشاكل في عمليات الانتقال المشتركة المستندة إلى XML على التطبيقات التي تستخدمPlayerView
داخلAndroidView
استدعاءPlayerView.setEnableComposeSurfaceSyncWorkaround
من أجل الموافقة على المشاركة (#1237, #1594). - أضِف
setFullscreenButtonState
إلىPlayerView
للسماح بتحديث رمز زر ملء الشاشة عند الطلب، أي خارج النطاق وليس بشكل تفاعلي عند النقر (#1590 و#184). - إصلاح الخطأ الذي لا يعمل فيه الخيار "بلا" في اختيار النص إذا كانت هناك إعدادات مفضّلة لاختيار مسار النص محدّدة في التطبيق.
- تفعيل الحلّ البديل للفيديوهات الممدّدة/المقتصة في
- إضافة DASH:
- إضافة إمكانية استخدام فترات تبدأ في منتصف مقطع (#1440)
- إضافة Smooth Streaming:
- تم إصلاح الخطأ
Bad magic number for Bundle
الذي كان يحدث عند تشغيل بث SmoothStreaming يتضمّن مقاطع نصية (#1779).
- تم إصلاح الخطأ
- إضافة RTSP:
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- أضِف وحدة فك ترميز IAMF التي تتيح تشغيل ملفات MP4 التي تحتوي على مقاطع IAMF باستخدام مكتبة libiamf الأصلية لتركيب الصوت.
- يمكن تشغيل المحتوى بتنسيق ستيريو بالإضافة إلى 5.1 مع ميزة "التجسيم الصوتي" وتفعيل ميزة "تتبُّع حركة الرأس" الاختيارية، ولكن لا تتوفّر حاليًا إمكانية تشغيل المحتوى بتنسيق ثنائي الأذن.
- إضافة إمكانية استخدام صفحات بحجم 16 كيلوبايت مع إضافات برامج الترميز على Android 15 (#1685)
- أضِف وحدة فك ترميز IAMF التي تتيح تشغيل ملفات MP4 التي تحتوي على مقاطع IAMF باستخدام مكتبة libiamf الأصلية لتركيب الصوت.
- إضافة Cast:
- إيقاف تنظيف المخطط الزمني بعد إلغاء ربط CastSession، ما يتيح لتطبيق المرسِل استئناف التشغيل محليًا بعد إلغاء الربط
- ملء
DeviceInfo
الخاص بفئة CastPlayer عند توفيرContext
يتيح ذلك ربطMediaSession
بـRoutingSession
، وهو أمر ضروري لدمج أداة Output Switcher (#1056).
- أدوات الاختبار:
- يتضمّن
DataSourceContractTest
الآن اختبارات للتحقّق من:- تم تعديل مصدر البيانات
read position
. - يتم تطبيق مخزن البيانات المؤقتة للإخراج
offset
بشكل صحيح.
- تم تعديل مصدر البيانات
- يتضمّن
- تطبيق تجريبي
- حلّ مشاكل تسرُّب الذاكرة في تطبيق العرض التوضيحي القصير(#1839)
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.hasPrevious
وPlayer.hasPreviousWindow()
اللذين تم إيقافهما يمكنك استخدامPlayer.hasPreviousMediaItem()
كبديل. - إزالة الطريقة
Player.previous()
التي تم إيقاف استخدامها استخدِمPlayer.seekToPreviousMediaItem()
بدلاً من ذلك. - إزالة الطريقة المتوقّفة نهائيًا
DrmSessionEventListener.onDrmSessionAcquired
- أزِل أدوات إنشاء
DefaultEncoderFactory
المتوقّفة نهائيًا. استخدِمDefaultEncoderFactory.Builder
بدلاً من ذلك.
- إزالة
الإصدار 1.5.0-rc02
19 نوفمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-rc01
13 نوفمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-beta01
30 أكتوبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-alpha01
10 سبتمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.4.0
الإصدار 1.4.1
27 أغسطس 2024
تم طرح androidx.media3:media3-*:1.4.1
.
يحتوي الإصدار 1.4.1 على عمليات الدمج هذه.
- ExoPlayer:
- أدوات استخراج البيانات:
- MP3: إصلاح الخطأ
Searched too many bytes
من خلال تجاهل البيانات غير التابعة لملف MP3 بشكل صحيح استنادًا إلى حقل الطول في إطارInfo
(#1480).
- MP3: إصلاح الخطأ
- النص:
- TTML: تم إصلاح معالجة قيم النسبة المئوية
tts:fontSize
لضمان اكتسابها بشكل صحيح من العُقد الرئيسية التي تتضمّن قيم النسبة المئويةtts:fontSize
. - تم إصلاح الخطأ
IndexOutOfBoundsException
فيLegacySubtitleUtil
بسبب التعامل غير الصحيح مع حالة وقت بدء الإخراج المطلوب الأكبر من أو يساوي وقت الحدث النهائي فيSubtitle
(#1516).
- TTML: تم إصلاح معالجة قيم النسبة المئوية
- DRM:
- إصلاح الخطأ
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
على الأجهزة التي تعمل بالإصدار 31 من واجهة برمجة التطبيقات أو الإصدارات الأحدث عند تشغيل محتوى Widevine L1 يرجع حدوث هذا الخطأ إلى عدم اكتمال تنفيذ طريقةMediaDrm.requiresSecureDecoder
في إطار العمل (#1603).
- إصلاح الخطأ
- التأثير:
- أضِف طريقة
release()
إلىGlObjectsProvider
.
- أضِف طريقة
- الجلسة:
- إضافة RTSP:
- تخطّي أوصاف الوسائط غير الصالحة عند تحليل بروتوكول وصف الجلسة (SDP) (#1087)
الإصدار 1.4.0
25 يوليو 2024
تم طرح androidx.media3:media3-*:1.4.0
.
يحتوي الإصدار 1.4.0 على عمليات الدمج هذه.
- المكتبة المشتركة:
- إعادة توجيه طلبات البحث التي يُفترض أنّها لا تؤدي إلى أي عملية إلى الطريقتَين المحميتَين
BasePlayer.seekTo()
وSimpleBasePlayer.handleSeek()
بدلاً من تجاهلها إذا كنت تنفّذ هذه الطرق في مشغّل مخصّص، قد تحتاج إلى معالجة هذه الطلبات الإضافية باستخدامmediaItemIndex == C.INDEX_UNSET
. - إزالة تبعية وقت التجميع من عملية إزالة التشويش المحسّنة في Java 8 (#1312)
- تأكَّد من تجاهل المدة التي تم تمريرها إلى
MediaItem.Builder.setImageDurationMs()
بالنسبة إلىMediaItem
غير الصورة (كما هو موثّق). - أضِف
Format.customData
لتخزين معلومات مخصّصة يوفّرها التطبيق حول مثيلاتFormat
.
- إعادة توجيه طلبات البحث التي يُفترض أنّها لا تؤدي إلى أي عملية إلى الطريقتَين المحميتَين
- ExoPlayer:
- أضِف
BasePreloadManager
الذي ينسّق عملية التحميل المُسبَق لمصادر متعدّدة استنادًا إلى الأولويات المحدّدة فيrankingData
. يمكن إجراء التخصيص عن طريق توسيع هذه الفئة. أضِفDefaultPreloadManager
الذي يستخدمPreloadMediaSource
لتحميل عيّنات الوسائط مسبقًا من المصادر إلى الذاكرة، ويستخدم عددًا صحيحًاrankingData
يشير إلى فهرس عنصر في واجهة المستخدم. - أضِف
PlayerId
إلى معظم طرقLoadControl
لتفعيل عمليات تنفيذLoadControl
التي تتيح مشاركة عدة لاعبين. - إزالة
Buffer.isDecodeOnly()
وC.BUFFER_FLAG_DECODE_ONLY
لا حاجة إلى ضبط هذه العلامة لأنّ أدوات العرض وبرامج الترميز ستتجاهل المخازن المؤقتة استنادًا إلى الطابع الزمني. يجب أن تتحقّق عمليات تنفيذRenderer
المخصّصة مما إذا كان وقت التخزين المؤقتBaseRenderer.getLastResetPositionUs()
على الأقل لتحديد ما إذا كان يجب عرض عيّنة. يمكن لعمليات التنفيذ المخصّصةSimpleDecoder
التحقّقisAtLeastOutputStartTimeUs()
إذا لزم الأمر أو وضع علامةDecoderOutputBuffer.shouldBeSkipped
على المخازن المؤقتة الأخرى لتخطّيها. - السماح بعرض قيمة فارغة من خلال
TargetPreloadStatusControl.getTargetPreloadStatus(T)
للإشارة إلى عدم التحميل المُسبَق لـMediaSource
باستخدامrankingData
المحدّدة - إضافة
remove(MediaSource)
إلىBasePreloadManager
- أضِف
reset()
إلىBasePreloadManager
لتحرير جميع مصادر التحميل المسبق مع الاحتفاظ بمثيل "أداة إدارة التحميل المسبق". - أضِف
ExoPlayer.setPriority()
(وBuilder.setPriority()
) لتحديد قيمة الأولوية المستخدَمة فيPriorityTaskManager
وأهمية MediaCodec من واجهة برمجة التطبيقات 35. - تم إصلاح مشكلة في تعديل آخر وقت لإعادة التخزين المؤقت، ما أدّى إلى ظهور المفتاح
bs
(نقص في المخزن المؤقت) غير الصحيح في CMCD (#1124). - أضِف
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
للإشارة إلى أنّه تم تحميل المصدر إلى النهاية. يتيح ذلك لعمليات التنفيذDefaultPreloadManager
وPreloadMediaSource.PreloadControl
المخصّصة التحميل المُسبَق للمصدر التالي أو اتّخاذ إجراءات أخرى. - تم إصلاح الخطأ الذي يتسبّب في حدوث استثناء في التشغيل عند تخطّي الصمت في نهاية العناصر.
- أضِف
clear
إلىPreloadMediaSource
لتجاهل فترة التحميل المُسبق. - إضافة رمز خطأ جديد
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
يُستخدَم عند استرداد موارد الترميز والتشفير لمهام ذات أولوية أعلى - السماح لـ
AdsMediaSource
بتحميل الإعلانات قبل التشغيل قبل اكتمال إعداد وسائط المحتوى الأولية (#1358) - تم إصلاح الخطأ الذي يؤدي إلى نقل التشغيل إلى
STATE_ENDED
عند إعادة إعداد بث مباشر بتنسيق DASH متعدد الفترات بعد أن تمت إزالة الفترة الأصلية من ملف البيان. - أعِد تسمية
onTimelineRefreshed()
إلىonSourcePrepared()
وonPrepared()
إلىonTracksSelected()
فيPreloadMediaSource.PreloadControl
. أعِد أيضًا تسمية IntDefs فيDefaultPreloadManager.Stage
وفقًا لذلك. - أضفنا دعمًا تجريبيًا للجدولة الديناميكية من أجل مواءمة العمل بشكل أفضل مع دورات تنشيط وحدة المعالجة المركزية وتأخير التنشيط إلى حين إمكانية تقدّم أدوات العرض.
يمكنك تفعيل هذا الخيار باستخدام
experimentalSetDynamicSchedulingEnabled()
عند إعداد مثيل ExoPlayer. - أضِف
Renderer.getDurationToProgressUs()
. يمكنRenderer
تنفيذ هذه الطريقة لإرجاع المدة التي يجب أن يتقدّم فيها التشغيل إلى ExoPlayer لكي يتقدّم العارض. إذا تم ضبطExoPlayer
علىexperimentalSetDynamicSchedulingEnabled()
، سيستدعيExoPlayer
هذه الطريقة عند احتساب الوقت اللازم لتحديد موعد لمهمة العمل. - أضِف
MediaCodecAdapter#OnBufferAvailableListener
لتلقّي تنبيه عندما تصبح مخازن الإدخال والإخراج المؤقتة متاحة للاستخدام من قِبلMediaCodecRenderer
. سترسلMediaCodecRenderer
إشارة إلىExoPlayer
عند تلقّي عمليات الرجوع هذه، وإذا تم ضبطExoPlayer
باستخدامexperimentalSetDynamicSchedulingEnabled()
، سيجدولExoPlayer
حلقة العمل الخاصة به بما أنّ أدوات العرض يمكنها إحراز تقدّم. - استخدِم فئة البيانات لطُرق
LoadControl
بدلاً من المَعلمات الفردية. - أضِف
ExoPlayer.isReleased()
للتحقّق مما إذا تم استدعاءExoplayer.release()
. - أضِف
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
لضبط الحد الأقصى للموضع الذي يحاولseekToPrevious()
الانتقال إلى العنصر السابق فيه (#1425). - تم إصلاح بعض حالات عدم الاتساق في تركيز الصوت، مثل عدم الإبلاغ عن فقدان التركيز الكامل أو المؤقت أثناء إيقاف المشغّل مؤقتًا (#1436).
- تم إصلاح مشكلة محتملة
IndexOutOfBoundsException
ناتجة عن إبلاغ أدوات الاستخراج عن مسارات إضافية بعد خطوة الإعداد الأولية (#1476). - سيحصل المستخدمون الذين يضبطون المنطقة الزمنية على
Effects
فيExoPlayer.setVideoEffect()
على الطوابع الزمنية بعد إزالة إزاحة أداة العرض (#1098). - إصلاح
IllegalArgumentException
محتمل عند التعامل مع خطأ في المشغّل حدث أثناء القراءة المسبقة لعنصر آخر في قائمة التشغيل (#1483)
- أضِف
- المحوّل:
- أضِف
audioConversionProcess
وvideoConversionProcess
إلىExportResult
للإشارة إلى كيفية إنشاء المقطع الصوتي المعنيّ في ملف الإخراج. - إيقاف عمليات التحقّق من مستوى H.264 لتحسين عملية القص
- إضافة إمكانية التبديل بين وسائط الإدخال SDR وHDR في تسلسل
- إتاحة تأثيرات صوتية على مستوى الأغنية
- إضافة إمكانية تحويل ترميز صور Ultra HDR إلى فيديوهات HDR
- تم إصلاح المشكلة التي لا تعرض فيها
DefaultAudioMixer
عدد وحدات البايت الصحيح بعد إعادة ضبطها وإعادة استخدامها. - حلّ مشكلة في برنامج الترميز حيث تم تحديد عدد القنوات الصوتية بصوت ستيريو عند معالجة إدخال PCM.
- عند اختيار المقاطع في
ExoPlayerAssetLoader
، تجاهل القيود المفروضة على عدد قنوات الصوت لأنّها تنطبق فقط على التشغيل. - استبدِل واجهة
androidx.media3.transformer.Muxer
بواجهةandroidx.media3.muxer.Muxer
وأزِلandroidx.media3.transformer.Muxer
. - إصلاح مشكلة تحميل صور HEIC من مخططات معرّف الموارد المنتظم للمحتوى (#1373).
- اضبط مدة المقطع الصوتي في
AudioGraphInput
لتحسين مزامنة الصوت والفيديو. - إزالة الحقل "
ExportResult.processedInputs
" إذا كنت تستخدم هذا الحقل لتضمين تفاصيل برنامج الترميز، استخدِمDefaultDecoderFactory.listener
بدلاً من ذلك. في حال حدوث استثناء في برنامج الترميز، ستتوفّر تفاصيل برنامج الترميز فيExportException.codecInfo
.
- أضِف
- أدوات استخراج البيانات:
- MPEG-TS: يجب تطبيق التغيير مع ضمان عرض آخر إطار من خلال تمرير آخر وحدة وصول لتدفق إلى قائمة انتظار العيّنات (#7909). تم دمج إصلاحات لحلّ المشاكل التي ظهرت في بث مباشر وفق بروتوكول HTTP (HLS) يتضمّن إطارات أساسية فقط (#1150) وبث مباشر وفق بروتوكول HTTP (HLS) يتضمّن ترميز H.262 (#1126).
- MP3: يُفضّل استخدام حجم البيانات من إطار
Info
بدلاً من الحجم الذي يحدّده المصدر الأساسي (مثل حجم الملف أو عنوان HTTPContent-Length
). يساعد ذلك في استبعاد بيانات المقطورة غير القابلة للتشغيل (مثل صورة الألبوم) من عمليات احتساب البحث بمعدل نقل ثابت للبيانات، ما يجعل عمليات البحث أكثر دقةً (#1376). - MP3: استخدِم عدد اللقطات والبيانات الأخرى في لقطة
Info
(إذا كانت متوفرة) لاحتساب متوسط معدل البت للبحث عن معدل بت ثابت، بدلاً من الاستقراء من معدل البت للقطة التي تلي لقطةInfo
، والذي قد يكون صغيرًا بشكل مصطنع، مثلاً لقطةPCUT
(#1376). - تم إصلاح مشكلة استخراج تنسيق الصوت PCM في حاويات AVI.
- الصوت:
- إصلاح سمات ترميز DTS:X Profile 2 لتشغيل المحتوى بدون تعديل (#1299)
- بالنسبة إلى التشغيل المحمّل، أعِد ضبط حقل التتبُّع الخاص باكتمال البث
في
DefaultAudioSink
قبل طلبAudioTrack.stop()
، وذلك لكي تحدّدAudioTrack.StreamEventCallback#onPresentationEnded
بشكل صحيح الوقت الذي تم فيه تشغيل جميع البيانات المعلقة. - تم إصلاح الخطأ في
SilenceSkippingAudioProcessor
حيث يمكن أن تؤدي عمليات الانتقال بين تنسيقات صوتية مختلفة (مثل الاستيريو إلى الأحادي) إلى حدوث استثناء في المعالج (#1352). - نفِّذ
MediaCodecAudioRenderer.getDurationToProgressUs()
لكي يجدول ExoPlayer حلقة العمل الرئيسية بشكل ديناميكي عندما يتمكّن MediaCodecAudioRenderer من إحراز تقدّم.
- الفيديو:
- تم إصلاح المشكلة التي كانت تؤدي إلى وصول
Listener.onRenderedFirstFrame()
مبكرًا جدًا عند التبديل بين الأسطح أثناء التشغيل. - إصلاح منطق الرجوع إلى أداة فك الترميز الاحتياطية في Dolby Vision لاستخدام أداة فك ترميز AV1 متوافقة عند الحاجة (#1389).
- إصلاح خطأ برنامج الترميز الذي قد يحدث بسبب تفعيل عارض فيديو أثناء التشغيل
- تم إصلاح المشكلة التي كانت تؤدي إلى وصول
- النص:
- تم إصلاح المشكلة التي يتم فيها تخطّي الترجمة والشرح اللذين يبدآن قبل موضع البحث. تم طرح هذه المشكلة في الإصدار 1.4.0-alpha01 من Media3 فقط.
- تغيير السلوك التلقائي لتحليل الترجمة والشرح لكي يتم ذلك أثناء الاستخراج
بدلاً من العرض (راجِع
مخطط بنية ExoPlayer
للتعرّف على الفرق بين الاستخراج والعرض).
- يمكن إلغاء هذا التغيير من خلال استدعاء كلّ من
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
وTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. راجِع المستندات حول التخصيص لمعرفة كيفية دمج هذه المكوّنات في مثيلExoPlayer
. وسيتم إزالة هذه الطرق (وجميع ميزات فك ترميز الترجمة والشرح القديمة) في إصدار مستقبلي. - على التطبيقات التي تستخدم عمليات تنفيذ مخصّصة لسياسة
SubtitleDecoder
تعديلها لتنفيذ سياسةSubtitleParser
بدلاً من ذلك (وسياسةSubtitleParser.Factory
بدلاً منSubtitleDecoderFactory
).
- يمكن إلغاء هذا التغيير من خلال استدعاء كلّ من
- PGS: إصلاح فك ترميز طول التشغيل لحل
0
كفهرس ألوان، بدلاً من قيمة لونية حرفية (#1367). - CEA-708: تجاهُل قيمة
rowLock
توضّح مواصفات CEA-708-E S-2023 أنّه يجب افتراض أنّ كلتا القيمتينrowLock
وcolumnLock
صحيحتان، بغض النظر عن القيم المعروضة في البث (لم يتم تنفيذ دعمcolumnLock
، لذا يُفترض أنّها خاطئة دائمًا).- تم تضمين هذه الميزة في الأصل في ملاحظات الإصدار
1.3.0-alpha01
، ولكن تم التراجع عن التغيير عن طريق الخطأ قبل طرح الإصدار1.3.0-rc01
. تم إصلاح هذه المشكلة الآن، لذا يظهر التغيير مرة أخرى.
- تم تضمين هذه الميزة في الأصل في ملاحظات الإصدار
- CEA-708: تجنُّب إضافة أسطر جديدة مكرّرة بسبب طريقة ExoPlayer البسيطة في التعامل مع الأمر "تحديد موضع القلم" (#1315)
- إصلاح
IllegalArgumentException
منLegacySubtitleUtil
عندما لا تحتوي عيّنة ترجمة وشرح WebVTT على أي إشارات، مثلاً كجزء من بث DASH (#1516).
- البيانات الوصفية:
- إصلاح عملية ربط ملفات MP4 بعلامات الفرز ID3 في السابق، تم ربط علامات MP4 الخاصة بـ "ترتيب الألبوم" (
soal
) و"ترتيب الفنان" (soar
) و"ترتيب فنّان الألبوم" (soaa
) بشكل خاطئ بعلامات ID3 الخاصة بـTSO2
وTSOA
وTSOP
(#1302). - إصلاح مشكلة قراءة علامات MP4 (/iTunes) الرقمية
gnre
(النوع) وtmpo
(الإيقاع) عندما تكون القيمة أطول من بايت واحد - نشر إطار ID3
TCON
إلىMediaMetadata.genre
(#1305)
- إصلاح عملية ربط ملفات MP4 بعلامات الفرز ID3 في السابق، تم ربط علامات MP4 الخاصة بـ "ترتيب الألبوم" (
- الصورة:
- إضافة إمكانية استخدام شبكات صور مصغّرة غير مربّعة بتنسيق DASH (#1300)
- إتاحة استخدام تنسيق AVIF للإصدار 34 من واجهة برمجة التطبيقات والإصدارات الأحدث
- السماح باستخدام
null
كمَعلمة لـExoPlayer.setImageOutput()
من أجل محوImageOutput
تم ضبطه سابقًا
- DataSource:
- تنفيذ دعم لمعرّفات الموارد الموحّدة
android.resource://package/id
الأولية حيث يختلفpackage
عن حزمة التطبيق الحالي لم يكن هذا الإجراء متاحًا في السابق، ولكنّه طريقة أكثر فعالية للوصول إلى الموارد في حزمة أخرى بدلاً من استخدام الاسم. - يجب التأكّد من أنّ
url
ليس قيمة فارغة في دوال الإنشاءDataSpec
. تمت إضافة تعليق توضيحي إلى هذه المَعلمة من قبل للإشارة إلى أنّها لا يمكن أن تكون فارغة. - السماح لـ
ByteArrayDataSource
بتحويل معرّف الموارد المنتظم (URI) إلى مصفوفة بايت أثناءopen()
، بدلاً من أن يكون مبرمَجًا بشكل ثابت عند الإنشاء (#1405)
- تنفيذ دعم لمعرّفات الموارد الموحّدة
- DRM:
- السماح بتعيين
LoadErrorHandlingPolicy
علىDefaultDrmSessionManagerProvider
(#1271)
- السماح بتعيين
- التأثير:
- إمكانية إجراء تغييرات متعدّدة على السرعة ضمن
EditedMediaItem
أوComposition
نفسهما فيSpeedChangeEffect
- إتاحة إخراج HLG وPQ من إدخال صورة نقطية بدقة HDR الفائقة
- إضافة إمكانية استخدام EGL_GL_COLORSPACE_BT2020_HLG_EXT، ما يؤدي إلى تحسين إخراج سطح HLG في ExoPlayer.setVideoEffect وDebug SurfaceView في Transformer.
- عدِّل تنفيذ مصفوفة Overlay لتصبح متوافقة مع المستندات من خلال تبديل قيمتَي x وy المطبّقتَين في
setOverlayFrameAnchor()
. في حال استخدامOverlaySettings.Builder.setOverlayFrameAnchor()
، اقلب قيمتَي x وy عن طريق ضربهما في-1
. - تم إصلاح الخطأ الذي يؤدي إلى تعطُّل
TimestampWrapper
عند استخدامه معExoPlayer#setVideoEffects
(#821). - تغيير مساحة العمل التلقائية لألوان SDR من الألوان الخطية إلى فيديو SDR كهربائي بتنسيق BT 709 يجب توفير خيار ثالث للاحتفاظ بمساحة الألوان الأصلية.
- السماح بتحديد ترتيب z غير محدّد لـ EditedMediaItemSequences (#1055)
- الحفاظ على نطاق إضاءة ثابت في مختلف أجزاء المحتوى المتوافق مع تكنولوجيا النطاق العالي الديناميكية (يستخدم نطاق HLG)
- إتاحة استخدام تراكبات Ultra HDR (صورة نقطية) على المحتوى المعروض بتقنية HDR
- السماح باستخدام تأثيرات
SeparableConvolution
قبل الإصدار 26 من واجهة برمجة التطبيقات - أزِل
OverlaySettings.useHdr
غير المستخدَم لأنّ النطاق الديناميكي للتراكب والإطار يجب أن يكونا متطابقَين. - إضافة إمكانية استخدام النطاق العالي الديناميكية (HDR) في
TextOverlay
يمكن ضبط مستوى سطوع النص المركّب باستخدامOverlaySettings.Builder.setHdrLuminanceMultiplier()
.
- إمكانية إجراء تغييرات متعدّدة على السرعة ضمن
- إضافة "إعلانات الوسائط التفاعلية":
- ترقية واجهة برمجة التطبيقات المطلوبة لتشغيل بث إعلانات DAI في التطبيقات إلى إصدار ثابت
- أضِف
replaceAdTagParameters(Map <String, String>)
إلىImaServerSideAdInsertionMediaSource.AdLoader
التي تتيح استبدال مَعلمات علامة الإعلان في وقت التشغيل. - تم إصلاح الخطأ الذي لم يتم فيه استدعاء
VideoAdPlayer.VideoAdPlayerCallback.onError()
عند حدوث خطأ في المشغّل أثناء تشغيل الإعلان (#1334). - تمت ترقية إصدار حزمة IMA SDK إلى 3.33.0 لإصلاح الخطأ
NullPointerException
عند استخدام معرّفات الموارد المنتظمة (URI) لعلامات الإعلاناتdata://
(#700).
- الجلسة:
- غيِّر القيمة التلقائية لـ
CommandButton.enabled
إلىtrue
وتأكَّد من أنّ القيمة يمكن أن تظل خطأ بالنسبة إلى وحدات التحكّم حتى إذا كان الأمر المرتبط متاحًا. - أضِف ثوابت الرموز الخاصة بـ
CommandButton
التي يجب استخدامها بدلاً من موارد الرموز المخصّصة. - أضِف
MediaSessionService.isPlaybackOngoing()
للسماح للتطبيقات بالاستعلام عمّا إذا كانت الخدمة بحاجة إلى التوقف فيonTaskRemoved()
(#1219). - أضِف
MediaSessionService.pauseAllPlayersAndStopSelf()
الذي يتيح إيقاف تشغيل جميع الجلسات مؤقتًا واستدعاءstopSelf()
لإنهاء دورة حياةMediaSessionService
. - يمكنك تجاهل
MediaSessionService.onTaskRemoved(Intent)
لتوفير تنفيذ تلقائي آمن يُبقي الخدمة قيد التشغيل في المقدّمة إذا كان التشغيل مستمرًا أو يوقف الخدمة في الحالات الأخرى. - إخفاء شريط البحث في إشعار الوسائط لأحداث البث المباشر من خلال عدم ضبط المدة في البيانات الوصفية لجلسة النظام الأساسي (#1256)
- تتم محاذاة عملية تحويل
MediaMetadata
إلىMediaDescriptionCompat
، وذلك لاستخدام الترتيب والمنطق المفضّلين نفسيهما عند اختيار خصائص البيانات الوصفية كما هو الحال في media1. - أضِف
MediaSession.sendError()
التي تسمح بإرسال أخطاء غير خطيرة إلى وحدة التحكّم Media3. عند استخدام أداة التحكّم في الإشعارات (راجِعMediaSession.getMediaNotificationControllerInfo()
)، يتم استخدام الخطأ المخصّص لتعديلPlaybackState
لجلسة النظام الأساسي إلى حالة خطأ تتضمّن معلومات الخطأ المحدّدة (#543). - أضِف
MediaSession.Callback.onPlayerInteractionFinished()
لإعلام الجلسات عند انتهاء سلسلة من تفاعلات اللاعبين من وحدة تحكّم معيّنة. - أضِف
SessionError
واستخدِمه فيSessionResult
وLibraryResult
بدلاً من رمز الخطأ لتقديم المزيد من المعلومات حول الخطأ وكيفية حلّه إذا أمكن. - نشر رمز تطبيق اختبار أداة التحكّم في Media3 الذي يمكن استخدامه لاختبار التفاعلات مع التطبيقات التي تنشر جلسة وسائط
- نقل البيانات الإضافية التي تم تمريرها إلى
MediaSession[Builder].setSessionExtras()
في Media3 إلىPlaybackStateCompat.getExtras()
في أداة تحكّم Media1 - ربط الأخطاء الفادحة وغير الفادحة بجلسة المنصة يتم ربط
PlaybackException
بحالة خطأ فادح فيPlaybackStateCompat
. يتم ربطSessionError
المُرسَل إلى وحدة التحكّم في إشعار الوسائط معMediaSession.sendError(ControllerInfo, SessionError)
بخطأ غير فادح فيPlaybackStateCompat
، ما يعني أنّه يتم ضبط رمز الخطأ والرسالة، ولكن تظل حالة جلسة النظام الأساسي مختلفة عنSTATE_ERROR
. - السماح بضبط نشاط الجلسة لكل وحدة تحكّم لتجاوز نشاط الجلسة العام يمكن تحديد نشاط الجلسة لوحدة تحكّم في وقت الاتصال من خلال إنشاء
ConnectionResult
باستخدامAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. بعد الاتصال، يمكن تعديل نشاط الجلسة باستخدامMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - تحسين عملية تكرار الأخطاء في طلبات البيانات من واجهة برمجة التطبيقات
MediaLibrarySession.Callback
يمكن الآن ضبط عملية تكرار الخطأ باستخدامMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
لاختيار نوع الخطأ أو إيقاف عملية تكرار الخطأ التي تكون مفعّلة تلقائيًا.
- غيِّر القيمة التلقائية لـ
- UI:
- إضافة إمكانية عرض الصور إلى
PlayerView
عند توصيله بـExoPlayer
(#1144) - إضافة خيار تخصيص الرموز المختلفة في
PlayerControlView
من خلال سمات xml للسماح باستخدام عناصر قابلة للرسم مختلفة لكل مثيل منPlayerView
، بدلاً من عمليات الإلغاء العامة (#1200) - حلّ مشكلة في النظام الأساسي تؤدي إلى عرض الفيديو بشكل ممدود أو مقصوص عند استخدام
SurfaceView
داخلAndroidView
في Compose على الإصدار 34 من واجهة برمجة التطبيقات (#1237).
- إضافة إمكانية عرض الصور إلى
- عمليات التنزيل:
- تأكَّد من أنّ
DownloadHelper
لا يؤدي إلى تسرُّب مثيلاتRenderer
غير المُصدرة، ما قد يؤدي في النهاية إلى تعطُّل التطبيق مع ظهورIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- تأكَّد من أنّ
- إضافة Cronet:
- حلّ المشاكل في
SocketTimeoutException
فيCronetDataSource
في بعض إصدارات Cronet، لا يكون الطلب الذي توفّره دالة الرجوع هو نفسه دائمًا. يؤدي ذلك إلى عدم اكتمال عملية رد الاتصال وانتهاء مهلة الطلب (https://issuetracker.google.com/328442628).
- حلّ المشاكل في
- إضافة HLS:
- تم إصلاح الخطأ الذي كان يؤدي إلى تفويض عيّنات EMSG المعلقة التي تنتظر انقطاعًا في
HlsSampleStreamWrapper
مع إزاحة غير صحيحة، ما يؤدي إلى حدوثIndexOutOfBoundsException
أوIllegalArgumentException
(#1002). - إصلاح الخطأ الذي كان يؤدي إلى إعادة تحميل قوائم التشغيل غير الأساسية بشكل متكرر عند بث محتوى وفق بروتوكول LL-HLS (#1240)
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
Source Error
وIllegalArgumentException
عند تفعيل CMCD لبروتوكول HLS مع مقاطع الإعداد التي تقل عن 0x0A. - إصلاح الخلل الذي كان يؤدي إلى عدم إعادة تحميل قوائم التشغيل غير الأساسية أثناء تشغيل المحتوى المباشر (#1240).
- تم إصلاح الخطأ الذي كان يتسبّب في حدوث
ArrayIndexOutOfBoundsException
(#1395) عند تفعيل CMCD لأحداث البث المباشر وفق بروتوكول HTTP (HLS).
- تم إصلاح الخطأ الذي كان يؤدي إلى تفويض عيّنات EMSG المعلقة التي تنتظر انقطاعًا في
- إضافة DASH:
- إضافة Cast:
- تم إصلاح الخطأ الذي كان يحوّل عنوان الألبوم الخاص بـ
MediaQueueItem
إلى اسم الفنان في عنصر الوسائط Media3 (#1255).
- تم إصلاح الخطأ الذي كان يحوّل عنوان الألبوم الخاص بـ
- أدوات الاختبار:
- تنفيذ
onInit()
وonRelease()
فيFakeRenderer
- تغيير طرق
TestPlayerRunHelper.runUntil()/playUntil()
لتعطيل الأخطاء غير الخطيرة (مثل تلك التي يتم الإبلاغ عنها إلىAnalyticsListener.onVideoCodecError()
). استخدِم سلسلة طرقTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
الجديدة لإيقاف هذا السلوك.
- تنفيذ
- التطبيق التجريبي:
- استخدِم
DefaultPreloadManager
في تطبيق العرض التوضيحي للفيديوهات القصيرة. - السماح بضبط وضع التكرار باستخدام وسيطات
Intent
من سطر الأوامر (#1266) - استخدِم
HttpEngineDataSource
كـHttpDataSource
عندما يكون ذلك متاحًا على الجهاز.
- استخدِم
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
CronetDataSourceFactory
استخدِمCronetDataSource.Factory
بدلاً من ذلك. - أزِل بعض
DataSpec
المنشئات. يمكنك استخدامDataSpec.Builder
كبديل. - إزالة طريقة الدفع
setContentTypePredicate(Predicate)
منDefaultHttpDataSource
وOkHttpDataSource
وCronetDataSource
استخدِم الطريقة المكافئة على كلXXXDataSource.Factory
بدلاً من ذلك. - أزِل عناصر إنشاء
OkHttpDataSource
وOkHttpDataSourceFactory
. يمكنك استخدامOkHttpDataSource.Factory
كبديل. - إزالة
PlayerMessage.setHandler(Handler)
استخدِمsetLooper(Looper)
بدلاً من ذلك. - إزالة الحقل "
Timeline.Window.isLive
" استخدِم طريقةisLive()
بدلاً من ذلك. - إزالة دوال الإنشاء
DefaultHttpDataSource
استخدِمDefaultHttpDataSource.Factory
بدلاً من ذلك. - إزالة
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
استخدِمDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
بدلاً من ذلك. - إزالة
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
يمكنك استخدامMediaCodecInfo.canReuseCodec(Format, Format)
كبديل. - إزالة الطريقتَين
DrmSessionManager.DUMMY
وgetDummyDrmSessionManager()
يمكنك استخدامDrmSessionManager.DRM_UNSUPPORTED
كبديل. - إزالة
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
وAnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
وAudioRendererEventListener.onAudioInputFormatChanged(Format)
وVideoRendererEventListener.onVideoInputFormatChanged(Format)
استخدِم عمليات التحميل الزائد التي تقبلDecoderReuseEvaluation
بدلاً من ذلك. - إزالة
RendererSupport.FormatSupport
IntDef والثوابتFORMAT_HANDLED
وFORMAT_EXCEEDS_CAPABILITIES
وFORMAT_UNSUPPORTED_DRM
وFORMAT_UNSUPPORTED_SUBTYPE
وFORMAT_UNSUPPORTED_TYPE
استخدِم IntDef والثوابت المكافئة فيandroidx.media3.common.C
بدلاً من ذلك (مثلC.FORMAT_HANDLED
). - إزالة واجهة
Bundleable
ويشمل ذلك إزالة جميع الحقول الثابتة فيBundleable.Creator<Foo> CREATOR
. على المتصلين استخدام الطريقتَينBundle toBundle()
وstatic Foo fromBundle(Bundle)
لكل نوع بدلاً من ذلك.
- إزالة
الإصدار 1.4.0-rc01
10 يوليو 2024
استخدِم الإصدار الثابت 1.4.0.
الإصدار 1.4.0-beta01
26 يونيو 2024
استخدِم الإصدار الثابت 1.4.0.
الإصدار 1.4.0-alpha02
7 يونيو 2024
استخدِم الإصدار الثابت 1.4.0.
الإصدار 1.4.0-alpha01
17 أبريل 2024
استخدِم الإصدار الثابت 1.4.0.
الإصدار 1.3.0
الإصدار 1.3.1
11 أبريل 2024
تم طرح androidx.media3:media3-*:1.3.1
.
يحتوي الإصدار 1.3.1 على عمليات الدمج هذه.
- المكتبة المشتركة:
- أضِف
Format.labels
للسماح باستخدام تصنيفات مترجمة أو بديلة أخرى.
- أضِف
- ExoPlayer:
- تم إصلاح مشكلة عدم احتفاظ
PreloadMediaPeriod
بعمليات البث عند إعادة التحميل المسبق. - طبِّق
TrackSelectionResult
الصحيح والمناسب على فترة التشغيل عند إعادة اختيار المقطع الصوتي. - يجب بدء أدوات العرض التي تم تفعيل ميزة "البدء المبكر" فيها بعد تقديم فترة التشغيل عند الانتقال بين عناصر الوسائط (#1017).
- إضافة نوع الإرجاع الناقص إلى قاعدة Proguard
-keepclasseswithmembers
الخاصة بـDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187)
- تم إصلاح مشكلة عدم احتفاظ
- المحوّل:
- إضافة حلّ بديل للاستثناء الذي تم طرحه بسبب عدم توافق
MediaMuxer
مع الطوابع الزمنية السلبية للعرض قبل الإصدار 30 من واجهة برمجة التطبيقات
- إضافة حلّ بديل للاستثناء الذي تم طرحه بسبب عدم توافق
- اختيار المقطع الصوتي:
DefaultTrackSelector
: يجب تفضيل مسارات الفيديو التي تتضمّن معدّل عدد لقطات "معقولاً" (أكبر من أو يساوي 10 لقطات في الثانية) على تلك التي تتضمّن معدّل عدد لقطات أقل أو غير محدّد. يضمن ذلك أن يختار المشغّل مسار الفيديو "الحقيقي" في ملفات MP4 المستخرَجة من الصور المتحركة التي يمكن أن تحتوي على مسارين HEVC أحدهما بدقة أعلى ولكن بعدد صغير جدًا من اللقطات (#1051).
- أدوات استخراج البيانات:
- تم إصلاح المشكلة المتمثّلة في عدم تخطّي المساحة المتروكة عند قراءة أجزاء ذات حجم فردي من ملفات WAV (#1117).
- MP3: املأ
Format.averageBitrate
من إطارات البيانات الوصفية، مثلXING
وVBRI
. - MPEG-TS: تم التراجع عن تغيير كان يهدف إلى ضمان عرض الإطار الأخير من خلال تمرير آخر وحدة وصول في البث إلى قائمة انتظار العيّنات (#7909). ويرجع ذلك إلى أنّ التغيير يتسبّب في مشاكل جديدة في بث HLS الذي يتضمّن إطارات أساسية فقط (#1150) وفي بث HLS الذي يتضمّن ترميز H.262 (#1126).
- الصوت:
- السماح باستعادة أداة العرض من خلال إيقاف ميزة "التفريغ" إذا تعذّر تهيئة مسار الصوت في وضع "التفريغ".
- الفيديو:
- إضافة حلّ بديل لمشكلة في الأجهزة على Galaxy Tab S7 FE وChromecast with Google TV وLenovo M10 FHD Plus تؤدي إلى تصنيف بث H265 بمعدل 60 إطارًا في الثانية على أنّه غير متوافق
- إضافة حلّ بديل يضمن عرض الإطار الأول دائمًا أثناء النقل عبر الأنفاق حتى إذا لم ينفّذ الجهاز ذلك تلقائيًا على النحو المطلوب من خلال واجهة برمجة التطبيقات (#1169). (#966)
- تم إصلاح المشكلة التي يتسبّب فيها التعامل مع معلومات ألوان HDR في حدوث سلوك غير صحيح في برنامج الترميز، كما تم إصلاح المشكلة التي تمنع التبديل التكيّفي للتنسيق في مسارات فيديو SDR (#1158).
- النص:
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء
نسخ إضافية غير صحيحة من
CuesWithTiming
منWebvttParser.parse
(#1177).
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء
نسخ إضافية غير صحيحة من
- DRM:
- حلّ مشكلة
NoSuchMethodError
التي قد يعرضها إطارMediaDrm
بدلاً منResourceBusyException
أوNotProvisionedException
على بعض أجهزة Android 14 (#1145)
- حلّ مشكلة
- التأثير:
- تم تحسين عملية ربط الدرجات بين PQ وSDR من خلال تحويل مساحات الألوان.
- الجلسة:
- UI:
- الرجوع إلى تضمين اسم لغة المقطع الصوتي إذا تعذّر على
Locale
تحديد اسم معروض (#988)
- الرجوع إلى تضمين اسم لغة المقطع الصوتي إذا تعذّر على
- إضافة DASH:
- املأ جميع عناصر
Label
من ملف البيان فيFormat.labels
(#1054).
- املأ جميع عناصر
- إضافة RTSP:
- تخطّي قيم معلومات الجلسة الفارغة (علامات i) في تحليل SDP (#1087)
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إيقاف إضافة MIDI كعنصر تابع محلي تلقائيًا لأنّها تتطلّب ضبط مستودع Maven إضافي يمكن للمستخدمين الذين يحتاجون إلى هذا الوحدة من تبعية محلية إعادة تفعيلها.
الإصدار 1.3.0
6 مارس 2024
تم طرح androidx.media3:media3-*:1.3.0
.
يحتوي الإصدار 1.3.0 على عمليات الدمج هذه.
- المكتبة المشتركة:
- تنفيذ إمكانية استخدام معرّفات الموارد الموحّدة (URI) الخاصة بالموارد
android.resource://package/[type/]name
الأولية حيث يختلفpackage
عن حزمة التطبيق الحالي كانت هذه الميزة متاحة دائمًا، ولكن لم يتم تنفيذها بشكل صحيح حتى الآن. - تطبيع أنواع MIME التي تم ضبطها بواسطة رمز التطبيق أو قراءتها من الوسائط لتكون بأحرف صغيرة بالكامل
- حدِّد الإعلانات باستخدام
MediaItem
كامل بدلاً منUri
واحد فيAdPlaybackState
. - زيادة
minSdk
إلى 19 (Android KitKat) يتوافق هذا التغيير مع جميع مكتبات AndroidX الأخرى، وهو مطلوب لكي نتمكّن من الترقية إلى أحدث إصدارات التبعيات في AndroidX. - املأ الحقلَين
artworkUri
وartworkData
فيMediaMetadata.Builder.populate(MediaMetadata)
عندما يكون أحد الحقلَين على الأقل غير فارغ (#964).
- تنفيذ إمكانية استخدام معرّفات الموارد الموحّدة (URI) الخاصة بالموارد
- ExoPlayer:
- أضِف
PreloadMediaSource
وPreloadMediaPeriod
اللذين يتيحان للتطبيقات التحميل المُسبَق لمصدر وسائط المحتوى عند موضع بدء محدّد قبل التشغيل. تتولّىPreloadMediaSource
إعداد مصدر وسائط المحتوى لتلقّيTimeline
، وإعداد الفترة وتخزينها مؤقتًا في موضع البدء المحدّد، واختيار المقاطع وتحميل بيانات الوسائط للفترة. تتحكّم التطبيقات في مستوى تقدّم التحميل المُسبَق من خلال تنفيذPreloadMediaSource.PreloadControl
وتضبط المصدر الذي تم تحميله مُسبقًا على المشغّل لتشغيله. - أضِف
ExoPlayer.setImageOutput
الذي يسمح للتطبيقات بضبطImageRenderer.ImageOutput
. - تقدّم
DefaultRenderersFactory
الآنImageRenderer
للاعب تلقائيًا مع قيمتَيImageOutput
وImageDecoder.Factory.DEFAULT
فارغتين. - إصدار حدث
Player.Listener.onPositionDiscontinuity
عند تخطّي الصمت (#765) - إضافة دعم تجريبي لتحليل الترجمة والشرح أثناء الاستخراج يمكنك تفعيل هذه الميزة باستخدام
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - يمكنك استخدام
PreloadMediaSource
مع مصادر الوسائط التكيّفية. - نفِّذ
HttpEngineDataSource
، وهوHttpDataSource
باستخدام واجهة برمجة التطبيقات HttpEngine. - منع إنشاء فئات فرعية
CompositeSequenceableLoader
كان هذا المكوّن قابلاً للتوسيع سابقًا ولكن لم يتم تصنيفه ضمن فئة فرعية في المكتبة. يمكن إجراء عمليات التخصيص من خلال تضمين مثيل باستخدام نمط الديكور وتنفيذCompositeSequenceableLoaderFactory
مخصَّص. - تم إصلاح المشكلة التي تؤدي إلى محو البيانات الوصفية الخاصة بهذا العنصر عند تكرار الوقت نفسه (#1007).
- أعِد تسمية طرق
experimentalSetSubtitleParserFactory
علىBundledChunkExtractor.Factory
وDefaultHlsExtractorFactory
إلىsetSubtitleParserFactory
، ولا تسمح بتمريرnull
. استخدِم طرقexperimentalParseSubtitlesDuringExtraction(boolean)
الجديدة للتحكّم في سلوك التحليل. - إضافة إمكانية تخصيص
SubtitleParser.Factory
المستخدَم أثناء الاستخراج ويمكن تحقيق ذلك باستخدامMediaSource.Factory.setSubtitleParserFactory()
. - أضِف بادئة المصدر إلى جميع حقول
Format.id
التي تم إنشاؤها منMergingMediaSource
. يساعد ذلك في تحديد المصدر الذي أنتجFormat
(#883). - إصلاح التعبير العادي المستخدَم للتحقّق من صحة أسماء مفاتيح Common Media Client Data (CMCD) المخصّصة من خلال تعديله للتحقّق من وجود شرطة فقط (#1028)
- إيقاف الترميز المزدوج لمَعلمات طلب البحث CMCD (#1075)
- أضِف
- المحوّل:
- إضافة إمكانية تسوية فيديوهات التصوير البطيء بتنسيق H.265/HEVC SEF
- زيادة سرعة نقل البيانات، خاصةً عند إجراء تعديلات من النوع "إزالة الفيديو"
- أضِف واجهة برمجة التطبيقات لضمان بدء ملف الإخراج بإطار فيديو. يمكن أن يؤدي ذلك إلى جعل نتائج عمليات الاقتصاص أكثر توافقًا مع عمليات تنفيذ المشغّل التي لا تعرض إطار الفيديو الأول إلا بعد ظهور الطابع الزمني للعرض التقديمي (#829).
- إضافة إمكانية تحسين عمليات قص ملفات MP4 لمادة عرض واحدة
- إضافة دعم لضمان احتواء إطار الفيديو على الطابع الزمني الأول في ملف الإخراج إصلاح مشكلة بدء ملفات الإخراج بإطار أسود على مشغّلات iOS (#829)
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.selectImageTrack
لتفعيل خيار اختيار مسار الصورة. - أضِف
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
لتحديد ما إذا كان سيتم اختيار مقطع صورة إذا كان كل من مقطع الصورة ومقطع الفيديو متاحَين. القيمة التلقائية هيfalse
، ما يعني أنّ الأولوية تكون لاختيار مقطع فيديو.
- أضِف
- أدوات استخراج البيانات:
- إضافة تحليل AV1C إضافي إلى أداة استخراج MP4 لاسترداد قيم
ColorInfo.colorSpace
وColorInfo.colorTransfer
وColorInfo.colorRange
(#692) - MP3: استخدِم معدّل نقل بيانات ثابت (CBR) للبحث عن الملفات التي تتضمّن العنوان
Info
(معدّل نقل البيانات الثابت المكافئ للعنوانXing
). في السابق، كنا نستخدم جدول البحث من العنوانInfo
، ولكن يؤدي ذلك إلى بحث أقل دقة مقارنةً بما إذا تجاهلناه وافترضنا أنّ الملف هو CBR. - MPEG2-TS: إضافة دعم DTS وDTS-LBR وDTS:X Profile2 (#275)
- استخراج أنواع الصوت من واصفات TS وربطها بعلامات الأدوار، ما يتيح للمستخدمين اتّخاذ قرارات أفضل بشأن اختيار المقاطع الصوتية (#973).
- إضافة تحليل AV1C إضافي إلى أداة استخراج MP4 لاسترداد قيم
- الصوت:
- الفيديو:
- غيِّر الدالة الإنشائية
MediaCodecVideoRenderer
التي تأخذ الوسيطةVideoFrameProcessor.Factory
واستبدلها بدالة إنشائية تأخذ الوسيطةVideoSinkProvider
. يمكن للتطبيقات التي تريد إدخالVideoFrameProcessor.Factory
مخصّص إنشاءCompositingVideoSinkProvider
يستخدمVideoFrameProcessor.Factory
المخصّص وتمرير موفّر مصدر الفيديو إلىMediaCodecVideoRenderer
.
- غيِّر الدالة الإنشائية
- النص:
- إصلاح تسلسل إشارات الصور النقطية لحلّ الخطأ
Tried to marshall a Parcel that contained Binder objects
عند استخدامDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836) - CEA-708: تجاهُل قيمة
rowLock
توضّح مواصفات CEA-708-E S-2023 أنّه يجب افتراض أنّ كلتا القيمتينrowLock
وcolumnLock
صحيحتان، بغض النظر عن القيم المعروضة في البث (لم يتم تنفيذ دعمcolumnLock
، لذا يُفترض أنّها خاطئة دائمًا).
- إصلاح تسلسل إشارات الصور النقطية لحلّ الخطأ
- الصورة:
- إضافة إمكانية عرض الصور المصغّرة بتنسيق DASH يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية
ImageOutput
بالقرب من أوقات عرضها.
- إضافة إمكانية عرض الصور المصغّرة بتنسيق DASH يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية
- DRM:
- تشغيل عيّنات "التقدّم الواضح" غير المشفرة في المحتوى الخاضع لإدارة الحقوق الرقمية على الفور بشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقّف التشغيل مؤقتًا في منتصفه إذا لم تكن المفاتيح جاهزة بعد
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق،
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
أوDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- تشغيل عيّنات "التقدّم الواضح" غير المشفرة في المحتوى الخاضع لإدارة الحقوق الرقمية على الفور بشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقّف التشغيل مؤقتًا في منتصفه إذا لم تكن المفاتيح جاهزة بعد
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق،
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح مشكلة تعذُّر تشغيل إعلانات DASH وHLS التي لا تتضمّن امتداد الملف المناسب.
- الجلسة:
- إيقاف رصد النقر المزدوج في تطبيقات التلفزيون (#962)
- تم إصلاح المشكلة المتمثّلة في عدم نقل
MediaItem.RequestMetadata
التي تحتوي على إضافات غير فارغة فقط بين أدوات التحكّم في الوسائط والجلسات. - أضِف أداة إنشاء إلى
MediaLibrarySession.Builder
لا تقبل سوىContext
بدلاً منMediaLibraryService
.
- إضافة HLS:
- تقليل
HlsMediaPeriod
إلى مستوى الظهور الخاص بالحزمة يجب عدم الاعتماد على هذا النوع مباشرةً من خارج حزمة HLS. - يحلّ Resolve المشكلة المتعلقة بالبحث عن بداية مقطع فيديو بشكل أكثر فعالية (#1031).
- تقليل
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- برنامج فك ترميز MIDI: تجاهل رسائل أحداث SysEx (#710).
- أدوات الاختبار:
- لا توقِف التشغيل مؤقتًا في
TestPlayerRunHelper.playUntilPosition
. يحافظ الاختبار على حالة التشغيل، ولكنّه يعلّق مستوى التقدّم إلى أن يتمكّن الاختبار من إضافة تأكيدات وإجراءات أخرى.
- لا توقِف التشغيل مؤقتًا في
- التطبيق التجريبي:
- أضِف وحدة عرض توضيحية للمحتوى القصير من أجل عرض كيفية استخدام
PreloadMediaSource
مع حالة استخدام المحتوى القصير.
- أضِف وحدة عرض توضيحية للمحتوى القصير من أجل عرض كيفية استخدام
الإصدار 1.3.0-rc01
22 فبراير 2024
استخدِم الإصدار الثابت 1.3.0.
الإصدار 1.3.0-beta01
7 فبراير 2024
استخدِم الإصدار الثابت 1.3.0.
الإصدار 1.3.0-alpha01
15 يناير 2024
استخدِم الإصدار الثابت 1.3.0.
الإصدار 1.2.0
الإصدار 1.2.1
9 يناير 2024
- ExoPlayer:
- تم إصلاح المشكلة التي كانت تتسبّب في استمرار تعديل الإزاحة إلى
min/maxOffset
عند إجراء عمليات بحث يدوي خارج النطاقLiveConfiguration.min/maxOffset
. - تم إصلاح مشكلة عدم صحة تنسيقات قنوات OPUS وVORBIS لـ 3 و5 و6 و7 و8 قنوات (#8396).
- تم إصلاح المشكلة التي تؤدي إلى بدء البث المباشر من الموضع التلقائي عند تحديد مقاطع صوتية بعد الانتقال إلى الموضع صفر (#9347).
- تم إصلاح المشكلة التي كانت تتلقّى فيها مثيلات جديدة من
CmcdData.Factory
قيمًا سالبة لـbufferedDurationUs
من مصادر الأجزاء، ما كان يؤدي إلى ظهور الخطأIllegalArgumentException
(#888).
- تم إصلاح المشكلة التي كانت تتسبّب في استمرار تعديل الإزاحة إلى
- المحوّل:
- حلّ مشكلة كانت تؤدي إلى حدوث خطأ في برنامج الترميز أثناء عملية الإعداد بسبب ضبط معدّل تشغيل مرتفع.
- أدوات استخراج البيانات:
- الصوت:
- إصلاح مشكلة معالجة نهاية البث (EOS) في
SilenceSkippingAudioProcessor
عند استدعائها عدّة مرات (#712)
- إصلاح مشكلة معالجة نهاية البث (EOS) في
- الفيديو:
- تمت إضافة حلّ بديل لمشكلة في أجهزة Galaxy Tab S7 FE وChromecast with Google TV وLenovo M10 FHD Plus تؤدي إلى تصنيف بث AVC بمعدل 60 إطارًا في الثانية على أنّه غير متوافق (#693).
- البيانات الوصفية:
- تم إصلاح الخطأ الذي كانت تتم فيه تعبئة
MediaMetadata
من تعليقات Vorbis فقط باستخدام مفاتيح بأحرف كبيرة (#876). - تم إصلاح الخطأ
OutOfMemoryError
عند تحليل إطارات ID3 الكبيرة جدًا، ما يعني أنّه يمكن مواصلة التشغيل بدون معلومات العلامة بدلاً من تعذُّر التشغيل تمامًا.
- تم إصلاح الخطأ الذي كانت تتم فيه تعبئة
- DRM:
- توسيع نطاق الحلّ البديل لعنوان URL غير صحيح لترخيص ClearKey
https://default.url
ليشمل المستوى 33 من واجهة برمجة التطبيقات والإصدارات الأحدث (كان الحلّ البديل ينطبق سابقًا على المستوى 33 من واجهة برمجة التطبيقات فقط) (#837) - إصلاح الخطأ في
ERROR_DRM_SESSION_NOT_OPENED
عند التبديل من محتوى مشفّر إلى محتوى غير مشفّر بدون ربط سطح بمشغّل الفيديو حدث الخطأ بسبب استخدام برنامج فك ترميز آمن بشكل غير صحيح لتشغيل المحتوى غير المحمي.
- توسيع نطاق الحلّ البديل لعنوان URL غير صحيح لترخيص ClearKey
- الجلسة:
- ضَع المفاتيح والقيم المخصّصة في
MediaMetadataCompat
إلىMediaMetadata.extras
وMediaMetadata.extras
إلىMediaMetadataCompat
(#756, #802). - إصلاح مشكلة البث
notifyChildrenChanged
لوحدات التحكّم القديمة (#644) - تم إصلاح الخطأ الذي كان يؤدي إلى تعذُّر عمل بعض الأجهزة عند ضبط وقت سلبي
setWhen
لمؤقت الإشعار الذي تم إيقافه (#903). - إصلاح الخطأ
IllegalStateException
الذي يحدث عندما لا يكتمل ربط أداة التحكّم في إشعارات الوسائط عند طلب أول تحديث للإشعارات (#917)
- ضَع المفاتيح والقيم المخصّصة في
- UI:
- إضافة DASH:
- يجب تحليل "f800" على أنّه عدد القنوات 5 لبرنامج Dolby في بيان DASH (#688).
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إضافة Cast:
- تنظيف عملية إنشاء
Timeline
لتجنُّب تعطُّل التطبيق عند تعذُّر تحميل الوسائط على جهاز البث (#708).
- تنظيف عملية إنشاء
الإصدار 1.2.0
15 تشرين الثاني (نوفمبر) 2023
- المكتبة المشتركة:
- أضِف المَعلمة
@Nullable Throwable
إلى الطرق في الواجهةLog.Logger
. لم تعُد المَعلمةmessage
في هاتين الطريقتين تتضمّن أي معلومات حولThrowable
التي تم تمريرها إلى الطريقتينLog.{d,i,w,e}()
، لذا يجب أن تضيف عمليات التنفيذ هذه المعلومات يدويًا إذا أردت ذلك (ربما باستخدامLogger.appendThrowableString(String, Throwable)
). - تم إصلاح مشكلة التوافق مع Kotlin حيث لا يتم رصد مَعلمات النوع العام التي تقبل القيم الخالية وأنواع عناصر المصفوفة التي تقبل القيم الخالية على أنّها تقبل القيم الخالية. تشمل الأمثلة معلَمات الطريقتَين
TrackSelectorResult
وSimpleDecoder
(#6792). - تغيير السلوك التلقائي لواجهة المستخدم والإشعارات في
Util.shouldShowPlayButton
لعرض زر "تشغيل" أثناء إيقاف التشغيل مؤقتًا (مثلاً بسبب فقدان مؤقت لتركيز الصوت) يمكن الحفاظ على السلوك القديم باستخدامPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
أوMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - يمكنك الترقية من
androidx.annotation:annotation-experimental
إلى1.3.1
لإصلاح المشكلة الموضّحة في https://issuetracker.google.com/251172715. - انتقِل إلى واجهة
Player
.ExoPlayer.setAudioAttributes
- أضِف المَعلمة
- ExoPlayer:
- تم إصلاح مشاكل البحث في مصادر بيانات AC4 الناتجة عن عدم تحديد عيّنات فك الترميز فقط بشكل صحيح (#11000).
- إضافة إمكانية حظر التشغيل على أجهزة إخراج الصوت غير المناسبة (مثل مكبّر الصوت المدمج في أجهزة Wear OS) عند تفعيل هذه الميزة من خلال
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
سيتم تعديل سبب إيقاف التشغيل إلىPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
إذا تمت محاولة التشغيل عندما لا تتوفّر أي مخارج صوتية مناسبة، أو إذا تم فصل جميع المخارج المناسبة أثناء التشغيل. ستتم إزالة سبب الحظر عند توصيل جهاز إخراج مناسب. - أضِف
MediaSource.canUpdateMediaItem
وMediaSource.updateMediaItem
لقبول تحديثاتMediaItem
بعد الإنشاء عبرPlayer.replaceMediaItem(s)
. - السماح بتعديلات
MediaItem
لجميع فئاتMediaSource
التي توفّرها المكتبة من خلالPlayer.replaceMediaItem(s)
(#33، #9978) - أعِد تسمية
MimeTypes.TEXT_EXOPLAYER_CUES
إلىMimeTypes.APPLICATION_MEDIA3_CUES
. - أضِف
PngExtractor
الذي يرسل ملف PNG كاملاً ويقرأه فيTrackOutput
كعينة واحدة. - تحسين طريقة
SequenceableLoader.continueLoading(long)
في الواجهةSequenceableLoader
إلىSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
يحتويLoadingInfo
على مَعلمات إضافية، بما في ذلكplaybackSpeed
وlastRebufferRealtimeMs
، بالإضافة إلىplaybackPositionUs
الحالية. - تحسين طريقة
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
في الواجهةChunkSource
لتصبحChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
- إضافة حقول إضافية إلى تسجيل بيانات Common Media Client Data (CMCD): نقص البيانات في المخزن المؤقت (
bs
) والموعد النهائي (dl
) ومعدّل التشغيل (pr
) والبدء (su
) (#8699) - أضِف عمق البتات الخاص بالسطوع واللون إلى
ColorInfo
(#491). - إضافة حقول إضافية إلى تسجيل بيانات Common Media Client Data (CMCD): طلب العنصر التالي (
nor
) وطلب النطاق التالي (nrr
) (#8699) - إضافة وظيفة لنقل بيانات Common Media Client Data (CMCD) باستخدام مَعلمات طلب البحث (#553)
- يجب حلّ المشكلة في
ConcurrentModificationException
خلالExperimentalBandwidthMeter
(#612). - أضِف المَعلمة
MediaPeriodId
إلىCompositeMediaSource.getMediaTimeForChildMediaTime
. - إتاحة
ClippingMediaSource
(والمصادر الأخرى التي تتضمّن إزاحات الفترة/النافذة الزمنية) فيConcatenatingMediaSource2
(#11226). - غيِّر
BaseRenderer.onStreamChanged()
لتلقّي وسيطةMediaPeriodId
أيضًا.
- المحوّل:
- تحليل بيانات تدوير EXIF لمدخلات الصور
- أزِل نوع التعليق التوضيحي
TransformationRequest.HdrMode
والثوابت المرتبطة به. استخدِمComposition.HdrMode
والثوابت المرتبطة به بدلاً من ذلك. - بسِّط
OverlaySettings
لحلّ مشاكل التدوير. - تم تغيير المَعلمتَين
frameRate
وdurationUs
الخاصتَين بـSampleConsumer.queueInputBitmap
إلىTimestampIterator
.
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
للسماح صراحةً بالتشغيل التكيّفي غير السلس أو عدم السماح به. وسيظل الإعداد التلقائي على سلوكه الحالي وهوtrue
.
- أضِف
- أدوات استخراج البيانات:
- MPEG-TS: تأكَّد من عرض الإطار الأخير من خلال تمرير آخر وحدة وصول إلى قائمة العيّنات (#7909).
- إصلاح خطأ إملائي عند تحديد
rotationDegrees
تم تغييرprojectionPosePitch
إلىprojectionPoseRoll
(#461). - إزالة الافتراض بأنّه يمكن فحص مثيلات
Extractor
مباشرةً باستخدامinstanceof
إذا أردت الوصول إلى تفاصيل تنفيذExtractor
في وقت التشغيل، عليك أولاً استدعاءExtractor.getUnderlyingInstance
. - أضِف
BmpExtractor
. - أضِف
WebpExtractor
. - أضِف
HeifExtractor
. - أضِفنا إمكانية استخدام QuickTime classic في
Mp4Extractor
.
- الصوت:
- إتاحة استخدام PCM ذي الترتيب الكبير 24/32 بت في MP4 وMatroska، وتحليل ترميز PCM لـ
lpcm
في MP4 - إتاحة استخراج محتوى Vorbis الصوتي في ملف MP4
- أضِف
AudioSink.getFormatOffloadSupport(Format)
الذي يسترد مستوى توافق جهاز العرض مع التنسيق من خلالDefaultAudioOffloadSupportProvider
. تعرض هذه الدالةAudioOffloadSupport
الجديدة التي تتضمّنisFormatSupported
وisGaplessSupported
وisSpeedChangeSupported
. - أضِف
AudioSink.setOffloadMode()
الذي يتم من خلاله ضبط إعدادات التفريغ على مصدر الصوت. القيمة التلقائية هيAudioSink.OFFLOAD_MODE_DISABLED
. - يمكن تفعيل ميزة "نقل البيانات" من خلال
setAudioOffloadPreference
فيTrackSelectionParameters
. إذا كان الإعداد المفضّل هو التفعيل، وكان الجهاز يتيح نقل البيانات إلى جهاز آخر بالتنسيق المحدد، وكان اختيار المقطع الصوتي عبارة عن مقطع صوتي واحد، سيتم تفعيل ميزة نقل البيانات الصوتية إلى جهاز آخر. - إذا تم ضبط
audioOffloadModePreference
علىAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
، سيتم اختيار مقطع صوتي واحد فقط من خلالDefaultTrackSelector
، وذلك فقط إذا كان تنسيق هذا المقطع متوافقًا مع ميزة "التنزيل الذكي". إذا لم يكن أي مقطع صوتي متوافقًا مع ميزة "نقل البيانات"، لن يتم اختيار أي مقطع. - تم إيقاف إمكانية استخدام ميزة "التشغيل المتواصل" عند نقل البيانات إلى جهاز آخر في الإصدارات الأقدم من المستوى 33 لواجهة برمجة التطبيقات بسبب حدوث مشكلة في موضع التشغيل بعد الانتقال إلى مسار آخر.
- أزِل المَعلمة
enableOffload
من توقيع الطريقةDefaultRenderersFactory.buildAudioSink
. - إزالة طريقة الدفع
DefaultAudioSink.Builder.setOffloadMode
- إزالة قيمة intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
- إضافة إمكانية استخدام البيانات الوصفية لتشغيل Opus بدون انقطاع أثناء التشغيل من الجهاز
- السماح باسترداد أداة العرض من خلال إيقاف النقل إذا تعذّر إجراء الكتابة الأولى (#627).
- تفعيل ميزة "جدولة التحميل" تلقائيًا لتشغيل المحتوى الذي تم تحميله للاستماع إلى الصوت فقط
- احذف
ExoPlayer.experimentalSetOffloadSchedulingEnabled
وAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - تمت إعادة تسمية
onExperimentalSleepingForOffloadChanged
إلىonSleepingForOffloadChanged
وonExperimentalOffloadedPlayback
إلىonOffloadedPlayback
. - نقل واجهات
TrackSelectionParameters
والتعريفات ذات الصلة بوضع نقل الصوت إلى جهاز آخر إلى فئةAudioOffloadPreferences
داخلية - أضِف عمليات رد الاتصال
onAudioTrackInitialized
وonAudioTrackReleased
إلىAnalyticsListener
وAudioRendererEventListener
وAudioSink.Listener
. - تم إصلاح مشكلة نقص سعة تخزين مؤقت الصوت في DTS Express (#650).
- تم إصلاح الخطأ الذي يؤدي إلى ظهور
IllegalArgumentException
(#677) عند التحقّق من إمكانات E-AC3-JOC.
- إتاحة استخدام PCM ذي الترتيب الكبير 24/32 بت في MP4 وMatroska، وتحليل ترميز PCM لـ
- الفيديو:
- السماح للمكوّن
MediaCodecVideoRenderer
باستخدامVideoFrameProcessor.Factory
مخصّص - إصلاح الخطأ الذي كان يؤدي إلى عدم عرض الإطار الأول إذا كان بث الصوت يبدأ بطوابع زمنية سالبة (#291).
- السماح للمكوّن
- النص:
- إزالة
ExoplayerCuesDecoder
تتعاملTextRenderer
الآن مباشرةً مع مسارات النصوص التي تتضمّنsampleMimeType = application/x-media3-cues
بدون الحاجة إلى مثيلSubtitleDecoder
.
- إزالة
- البيانات الوصفية:
- لن يتم استدعاء
MetadataDecoder.decode
لعينات "فك التشفير فقط"، لأنّ التنفيذ يجب أن يعرض قيمة فارغة على أي حال.
- لن يتم استدعاء
- التأثير:
- أضِف
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
إدخال صورة نقطية في قائمة الانتظار حسب الطابع الزمني. - غيِّر
VideoFrameProcessor.registerInputStream()
ليكون غير مانع. يجب أن تتضمّن التطبيقاتVideoFrameProcessor.Listener#onInputStreamRegistered()
. - تم تغيير المَعلمتَين
frameRate
وdurationUs
الخاصتَين بـVideoFrameProcessor.queueInputBitmap
إلىTimestampIterator
.
- أضِف
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح الخطأ الذي يتسبّب في ظهور استثناء عند تشغيل بث مباشر بتنسيق DASH يتضمّن عدة فترات وليس العنصر الأول في قائمة التشغيل (#571).
- إصدار StreamManager قبل طلب
AdsLoader.destroy()
- رفع إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.31.0
- الجلسة:
- اضبط سلوك الخدمة التي تعمل في المقدّمة للإشعارات على
FOREGROUND_SERVICE_IMMEDIATE
فيDefaultMediaNotificationProvider
(#167). - استخدِم فقط
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
الإصدارات الأحدث من المستوى 31 لواجهة برمجة التطبيقات لتجنُّب المشاكل المتعلّقة بواجهة برمجة التطبيقات المتوقّفة نهائيًا على أجهزة Samsung (#167). - استخدِم أداة التحكّم في إشعارات الوسائط كوكيل لضبط الأوامر المتاحة والتنسيق المخصّص المستخدَم لتعبئة الإشعار وجلسة النظام الأساسي.
- تحويل أحداث أزرار الوسائط التي يتلقّاها
MediaSessionService.onStartCommand()
في Media3 بدلاً من توجيهها إلى جلسة النظام الأساسي ثم إلى Media3 بهذه الطريقة، يكون عنصر التحكّم في المكالمات هو دائمًا عنصر التحكّم في إشعارات الوسائط، ويمكن للتطبيقات التعرّف بسهولة على المكالمات الواردة من الإشعار بالطريقة نفسها على جميع مستويات واجهة برمجة التطبيقات المتوافقة. - تم إصلاح الخطأ الذي كان يتسبّب في عدم تقدُّم
MediaController.getCurrentPosition()
عند الاتصال بجهازMediaSessionCompat
قديم. - أضِف
MediaLibrarySession.getSubscribedControllers(mediaId)
لتسهيل الأمر. - تجاوز
MediaLibrarySession.Callback.onSubscribe()
لتأكيد توفّر رقم تعريف العنصر الرئيسي الذي يشترك فيه عنصر التحكّم. في حال نجاح العملية، يتم قبول الاشتراك ويتم استدعاءnotifyChildrenChanged()
على الفور لإبلاغ المتصفّح (#561). - أضِف وحدة العرض التوضيحي للجلسة لنظام التشغيل Automotive OS وفعِّل العرض التوضيحي للجلسة على Android Auto.
- لا تضبط قائمة انتظار جلسة إطار العمل عندما لا يكون
COMMAND_GET_TIMELINE
متاحًا لوحدة التحكّم في إشعار الوسائط. عندما يكون Android Auto هو أداة التحكّم في العميل التي تقرأ من جلسة إطار العمل، يؤدي ذلك إلى عدم عرض الزرqueue
في واجهة مستخدم Android Auto (#339). - استخدِم
DataSourceBitmapLoader
تلقائيًا بدلاً منSimpleBitmapLoader
(#271، #327). - أضِف
MediaSession.Callback.onMediaButtonEvent(Intent)
الذي يسمح للتطبيقات بتجاوز معالجة أحداث زر الوسائط التلقائية.
- اضبط سلوك الخدمة التي تعمل في المقدّمة للإشعارات على
- UI:
- أضِف عملية تنفيذ
Player.Listener
لأجهزة Wear OS تعالج إيقاف التشغيل بسببPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
من خلال عرض مربّع حوار نظام للسماح للمستخدم بتوصيل جهاز إخراج صوتي مناسب (مثل سماعات رأس تعمل بالبلوتوث). سيستأنف المستمع التشغيل تلقائيًا إذا تم توصيل جهاز مناسب خلال مهلة قابلة للضبط (المهلة التلقائية هي 5 دقائق).
- أضِف عملية تنفيذ
- عمليات التنزيل:
- يجب تقديم بيان عن نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" من أجل توفير التوافق مع
DownloadService
على Android 14. عند استخدام هذه الخدمة، يجب أن يضيف التطبيق أيضًاdataSync
كـforegroundServiceType
في ملف البيان، وأن يضيف إذنFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- يجب تقديم بيان عن نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" من أجل توفير التوافق مع
- إضافة HLS:
- إعادة تحميل قائمة تشغيل البث المباشر بتنسيق HLS بفاصل زمني يتم احتسابه من وقت بدء التحميل الأخير بدلاً من وقت اكتمال التحميل الأخير (#663)
- إضافة DASH:
- السماح بتضمين عدة معرّفات DASH متطابقة في عنوان URL لنموذج المقطع
- إضافة دعم تجريبي لتحليل الترجمة والشرح أثناء الاستخراج يتيح هذا التنسيق دمج الترجمة والشرح المتداخلَين بشكل أفضل، بما في ذلك حلّ مشكلة الوميض عند الانتقال بين مقاطع الترجمة والشرح. يمكنك تفعيل هذه الميزة باستخدام
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- إضافة RTSP:
- تم إصلاح مشكلة تزامن قد تؤدي إلى ظهور الخطأ
IndexOutOfBoundsException
عند الرجوع إلى بروتوكول TCP أو توقّف التشغيل مؤقتًا في بعض الحالات. - التحقّق من الحالة في إعداد RTSP عند عرض حالة التحميل
RtspMediaPeriod
(#577) - تجاهل طرق طلبات Rtsp المخصّصة في العنوان العام لردّ الخيارات (#613).
- استخدِم قيمة مهلة الردّ على طلب إعداد RTSP في الفاصل الزمني لإرسال طلبات خيارات RTSP لإبقاء الاتصال نشطًا (#662).
- تم إصلاح مشكلة تزامن قد تؤدي إلى ظهور الخطأ
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إصدار وحدة فك ترميز MIDI التي تتيح تشغيل ملفات MIDI العادية باستخدام مكتبة Jsyn لتركيب الصوت
- أضِف
DecoderOutputBuffer.shouldBeSkipped
لوضع علامة مباشرةً على مخازن البيانات المؤقتة للإخراج التي لا يلزم عرضها. هذا الخيار أفضل منC.BUFFER_FLAG_DECODE_ONLY
الذي سيتم إيقافه نهائيًا. - أضِف
Decoder.setOutputStartTimeUs
وSimpleDecoder.isAtLeastOutputStartTimeUs
للسماح لبرامج الترميز بإسقاط عيّنات الترميز فقط قبل وقت البدء. ويجب استخدام هذا الخيار بدلاً منBuffer.isDecodeOnly
الذي سيتم إيقافه نهائيًا. - إصلاح الخطأ الذي يمنع نشر أداة فك ترميز MIDI في مستودع Maven تمت إعادة تسمية العنصر إلى
media3-exoplayer-midi
(#734).
- إضافة Leanback:
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
ArithmeticException
في رمز Leanback عند إيقاف مساحة عرض (#617).
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
- أدوات الاختبار:
- إتاحة توافق
TestExoPlayerBuilder
وFakeClock
مع اختبارات واجهة مستخدم Espresso واختبارات واجهة مستخدم Compose يحلّ هذا الإصدار خطأً يؤدي إلى تقدّم التشغيل بشكل غير حتمي أثناء التفاعل مع طرق العرض في Espresso أو Compose.
- إتاحة توافق
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
وTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
استخدِمComposition.Builder.setHdrMode(int)
ومرِّرComposition
إلىTransformer.start(Composition, String)
بدلاً من ذلك. - أزِل الطريقة
DownloadNotificationHelper.buildProgressNotification
التي تم إيقافها نهائيًا، واستخدِم طريقة أخرى غير متوقّفة نهائيًا تأخذ المَعلمةnotMetRequirements
بدلاً منها.
- إزالة
الإصدار 1.2.0-rc01
1 نوفمبر 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-beta01
19 أكتوبر 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-alpha02
29 سبتمبر 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-alpha01
17 أغسطس 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.1.0
الإصدار 1.1.1
16 أغسطس 2023
- المكتبة المشتركة:
- إزالة تبعية
multidex
التي تمت إضافتها عن طريق الخطأ من جميع الوحدات(#499)
- إزالة تبعية
- ExoPlayer:
- تم إصلاح المشكلة في
PlaybackStatsListener
حيث يتم إنشاءPlaybackStats
غير صحيح بعد محو قائمة التشغيل. - إضافة حقول إضافية إلى تسجيل بيانات Common Media Client Data (CMCD): تنسيق البث (sf) ونوع البث (st) والإصدار (v) وأعلى معدّل نقل بيانات (tb) ومدة العنصر (d) ومعدّل نقل البيانات المقاس (mtp) ونوع العنصر (ot) (#8699).
- تم إصلاح المشكلة في
- الصوت:
- تم إصلاح الخطأ الذي لم يتم فيه الانتقال من
Player.getState()
إلىSTATE_ENDED
عند تشغيل ملفات قصيرة جدًا (#538).
- تم إصلاح الخطأ الذي لم يتم فيه الانتقال من
- تفريغ الصوت:
- إضافة صفحات Ogg ID Header وComment Header إلى دفق البتات لتشغيل Opus بدون اتصال بالإنترنت وفقًا لمعيار RFC 7845
- الفيديو:
- H.265/HEVC: تم إصلاح تحليل معلومات صورة المرجع القصيرة والطويلة الأمد في SPS.
- النص:
- CEA-608: تغيير منطق اقتطاع الإشارات لكي يأخذ في الاعتبار النص المرئي فقط في السابق، كان يتم تضمين المسافة البادئة وإزاحة علامة التبويب عند الحدّ من طول الإشارة إلى 32 حرفًا (وهو ما كان صحيحًا من الناحية الفنية وفقًا للمواصفات) (#11019).
- إضافة "إعلانات الوسائط التفاعلية":
- تمت ترقية إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.30.3.
- الجلسة:
- أضِف تخطيطًا مخصّصًا إلى حالة وحدة التحكّم وقدِّم دالة getter للوصول إليه. عندما يتغيّر التنسيق المخصّص، يتم استدعاء
MediaController.Listener.onCustomLayoutChanged
. يمكن للتطبيقات التي تريد إرسال تنسيقات مخصّصة مختلفة إلى وحدات تحكّم مختلفة في Media3 إجراء ذلك فيMediaSession.Callback.onConnect
باستخدامAcceptedResultBuilder
للتأكّد من أنّ التنسيق المخصّص متاح لوحدة التحكّم عند اكتمال عملية الربط. - تم إصلاح الحالات التي أرسل فيها
MediaLibraryServiceLegacyStub
رسالة خطأ إلىResult
لا تتوافق مع هذا الإجراء، ما أدّى إلى ظهورUnsupportedOperationException
(#78). - إصلاح طريقة إنشاء
PlayerWrapper
VolumeProviderCompat
من خلال تحديدvolumeControlType
باستخدام كل من الأوامر القديمة (COMMAND_ADJUST_DEVICE_VOLUME
وCOMMAND_SET_DEVICE_VOLUME
) والأوامر الجديدة (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
وCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- أضِف تخطيطًا مخصّصًا إلى حالة وحدة التحكّم وقدِّم دالة getter للوصول إليه. عندما يتغيّر التنسيق المخصّص، يتم استدعاء
الإصدار 1.1.0
5 يوليو 2023
- المكتبة المشتركة:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15)
- إضافة أوامر إلى "المشغّل":
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- أضِف طرقًا محمّلة بشكل زائد إلى Player تتيح للمستخدمين تحديد علامات مستوى الصوت:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- إضافة
Builder
لـDeviceInfo
وإيقاف الدالة الإنشائية الحالية نهائيًا - أضِف
DeviceInfo.routingControllerId
لتحديد معرّف وحدة التحكّم في التوجيه لتشغيل المحتوى عن بُعد. - إضافة
Player.replaceMediaItem(s)
كاختصار لإضافة عناصر وإزالتها في الموضع نفسه (#8046)
- ExoPlayer:
- يجب السماح لـ ExoPlayer بالتحكّم في طرق مستوى صوت الجهاز فقط في حال تم تفعيلها بشكل صريح. استخدِم
ExoPlayer.Builder.setDeviceVolumeControlEnabled
للوصول إلى:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
وsetDeviceVolume(int, int)
increaseDeviceVolume(int)
وincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
وdecreaseDeviceVolume(int, int)
- أضِف
FilteringMediaSource
التي تتيح فلترة أنواع المسارات المتاحة منMediaSource
. - إضافة إمكانية تضمين بيانات Common Media Client Data (CMCD) في الطلبات الصادرة بتنسيقات البث التكيّفي DASH وHLS وSmoothStreaming تم دمج الحقول التالية:
br
وbl
وcid
وrtp
وsid
(#8699). بنية واجهة برمجة التطبيقات وطرقها:- يكون تسجيل بيانات CMCD غير مفعّل تلقائيًا، استخدِم
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
لتفعيله. - يتم تفعيل جميع المفاتيح تلقائيًا، ويمكنك إلغاء ذلك باستخدام
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
لتحديد المفاتيح التي يتم تسجيلها. - استبدِل
CmcdConfiguration.RequestConfig.getCustomData()
بـ enable لتفعيل تسجيل المفاتيح المخصّصة.
- يكون تسجيل بيانات CMCD غير مفعّل تلقائيًا، استخدِم
- إضافة إجراء إضافي إلى ملف البيان الخاص بالتطبيق التجريبي الرئيسي لتسهيل بدء تشغيل التطبيق التجريبي باستخدام ملف
*.exolist.json
مخصّص (#439). - أضِف
ExoPlayer.setVideoEffects()
لاستخدامEffect
أثناء تشغيل الفيديو. - عدِّل
SampleQueue
لتخزينsourceId
كـlong
بدلاً منint
. يؤدي ذلك إلى تغيير تواقيع الطريقتَين العلنيتَينSampleQueue.sourceId
وSampleQueue.peekSourceId
. - أضِف مَعلمات إلى الطريقتَين
LoadControl
وshouldStartPlayback
وonTracksSelected
التي تتيح ربط هاتين الطريقتَين بـMediaPeriod
ذي الصلة. - غيِّر توقيع
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
من خلال إضافة مَعلمة مخطط زمني تحتوي على الفترات التي يتم فيها استخدام أرقام التعريف الفريدة كمفاتيح في الخريطة. هذا الإجراء مطلوب لتجنُّب حدوث مشاكل التزامن مع أحداث البث المباشر المتعددة الفترات. - إيقاف
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
وBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
يمكن بدلاً من ذلك طلب صيغة الطرق بدونmediaTimeOffsetUs
. يُرجى العِلم أنّه حتى بالنسبة إلى المتغيرات المتوقّفة نهائيًا، لم يعُد يتم إضافة الإزاحة إلىstartTimeUs
وendTimeUs
لعناصرMediaLoadData
التي يتم إرسالها بواسطة أداة الإرسال. - أعِد تسمية
ExoTrackSelection.blacklist
إلىexcludeTrack
وisBlacklisted
إلىisTrackExcluded
. - إصلاح السلوك غير المتسق بين
ExoPlayer.setMediaItem(s)
وaddMediaItem(s)
عند استدعائهما على قائمة تشغيل فارغة
- يجب السماح لـ ExoPlayer بالتحكّم في طرق مستوى صوت الجهاز فقط في حال تم تفعيلها بشكل صريح. استخدِم
- المحوّل:
- إزالة
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
استخدِمExoPlayerAssetLoader.Factory(MediaSource.Factory)
وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
بدلاً منهما. - إزالة
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
- تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف عملية التحويل (ما يؤدي إلى انتهاء مهلة برنامج دمج الصوت والفيديو) إذا تم إرسال إشارة إلى نهاية بث الفيديو في الوقت الذي كانت فيه معالجة إطار إدخال معلّقة.
- يمكنك طلب برامج الترميز من خلال
MediaCodecList
بدلاً من استخدام أدواتfindDecoder/EncoderForFormat
، وذلك لتوسيع نطاق التوافق. - إزالة إعدادات B-frame في
DefaultEncoderFactory
لأنّها لا تعمل على بعض الأجهزة
- إزالة
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
الذي يكون غير مفعَّل تلقائيًا. عند تفعيل هذا الخيار، سيؤديDefaultTrackSelector
إلى بدء عملية اختيار مسار جديد عند تغيير إمكانات العارض.
- أضِف
- أدوات استخراج البيانات:
- الصوت:
- إصلاح الخطأ الذي يؤدي إلى تعذُّر تشغيل بعض الفيديوهات عند تفعيل ميزة "النفق" وتفعيل
AudioProcessors
، مثلاً عند قص الفيديو بدون فواصل (#10847) - تغليف إطارات Opus في حِزم Ogg في عمليات التشغيل المباشر (التفريغ)
- استقراء الموقع الجغرافي الحالي أثناء وضع السكون باستخدام ميزة جدولة نقل البيانات
- أضِف
Renderer.release()
وAudioSink.release()
لإصدار الموارد في نهاية عمر اللاعب. - الاستماع إلى تغييرات إمكانات الصوت في
DefaultAudioSink
أضِف المَعلمة المطلوبةcontext
في الدالة الإنشائية الخاصة بـDefaultAudioSink
، والتي سيتم من خلالها تسجيلDefaultAudioSink
كمعالج للأحداث فيAudioCapabilitiesReceiver
وتعديل السمةaudioCapabilities
عند إعلامها بتغيير في الإمكانات. - نشر تغييرات إمكانات الصوت من خلال حدث جديد
onAudioCapabilitiesChanged
في واجهةAudioSink.Listener
، وواجهة جديدةRendererCapabilities.Listener
تؤدي إلى تشغيل أحداثonRendererCapabilitiesChanged
. - أضِف
ChannelMixingAudioProcessor
لتطبيق التوسيع/المزج على قنوات الصوت. - أضِف قيمة عدد صحيح جديدة
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
إلىDecoderDiscardReasons
لإيقاف برنامج ترميز الصوت عندما يكون وضع التجاوز متاحًا بعد تغيير إمكانات الصوت. - إضافة إمكانية التشغيل المباشر لتنسيقات DTS Express وDTS:X (#335)
- إصلاح الخطأ الذي يؤدي إلى تعذُّر تشغيل بعض الفيديوهات عند تفعيل ميزة "النفق" وتفعيل
- الفيديو:
- اجعل
MediaCodecVideoRenderer
يعرضVideoSize
بعرض وارتفاع 0 عند إيقاف أداة العرض. يتم استدعاءPlayer.Listener.onVideoSizeChanged
وفقًا لذلك عند حدوث تغيير فيPlayer.getVideoSize()
. بموجب هذا التغيير، سيصبح عرض وارتفاع حجم الفيديو في ExoPlayer معMediaCodecVideoRenderer
هو 0 عندما لا يتيحPlayer.getCurrentTracks
عرض الفيديو، أو عندما لم يتم تحديد حجم مسار الفيديو المتوافق بعد.
- اجعل
- DRM:
- تقليل مدى رؤية عدة طرق داخلية فقط في
DefaultDrmSession
لا يُتوقّع استدعاؤها من خارج حزمة إدارة الحقوق الرقمية:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- تقليل مدى رؤية عدة طرق داخلية فقط في
- Muxer:
- إضافة مكتبة جديدة لدمج الصوت والفيديو يمكن استخدامها لإنشاء ملف حاوية MP4.
- إضافة "إعلانات الوسائط التفاعلية":
- فعِّل أحداث البث المباشر المتعددة الفترات بتنسيق DASH من أجل ميزة "إدراج الإعلانات الديناميكي". يُرجى العِلم أنّ الإصدار الحالي لا يتيح بعد التنقّل في أحداث البث المباشر (#10912).
- تم إصلاح الخطأ الذي يؤدي إلى إدراج مجموعة إعلانية جديدة في البث المباشر لأنّ موضع المحتوى المحسوب في المخططات الزمنية المتتالية يختلف قليلاً.
- الجلسة:
- أضِف طريقة المساعد
MediaSession.getControllerForCurrentRequest
للحصول على معلومات حول وحدة التحكّم التي تستدعي حاليًا طريقةPlayer
. - أضِف
androidx.media3.session.MediaButtonReceiver
للسماح للتطبيقات بتنفيذ ميزة استئناف التشغيل باستخدام أحداث زر الوسائط التي يتم إرسالها من خلال، على سبيل المثال، سماعة رأس مزوّدة بتقنية البلوتوث (#167). - أضِف عملية تنفيذ تلقائية إلى
MediaSession.Callback.onAddMediaItems
للسماح بتمريرMediaItems
المطلوبة إلىPlayer
إذا كانت تتضمّنLocalConfiguration
(مثل URI) (#282). - إضافة زرَّي الأوامر "الانتقال إلى المحتوى السابق" و "الانتقال إلى المحتوى التالي" إلى العرض المضغوط لإشعارات الوسائط تلقائيًا على الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم (#410)
- أضِف عملية تنفيذ تلقائية إلى
MediaSession.Callback.onAddMediaItems
للسماح بتمريرMediaItems
المطلوبة إلىPlayer
إذا كانت تتضمّنLocalConfiguration
(مثل URI) (#282). - إضافة زرَّي الأوامر "الانتقال إلى المحتوى السابق" و "الانتقال إلى المحتوى التالي" إلى العرض المضغوط لإشعارات الوسائط تلقائيًا على الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم (#410)
- أضِف طريقة المساعد
- UI:
- أضِف طريقتَي Util
shouldShowPlayButton
وhandlePlayPauseButtonAction
لكتابة عناصر مخصّصة في واجهة المستخدم تتضمّن زر تشغيل/إيقاف مؤقت.
- أضِف طريقتَي Util
- إضافة RTSP:
- إضافة DASH:
- أزِل إزاحة الوقت للوسائط من
MediaLoadData.startTimeMs
وMediaLoadData.endTimeMs
لعمليات بث DASH المتعددة الفترات. - تم إصلاح الخطأ الذي كان يتسبّب في ظهور
IndexOutOfBoundsException
(#10838) عند إعادة إعداد مصدر وسائط Dash مباشر متعدد الفترات.
- أزِل إزاحة الوقت للوسائط من
- إضافة HLS:
- أضِف
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
لضبط مهلة مؤقتة لمؤشر التحميل كي ينتظر إلى أن يتم تهيئةTimestampAdjuster
. إذا لم يكتمل الإعداد قبل انتهاء المهلة، سيتم عرض الخطأPlaybackException
لتجنُّب توقّف التشغيل إلى الأبد. تم ضبط المهلة على صفر تلقائيًا (#323).
- أضِف
- أدوات الاختبار:
- التحقّق من عدم حساسية نظام معرّف الموارد المنتظم (URI) لحالة الأحرف في
DataSourceContractTest
- التحقّق من عدم حساسية نظام معرّف الموارد المنتظم (URI) لحالة الأحرف في
- إزالة الرموز المتوقّفة نهائيًا:
- أزِل دوال إنشاء
DefaultAudioSink
واستخدِمDefaultAudioSink.Builder
بدلاً منها. - إزالة
HlsMasterPlaylist
واستخدامHlsMultivariantPlaylist
بدلاً منها - إزالة
Player.stop(boolean)
استخدِمPlayer.stop()
وPlayer.clearMediaItems()
(إذا كانت قيمةreset
هيtrue
) بدلاً من ذلك. - أزلنا اثنين من أدوات إنشاء
SimpleCache
المتوقّفة نهائيًا، واستخدمنا أداة إنشاء غير متوقّفة نهائيًا تأخذDatabaseProvider
بدلاً من ذلك لتحسين الأداء. - أزِل الدالة الإنشائية
DefaultBandwidthMeter
واستخدِمDefaultBandwidthMeter.Builder
بدلاً منها. - أزِل دوال إنشاء
DefaultDrmSessionManager
، واستخدِمDefaultDrmSessionManager.Builder
بدلاً منها. - إزالة اثنين من أدوات إنشاء
HttpDataSource.InvalidResponseCodeException
التي تم إيقافها نهائيًا، واستخدام أداة إنشاء غير متوقّفة نهائيًا تقبل حقولاً إضافية(cause
وresponseBody
) لتحسين تسجيل الأخطاء - إزالة
DownloadHelper.forProgressive
وDownloadHelper.forHls
وDownloadHelper.forDash
وDownloadHelper.forSmoothStreaming
واستخدامDownloadHelper.forMediaItem
بدلاً منها - أزِل الدالة الإنشائية
DownloadService
المتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة نهائيًا تتضمّن خيار توفير المَعلمةchannelDescriptionResourceId
. - أزِل ثوابت السلسلة التي تم إيقافها نهائيًا لمجموعات الرموز (
ASCII_NAME
وUTF8_NAME
وISO88591_NAME
وUTF16_NAME
وUTF16LE_NAME
)، واستخدِم مجموعات رموز Kotlin من الحزمةkotlin.text
أوjava.nio.charset.StandardCharsets
أوcom.google.common.base.Charsets
بدلاً من ذلك. - أزِل الدالة الإنشائية
WorkManagerScheduler
المتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة نهائيًا تتضمّن خيار تقديم المَعلمةContext
بدلاً من ذلك. - أزِل الطرق المتوقّفة نهائيًا
createVideoSampleFormat
وcreateAudioSampleFormat
وcreateContainerFormat
وcreateSampleFormat
التي كانت تُستخدَم لإنشاء مثيل لفئةFormat
. بدلاً من ذلك، استخدِمFormat.Builder
لإنشاء مثيلات منFormat
. - أزِل الطرق المتوقّفة نهائيًا، وهي
copyWithMaxInputSize
وcopyWithSubsampleOffsetUs
وcopyWithLabel
وcopyWithManifestFormatInfo
وcopyWithGaplessInfo
وcopyWithFrameRate
وcopyWithDrmInitData
وcopyWithMetadata
وcopyWithBitrate
وcopyWithVideoSize
، واستخدِم الطريقتَينFormat.buildUpon()
وطرق الضبط بدلاً منها. - إزالة
ExoPlayer.retry()
المتوقّفة نهائيًا واستخدامprepare()
بدلاً منها - أزِل الدالة الإنشائية
DefaultTrackSelector
التي تم إيقافها نهائيًا والتي لا تتضمّن أي وسيط، واستخدِمDefaultTrackSelector(Context)
بدلاً منها. - أزِل أداة إنشاء
OfflineLicenseHelper
المتوقّفة نهائيًا، واستخدِمOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
بدلاً منها. - أزِل الدالة الإنشائية
DownloadManager
المتوقّفة نهائيًا، واستخدِم الدالة الإنشائية التي تأخذExecutor
بدلاً منها. - أزِل أدوات إنشاء
Cue
المتوقّفة نهائيًا، واستخدِمCue.Builder
بدلاً منها. - أزِل أداة إنشاء
OfflineLicenseHelper
المتوقّفة نهائيًا، واستخدِمOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
بدلاً منها. - إزالة أربع طرق
AnalyticsListener
تم إيقافها نهائيًا:onDecoderEnabled
، يُرجى استخدامonAudioEnabled
و/أوonVideoEnabled
بدلاً منها.onDecoderInitialized
، يُرجى استخدامonAudioDecoderInitialized
و/أوonVideoDecoderInitialized
بدلاً منها.onDecoderInputFormatChanged
، يُرجى استخدامonAudioInputFormatChanged
و/أوonVideoInputFormatChanged
بدلاً منها.onDecoderDisabled
، يُرجى استخدامonAudioDisabled
و/أوonVideoDisabled
بدلاً منها.
- أزِل السمتَين
Player.Listener.onSeekProcessed
وAnalyticsListener.onSeekProcessed
اللتَين تم إيقافهما نهائيًا، واستخدِمonPositionDiscontinuity
معDISCONTINUITY_REASON_SEEK
بدلاً منهما. - أزِل
ExoPlayer.setHandleWakeLock(boolean)
واستخدِمsetWakeMode(int)
بدلاً منه. - أزِل السمة
DefaultLoadControl.Builder.createDefaultLoadControl()
التي تم إيقافها نهائيًا، واستخدِمbuild()
بدلاً منها. - أزِل
MediaItem.PlaybackProperties
التي تم إيقافها نهائيًا، واستخدِمMediaItem.LocalConfiguration
بدلاً منها. أصبح الحقل الذي تم إيقافه نهائيًاMediaItem.playbackProperties
من النوعMediaItem.LocalConfiguration
.
- أزِل دوال إنشاء
الإصدار 1.1.0-rc01
21 حزيران (يونيو) 2023
استخدِم الإصدار الثابت 1.1.0.
الإصدار 1.1.0-beta01
7 يونيو 2023
استخدِم الإصدار الثابت 1.1.0.
الإصدار 1.1.0-alpha01
10 مايو 2023
استخدِم الإصدار الثابت 1.1.0.
الإصدار 1.0.0
الإصدار 1.0.2
18 مايو 2023
تم طرح androidx.media3:media3-*:1.0.2
.
يتضمّن الإصدار 1.0.2 عمليات الدمج التالية.
يتوافق هذا الإصدار مع الإصدار 2.18.7 من ExoPlayer.
يتضمّن هذا الإصدار التغييرات التالية منذ الإصدار 1.0.1:
- المكتبة الأساسية:
- أضِف
Buffer.isLastSample()
الذي يشير إلى ما إذا كانBuffer
يحتوي على علامةC.BUFFER_FLAG_LAST_SAMPLE
. - تم إصلاح مشكلة عدم عرض الإطار الأخير إذا تم إلغاء قائمة آخر عيّنة تتضمّن إطارات بدون قراءة عيّنة "نهاية البث". (#11079).
- أضِف
- أدوات استخراج البيانات:
- إصلاح تحليل حزمة SPS بتنسيق H.265 في ملفات MPEG-TS من خلال إعادة استخدام منطق التحليل المستخدَم حاليًا في أدوات استخراج RTSP وMP4 (#303)
- النص:
- SSA: إضافة إمكانية استخدام ملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب البايت (#319).
- الجلسة:
- تم إصلاح المشكلة المتمثلة في عدم تعديل
MediaController
للأوامر المتاحة عند الاتصال بجهازMediaSessionCompat
قديم يتيح تعديل الإجراءات. - تم إصلاح الخطأ الذي كان يمنع
MediaLibraryService
من عرض قيمة فارغة عند طلب بيانات من واجهة مستخدم النظام إلىCallback.onGetLibraryRoot
معparams.isRecent == true
على الإصدار 30 من واجهة برمجة التطبيقات (#355). - إصلاح تسرب الذاكرة في
MediaSessionService
أوMediaLibraryService
(#346) - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
IllegalStateException
عند تعديلTimeline
وموضعMediaSession
في الوقت نفسه.MediaController
- تم إصلاح المشكلة المتمثلة في عدم تعديل
الإصدار 1.0.1
18 أبريل 2023
تم طرح androidx.media3:media3-*:1.0.1
.
يحتوي الإصدار 1.0.1 على عمليات الإيداع هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.6 من ExoPlayer.
- المكتبة الأساسية:
- إعادة ضبط الإعداد التلقائي للبث المباشر المستهدف عند البحث عن الموضع التلقائي (#11051)
- تم إصلاح الخطأ الذي كان يؤدي إلى توقّف التشغيل بسبب عدم توفّر عيّنات في الوسائط.
- الجلسة:
- تم إصلاح الخطأ الذي يؤدي إلى حدوث استثناء في
MediaController
(#290) عند نشر عناصر متطابقة متعددة في قائمة الانتظار بواسطة إصدار قديم منMediaSessionCompat
. - إضافة عملية إعادة توجيه
MediaSession.broadcastCustomCommand
الناقصة إلىMediaControllerCompat.Callback.onSessionEvent
القديمة (#293) - تم إصلاح الخلل الذي كان يؤدي إلى عدم تعديل الأوامر المتاحة عند استدعاء
MediaSession.setPlayer
. - تم إصلاح المشكلة المتمثلة في تجاهل مثيلات
TrackSelectionOverride
المرسَلة منMediaController
إذا كانت تشير إلى مجموعة تتضمّنFormat.metadata
(#296). - تم إصلاح المشكلة التي تتطلّب توفّر
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
للوصول إلى البيانات الوصفية من خلالMediaSessionCompat
القديم. - تم إصلاح المشكلة التي تتسبّب فيها مثيلات
MediaSession
في سلسلة محادثات في الخلفية في حدوث أعطال عند استخدامها فيMediaSessionService
(#318). - تم إصلاح المشكلة التي يتم فيها الإعلان عن أداة استقبال أزرار الوسائط من خلال المكتبة بدون أن يكون التطبيق قد قصد ذلك (#314).
- تم إصلاح الخطأ الذي يؤدي إلى حدوث استثناء في
- DASH:
- إصلاح مشكلة معالجة المخططات الزمنية الفارغة للأجزاء (#11014)
- RTSP:
- أعِد المحاولة باستخدام TCP إذا تعذّر إعداد RTSP باستخدام UDP وظهر الخطأ 461 في RTSP UnsupportedTransport (#11069).
الإصدار 1.0.0
22 مارس 2023
تم طرح androidx.media3:media3-*:1.0.0
.
يتضمّن الإصدار 1.0.0 عمليات الدمج هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.5 من ExoPlayer.
لم يتم إجراء أي تغييرات منذ الإصدار 1.0.0-rc02.
الإصدار 1.0.0-rc02
2 مارس 2023
تم طرح androidx.media3:media3-*:1.0.0-rc02
.
يحتوي الإصدار 1.0.0-rc02 على عمليات الإيداع هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.4 من ExoPlayer.
- المكتبة الأساسية:
- عمليات التنزيل:
- إتاحة ضبط الحد الأقصى للفرق بين وقت بدء مقطعين ليتم دمجهما في
SegmentDownloader
والفئات الفرعية (#248).
- إتاحة ضبط الحد الأقصى للفرق بين وقت بدء مقطعين ليتم دمجهما في
- الصوت:
- الفيديو:
- ربط صيغة HEVC HDR10 بـ
HEVCProfileMain10HDR10
بدلاً منHEVCProfileMain10
- تمت إضافة حلّ بديل لمشكلة في جهاز Chromecast مع Google TV وجهاز Lenovo M10 FHD Plus تؤدي إلى تصنيف بث AVC بمعدل 60 إطارًا في الثانية على أنّه غير متوافق (#10898).
- تم إصلاح مشاكل الأداء المتعلّقة بإصدار اللقطات عند تشغيل الوسائط بمعدّل لقطات أعلى بكثير من معدّل تحديث الشاشة.
- ربط صيغة HEVC HDR10 بـ
- البث:
- تم إصلاح مشكلة
STATE_IDLE
المؤقتة عند الانتقال بين عناصر الوسائط (#245).
- تم إصلاح مشكلة
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- الجلسة:
- إصلاح الخطأ الذي كان يؤدي إلى عدم تعديل زر التشغيل/الإيقاف المؤقت في الإشعار وفقًا لحالة المشغّل (#192)
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح خطأ كان يمنع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
LOADED
الأول (والوحيد في حالة عدم عرض إعلانات).
- تم إصلاح خطأ كان يمنع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
الإصدار 1.0.0-rc01
16 فبراير 2023
تم طرح androidx.media3:media3-*:1.0.0-rc01
.
يحتوي الإصدار 1.0.0-rc01 على عمليات الإيداع هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.3 من ExoPlayer.
- المكتبة الأساسية:
- عدِّل منطق ترتيب أداة فك الترميز في أداة العرض للحفاظ على إعدادات
MediaCodecSelector
المفضّلة، حتى إذا أفادت أداة فك الترميز بأنّها قد لا تتمكّن من تشغيل الوسائط بأداء جيد. على سبيل المثال، باستخدام أداة الاختيار التلقائية، سيتم تفضيل أداة فك ترميز الأجهزة التي تتوافق مع الوظائف فقط على أداة فك ترميز البرامج التي تتوافق مع التنسيق بالكامل (#10604). - أضِف
ExoPlayer.Builder.setPlaybackLooper
الذي يضبط سلسلة تشغيل حالية مسبقًا لمثيل ExoPlayer جديد. - السماح بإزالة أدوات مساعدة مدير التنزيل (#10776)
- أضِف مَعلمة إلى
BasePlayer.seekTo
للإشارة أيضًا إلى الأمر المستخدَم في البحث. - استخدام المظهر عند تحميل عناصر قابلة للرسم على الإصدار 21 من واجهة برمجة التطبيقات أو الإصدارات الأحدث (#220)
- إضافة
ConcatenatingMediaSource2
تتيح دمج عناصر وسائط متعددة في نافذة واحدة (#247)
- عدِّل منطق ترتيب أداة فك الترميز في أداة العرض للحفاظ على إعدادات
- أدوات استخراج البيانات:
- يتم عرض الخطأ
ParserException
بدلاً منNullPointerException
إذا كان جدول العيّنات (stbl) لا يتضمّن وصفًا مطلوبًا للعيّنات (stsd) عند تحليل وحدات trak. - تخطّي العيّنات بشكل صحيح عند الانتقال مباشرةً إلى إطار مزامنة في fMP4 (#10941)
- يتم عرض الخطأ
- الصوت:
- استخدِم معدّل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم المخزن المؤقت
لـ
AudioTrack
في عمليات التشغيل المباشر (passthrough).
- استخدِم معدّل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم المخزن المؤقت
لـ
- النص:
- إصلاح مشكلة
TextRenderer
تمرير فهرس غير صالح (سالب) إلىSubtitle.getEventTime
إذا كان ملف الترجمة والشرح لا يحتوي على أي إشارات - SubRip: تمت إضافة دعم لملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب البايتات.
- إصلاح مشكلة
- البيانات الوصفية:
- تحليل قيم متعدّدة مفصولة بقيم فارغة من إطارات ID3، على النحو المسموح به في ID3 الإصدار 2.4
- أضِف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموصوفَين بالبيانات الوصفية. - أضِف
MediaMetadata.isBrowsable
كبديلMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- DASH:
- إضافة تحليل كامل لمجموعات تعديل الصور، بما في ذلك عدد المربّعات (#3752)
- UI:
- إصلاح السمة المتوقّفة نهائيًا
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
لضمان نقل تغييرات مستوى العرض إلى أداة معالجة الأحداث المسجّلة (#229) - تم إصلاح ترتيب عناصر التحكّم في مشغّل الوسائط في منتصف الشاشة في
PlayerView
عند استخدام تنسيق من اليمين إلى اليسار (#227).
- إصلاح السمة المتوقّفة نهائيًا
- الجلسة:
- أضِف فئة مجرّدة
SimpleBasePlayer
للمساعدة في تنفيذ واجهةPlayer
للمشغّلات المخصّصة. - إضافة طريقة مساعدة لتحويل الرمز المميز لجلسة النظام الأساسي إلى Media3
SessionToken
(#171) - استخدِم
onMediaMetadataChanged
لتفعيل تحديثات لجلسة وسائط المنصة (#219). - أضِف جلسة الوسائط كمعلَمة للدالة
getMediaButtons()
منDefaultMediaNotificationProvider
واستخدِم قوائم غير قابلة للتغيير لتوضيح المعنى (#216). - أضِف أداة معالجة
onSetMediaItems
callback لتوفير وسائل لتعديل/ضبط قائمةMediaItem
، وفهرس البدء والموضع حسب الجلسة قبل الضبط على "المشغّل" (#156). - تجنُّب رصد النقر المزدوج لأحداث زر الوسائط غير المرتبطة بالبلوتوث (#233)
- زيادة فعالية
QueueTimeline
في حال كانت حالة الجلسة القديمة مشبوهة (#241).
- أضِف فئة مجرّدة
- البيانات الوصفية:
- تحليل قيم متعدّدة مفصولة بقيم فارغة من إطارات ID3، على النحو المسموح به في ID3 الإصدار 2.4
- أضِف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموصوفَين بالبيانات الوصفية. - أضِف
MediaMetadata.isBrowsable
كبديلMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- إضافة البث:
- تمت ترقية إصدار حزمة تطوير البرامج (SDK) لخدمة Cast إلى الإصدار 21.2.0.
- إضافة "إعلانات الوسائط التفاعلية":
- أزِل أداة معالجة أحداث اللاعبين
ImaServerSideAdInsertionMediaSource
من سلسلة التعليمات الخاصة بالتطبيق لتجنُّب مشاكل سلاسل التعليمات. - أضِف السمة
focusSkipButtonWhenAvailable
إلىImaServerSideAdInsertionMediaSource.AdsLoader.Builder
لطلب تركيز زر التخطّي على أجهزة التلفزيون واضبطها على "صحيح" تلقائيًا. - أضِف طريقة
focusSkipButton()
إلىImaServerSideAdInsertionMediaSource.AdsLoader
لطلب التركيز على زر التخطّي بشكل آلي. - تمت ترقية إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.29.0.
- أزِل أداة معالجة أحداث اللاعبين
- التطبيق التجريبي:
- طلب إذن الإشعارات بشأن إشعارات التنزيل في وقت التشغيل (#10884)
الإصدار 1.0.0-beta03
22 نوفمبر 2022
تم طرح androidx.media3:media3-*:1.0.0-beta03
.
يحتوي الإصدار 1.0.0-beta03 على عمليات الإيداع هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.2 من ExoPlayer.
- المكتبة الأساسية:
- أضِف
ExoPlayer.isTunnelingEnabled
للتحقّق مما إذا كان التوجيه مفعّلاً للمقاطع الصوتية المحدّدة حاليًا (#2518). - إضافة
WrappingMediaSource
لتبسيط عملية تضمينMediaSource
واحدة (#7279) - تجاهُل المخزن المؤقت الخلفي قبل أن يتوقف التشغيل بسبب عدم توفّر مساحة كافية في الذاكرة
- أغلِق كتلة التتبُّع "doSomeWork" عند تفعيل ميزة "نقل البيانات".
- إصلاح مشكلة تتبُّع الجلسات عند البحث السريع في
PlaybackStatsListener
(#180). - إرسال معاودة الاتصال
onMediaItemTransition
الناقصة عند طلبseekToNext
أوseekToPrevious
في قائمة تشغيل تتضمّن عنصرًا واحدًا (#10667) - أضِف
Player.getSurfaceSize
الذي يعرض حجم المساحة التي يتم عرض الفيديو عليها. - تم إصلاح الخطأ الذي كان يؤدي إلى حدوث
IllegalStateException
(#10758) عند إزالة المستمعين أثناء إصدار المشغّل.
- أضِف
- الإصدار:
- فرض الحد الأدنى من
compileSdkVersion
لتجنُّب أخطاء التجميع (#10684) - تجنَّب نشر الحزمة عند تضمينها في إصدار Gradle آخر.
- فرض الحد الأدنى من
- اختيار المقطع الصوتي:
- اختيار مقاطع صوتية أخرى بدلاً من Dolby Vision إذا كان جهاز العرض لا يتوافق معها (#8944).
- عمليات التنزيل:
- الفيديو:
- جرِّب برنامج ترميز بديل لتقنية Dolby Vision إذا كانت الشاشة لا تتوافق معها. (#9794).
- الصوت:
- استخدِم
SingleThreadExecutor
لإصدار مثيلاتAudioTrack
لتجنُّب أخطاء OutOfMemory عند إصدار عدة مشغّلات في الوقت نفسه (#10057). - تضيف هذه السمة
AudioOffloadListener.onExperimentalOffloadedPlayback
لحالة نقل بيانات AudioTrack. (#134). - اجعل
AudioTrackBufferSizeProvider
واجهة عامة. - أضِف
ExoPlayer.setPreferredAudioDevice
لضبط جهاز إخراج الصوت المفضّل (#135). - أعِد تسمية
androidx.media3.exoplayer.audio.AudioProcessor
إلىandroidx.media3.common.audio.AudioProcessor
. - ربط الصوت بـ 8 قنوات و12 قناة بأقنعة القنوات 7.1 و7.1.4 على التوالي في جميع إصدارات Android (#10701)
- استخدِم
- البيانات الوصفية:
- يمكن الآن ضبط
MetadataRenderer
لعرض البيانات الوصفية فور توفّرها. أنشئ مثيلاً باستخدامMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
لتحديد ما إذا كان عارض البيانات الوصفية سيُخرج البيانات الوصفية مبكرًا أو بشكل متزامن مع موضع المشغّل.
- يمكن الآن ضبط
- DRM:
- حلّ مشكلة في تنفيذ ClearKey على Android 13 تؤدي إلى عرض عنوان URL غير فارغ ولكن غير صالح للترخيص.
- إصلاح الخطأ
setMediaDrmSession failed: session not opened
عند التبديل بين أنظمة إدارة الحقوق الرقمية في قائمة تشغيل (مثل Widevine إلى ClearKey)
- النص:
- CEA-608: التأكّد من التعامل مع أوامر تبديل الخدمة في الحقل 2 بشكل صحيح (#10666)
- DASH:
- تحليل
EventStream.presentationTimeOffset
من ملفات البيانات (#10460)
- تحليل
- UI:
- استخدام الإعدادات الحالية التي تم تجاهلها في المشغّل كإعدادات مُسبقة في
TrackSelectionDialogBuilder
(#10429)
- استخدام الإعدادات الحالية التي تم تجاهلها في المشغّل كإعدادات مُسبقة في
- الجلسة:
- احرص على تنفيذ الأوامر دائمًا بالترتيب الصحيح حتى إذا كان بعضها يتطلّب حلّاً غير متزامن (#85).
- أضِف
DefaultMediaNotificationProvider.Builder
لإنشاء مثيلاتDefaultMediaNotificationProvider
. يمكن لأداة الإنشاء ضبط معرّف الإشعار ومعرّف قناة الإشعار واسم قناة الإشعار الذي يستخدمه مقدّم الخدمة. أضِف أيضًا الطريقةDefaultMediaNotificationProvider.setSmallIcon(int)
لضبط الأيقونة الصغيرة للإشعارات. (#104) - التأكّد من عدم حذف الأوامر التي تم إرسالها قبل
MediaController.release()
(#99) - يمكن لـ
SimpleBitmapLoader
تحميل صورة نقطية من معرّفات الموارد المنتظمة (URI) الخاصة بـfile://
(#108). - إصلاح تأكيد يمنع
MediaController
من البحث عن إعلان خلال فترة (#122) - عند انتهاء التشغيل، يتم إيقاف
MediaSessionService
من المقدّمة ويظهر إشعار لإعادة تشغيل آخر عنصر وسائط تم تشغيله (#112). - لا تبدأ خدمة تعمل في المقدّمة باستخدام انتظار معلّق للإيقاف المؤقت (#167).
- إخفاء "الشارة" المرتبطة بالإشعار الذي أنشأه
DefaultNotificationProvider
يدويًا على الإصدارَين 26 و27 من واجهة برمجة التطبيقات (يتم إخفاء الشارة تلقائيًا على الإصدار 28 والإصدارات الأحدث) (#131) - تم إصلاح الخطأ الذي كان يؤدي إلى حدوث IllegalStateExceptions عند إنشاء رابط ثانٍ بين MediaSession قديم وMediaController في Media3 (#49).
- RTSP:
- IMA:
- إضافة مهلة لتحميل معلومات الإعلان للتعامل مع الحالات التي تتعذّر فيها على حزمة تطوير البرامج لإعلانات الوسائط التفاعلية تحميل إعلان (#10510).
- منع تخطّي الإعلانات أثناء التشغيل عند الانتقال إلى نهاية المحتوى (#10685)
- احتساب مدة النافذة بشكل صحيح للبث المباشر الذي يتضمّن إعلانات يتم إدراجها من جهة الخادم، مثل "إعلانات الوسائط التفاعلية" الديناميكية (#10764)
- إضافة FFmpeg:
- إضافة علامات جديدة مطلوبة لربط مكتبات FFmpeg بإصدار NDK 23.1.7779620 والإصدارات الأحدث (#9933)
- إضافة AV1:
- تحديث إصدار CMake لتجنُّب حالات عدم التوافق مع أحدث إصدارات "استوديو Android" (#9933)
- إضافة البث:
- نفِّذ
getDeviceInfo()
لتتمكّن من تحديدCastPlayer
عند التحكّم في التشغيل باستخدامMediaController
(#142).
- نفِّذ
- المحوّل:
- أضِفنا مؤقت مراقبة برنامج دمج الصوت والفيديو لرصد الحالات التي يستغرق فيها إنشاء عيّنة إخراج وقتًا طويلاً جدًا.
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Transformer.Builder.setOutputMimeType(String)
تمت إزالة هذه الميزة. سيكون نوع MIME دائمًا MP4 عند استخدام أداة دمج الصوت والفيديو التلقائية.
- إزالة
الإصدار 1.0.0-beta02
21 تموز (يوليو) 2022
تم طرح androidx.media3:media3-*:1.0.0-beta02
.
يحتوي الإصدار 1.0.0-beta02 على عمليات الإيداع هذه.
يتوافق هذا الإصدار مع الإصدار 2.18.1 من ExoPlayer.
- المكتبة الأساسية:
- تأكَّد من أنّ تغيير
ShuffleOrder
باستخدامExoPlayer.setShuffleOrder
يؤدي إلى إجراء مكالمة إلىPlayer.Listener#onTimelineChanged
معreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - بالنسبة إلى الوسائط المتدفّقة، أدرِج المسارات المحدّدة فقط في الموضع المخزّن مؤقتًا (#10361).
- السماح باستخدام أداة تسجيل مخصّصة لجميع نواتج سجلّ ExoPlayer (#9752)
- تم إصلاح مشكلة عدم عمل
setDataSourceFactory
فيDefaultMediaSourceFactory
في بعض الحالات (#116).
- تأكَّد من أنّ تغيير
- أدوات استخراج البيانات:
- DASH:
- تحليل عنوان URL لترخيص ClearKey من ملفات البيانات (#10246)
- UI:
- تأكَّد من أنّ TalkBack يعلن عن خيار السرعة النشط حاليًا في قائمة عناصر التحكّم في التشغيل (#10298).
- RTSP:
- إضافة معالجة حِزم VP8 المجزّأة (#110)
- إضافة Leanback:
- الاستماع إلى
playWhenReady
التغييرات فيLeanbackAdapter
(10420)
- الاستماع إلى
- البث:
الإصدار 1.0.0-beta01
16 يونيو 2022
تم طرح androidx.media3:media3-*:1.0.0-beta01
.
يحتوي الإصدار 1.0.0-beta01 على عمليات الإيداع هذه.
يتوافق ذلك مع الإصدار 2.18.0 من ExoPlayer.
- المكتبة الأساسية:
- فعِّل إمكانية جمع بيانات تشخيص نظام Android الأساسي من خلال
MediaMetricsManager
. سيعيد ExoPlayer توجيه أحداث التشغيل وبيانات الأداء إلى النظام الأساسي، ما يساعد في توفير معلومات عن أداء النظام وتصحيح الأخطاء على الجهاز. ويمكن أن تجمع Google هذه البيانات أيضًا إذا فعّل المستخدم خيار مشاركة بيانات الاستخدام والتشخيص. يمكن للتطبيقات إيقاف المشاركة في بيانات تشخيص ExoPlayer على النظام الأساسي باستخدامExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - تم إصلاح الخطأ الذي يؤدي إلى إعادة ضبط مسارات الترجمة والشرح بشكل متكرر عند استخدام
MergingMediaSource
، على سبيل المثال عند تحميل ملفات ترجمة وشرح بشكل جانبي وتغيير ملف الترجمة والشرح المحدّد أثناء التشغيل (#10248). - إيقاف رصد نوع شبكة 5G-NSA على الإصدارَين 29 و30 من واجهة برمجة التطبيقات ستفترض عمليات التشغيل هذه توفّر شبكة الجيل الرابع.
- يمنع هذا الخيار تمرير
null
إلىMediaSource.Factory.setDrmSessionManagerProvider
وMediaSource.Factory.setLoadErrorHandlingPolicy
. يمكن تمرير مثيلاتDefaultDrmSessionManagerProvider
وDefaultLoadErrorHandlingPolicy
بشكل صريح إذا لزم الأمر. - أضِف
MediaItem.RequestMetadata
لتمثيل البيانات الوصفية اللازمة لتشغيل الوسائط عندما لا تكون قيمةLocalConfiguration
الدقيقة معروفة. يجب أيضًا إزالةMediaMetadata.mediaUrl
لأنّها أصبحت مضمّنة فيRequestMetadata
. - أضِف
Player.Command.COMMAND_SET_MEDIA_ITEM
للسماح للاعبين بتحديد عنصر واحد.
- فعِّل إمكانية جمع بيانات تشخيص نظام Android الأساسي من خلال
- اختيار المقطع الصوتي:
- تسوية الفئة
TrackSelectionOverrides
إلىTrackSelectionParameters
، وترقيةTrackSelectionOverride
إلى فئة ذات مستوى أعلى - أعِد تسمية
TracksInfo
إلىTracks
وTracksInfo.TrackGroupInfo
إلىTracks.Group
. تمت أيضًا إعادة تسميةPlayer.getCurrentTracksInfo
وPlayer.Listener.onTracksInfoChanged
إلىPlayer.getCurrentTracks
وPlayer.Listener.onTracksChanged
. ويشمل ذلك "إلغاء الإيقاف النهائي" لاسم الطريقةPlayer.Listener.onTracksChanged
، ولكن مع أنواع مختلفة من المَعلمات. - غيِّر
DefaultTrackSelector.buildUponParameters
وDefaultTrackSelector.Parameters.buildUpon
لعرضDefaultTrackSelector.Parameters.Builder
بدلاً منDefaultTrackSelector.ParametersBuilder
المتوقّف نهائيًا. - أضِف
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
الذي يكون مفعَّلاً تلقائيًا. عند تفعيل هذا الخيار، سيفضّلDefaultTrackSelector
مسارات الصوت التي لا يتجاوز عدد قنواتها إمكانات إخراج الجهاز. على الأجهزة المحمولة، سيتم استخدام تنسيقات الصوت الأحادي أو الاستريو بدلاً من تنسيقات الصوت المتعدد القنوات، ما لم يكن من الممكن تطبيق تأثيرات الصوت المكاني على تنسيق الصوت المتعدد القنوات (الإصدار 12L من نظام التشغيل Android أو الإصدارات الأحدث) أو إذا كان تنسيق صوت محيطي من Dolby.DefaultTrackSelector
بالإضافة إلى ذلك، على الأجهزة التي تتوافق مع ميزة "تحديد الموقع المكاني للصوت"، ستراقب السمةDefaultTrackSelector
التغييرات في خصائص "تحديد الموقع المكاني للصوت" وستؤدي إلى اختيار مقطع صوتي جديد عند حدوث هذه التغييرات. يتم استبعاد الأجهزة التي تستخدمtelevision
وضع واجهة المستخدم من هذه القيود، وسيتم تفضيل التنسيق الذي يتضمّن أكبر عدد من القنوات. لتفعيل هذه الميزة، يجب إنشاء مثيلDefaultTrackSelector
باستخدامContext
.
- تسوية الفئة
- الفيديو:
- أعِد تسمية
DummySurface
إلىPlaceholderSurface
. - إضافة إمكانية استخدام ترميز AV1 في
MediaCodecVideoRenderer.getCodecMaxInputSize
- أعِد تسمية
- الصوت:
- يستخدم LG AC3 audio decoder نوع MIME غير عادي للإعلان.
- غيِّر نوع الإرجاع الخاص بـ
AudioAttributes.getAudioAttributesV21()
منandroid.media.AudioAttributes
إلى برنامج تضمينAudioAttributesV21
جديد للفئة، وذلك لتجنُّب بطء عملية التحقّق من ART على الإصدارات الأقدم من المستوى 21 لواجهة برمجة التطبيقات. - يمكنك طلب البيانات من النظام الأساسي (الإصدار 29 من واجهة برمجة التطبيقات أو الإصدارات الأحدث) أو افتراض عدد قنوات ترميز الصوت لتمرير الصوت عندما لا يتم ضبط عدد قنوات تنسيق الصوت، وهو ما يحدث عند إعداد HLS بدون تقسيم إلى أجزاء (10204).
- اضبط
AudioTrack
باستخدام قناع القناةAudioFormat.CHANNEL_OUT_7POINT1POINT4
إذا كان برنامج الترميز يخرج صوت PCM بـ 12 قناة (#10322).
- DRM
- يجب التأكّد من تعديل جلسة إدارة الحقوق الرقمية بشكل صحيح دائمًا عند البحث عن محتوى بعد تغيير التنسيق مباشرةً (10274).
- النص:
- غيِّر
Player.getCurrentCues()
لعرضCueGroup
بدلاً منList<Cue>
. - SSA: إضافة دعم لإعداد النمط
OutlineColour
عندBorderStyle == 3
(أيOutlineColour
يضبط خلفية الإشارة) (#8435). - CEA-708: يتم تحليل البيانات إلى عدة حِزم خدمة وتجاهل الحِزم غير المرتبطة برقم الخدمة المحدّد حاليًا.
- إزالة
RawCcExtractor
، الذي كان يُستخدم فقط للتعامل مع تنسيق ترجمة وشرح داخلي خاص بـ Google
- غيِّر
- أدوات استخراج البيانات:
- UI:
- إصلاح مشكلة عدم إرسال الأحداث إلى
OnClickListener
التي تم ضبطها علىPlayerView
في حالuseController=false
(#9605) يجب أيضًا إصلاح مشكلة عدم تسليم الأحداث إلىOnLongClickListener
لجميع إعدادات العرض. - تم إصلاح مشكلة التعامل بشكل غير صحيح مع سلسلة من أحداث اللمس التي تخرج من حدود
PlayerView
قبلACTION_UP
على أنّها نقرة (#9861). - تم إصلاح مشكلة
PlayerView
المتعلّقة بإمكانية الوصول والتي قد يؤدي فيها النقر إلى تبديل التشغيل بدلاً من إخفاء عناصر التحكّم (#8627). - أعِد كتابة
TrackSelectionView
وTrackSelectionDialogBuilder
لتعملا مع واجهةPlayer
بدلاً منExoPlayer
. يتيح ذلك استخدام طرق العرض مع عمليات تنفيذPlayer
الأخرى، ويزيل التبعية من وحدة واجهة المستخدم إلى وحدة ExoPlayer. هذا التغيير غير متوافق مع الإصدارات السابقة. - عدم عرض مسارات النص الإجباري في أداة اختيار المسار
PlayerView
، والحفاظ على مسار نص إجباري مناسب محدّد في حال اختيار "بلا" (#9432)
- إصلاح مشكلة عدم إرسال الأحداث إلى
- DASH:
- تحليل عدد القنوات من عناصر DTS
AudioChannelConfiguration
يؤدي هذا إلى إعادة تفعيل ميزة "مرور الإشارة الصوتية" لبث DTS (#10159). - يمنع هذا الخيار تمرير
null
إلىDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
بشكل صريح إذا لزم الأمر.
- تحليل عدد القنوات من عناصر DTS
- HLS:
- الرجوع إلى الإعداد الكامل إذا لم تتضمّن سمة CODECS في قائمة التشغيل برنامج ترميز الصوت (#10065).
- يمنع هذا الخيار تمرير
null
إلىHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
وHlsMediaSource.Factory.setPlaylistParserFactory
وHlsMediaSource.Factory.setPlaylistTrackerFactory
. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
أوDefaultHlsPlaylistParserFactory
أو مرجع إلىDefaultHlsPlaylistTracker.FACTORY
بشكل صريح إذا كان ذلك مطلوبًا.
- Smooth Streaming:
- يمنع هذا الخيار تمرير
null
إلىSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
بشكل صريح إذا لزم الأمر.
- يمنع هذا الخيار تمرير
- RTSP:
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لترميز H263 (#63)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لملفات MPEG4 (#35)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لترميز HEVC (#36)
- إضافة قارئ RTP لترميز AMR في الوقت الحالي، لا تتوفّر سوى حزم بيانات AMR غير المتداخلة ذات القناة الواحدة. لا تتوفّر حمولة AMR RTP المركّبة. (#46)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لبرنامج الترميز VP8 (#47)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لملفات WAV (#56)
- إصلاح عنوان المصادقة الأساسية لبروتوكول RTSP (#9544).
- إيقاف التحقّق من حقول SDP الإلزامية لأنّ ExoPlayer لا يحتاج إليها (#10049)
- طرح استثناء تم التحقّق منه عند تحليل توقيت RTSP (#10165).
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لبرنامج ترميز الفيديو VP9 (#47)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لتنسيق OPUS (#53)
- مصادر البيانات:
- أعِد تسمية
DummyDataSource
إلىPlaceholderDataSource
. - حلّ بديل للتعامل مع انقطاع OkHttp
- أعِد تسمية
- الجلسة:
- استبدِل
MediaSession.MediaItemFiller
بـMediaSession.Callback.onAddMediaItems
للسماح بحلّ الطلبات بشكل غير متزامن. - تتيح هذه السمة طرق
setMediaItems(s)
عندما يتصلMediaController
بجلسة وسائط قديمة. - إزالة
MediaController.setMediaUri
وMediaSession.Callback.onSetMediaUri
ويمكن تحقيق الوظيفة نفسها باستخدامMediaController.setMediaItem
وMediaSession.Callback.onAddMediaItems
. - إعادة توجيه مكالمات
MediaController
السابقة لتشغيل الوسائط علىMediaSession.Callback.onAddMediaItems
بدلاً منonSetMediaUri
- أضِف
MediaNotification.Provider
وDefaultMediaNotificationProvider
لتوفير تخصيص للإشعار. - أضِف
BitmapLoader
وSimpleBitmapLoader
لتنزيل صور الأعمال الفنية. - أضِف
MediaSession.setCustomLayout()
لتوفير التوافق مع الإصدارات القديمة من الجلسة القديمة. - أضِف
MediaSession.setSessionExtras()
لتوفير ميزات مماثلة للجلسة القديمة. - أعِد تسمية
MediaSession.MediaSessionCallback
إلىMediaSession.Callback
، وMediaLibrarySession.MediaLibrarySessionCallback
إلىMediaLibrarySession.Callback
، وMediaSession.Builder.setSessionCallback
إلىsetCallback
. - إصلاح خطأ NPE في
MediaControllerImplLegacy
(#59). - تعديل معلومات موضع الجلسة على المخطط الزمني change(#51)
- إصلاح خطأ NPE في
MediaControllerImplBase
بعد تحرير وحدة التحكّم (#74).
- استبدِل
- تشغيل الإعلان / IMA:
- تقليل معدّل طلب الإعلانات من كل 100 ملي ثانية إلى كل 200 ملي ثانية، وذلك بما يتوافق مع توصيات مجلس تقييم الوسائط (MRC).
- إضافة FFmpeg:
- تحديث إصدار CMake إلى
3.21.0+
لتجنُّب خطأ في CMake يؤدي إلى تعذُّر مزامنة Gradle في Android Studio (#9933)
- تحديث إصدار CMake إلى
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
استخدِمPlayer.Listener.onTracksChanged(Tracks)
بدلاً من ذلك. - إزالة
Player.getCurrentTrackGroups
وPlayer.getCurrentTrackSelections
استخدِمPlayer.getCurrentTracks
بدلاً من ذلك. يمكنك أيضًا مواصلة استخدامExoPlayer.getCurrentTrackGroups
وExoPlayer.getCurrentTrackSelections
، مع العلم أنّ هاتين الطريقتين ستظلان متوقفتَين نهائيًا. - إزالة الثوابت
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
وDEFAULT_TRACK_SELECTOR_PARAMETERS
يُرجى استخدامgetDefaultTrackSelectorParameters(Context)
بدلاً منها عند الإمكان، وDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
في الحالات الأخرى. - إزالة أداة الإنشاء
DefaultTrackSelector(ExoTrackSelection.Factory)
يمكنك استخدامDefaultTrackSelector(Context, ExoTrackSelection.Factory)
كبديل. - إزالة
Transformer.Builder.setContext
يجب تمريرContext
إلى الدالة الإنشائيةTransformer.Builder
بدلاً من ذلك.
- إزالة
الإصدار 1.0.0-alpha03
14 مارس 2022
تم طرح androidx.media3:media3-*:1.0.0-alpha03
.
يحتوي الإصدار 1.0.0-alpha03 على عمليات الإيداع هذه.
يتوافق ذلك مع الإصدار 2.17.1 من ExoPlayer.
- الصوت:
- إصلاح خطأ التحقّق من إمكانات الصوت في Dolby Atmos (E-AC3-JOC) في HLS
- أدوات استخراج البيانات:
- FMP4: تم إصلاح المشكلة التي كانت تؤدي إلى عرض البيانات الوصفية لعينات emsg بترتيب غير صحيح في عمليات البث التي تحتوي على كل من عناصر v0 وv1 emsg (#9996).
- النص:
- إصلاح التفاعل بين
SingleSampleMediaSource.Factory.setTrackId
وMediaItem.SubtitleConfiguration.Builder.setId
لتحديد أولوية الحقلSubtitleConfiguration
والرجوع إلى القيمةFactory
إذا لم يتم ضبطها (#10016).
- إصلاح التفاعل بين
- تشغيل الإعلان:
- إصلاح مشاكل نقص الصوت بين فترات الإعلانات في أحداث البث المباشر التي تستخدم تقنية "إدراج الإعلانات من جهة الخادم" في HLS
الإصدار 1.0.0-alpha02
2 مارس 2022
تم طرح androidx.media3:media3-*:1.0.0-alpha02
.
يحتوي الإصدار 1.0.0-alpha02 على عمليات الإيداع هذه.
يتوافق ذلك مع الإصدار 2.17.0 من ExoPlayer.
- Core Library:
- أضِف طريقة محمية
DefaultRenderersFactory.getCodecAdapterFactory()
حتى تتمكّن الفئات الفرعية منDefaultRenderersFactory
التي تتجاوزbuildVideoRenderers()
أوbuildAudioRenderers()
من الوصول إلى أداة إنشاء محوّل الترميز وتمريرها إلى مثيلاتMediaCodecRenderer
التي تنشئها. - يجب نقل حقول عنوان ICY
name
وgenre
إلىMediaMetadata.station
وMediaMetadata.genre
على التوالي، كي تصل إلى التطبيق عبرPlayer.Listener.onMediaMetadataChanged()
(#9677). - إزالة المفاتيح الفارغة من
DefaultHttpDataSource#getResponseHeaders
- تأخير وإعادة المحاولة عند تعذُّر إنشاء مثيل
MediaCodec
يساعد هذا الخيار في حلّ مشكلة تحدث على بعض الأجهزة عند التبديل من برنامج ترميز آمن إلى برنامج ترميز آخر (#8696). - أضِف
MediaCodecAdapter.getMetrics()
للسماح للمستخدمين بالحصول على بيانات المقاييس منMediaCodec
. (#9766) - تم إصلاح مشكلة حلّ تبعية Maven (#8353).
- إيقاف التعديل التلقائي للسرعة في البث المباشر الذي لا يتضمّن ميزات زمن الانتقال المنخفض ولا يتضمّن طلبًا من المستخدم لضبط السرعة (#9329)
- أعِد تسمية
DecoderCounters#inputBufferCount
إلىqueuedInputBufferCount
. - اجعل
SimpleExoPlayer.renderers
خاصًا. يمكن الوصول إلى أدوات العرض من خلالExoPlayer.getRenderer
. - تم تعديل بعض القيم الثابتة في
AnalyticsListener.EventFlags
لتتطابق مع القيم فيPlayer.EventFlags
. - قسِّم
AnalyticsCollector
إلى واجهة وبرنامج تنفيذي تلقائي للسماح لبرنامج R8 بإزالة الواجهة إذا لم يكن التطبيق بحاجة إليها.
- أضِف طريقة محمية
- اختيار المقطع الصوتي:
- إتاحة علامات دور الفيديو المفضَّل عند اختيار المقاطع الصوتية (#9402)
- تعديل منطق اختيار مقاطع الفيديو ليأخذ في الاعتبار أنواع MIME المفضّلة وعلامات الأدوار عند اختيار مقاطع فيديو متعددة للتكيّف (#9519)
- تعديل منطق اختيار الفيديو والمقطع الصوتي لاختيار التنسيقات فقط لخيارات التكيّف التي تتضمّن مستوى الدعم نفسه لبرنامج الترميز والأجهزة (#9565)
- تعديل منطق اختيار مسار الفيديو لتفضيل برامج الترميز الأكثر فعالية في حال توفّر برامج ترميز متعددة متوافقة مع برامج فك الترميز الأساسية المسرَّعة على الجهاز (#4835)
- يجب إعطاء الأولوية لإعدادات المحتوى الصوتي المفضّلة (على سبيل المثال، المقطع الصوتي "الافتراضي" أو مقطع صوتي مطابق للغة الإعدادات المحلية للنظام) على قيود اختيار المقطع الصوتي الفني (على سبيل المثال، نوع MIME المفضّل أو الحد الأقصى لعدد القنوات).
- تم إصلاح مشكلة اختيار المسار التي لم يؤدِ فيها تجاهل إحدى مجموعات المسارات إلى إيقاف مجموعات المسارات الأخرى من النوع نفسه (#9675).
- تم إصلاح مشكلة اختيار المسار حيث لا يتم تطبيق مجموعة من عمليات إلغاء المسار غير الفارغة والفارغة بشكل صحيح (#9649).
- يجب عدم تكرار
TrackGroup
فيTrackGroupArray
. يمكن دائمًا تمييزTrackGroup
s من خلال ضبطid
في الدالة الإنشائيةTrackGroup
. يحلّ هذا الإصدار مشكلة تعذُّر تشغيل المحتوى عند استئناف التشغيل بعد تشغيل التطبيق في الخلفية مع إيقاف مسار صوتي نشط (#9718). - تعديل طريقة العمل في
AdaptiveTrackSelection
للسماح بزيادة الجودة في حال توفّر معدّل نقل بيانات كافٍ على الشبكة حتى إذا كان التشغيل قريبًا جدًا من نقطة البث المباشر (#9784)
- الفيديو:
- إصلاح منطق الرجوع إلى برنامج فك الترميز الاحتياطي لتقنية Dolby Vision لاستخدام برنامج فك ترميز H264/H265 متوافق عند الحاجة
- الصوت:
- إصلاح منطق الرجوع إلى أداة فك الترميز الاحتياطية في Dolby Atmos (E-AC3-JOC) لاستخدام أداة فك ترميز E-AC3 متوافقة عند الحاجة
- تغيير واجهات برمجة التطبيقات
AudioCapabilities
لتتطلّب تمريرAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
بشكل صريح بدلاً منnull
- السماح بتخصيص عملية احتساب حجم المخزن المؤقت
AudioTrack
من خلال إدخالAudioTrackBufferSizeProvider
إلىDefaultAudioSink
(#8891) - أعِد محاولة إنشاء
AudioTrack
إذا كان حجم المخزن المؤقت المطلوب أكبر من 1 ميغابايت. (#9712).
- أدوات استخراج البيانات:
- النص:
- DRM:
- إزالة
playbackLooper
منDrmSessionManager.(pre)acquireSession
عندما يستخدم تطبيقDrmSessionManager
فيMediaSource
مخصّص، يجب تمريرplaybackLooper
إلىDrmSessionManager.setPlayer
بدلاً من ذلك.
- إزالة
- تشغيل الإعلان / IMA:
- إضافة دعم ميزة "إدراج الإعلان الديناميكي" (DAI) في IMA (#8213)
- أضِف طريقة إلى
AdPlaybackState
للسماح بإعادة ضبط مجموعة إعلانية كي يمكن تشغيلها مرة أخرى (#9615). - فرض سرعة تشغيل 1.0 أثناء تشغيل الإعلان (#9018)
- تم إصلاح المشكلة التي كانت تؤدي إلى إعادة ضبط التشغيل على الفور (#9929) عند تعذّر تحميل مجموعة إعلانية.
- UI:
- DASH:
- أضِف السمات الأساسية والتكميلية التي تم تحليلها إلى
Representation
(#9579). - توفير دعم لدور مسار
forced-subtitle
(#9727) - إيقاف تفسير دور مسار
main
على أنّهC.SELECTION_FLAG_DEFAULT
- إصلاح منطق استبعاد عنوان URL الأساسي للبيانات الوصفية التي لا تحدّد مساحة اسم DVB (#9856)
- إتاحة عناوين URL النسبية
MPD.Location
(#9939)
- أضِف السمات الأساسية والتكميلية التي تم تحليلها إلى
- HLS:
- املأ
Format.label
بشكل صحيح لبث HLS الصوتي فقط (#9608). - استخدِم الإعداد التلقائي "التحضير بدون تقسيم" لتحسين وقت بدء التشغيل. إذا كانت عروضك تتضمّن مسارات ترجمة وشرح مدمجة غير معرَّفة في قائمة التشغيل الرئيسية، عليك إضافتها إلى قائمة التشغيل الرئيسية لتصبح متاحة للتشغيل، أو إيقاف الإعداد بدون تقسيم إلى أجزاء باستخدام
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - إتاحة البحث الدقيق عن إطارات المفاتيح في HLS (#2882)
- املأ
- RTSP:
- المحوّل:
- زيادة الحد الأدنى المطلوب من إصدار واجهة برمجة التطبيقات إلى 21
- يُستخدم
TransformationException
الآن لوصف الأخطاء التي تحدث أثناء عملية تحويل. - أضِف
TransformationRequest
لتحديد خيارات التحويل. - السماح بتسجيل عدة مستمعين
- إصلاح مشكلة تعليق Transformer عند قراءة جزء من ناتج الترميز.
- إصلاح خطأ محتمل في NPE في
Transformer.getProgress
عند طرح استثناءات أثناء تحرير أداة الدمج - أضِف تطبيقًا تجريبيًا لتطبيق عمليات التحويل.
- إضافة MediaSession:
- بشكلٍ تلقائي، يمحو الزر
MediaSessionConnector
قائمة التشغيل عند إيقافها. يمكن للتطبيقات التي تريد الاحتفاظ بقائمة التشغيل استدعاءsetClearMediaItemsOnStop(false)
على الموصّل.
- بشكلٍ تلقائي، يمحو الزر
- إضافة البث:
- إضافة FFmpeg:
- يجب أن يعتمد
build_ffmpeg.sh
على أدوات LLVM الثنائية بدلاً من أدوات GNU (#9933).
- يجب أن يعتمد
- التوافق مع Android 12:
- رقِّي إضافة Cast لتعتمد على
com.google.android.gms:play-services-cast-framework:20.1.0
. الإصدارات الأقدم منplay-services-cast-framework
غير متوافقة مع التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android، وستتعطّل مع ظهورIllegalArgumentException
عند إنشاءPendingIntent
(#9528).
- رقِّي إضافة Cast لتعتمد على
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.EventListener
يمكنك استخدامPlayer.Listener
كبديل. - إزالة
MediaSourceFactory#setDrmSessionManager
وMediaSourceFactory#setDrmHttpDataSourceFactory
وMediaSourceFactory#setDrmUserAgent
استخدِمMediaSourceFactory#setDrmSessionManagerProvider
بدلاً من ذلك. - إزالة
MediaSourceFactory#setStreamKeys
استخدِمMediaItem.Builder#setStreamKeys
بدلاً من ذلك. - إزالة
MediaSourceFactory#createMediaSource(Uri)
استخدِمMediaSourceFactory#createMediaSource(MediaItem)
بدلاً من ذلك. - إزالة
setTag
منDashMediaSource
وHlsMediaSource
وSsMediaSource
يمكنك استخدامMediaItem.Builder#setTag
كبديل. - إزالة
DashMediaSource#setLivePresentationDelayMs(long, boolean)
استخدِمMediaItem.Builder#setLiveConfiguration
وMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
لتجاوز ملف البيان، أوDashMediaSource#setFallbackTargetLiveOffsetMs
لتقديم قيمة احتياطية. - إزالة
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
لم يعُد بإمكانك إيقاف ميزة فرض استخدام سلاسل المحادثات. - إزالة
ActionFile
وActionFileUpgradeUtil
استخدِم الإصدار 2.16.1 من ExoPlayer أو إصدارًا أقدم لاستخدامActionFileUpgradeUtil
لدمج ملفات الإجراءات القديمة فيDefaultDownloadIndex
. - إزالة
ProgressiveMediaSource#setExtractorsFactory
استخدِم الدالة الإنشائيةProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
بدلاً من ذلك. - إزالة
ProgressiveMediaSource.Factory#setTag
وProgressiveMediaSource.Factory#setCustomCacheKey
استخدِمMediaItem.Builder#setTag
وMediaItem.Builder#setCustomCacheKey
بدلاً منها. - أزِل الدالتَين الإنشائيتَين
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
وDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. استخدِم الدالة الإنشائيةDefaultRenderersFactory(Context)
وDefaultRenderersFactory#setExtensionRendererMode
وDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
بدلاً من ذلك. - أزِل جميع منشئات
CronetDataSource
العامة. استخدِمCronetDataSource.Factory
بدلاً من ذلك.
- إزالة
- غيِّر
IntDefs
التالي إلى@Target(TYPE_USE)
فقط. قد يؤدي ذلك إلى تعذُّر تجميع الاستخدامات في Kotlin، ويمكن حلّ هذه المشكلة من خلال نقل التعليق التوضيحي إلى النوع (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
-
@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.ext.flac
) -
@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.extractor.flac
) @FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
الإصدار 1.0.0-alpha01
27 أكتوبر 2021
تم طرح androidx.media3:media3-*:1.0.0-alpha01
.
يحتوي الإصدار 1.0.0-alpha01 على عمليات الدمج التالية.
الميزات الجديدة
Media3 هي الوجهة الجديدة لمكتبات دعم الوسائط، بما في ذلك ExoPlayer. تحتوي الإصدارات الأولى من الإصدار التجريبي الأولي على عمليات تنفيذ مبكرة وفعّالة للمكتبات من أجل تنفيذ حالات استخدام الوسائط، بما في ذلك:
- ExoPlayer هو مشغّل وسائط على مستوى التطبيق لنظام التشغيل Android، وهو سهل التخصيص والتوسيع.
- وظائف جلسة الوسائط لعرض عمليات التشغيل والتحكّم فيها تستخدم وحدة الجلسة الجديدة واجهة
Player
نفسها التي يستخدمها ExoPlayer. - مكوّنات واجهة المستخدم لإنشاء واجهات مستخدم لتشغيل الوسائط
- وحدات تتضمّن وظائف في مكتبات أخرى لاستخدامها مع ExoPlayer، مثل إدراج الإعلانات من خلال حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK).
لمزيد من المعلومات، اطّلِع على مشروع Media3 على GitHub.
كانت ExoPlayer مستضافة سابقًا في مشروع ExoPlayer GitHub منفصل. في Media3، اسم الحزمة هو androidx.media3.exoplayer
. ونخطّط لمواصلة صيانة مشروع ExoPlayer على GitHub وإصداره لفترة من الوقت لمنح التطبيقات الوقت الكافي للانتقال إلى Media3. تتضمّن Media3 بدائل لجميع وحدات ExoPlayer، باستثناء الإضافات القديمة media2 وmediasession، والتي تم استبدالها بالوحدة الجديدة media3-session
. يتيح ذلك الدمج المباشر بين مشغّلات الوسائط وجلسات الوسائط بدون الحاجة إلى استخدام فئة محوّل/موصل.