Media3
| آخر تحديث | الإصدار المستقر | إصدار محتمل | الإصدار التجريبي | الإصدار الأولي |
|---|---|---|---|---|
| 11 نوفمبر 2026 | 1.11.1 | - | 1.12.0-beta01 | - |
تحديد الاعتماديات
لإضافة اعتمادية على Media3، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:
Groovy
dependencies { def media3_version = "1.11.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 Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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.11.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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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.12.0
الإصدار 1.12.0-beta01
11 نوفمبر 2026
يتضمّن الإصدار 1.12.0-beta01 التعديلات التالية.
- المكتبة المشتركة:
- تقليل
C.DEFAULT_BUFFER_SEGMENT_SIZEمن65536إلى65520ليتناسب كل تخصيص للمخزن المؤقت (بما في ذلك عنوان الكائنbyte[]) مع صفحات نظام التشغيل بالكامل في مساحة الكائن الكبيرة في ART، ما يقلل من استخدام ذاكرة المخزن المؤقت للعينة بنسبة %6 تقريبًا على الأجهزة التي تحتوي على صفحات بحجم 4 كيلوبايت وبنسبة %20 تقريبًا على الأجهزة التي تحتوي على صفحات بحجم 16 كيلوبايت. - استبدِل
androidx.media3.common.util.NullableTypeبـ JSpecifyorg.jspecify.annotations.Nullable. - يجب إزالة
androidx.media3.common.util.UnknownNullواستخدام تعليقات JSpecify التوضيحية حول القيم الفارغة بدلاً منها. يجب أن تحدّد الفئات الفرعية في Kotlin من النوعRunnableFutureTaskالتي تتضمّن نوع نتيجة يقبل القيمة الفارغة (مثلVoid?) وسيطة نوع تقبل القيمة الفارغة (مثلRunnableFutureTask<Void?, Exception>). - أضِف
AdViewProvider.getAdVideoView()لتوفير حاوية الفيديوViewالتي يمكن تغيير حجمها أثناء تشغيل الإعلان. - تم ربط سلسلة برنامج ترميز RFC 6381 لـ
mlpaبـMimeTypes.AUDIO_TRUEHDفيMimeTypes.getMediaMimeType، وتم إصلاح المقاطع الصوتية المفقودة بتنسيق Dolby TrueHD المدمجة أثناء إعداد HLS بدون أجزاء (#3485). - يجب إصلاح
AdPlaybackState.withAdDurationsUsلنسخ الصفيف الذي تم تمريره وAdPlaybackState.fromAdPlaybackStateلنسخ جميع حقول الصفيف للمجموعات الإعلانية، بحيث لا يمكن تعديل مثيل من خلال الصفائف المحفوظة أو المشتركة. - تم إصلاح الخطأ
IllegalStateException("تم الوصول إلى المشغّل من سلسلة محادثات خاطئة") عند إلغاءPlayer.listenأوPlayer.listenToمن سلسلة محادثات غير سلسلة محادثات تطبيق المشغّل (على سبيل المثال، أثناء تفكيك اختبار واجهة المستخدم في Compose) (#3005).
- تقليل
- ExoPlayer:
- تم إصلاح مشكلة حيث يمكن أن يبدأ العارض الذي تم تفعيله مبكرًا لفترة وسائط قادمة في العرض قبل انتقال التشغيل إلى تلك الفترة.
- يجب أن تحدّد الفئات الفرعية في Kotlin من
CompositeMediaSourceالتي تستخدم معرّفات مصادر فرعية قابلة للقيم الفارغة (مثلVoid?) وسيطة نوع قابلة للقيم الفارغة (مثلCompositeMediaSource<Void?>). - يُرجى التحقّق في "
AdsMediaSource" من أنّAdPlaybackState.removedAdGroupCountلا ينخفض في جميع تحديثات "AdPlaybackState". - تم إصلاح مشكلة كانت تؤدي إلى تفعيل أداة العرض الواردة قبل أن تنتهي أداة العرض الصادرة من العرض، وذلك عند الانتقال بين فترات الوسائط التي تستخدم أدوات عرض مختلفة (على سبيل المثال، ظهور الخطأ
IllegalStateException("تم تفعيل ساعات وسائط متعددة لأدوات العرض")) عند تفعيلFlags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - تم إصلاح مشكلة حيث يؤدي الانتقال إلى إعلان بسرعة تشغيل مخصّصة إلى تأخير تقدُّم جميع أدوات العرض إلى فترة الإعلان عند تفعيل
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - تم إصلاح المشاكل المتعلّقة ببرامج العرض التي يتم تجهيزها مسبقًا أثناء عمليات الانتقال بين فترات تشغيل الوسائط وإعادة اختيار المسارات.
- تمت إضافة
MediaPeriod.supportsStreamPrerollFlags()(القيمة التلقائية هيfalse) للسماح لعمليات تنفيذMediaPeriodالمخصّصة بالموافقة على الإبلاغ عن الانقطاعات الأولية باستخدامSampleStream.getFlags()، والرجوع إلىMediaPeriod.readDiscontinuity()في حال عدم توفّر الدعم وتفعيلFlags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - تم إصلاح مشكلة حيث كان يتم الإبلاغ عن تخطي إعلان يليه إعلان آخر في المجموعة الإعلانية نفسها باستخدام
DISCONTINUITY_REASON_AUTO_TRANSITIONبدلاً منDISCONTINUITY_REASON_SKIP، أو عدم الإبلاغ عنه على الإطلاق عندما يستخدمAdsMediaSourceإعداد مصدر المحتوى الكسول.
- Transformer:
- إضافة CodecDB (
androidx.media3.transformer.codecdb) الذي يقترح إعدادات ترميز الفيديو (برنامج الترميز وإعدادات برنامج الترميز ومعدل نقل البيانات) للجهاز الحالي من بيانات جودة برنامج الترميز التي تم قياسها
- إضافة CodecDB (
- أدوات الاستخراج:
- ADTS: تم إصلاح
AdtsExtractorالذي يستخرج تنسيق الصوت من كلمة مزامنة خاطئة في الحمولة الخاصة بإطار أول جزئي، ما قد يؤدي إلى فشل أو توقّف تشغيل أحداث البث المباشر بتنسيق AAC التي تم الانضمام إليها في منتصف الإطار (#3464). - تم إصلاح
ArrayIndexOutOfBoundsExceptionفيFragmentedMp4Extractorعندما يحتوي جزء على مربّعtrunبدون عيّنات (#3471). - ADTS: يمكنك إضافة
FLAG_DISABLE_ID3_METADATAإلىAdtsExtractorلإيقاف إخراج بيانات ID3 في مصدر البيانات كمسارapplication/id3. - MP4: تم إصلاح مشكلة التشغيل المتواصل لمقاطع AAC الصوتية التي يختصر فيها مجمّع البيانات (مثل FFmpeg) آخر إدخال
sttsلاستبعاد مساحة الترميز، ما يؤدي إلى اشتقاق مساحة الترميز على أنّها 0 من قائمة التعديلelstوتشغيل نهاية آخر إطار (#3489). - تم إصلاح عمليات تخصيص مخزن النظرة السريعة المؤقت الكبير المقدَّم و
OutOfMemoryErrorعند استنشاق الملفات التالفة أو غير الوسائط التي تبدأ بـID3(#3502).
- ADTS: تم إصلاح
- المفتّش:
- تم إصلاح مشكلة كانت تؤدي إلى منع
close()من إصدارMediaSourceالأساسي عند إلغاء المستقبل الذي تم عرضه من خلالMetadataRetriever.retrieveDurationUs()(#3468). - يجب إصلاح
MediaExtractorCompatلإرجاعMediaFormat.KEY_FRAME_RATEكعدد صحيح، بما يتطابق مع النظام الأساسيMediaExtractor.
- تم إصلاح مشكلة كانت تؤدي إلى منع
- الصوت:
- تم إصلاح مشكلة كانت تؤدي إلى تضمين الصمت الذي تم تخطّيه في الذاكرة المؤقتة في
AudioSink.getCurrentPositionUs(boolean)والإبلاغ عنه باستخدامAudioSink.Listener.onSilenceSkipped()قبل أن يصل التشغيل إلى المنطقة التي تم تخطّيها (#3472). - يمكنك ضبط مصدر برنامج الترميز باستخدام
AudioTrack.Builder.setCodecProvenanceعلى الإصدار 37 من واجهة برمجة التطبيقات والإصدارات الأحدث عند تشغيل صوت PCM متعدد القنوات تم فك ترميزه من تنسيق مضغوط. - تم إصلاح مشكلة تخطّي محاولات إعادة بدء
AudioTrackعندما يكون حجم ثانية واحدة من الصوت مساويًا على الأقل لحجم المخزن المؤقت الأولي، ما أدى إلى تعذُّر استخدام ميزة "المرور" في DTS-HD على الأجهزة ذات الذاكرة الصوتية المحدودة (#3487).
- تم إصلاح مشكلة كانت تؤدي إلى تضمين الصمت الذي تم تخطّيه في الذاكرة المؤقتة في
- الفيديو:
- السماح بالرجوع إلى برنامج فك ترميز H.265/HEVC لتدفقات Dolby Vision Profile 7 المتوافقة مع الأنظمة القديمة، وعدم الرجوع إلى برنامج فك ترميز AV1 لتدفقات Profile 10 التي تشير طبقتها الأساسية إلى النطاق الكامل مع خصائص نقل غير محددة (#3486).
- تم إصلاح اختيار برنامج فك الترميز في
MediaCodecUtilلتجنُّب اختيار برامج فك الترميز الأساسية التي لا تتوافق وظيفيًا مع الملف الشخصي للتنسيق (مثل برنامج فك ترميز Dolby Vision لملف شخصي مختلف) عندما لا يتوافق أي برنامج فك ترميز بشكل كامل مع التنسيق (#3486).
- النص:
- يمكنك تقليل استخدام الذاكرة في
DvbParserمن خلال عرض مناطق الترجمة مباشرةً في صور نقطية بحجم المنطقة بدلاً من الاحتفاظ بصورة نقطية مؤقتة بملء الشاشة.
- يمكنك تقليل استخدام الذاكرة في
- التأثير:
- أدوات دمج الوسائط:
- يتم التحقّق من صحة المقطع الصوتي
Formatعند إضافته إلىMp4MuxerأوFragmentedMp4Muxer، بدلاً من تعذُّر ذلك لاحقًا عند كتابة العيّنات أو إغلاق أداة دمج الوسائط. - Make repeated calls to
Muxer.close()a no-op in all libraryMuxerimplementations, and treat the muxer as closed even ifclose()throws. يؤدي استدعاء أي طريقة أخرى بعدclose()الآن إلى ظهورIllegalStateException.
- يتم التحقّق من صحة المقطع الصوتي
- إضافة IMA:
- يجب إتاحة واجهة
ResizablePlayerفي حزمة IMA SDK للسماح للإعلانات التفاعلية بتغيير حجم عرض مشغّل الفيديو وإعادة تحديد موضعه داخل حاوية الإعلان، وإضافةImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)(سيتم إيقافImaAdsLoader.requestAds(DataSpec, Object, ViewGroup)نهائيًا).
- يجب إتاحة واجهة
- الجلسة:
- تثبيت واجهات برمجة التطبيقات لإعدادات أزرار الوسائط المفضّلة
- يمكنك تقليل استخدام الذاكرة من خلال عدم الاحتفاظ ببيانات الأعمال الفنية المضغوطة في
CacheBitmapLoader. - تجنُّب طلبات
MediaSession.setQueue(null)المكرّرة في تحديثات المخطط الزمني عندما يكون صف جلسات المنصةnull(على سبيل المثال، عندما يكونPlayer.COMMAND_GET_TIMELINEغير متاح). - تم إصلاح مشكلة كانت تمنع
MediaSessionServiceمن السماح لخدمة بالتعافي بشكل صحيح من خلال عدم محاولة إنشاء جلسة جديدة (#3490). - يتم الإبلاغ عن
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATEبدلاً منPlayer.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDعندما يؤدي تعديل البيانات الوصفية القديمة فيMediaSessionCompatإلى تعديل البيانات الوصفية أو المدة الخاصة بالعنصر النشط في قائمة المحتوى التالي بدون تغيير قائمة المحتوى التالي. - تم إصلاح مشكلة عدم ظهور العمل الفني في الجلسات القديمة التي تضبط
nullMETADATA_KEY_DISPLAY_ICON(أو معرّف الموارد المنتظم للعمل الفني) إلى جانبMETADATA_KEY_ALBUM_ARTصالح: يتم الآن تخطّي قيم العمل الفني الفارغة عند تحويل البيانات الوصفية القديمة.
- واجهة المستخدم:
- إضافة خانة دالة مركّبة
subtitlesإلىContentFrameوPlayer، مع إتاحة عرض صور نقطية وإشارات الترجمة النصية الأفقية فيmedia3-ui-compose-material3تلقائيًا - تمت إضافة
SubtitleView.setTextDirectionHeuristicللسماح بتخصيص الأسلوب الإرشادي لاتجاه النص المستخدَم في التفاف نص الترجمة الثنائية الاتجاه (#3454). - تحريك جميع خانات عناصر التحكّم في
Playerفيmedia3-ui-compose-material3، بما في ذلك الخانات المخصّصة، وإزالة المَعلمةvisibleمنPlayerDefaults.TopControlsوCenterControlsوBottomControlsهذا تغيير قد يؤدي إلى عطل في واجهة برمجة تطبيقات غير مستقرة. - يمكنك إتاحة استخدام
AdViewProvider.getAdVideoView()فيPlayerViewمن خلال تضمينexo_content_frameفيexo_content_frame_container. - تقليل استخدام الذاكرة في
SubtitleViewمن خلال إزالة الصور النقطية وتنسيقات النصوص المخزّنة مؤقتًا للترجمة والشرح عند محو الإشارات، وإصلاح مشكلة احتمال بقاء نص الترجمة والشرح القديم مرئيًا عندما لا يكون عرض الإشارة كافيًا للتنسيق
- إضافة خانة دالة مركّبة
- إضافة HLS:
- تم إصلاح المشاكل التي تؤدي إلى احتفاظ عينات مخزّنة مؤقتًا بشكل جزئي بدون تجاهلها أو دمجها، أو إعادة ضبط موضع التحميل على موضع بحث قديم، وذلك عند إعادة تحميل جزء وسائط HLS تعذّر تحميله أو تم إلغاؤه (#3362).
- تم إصلاح
IllegalStateExceptionعند البحث عن بداية مقطع مخزَّن مؤقتًا بعد تبديل المسار التكيُّفي. - تم إصلاح العديد من مشاكل التشغيل عند تبديل المسارات باستخدام ميزة "توجيه المحتوى" في HLS (#3465).
- إضافة DASH:
- تم إصلاح مشكلة تكرار ترجمات CEA-608 أو تشويهها عندما يتضمّن البث عدة مسارات ترجمة وشرح مضمّنة (#887).
- إضافة Cast:
- تم إصلاح مشكلة إسقاط طلبات تحميل
RemoteCastPlayerمن قِبل أجهزة استقبال Android TV (#3462). - يجب تحديث تبعية
com.google.android.gms:play-services-cast-frameworkإلى23.0.0. - يجب إضافة
CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)لضبط ما إذا كانت أجهزة Cast ستظهر في أداة التبديل بين أجهزة التشغيل في النظام بدون الحاجة إلى تعريفMediaTransferReceiverفيAndroidManifest.xml، وتفعيل أداة التبديل بين أجهزة التشغيل في النظام تلقائيًا للتطبيقات التي تستهدف المستوى 37 أو أعلى لواجهة برمجة التطبيقات على الأجهزة التي تعمل بالمستوى 37 أو أعلى لواجهة برمجة التطبيقات. - يتيح هذا الإصدار استخدام حقول Cast
MediaMetadataالمحدّدة مسبقًا فيDefaultMediaItemConverterمن خلال ربط الحقول التي لا تتضمّن سمةMediaItem.mediaMetadataمخصّصة من وإلىMediaItem.mediaMetadata.extras، ويحافظ على الإضافات المخصّصة فيMediaInfo.customData. - توقَّف عن طرح استثناءات في
DefaultMediaItemConverterعندما يكون معرّف الموارد المنتظم (URI) للتشغيل غير متوفّر أو عندما يتعذّر التحويل، مع الاحتفاظ بمعرّف الوسائط والبيانات الوصفية في المخطط الزمني لـCastPlayerلعناصر قائمة انتظار البث التي لا تتضمّن معرّف موارد منتظمًا (URI) للتشغيل. - يجب إضافة
SessionAvailabilityListener.onCastSessionAvailable(boolean)للإشارة إلى ما إذا كانت جلسة البث المتاحة قد بدأت باستخدام Intent to Join، والحفاظ على حالة التشغيل عن بُعد بدلاً من استبدالها بحالة المشغّل المحلي عند الانضمام إلى جلسة بث باستخدام Intent to Join فيCastPlayer. - تعبئة
MediaInfoومدد المخطط الزمني منMediaMetadata.durationMsللعناصر غير المباشرة فيDefaultMediaItemConverterوRemoteCastPlayer، والاحتفاظ بالمدد التي تم حلّها من قِبل المُستلِم وحالة البث المباشر في عمليات البحث في قائمة المحتوى التالي
- تم إصلاح مشكلة إسقاط طلبات تحميل
- التطبيق التجريبي:
- السماح بإعادة ترتيب عناصر قائمة التشغيل من خلال السحب في التطبيق التجريبي للجلسة
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
androidx.media3.transformer.TextureAssetLoaderيمكنك استخدامandroidx.media3.transformer.RawAssetLoaderكبديل. - إزالة طُرق وضع التصميم العامة في
DefaultDecoderFactoryيمكنك استخدامDefaultDecoderFactory.Builderكبديل. - إزالة
DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MSيمكنك استخدامDefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MSكبديل. - إزالة
DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean)يمكنك استخدامVideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATIONكبديل. - إزالة
EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)وEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean)يمكنك استخدامEditedMediaItemSequence.Builder(Set)كبديل. - إزالة
EditedMediaItemSequence.forceAudioTrackيمكنك استخدامtrackTypes.contains(C.TRACK_TYPE_AUDIO)كبديل. - إزالة
EditedMediaItemSequence.forceVideoTrackيمكنك استخدامtrackTypes.contains(C.TRACK_TYPE_VIDEO)كبديل. - إزالة
ExportResult.durationMsوExportResult.Builder.setDurationMsاستخدِمExportResult.approximateDurationMsوExportResult.Builder.setApproximateDurationMsبدلاً من ذلك. - إزالة
SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_USيُرجى تحديد سلوك كتم الصوت باستخدامsilenceRetentionRatioبدلاً من ذلك. - إزالة
Timeline.getPeriodPosition(Window, Period, int, long, long)يمكنك استخدامTimeline.getPeriodPositionUs(Window, Period, int, long, long)كبديل.
- إزالة
الإصدار 1.12.0-alpha02
26 أكتوبر 2026
يتضمّن الإصدار 1.12.0-alpha02 التعديلات التالية.
- التأثير في خدمات Play:
- نقدّم وحدة
media3-effect-play-servicesجديدة توفّر تأثيرات الوسائط في "خدمات Google Play"، بما في ذلكEnhancementSessionDecoratorلتحسين الفيديو وStudioSoundAudioProcessorلفصل مصدر الصوت.
- نقدّم وحدة
الإصدار 1.12.0-alpha01
21 أكتوبر 2026
يتضمّن الإصدار 1.12.0-alpha01 التعديلات التالية.
- المكتبة المشتركة:
- إضافة
C.COLOR_SPACE_DISPLAY_P3وإتاحة استخدام الفضاء اللوني Display P3 في عمليات ربط الألوان وفقًا لمعيار ISO فيMediaFormatUtilوColorInfo - تمت إضافة سجلّ مركزي لـ
Flagsلإدارة علامات الميزات التجريبية والطرح على مراحل (Flags.setCanaryModeEnabled). وتم نقل العديد من طرق@ExperimentalApiالحالية لاستخدام واجهة برمجة التطبيقات الجديدة للعلامات. - أضِف
MediaMetadata.playlistIdوMediaMetadata.Builder.setPlaylistId(String)وMediaMetadata.categoriesوMediaMetadata.Builder.setCategories(List<String>). - استبدِل
androidx.media3.common.util.NonNullApiبـ JSpecifyorg.jspecify.annotations.NullMarked.
- إضافة
- ExoPlayer:
- تم إصلاح مشكلة توقُّف تشغيل DASH المتعدّد الفترات عند تعذُّر تحميل الجزء الأول من الفترة التالية (#3396).
- الإبلاغ عن
wasCanceled = trueفيAnalyticsListener.onLoadErrorوMediaSourceEventListener.onLoadErrorعند استنفاد محاولات إعادة التحميل - إتاحة تسجيل نُسخ متعددة من
VideoFrameMetadataListenerباستخدامExoPlayer.addVideoFrameMetadataListenerوExoPlayer.removeVideoFrameMetadataListener، وإيقاف نهائي لـExoPlayer.setVideoFrameMetadataListenerوExoPlayer.clearVideoFrameMetadataListener - يمكنك إضافة إمكانية عرض الإعلانات في المحتوى المتعدّد الفترات (مثل DASH) من خلال تقسيم
AdPlaybackStateوإزاحته لكل فترة. - تم إصلاح حالة السباق في
PreCacheHelperحيث يمكن أن يؤدي إلغاء طلب إعداد جارٍ إلى بدء عمليات التنزيل في الخلفية. - يجب حصر
setLoadOnlySelectedTracks(true)علىProgressiveMediaSourceوDefaultMediaSourceFactoryلفلترة مسارات الفيديو والصور غير المحدّدة فقط. يتم دائمًا تحميل المقاطع الصوتية والنصية للسماح بالتبديل السلس بين المقاطع بدون إعادة التخزين المؤقت. - تفعيل "
setLoadOnlySelectedTracks(true)" تلقائيًا علىProgressiveMediaSourceوDefaultMediaSourceFactoryيؤدي ذلك إلى توفير مساحة في الذاكرة ويتيح إجراء عمليات احتساب تخصيص المخزن المؤقت فيDefaultLoadControlبشكل أكثر دقة في حال عدم اختيار جميع المقاطع الصوتية. يُرجى العِلم أنّ هذا قد يؤدي إلى تخزين مؤقت إضافي إذا تم تفعيل مسارات الفيديو أو الصور غير المحدّدة حديثًا في منتصف التشغيل. - تم إصلاح مشكلة احتمال عرض
Player.getCurrentPosition()لقيم قديمة (يتم تحديثها بضع مرات فقط في الثانية) عند تفعيل الجدولة الديناميكية (#3286). - تم إصلاح مشكلة تؤدي إلى التعامل بشكل غير صحيح مع الانخفاض أو إعادة الضبط غير المتوقعَين في موضع رأس تشغيل
AudioTrackعلى أنّهما تجاوز سعة عدد صحيح، ما يؤدي إلى توقُّف التشغيل مؤقتًا أثناء التخزين المؤقت (#3407). - إزالة الميزة التجريبية "
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)" - تجنُّب إعادة تفعيل العارض بشكل غير ضروري وتجنُّب حدوث خلل عند العودة من الإعلانات البينية أو الإعلانات إلى المحتوى الذي تم اقتصاصه في النهاية (#3371).
- تم إصلاح مشكلة حيث يمكن أن يؤدي خطأ في العرض في عنصر قائمة تشغيل قادم إلى مقاطعة التشغيل الحالي قبل الأوان عند تفعيل
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - تم إصلاح
NullPointerExceptionقد يحدث إذا تم نقل أدوات العرض فيExoPlayerإلى فترة وسائط غير جاهزة عند تفعيلFlags.FLAG_PER_STREAM_MEDIA_PROGRESSION. - تم إصلاح مشكلة تخطّي إطارات الفيديو أو إسقاطها بشكل غير متوقّع أثناء الجدولة الديناميكية عند تفعيل
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS. - تم إصلاح
ArrayIndexOutOfBoundsExceptionفي مستمعي الإحصاءات عند إيقاف التشغيل أثناء عرض إعلان على بث مباشر (#3423). - تم إصلاح مشكلة تؤدي إلى نشر
PreloadMediaSourceلحدث خلال التحميل المُسبق بشكل غير متوقّع عندما لا يتم استدعاءpreload()مطلقًا (#3408). - تم إصلاح مشكلة تجاهل
Format.subsampleOffsetUsلمقاطع البيانات الوصفية، ما يؤدي إلى ظهور طوابع زمنية غير صحيحة للتشغيل في أوامر الربط SCTE-35 التي تم فك ترميزها (#3413). - تم إصلاح مشكلة تسرُّب الذاكرة في
PreloadMediaSourceوDefaultPreloadManagerعند استدعاءpreload()عدة مرات على المصدر نفسه (#3445). - تم إصلاح
NullPointerExceptionعند إصدارAdsMediaSourceأثناء انتظار إعادة تحميل المخطط الزمني للمحتوى (#3442). - تم إصلاح مشكلة حيث يمكن أن ينتقل تشغيل الوسائط التدريجية إلى الموضع الخطأ عند فشل التحميل بعد البحث (أو عند بدء التشغيل في موضع غير صفري) وإعادة المحاولة (#3440).
- إضافة حلّ بديل لمشكلة تجمُّد وحدة فك ترميز H.264 في جهاز Xiaomi TV Stick 4K (MiTV-AYFR0) عند تغيير درجة الدقة بسلاسة (#3457)
- تم إصلاح
NullPointerExceptionفيSteeringManifestTrackerعند إيقاف أداة التتبّع قبل تنفيذ دالة الاستدعاء الخاصة باكتمال التحميل أو الخطأ (#3443). - إتاحة تشغيل البيانات الوصفية المحدّدة زمنيًا لـ HAGC (ST 2094-50) من مسارات البيانات الوصفية المجمّعة في ملفات MP4 من
mebx - تم إصلاح مشكلة تخطّي فترات الوسائط التي يتم إعدادها ببطء في قائمة التشغيل.
- CompositionPlayer:
- يتيح هذا الإصدار ضبط عدد اللقطات في الثانية لتجميع إطارات الفيديو باستخدام
Composition.Builder.setVideoFrameAggregationParametersلسير عمل التشغيل. - تم إصلاح مشكلة فقدان الإطارات في التركيبات المتعددة التسلسلات الناتجة عن عدم تطابق التقريب أو التكميم في الطابع الزمني، وذلك من خلال اختيار الإطار الذي يحمل أقرب طابع زمني أثناء تجميع الإطارات. يتم تفعيل هذه الميزة من واجهة برمجة التطبيقات 29 فقط، لأنّها تتطلّب الاحتفاظ بإطار إضافي واحد قيد المعالجة لكل تسلسل فيديو.
- يتيح هذا الإصدار ضبط عدد اللقطات في الثانية لتجميع إطارات الفيديو باستخدام
- Transformer:
- يمكنك ضبط عدد اللقطات في الثانية لتجميع إطارات الفيديو باستخدام
Composition.Builder.setVideoFrameAggregationParametersلسير عمل التصدير. - تم إصلاح مشكلة فقدان الإطارات في التركيبات المتعددة التسلسلات الناتجة عن عدم تطابق التقريب أو التكميم في الطابع الزمني، وذلك من خلال اختيار الإطار الذي يحمل أقرب طابع زمني أثناء تجميع الإطارات. يتم تفعيل هذه الميزة من واجهة برمجة التطبيقات 29 فقط، لأنّها تتطلّب الاحتفاظ بإطار إضافي واحد قيد المعالجة لكل تسلسل فيديو.
- يجب احترام
Transformer#setAudioMimeType(AUDIO_RAW)عند استخدامAudioProcessors. قبل هذا الإصلاح، كان طلبMimeTypes.AUDIO_RAWوتطبيقAudioProcessorيؤديان إلى إخراج مضغوط.
- يمكنك ضبط عدد اللقطات في الثانية لتجميع إطارات الفيديو باستخدام
- اختيار المقطع الصوتي:
- تم إصلاح مشكلة كانت تؤدي إلى تفضيل مقطع صوتي بتقنية SDR بشكل غير صحيح على مقطع صوتي متوافق بتقنية Dolby Vision على بعض الأجهزة (#3135).
- أدوات الاستخراج:
- Mp4Extractor: تم إصلاح مشكلة تحليل المربّع
dOpsلملفات Opus بتنسيق MP4 حيث لم يتم تحويلPreSkipوInputSampleRateوOutputGainمن الترتيب الأكثر أهمية إلى الترتيب الأقل أهمية، ما يؤدي إلى تجاهل أول 299 ملي ثانية تقريبًا من الصوت في حال عدم توفّر قائمة تعديل (#3431). - يجب إزالة
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESوMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265وFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESوFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265لأنّ تحليل تبعية العيّنات ضمن مجموعة الصور (GOP) لبرنامجَي الترميز H.264 وH.265 مفعَّل تلقائيًا. - Mp4Extractor: تم إصلاح مشكلة تحليل البيانات الوصفية للموقع الجغرافي من مربّعات
xyzالتي تحتوي على إحداثيات الارتفاع لتعبئةMp4LocationData. - تمت إضافة
ExtractorUtil.getFramesPerEncodedSampleلحساب عدد إطارات الصوت لكل عيّنة لتنسيقات الصوت المرمَّزة (#3367). - إضافة
FLAG_READ_XMP_METADATAإلىMp4Extractorلاستخراج البيانات الوصفية لـ XMP من مربّعات UUID ذات المستوى الأعلى - إصلاح ملفات الصوت AC-3 وDTS وLPCM التالفة عند تشغيل محتوى MPEG-PS بنمط DVD، وذلك من خلال إزالة عنوان التدفق الفرعي
private_stream_1من كل حزمة PES فيPsExtractorقبل تمرير الحمولة إلى قارئ الصوت (#3327). - تم إصلاح الخطأ في
FragmentedMp4Extractorعندما يرمّز مربّعtfdtمن الإصدار 1 قيمة سالبة لـbaseMediaDecodeTime(#3412). - MPEG-TS: تمت إضافة ميزة تحليل رسائل SEI لترتيب حزم الإطارات H.264 وH.265 لتعبئة
Format.stereoMode(#3419). - تحليل بيانات إعدادات الملف التعريفي 20 لـ Dolby Vision ورفض ملفات Dolby Vision غير المتوافقة بدلاً من تشغيلها كملفات HEVC عادية بألوان غير صحيحة (#3427)
- MP3: تم التراجع عن تعديل البيانات الوصفية الخاصة بالتأخير والحشو في برنامج ترميز LAME/Xing لأنّه غير متوافق مع العديد من برامج فك ترميز
MediaCodecMP3 (#3425). - Matroska: تم إصلاح
NullPointerExceptionعند تحليل عناصرChapterAtomالمتداخلة (#3438). - Ogg: تم إصلاح خلل حيث يتم دمج حزمة حجمها من مضاعفات 255 بايت وتنتهي عند حدود الصفحة مع الحزمة التالية.
- MP4: تحليل
mebxمن مسارات البيانات الوصفية المحدّدة زمنيًا فيMp4ExtractorوFragmentedMp4Extractorيتم عرض المقاطع الصوتية التي تحمل مفتاحit35على شكلMimeTypes.APPLICATION_ITUT_T35(ما يتيح تشغيل HAGC). يتم تجاهل مساراتmebxالأخرى ما لم يتم ضبطFLAG_EMIT_RAW_MEBX_DATA، وفي هذه الحالة يتم إصدار جميع مساراتmebxكـMimeTypes.APPLICATION_MEBXأولية. - Ogg: تمت إضافة ميزة استخراج المساحة المتروكة في نهاية ملفات Opus لتشغيل المحتوى بدون فواصل (#2576)، وتم إصلاح الطوابع الزمنية للعيّنات بعد الانتقال إلى صفحة تبدأ بحزمة مستمرة.
- Ogg: تم إصلاح أخطاء فك الترميز وتخطّي الطوابع الزمنية لمدة ثانية واحدة تقريبًا في سلاسل Ogg Opus من خلال تجاهل حِزم عناوين التعليقات ورقم تعريف Opus في منتصف البث.
- Mp4Extractor: تم إصلاح مشكلة تحليل المربّع
- المفتّش:
- إتاحة استرداد بيانات XMP الوصفية من ملفات MP4 باستخدام
MetadataRetriever - إتاحة استخراج مقاطع البيانات الوصفية المحدّدة زمنيًا بتنسيق
mebxفيMediaExtractorCompatكـMimeTypes.APPLICATION_MEBX
- إتاحة استرداد بيانات XMP الوصفية من ملفات MP4 باستخدام
- إطار أداة الفحص:
- تم إصلاح مشكلة اقتصاص ألوان BT.2020 ذات النطاق الواسع في الصورة الأساسية بنطاق عادي الديناميكية عند
استخراج لقطات Ultra HDR باستخدام
FrameExtractor. يتم الآن ضغط الألوان خارج النطاق بسلاسة في نطاق sRGB بدلاً من تثبيتها.
- تم إصلاح مشكلة اقتصاص ألوان BT.2020 ذات النطاق الواسع في الصورة الأساسية بنطاق عادي الديناميكية عند
استخراج لقطات Ultra HDR باستخدام
- الصوت:
- تمت إضافة حل بديل للأجهزة التي تستدعي
android.media.AudioDeviceCallbackفي سلسلة المحادثات الخاطئة (#3386). - تم إصلاح مشكلة توقُّف التشغيل المحتملة بعد الانتقال بين المقاطع الصوتية عند استخدام ميزة "تفريغ البيانات المضغوطة".
- تم حلّ مشكلة في أجهزة Amazon Fire TV Stick حيث يمكن أن يتوقف صوت AC-3 أثناء عمليات الانتقال بين الفترات (#3448).
- إتاحة اقتطاع المساحة المتروكة لبرنامج الترميز في نهاية البث لتشغيل ملفات Ogg وWebM/Matroska Opus بدون فواصل (#2576)
- تم إصلاح مشكلة تأخُّر التعبئة والتفريغ الديناميكي بدون فواصل أثناء الانتقال بين المقاطع الصوتية، بحيث يتم تطبيقها على المقطع الصوتي التالي بدلاً من المقطع الصوتي الذي يتم تشغيله.
- تم اقتطاع المساحة المتروكة في نهاية برنامج الترميز في أحداث البث الفردية والبث النهائي في قائمة تشغيل، بالإضافة إلى الانتقالات السلسة في منتصف قائمة التشغيل (#2576).
- تجنَّب نُسخ المخزن المؤقت للصوت غير الضرورية في
TrimmingAudioProcessorبعد اكتمال اقتطاع تأخير برنامج الترميز في بداية البث وعدم الحاجة إلى اقتطاع أي مساحة متروكة في نهاية البث.
- تمت إضافة حل بديل للأجهزة التي تستدعي
- الفيديو:
- تم إصلاح مشكلة الإبلاغ عن إطارات الفيديو المتأخرة التي تحمل طوابع زمنية متطابقة للإصدار، بحيث يتم الإبلاغ عنها على أنّها تم إسقاطها بدلاً من تخطّيها.
- النص:
- أضِف
MediaItem.SubtitleConfiguration.timeOffsetUsلتغيير الطوابع الزمنية للترجمات التي تم تحميلها من مصدر خارجي بالنسبة إلى الوسائط. يمكن تغيير الإزاحة أثناء التشغيل باستخدامPlayer.replaceMediaItem(int, MediaItem)بدون مقاطعة التشغيل (#1976). - SubRip: تمت إضافة ميزة إدخال
CharsetDetectorفيDefaultSubtitleParserFactoryلرصد ترميز الأحرف لترجمات SubRip المستقلة بدون علامة ترتيب البايت (#2247).
- أضِف
- التأثير:
- تنفيذ
SoundSeparationAudioProcessorلفصل مصدر الصوت باستخدام وحدة StudioSound GMSCore
- تنفيذ
- أدوات دمج الوسائط:
- تم إصلاح كتابة مربّع
dOpsلبرنامج Opus فيMp4MuxerوFragmentedMp4Muxerحيث تمت كتابةPreSkipوInputSampleRateوOutputGainبالترتيب الصغير بدلاً من الترتيب الكبير (#3431). - إتاحة كتابة الارتفاع في نظام تحديد المواقع العالمي (GPS) في
Mp4LocationDataباستخدامMp4Muxer - تمّت إضافة
Muxer.Factory.create(ParcelFileDescriptor)للسماح بتعدد الإرسال مباشرةً إلىParcelFileDescriptor. - يتم تلقائيًا كتابة مربّع
tfdt(وقت فك ترميز الوسائط الأساسي لمقطع المسار) في مربّعاتtrafلملفات MP4 المجزّأة لتوفير طوابع زمنية لفك ترميز الوسائط. - إتاحة كتابة مربّعات حاويات E-AC-3 وE-AC-3 JOC (Dolby Atmos)
dec3فيMp4Muxer - إتاحة تنسيق WebM في
MediaMuxerCompat - اكتب مربّع
mfra(الوصول العشوائي إلى أجزاء الفيلم) في نهاية ملفات MP4 المجزّأة للسماح بالبحث فيFragmentedMp4ExtractorباستخدامFLAG_READ_MFRA_FOR_SEEK_MAP. - تم إصلاح عطل في
Mp4WriterوFragmentedMp4Writerعند كتابة عيّنة EOS قبل كتابة أي عيّنات أخرى. - تم إصلاح مشكلة توافق الحاوية عند دمج محتوى Dolby في ملفات MP4 أو ملفات MP4 مجزّأة من خلال الإعلان عن العلامة التجارية المتوافقة مع
dby1في عنوان الحاوية (#3369). - إتاحة المقاطع الصوتية بتنسيق PCM العائم 32 بت في
Mp4MuxerوFragmentedMp4Muxer(#3389) - رفض ملفات Dolby Vision غير المتوافقة في
Mp4MuxerوFragmentedMp4Muxerعند إضافة المقاطع الصوتية - إتاحة المقاطع الصوتية بتنسيق PCM الصحيح 24 بت و32 بت في
Mp4MuxerوFragmentedMp4Muxer
- تم إصلاح كتابة مربّع
- إضافة IMA:
- إعادة توجيه أحداث إيقاف المشغّل مؤقتًا واستئنافه إلى حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) في
ImaServerSideAdInsertionMediaSource.
- إعادة توجيه أحداث إيقاف المشغّل مؤقتًا واستئنافه إلى حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) في
- الجلسة:
- أضِف
MediaConstants.EXTRAS_KEY_PLAYLIST_IDوMediaConstants.EXTRAS_KEY_PLAYLIST_TITLEوMediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIوMediaConstants.EXTRAS_KEY_CATEGORIESلتعبئة البيانات الوصفية لقائمة التشغيل والعناصر من البيانات الوصفية والأوصاف القديمة، وMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEوMediaConstants.EXTRAS_KEY_TTL_SECONDSلاقتراحLibraryParams.extras. - تم إصلاح عطل في
SecurityExceptionعند إنشاء أو إصدارMediaSessionعلى الأجهزة التي تفرض حدودًا صارمة علىPendingIntent. - تم إصلاح مشكلة ظهور الخطأ
nullفيMediaSession.getControllerForCurrentRequest()أثناء طلبات التشغيل على Android 12 (واجهة برمجة التطبيقات 31 و32) عندما لم يكنMediaSessionServiceفي المقدّمة بعد. - تم إصلاح عطل في
IllegalArgumentExceptionعند اتصالMediaControllerبجلسة قديمة تُبلغ عن حد أقصى سالب لمستوى الصوت. - تم إصلاح مشكلة حيث يؤدي استدعاء
MediaController.setMediaItemأوsetMediaItemsمتبوعًا بـplay()فيMediaSessionCompatقديم متوقف مؤقتًا إلى إرسال معاودة اتصالonPrepareFrom*غير متوافقة بدلاً منonPlayFrom*، أو إرسالonPlay()بدون إعادة تهيئة ملف الوسائط المطلوب. - تم إصلاح
NullPointerExceptionفي الإصدار القديم منMediaBrowserعند تلقّي ردّ على طلب مخصّص (#3432). - تم إصلاح عطل في "
IllegalArgumentException" عند تلقّي بيانات وصفية قديمة تتضمّن مفاتيح مكرّرة في "Bundle" الأساسي. - دمج المكالمات الصادرة من
MediaControllerCompat.TransportControlsالتي يتم إجراؤها ضمن تكرارLooperنفسه عند التحكّم فيMediaSessionCompatقديم (على سبيل المثال، يؤدي الاتصال بـsetMediaItemوprepareوplayمعًا الآن إلى إرسال معاودة اتصال واحدة منonPlayFrom*).
- أضِف
- واجهة المستخدم:
- تم إصلاح مشكلة موضع علامات الترقيم في الترجمة من اليمين إلى اليسار والحفاظ على نطاق الامتداد عند تفعيل التفاف النص ثنائي الاتجاه (#3454، #3455).
- أضِف فئتَي
TrackSelectionStateوTrackSelectionParametersStateودوال remember الخاصة بحالة الدالة المركّبة المقابلة لهما إلى وحدةmedia3-ui-compose. - قدِّم
PresentationState.videoAspectRatioواجعلModifier.resizeWithContentScaleيتناولaspectRatio: Float?بدلاً منsourceSizeDp: Size?. - أضِف فئة
CuesStateوالدالة المركّبةrememberCuesStateإلى وحدةmedia3-ui-composeللاستماع إلى الإشارات الحالية للاعب. - أضِف ميزة "وضع التصفّح السريع" إلى
ProgressSliderإذا كان يستند إلىExoPlayerأوCompositionPlayer. - إضافة دعم
showArtworkإلىPresentationStateواستخدامه لتحديد وقت عرض الدالة المركّبة الاختياريةartworkفيContentFrameوPlayerأضِف دالة مركّبةArtworkلاستخدامها كقيمة تلقائية للخانةartwork. - أضِف حقولاً جديدة إلى
PlayPauseButtonState(showBufferingوshowRetryوshowReplay) واستخدِمها فيPlayPauseButtonلعرض المزيد من الرموز ومؤشر التخزين المؤقت. - أضِف فئة
PlaybackStateللسماح بمراقبة حالة التشغيل المخصّصة، وقدِّمBufferingIndicatorكمكوّن مستقل عن الأزرار. - تم إصلاح مشكلة ظهور علامات الإعلانات في
PlayerViewوPlayerControlViewعند حدود الفترات الزمنية للعناصر النائبة لـ "الإعلانات ما بعد التشغيل" في أحداث البث المباشر المتعدّدة الفترات. - لم تعُد الخانات القابلة للتجميع في
PlayerوContentFrameوPlayerDefaultsوMiniControllerتتلقّى المشغّل أو مستوى ظهور عناصر التحكّم كمَعلمات. بدلاً من ذلك، يمكنك التقاطها من نطاق الاستدعاء (على سبيل المثال،topControlsهو الآن@Composable BoxScope.() -> Unit). هذا تغيير قد يؤدي إلى عطل في واجهة برمجة تطبيقات غير مستقرة. - أضِف المَعلمة
alignmentإلىContentFrameوPlayerوModifier.resizeWithContentScaleلتحديد موضع المحتوى الذي تم تغيير حجمه داخل الحاوية، واقتصاص محتوىContentFrameوفقًا لحدوده، لكي لا يظهر الفيديو الذي تم تغيير حجمه باستخدامContentScale.Cropخارج حدوده. - إضافة واجهة مستخدم للبث المباشر إلى
ProgressSliderوProgressStateWithTickCountوProgressStateWithTickIntervalمن خلال عرضisLiveوliveOffsetMsإضافة دالة مركّبةLiveButtonإلىmedia3-ui-compose-material3(#2213).
- إضافة Ktor:
- تم إصلاح مشكلة حيث يمكن أن يتعامل
KtorDataSourceمع حالات فشل الاتصال في منتصف البث على أنها نهاية الإدخال بدلاً من طرحHttpDataSourceException(#3460).
- تم إصلاح مشكلة حيث يمكن أن يتعامل
- إضافة HLS:
- تحليل
VIDEO-RANGE(PQوHLG) علىEXT-X-STREAM-INFوEXT-X-I-FRAME-STREAM-INFإلىFormat.colorInfo(#3441) - تم إصلاح
NullPointerExceptionعند تحليل مقاطع الإعداد MPEG-TSEXT-X-MAPالتي تحتوي على عيّنات وسائط PES (#3456). - تم إصلاح مشكلة تراجُع الأداء حيث كانت السمتان
Format.idوFormat.metadatanullلمقاطع HLS المعروضة (#3402). - يتم اقتصاص إعلانات قائمة مواد العرض إلى
X-PLAYOUT-LIMITوتخطّي الإعلانات التي تتجاوز الحدّ الأقصى بالكامل، وضبط قيمة الإزاحة التلقائية لاستئناف المحتوى على 0 عندما يحذف الإعلان البينيX-RESUME-OFFSETوتكون مدته غير معروفة حتى إذا تم ضبطX-PLAYOUT-LIMIT. - تم إصلاح مشكلة كانت تؤدي إلى إلغاء مساهمات إزاحة استئناف المحتوى للإعلانات البينية الأخرى في المجموعة الإعلانية نفسها عند حلّ مشكلة إعلان بيني من النوع
X-ASSET-LIST.
- تحليل
- إضافة DASH:
- إتاحة تحليل أحداث إدراج ملف MPD البديل (
urn:mpeg:dash:event:alternativeMPD:insert:2025) والاستبدال (urn:mpeg:dash:event:alternativeMPD:replace:2025) فيDashManifestParserوعرضها كمثيلاتAlternativeMpdEventفيPeriod.alternativeMpdEventsهذا تغيير قد يؤدي إلى عطل في التطبيقات التي تستخدم الفئة الفرعيةDashManifestParser: تتطلبDashManifestParser.buildPeriodالآن مَعلمةList<AlternativeMpdEvent>إضافية وتمت إزالة التحميل الزائد السابق. يجب أن تلغي التطبيقات التي تلغيDashManifestParser.parseEventStream(XmlPullParser)DashManifestParser.parseEventStream(XmlPullParser, String)بدلاً من ذلك، لأنّ الأولى تم إيقافها نهائيًا وستصبح خاصة في إصدار مستقبلي. - تحليل معلومات ألوان CICP (
ColourPrimariesوTransferCharacteristicsوMatrixCoefficientsوVideoFullRangeFlag) من واصفاتEssentialPropertyوSupplementalPropertyإلىFormat.colorInfo(#3426) - إتاحة القوائم المفصولة بمسافات بيضاء لقيم
@idفي سمات@valueلواصف (http://dashif.org/guidelines/trickmode) وضع الخدعة (#3315) - إتاحة تحليل
<ProducerReferenceTime>فيDashManifestParser، وعرضه فيAdaptationSet.producerReferenceTimes، واستخدامه لتعبئةTimeline.Window.presentationStartTimeMsوTimeline.Window.windowStartTimeMsلأحداث البث المباشر للفيديو عند الطلب - إضافة ميزة "توجيه المحتوى" في DASH (#1689)
- تم إصلاح
NullPointerExceptionقد يحدث عند تحليل بيان DASH مع سمة غير متوفّرة في عنصر<UTCTiming>(#3436).
- إتاحة تحليل أحداث إدراج ملف MPD البديل (
- إضافة RTSP:
- تم إصلاح عطل في
IllegalStateExceptionكان يحدث عند معالجة استجابات الشبكة المتأخرة بعد إغلاق عميل RTSP. - تم إصلاح مشكلة تؤدي إلى تفعيل آلية الرجوع إلى بروتوكول TCP بشكل غير صحيح عند التقديم أو الترجيع السريع.
- تم إصلاح عطل في
IllegalStateExceptionيمكن أن يحدث عند معالجة استجابات الشبكة المتأخرة بعد إعادة ضبط العميل لبروتوكول RTSP أثناء إعادة اختيار المسار أو إنهاء الجلسة أو إعادة توجيه عنوان URI. - تم إصلاح مشكلة تؤدي إلى تعطُّل
IllegalStateExceptionعند البحث مرة أخرى قبل إعادة تشغيل المحتوى. - تم إصلاح مشكلة حيث يؤدي تقديم الفيديو أو ترجيعه أثناء انتظار تقديم أو ترجيع آخر إلى انقطاع الصوت وتجميد تشغيل الفيديو.
- تم إصلاح مشكلة عدم وضع علامة على وحدات الوصول إلى الإطارات الرئيسية H.264 وH.265 التي تنتهي بحزمة تجميع أو حزمة غير IDR كإطارات رئيسية، ما يؤدي إلى توقّف التشغيل مؤقتًا في وضع التخزين المؤقت (#3434).
- تم إصلاح عطل في
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- إضافة Opus: تم إصلاح عُطل JNI عند فك ترميز بيانات Opus غير الصالحة.
- إضافة Opus: تم إصلاح مشكلة تجاهل حشو الإلغاء عندما يقع التخطّي المسبق وحشو الإلغاء في الحزمة نفسها (#2576).
- إضافة Cast:
- تم تقديم
SessionAvailabilityListener.SessionUnavailableReasonلتمثيل سبب عدم توفّر الجلسة، وتوفير طريقة مثقلة لـSessionAvailabilityListener.onCastSessionUnavailableلعرضه. - تم إصلاح مشكلة استئناف التشغيل بشكل غير متوقّع على الجهاز بعد إيقاف جلسة بث.
- تسجيل خطأ عند تعذُّر تنفيذ عمليات
RemoteMediaClient(مثل التشغيل أو الإيقاف المؤقت أو تغيير السرعة أو وضع التكرار أو مستوى الصوت أو كتم الصوت أو اختيار المقطع الصوتي) فيRemoteCastPlayer(#3373) - تم إصلاح
ArrayIndexOutOfBoundsExceptionفيRemoteCastPlayerعندما تتغيّر قائمة انتظار جهاز الاستقبال في Cast أو تتقلّص أثناء انتظار عملية البحث (#3372). - تم إصلاح مشكلة في جهاز استقبال البث التلقائي حيث كان المخطط الزمني يعرض فقط ملفات الوسائط المحيطة مباشرةً بالملف النشط بدلاً من قائمة التشغيل بأكملها (#3129).
- تعديل المخطط الزمني وموضع التشغيل فورًا عند تعديل
قائمة التشغيل (
setMediaItemsأوaddMediaItemsأوmoveMediaItemsأوremoveMediaItems) أو تقديم المحتوى أو ترجيعه فيRemoteCastPlayer، ووضع عمليات قائمة التشغيل المتتالية في قائمة انتظار ليتم تنفيذها بشكل موثوق بالترتيب (#2639، #3272). - تم إصلاح مشكلة تعذُّر تحميل ملفات الوسائط على جهاز استقبال البث عند استدعاء
addMediaItemsفي قائمة انتظار فارغة فيRemoteCastPlayer(#2402). - تم إصلاح مشكلة في
RemoteCastPlayerحيث يؤدي الوصول إلى نهاية قائمة انتظار جهاز الاستقبال في Cast إلى محو المخطط الزمني بدلاً من الاحتفاظ بقائمة التشغيل. - تم إصلاح مشكلة عدم نقل أو تطبيق
playWhenReadyوrepeatModeوplaybackParametersعند ضبطها علىRemoteCastPlayerقبل تحميل ملفات الوسائط (على سبيل المثال، أثناء نقل التشغيل من الجهاز المحلي إلى الجهاز البعيد فيCastPlayer) (#889).
- تم تقديم
- التطبيق التجريبي:
- إضافة إمكانية تشغيل ملفات الوسائط المحمية بموجب "إدارة الحقوق الرقمية" (DRM) وعيّنة إضافية من بث HLS إلى كتالوج التطبيق التجريبي للجلسة
- اضبط
RemoteCastPlayerباستخدامCastTrackSelectorفي تطبيق العرض التوضيحي للجلسة لتفعيل اختيار الترجمة والمقطع الصوتي أثناء البث.
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
DashUtil.buildDataSpec(Representation, RangedUri, int)وDashUtil.buildDataSpec(Representation, String, RangedUri, int)يمكنك استخدامDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>)كبديل.
- إزالة
- الإصدار:
- يجب زيادة Gradle
minSdkإلى 24.
- يجب زيادة Gradle
الإصدار 1.11.0
1.11.1
10 سبتمبر 2026
- ExoPlayer:
- يمكنك نقل العلامة لتفعيل/إيقاف البيانات الوصفية لـ HAGC للوسائط التدريجية من
MediaSource.FactoryإلىExtractorsFactory. تمت إزالة طريقةsetExperimentalEnableHagcPlaybackالسابقة واستبدالها بـExtractorsFactory.setParseHagcMetadata. يؤدي هذا أيضًا إلى حلّ مشكلة عدم عمل ميزة الإيقاف في حاويات Matroska/WebM. - تم إصلاح مشكلة توقُّف التشغيل التي تحدث عند الإحماء المسبق لأداة عرض ثانوية غير انتقالية.
- تم إصلاح مشكلة الإحماء المسبق حيث يجب إعادة
Surfaceإلى أداة العرض الأساسية عندما تؤدي عملية البحث إلى إعادة ضبط كلتا أداتي العرض وإيقافهما. - تم إصلاح
ArrayIndexOutOfBoundsExceptionعندما يؤدي إعادة تحميل المخطط الزمني المباشر إلى نقل الموضع التلقائي بعد إعلان تم إدراجه من جهة الخادم ويتم تشغيله حاليًا (#3348). - تم إصلاح مشكلة في وضع التقديم أو الترجيع السريع حيث يمكن عرض إطارات الفيديو القديمة لفترة وجيزة عند البحث مع تفعيل
ScrubbingModeParameters.allowSkippingMediaCodecFlush.
- يمكنك نقل العلامة لتفعيل/إيقاف البيانات الوصفية لـ HAGC للوسائط التدريجية من
- أدوات الاستخراج:
- Matroska: تم إصلاح المشكلة المتمثلة في أنّ المسارات التي يتم وضعها بعد المجموعات لا تؤدي إلى ظهور مخطط زمني قابل للبحث (#3377).
- الصوت:
- تم إصلاح عملية احتساب حجم ذاكرة التخزين المؤقت في
SilenceSkippingAudioProcessorبحيث لا يتم تقليل الحد الأدنى لمدة كتم الصوت بشكل غير صحيح حسب حجم الإطار (#3271). - تم إصلاح طريقة معالجة PCM بتنسيق 8 بت في
PcmAudioUtilللتعامل مع العينات على أنّها غير موقَّعة كما هو محدّد في Android (#3271). - تم إصلاح مشكلة في التفريغ حيث يمكن أن يتوقف التشغيل مؤقتًا أثناء الإعلانات ما قبل التشغيل أو الانتقالات السلسة بسبب أحجام ذاكرة التخزين المؤقت المحدودة للأجهزة.
- تم إصلاح خطأ في
DefaultAudioSinkحيث لا ينخفض عدد الإصدارات عندما لا يكون مؤشر ترابط التشغيل نشطًا (#3338).
- تم إصلاح عملية احتساب حجم ذاكرة التخزين المؤقت في
- الجلسة:
- إضافة HLS:
- إضافة DASH:
- تم إصلاح عملية حساب الطابع الزمني غير الصحيحة للعيّنات في مسارات الصور باستخدام
presentationTimeOffset(#3334).
- تم إصلاح عملية حساب الطابع الزمني غير الصحيحة للعيّنات في مسارات الصور باستخدام
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- Opus: تم إصلاح تلف الذاكرة عند بدء تشغيل عدة نُسخ من
OpusDecoderفي الوقت نفسه. - MPEG-H: تم إصلاح مشكلة تسرُّب الذاكرة واقتطاع الأحرف غير ASCII
والعطل الداخلي المحتمل في نظام التشغيل في حالات انخفاض الذاكرة عند إرسال الأوامر
إلى
MpeghUiManager(#3365).
- Opus: تم إصلاح تلف الذاكرة عند بدء تشغيل عدة نُسخ من
الإصدار 1.11.0
5 أغسطس 2026
- المكتبة المشتركة:
- أضِف
Format.channelMaskلتمثيل قناع القناة الصوتية بشكل صريح، وUtil.getAudioTrackChannelConfig(Format)جديدًا لحلّ المشكلة بأمان. - ترقية Kotlin من الإصدار 2.0.20 إلى الإصدار 2.2.0
- أضِف
- ExoPlayer:
- تم إصلاح خطأ في التزامن يعتمد على التوقيت ويمكن أن يؤدي إلى حدوث
IllegalStateExceptionأوIndexOutOfBoundsExceptionفي ExoPlayer. - تخفيف عمليات التحقّق من عدد المجموعات الإعلانية في
AdsMediaSourceللسماح بانخفاض عدد المجموعات الإعلانية عند معالجة مجموعة إعلانية بالكامل (hasUnplayedAds()هيfalse)، ما يتيح تغيير حجم المجموعات الإعلانية الديناميكية أثناء سير عمل إعادة الضبط. - أضِف
getFlags()وFLAG_STRICT_DURATIONإلىSampleStreamللسماح لعمليات البث بالإبلاغ عن علامات إشعار في التقارير، وعدِّل أدوات العرض للتحقّق من علامات إشعار في التقارير هذه بشكل ديناميكي. - الرجوع إلى أداة تقدير عدد اللقطات في الثانية في
MediaCodecVideoRendererوإلى تنسيق ناتج برنامج الترميز فيMediaCodecAudioRendererلاحتساب معدّل تشغيل برنامج الترميز عندما لا توفّر تنسيقات البث قيمة صالحة، وتجنُّب عمليات إعادة الضبط غير الضرورية لبرنامج الترميز - إزالة اقتصاص المحتوى للإعلانات التي يتم إدراجها من جهة العميل في المشغّل الأساسي بدلاً من ذلك، يتولّى
AdsMediaSourceمنطق الاقتصاص. يجب تعديل مصادر الإعلانات المخصّصة التي يتم إدراجها من جهة العميل لتنفيذ عملية اقتصاص المحتوى داخليًا. - يتم وضع علامة
supported=NO_EXCEEDS_CAPABILITIESعلى المقاطع التي تتضمّن ملف تعريف أو مستوى برنامج ترميز صحيح ولكن غير معروف، بدلاً منsupported=YES(التي يتم وضعها على المقاطع التي تتضمّن معلومات ملف تعريف أو مستوى مفقودة أو غير صحيحة). يضمن ذلك عدم اختيار هذه المقاطع الصوتية (التي من غير المرجّح أن تكون متوافقة مع الجهاز) عندما تكون هناك بدائل متوافقة بشكل أفضل. - أضِف
DefaultPreloadManager.SimpleRankingDataComparator، وهوRankingDataComparatorيقارن ترتيب ملفات الوسائط استنادًا إلى المسافة بينها وبين فهرس ملف الوسائط الذي يتم تشغيله حاليًا. يمكن للتطبيقات إلغاء طريقةcompare(Integer, Integer)إذا كانت هناك حاجة إلى منطق مقارنة أكثر دقة. يمكن إدخالSimpleRankingDataComparatorالمخصّص من خلال دالة إنشائية جديدة لـDefaultPreloadManager.Builder. - يمكنك تقليل خطر نفاد الذاكرة (OOM) في
"
DefaultLoadControl.prioritizeTimeOverSizeThresholds" من خلال الرجوع إلى حدود حجم البايت في المخزن المؤقت إذا كانت ذاكرة الذاكرة المؤقتة المتاحة تبدو ضيقة. - تمت محاذاة طريقة معالجة الصور الثابتة عندما لا يتم ضبط
MediaItem.imageDurationUs: يتم الآن "تشغيل" الصور الثابتة بتنسيق JPEG وHEIC بمدة تلقائية قصيرة جدًا (بالطريقة نفسها التي كانت تعمل بها صور PNG والصور الأخرى في السابق). - أضِف
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)إلىBandwidthMeterلربطها بـMediaSource. ومع ذلك، سيستمر استدعاء الطريقة المتوقفة نهائيًا مع التنفيذ المخصّص تلقائيًا، لذا ننصح بتنفيذ الطريقة الجديدة واستخدامBandwidthMeter.getTransferListener()للحصول على تكافؤ مع الطريقة القديمة. - في
DefaultBandwidthMeter، أضِف إمكانية استخدامInitialBitrateSupplierمخصّص. يسمح ذلك للتطبيقات بتوفير منطقها الخاص لتحديد التقدير الأولي لمعدل نقل البيانات، والذي سيتم استخدامه عند إنشاءDefaultBandwidthMeterوعند تغيير نوع الشبكة. يمكن ضبط المورّد من خلالDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - تفعيل الجدولة الديناميكية تلقائيًا ستعمل حلقة عمل تشغيل
ExoPlayerبشكل ديناميكي بدلاً من العمل على فترات زمنية ثابتة. - تمت إزالة عملية إعادة ضبط غير ضرورية يمكن أن تحدث عند دمج المقاطع الصوتية مع عيّنات الإعلانات ما قبل التشغيل في التشغيل النشط.
- في
DefaultBandwidthMeter، يمكنك تحسينgetInitialBitrateCountryGroupAssignmentلعرض تعيينات مجموعة البلدان المجمّعة في عدد صحيح من 32 بت بدلاً من مصفوفة، ما يقلل حجم الرمز ويتجنب عمليات التخصيص. - تم إصلاح حالات تعذُّر إعداد
AudioTrackعلى بعض الأجهزة من خلال التأكّد من أنّ منطق إعادة المحاولة يحاول دائمًا استخدام حجم ذاكرة التخزين المؤقت لا يقل عن ثانية واحدة في حال عدم نجاح محاولات إعادة المحاولة الأخرى (من خلال خفض حجم ذاكرة التخزين المؤقت إلى النصف) (#3207). - تم إصلاح مشكلة في برنامج الترميز على بعض الأجهزة حيث كان برنامج الترميز يبتلع جميع العينات إذا تم تفريغه مسبقًا قبل تلقي مخازن الإدخال المؤقتة.
- أضِف
ExoPlayer.Builder.enablePerStreamMediaProgression()التجريبية للسماح بمعالجة الوسائط المتقدّمة على أساس كل بث. يؤدي ذلك إلى تقليل وقت الاستجابة عند بدء التشغيل بين عناصر قائمة التشغيل وتجنُّب "توقُّف" التشغيل عند تشغيل محتوى قصير جدًا (#3122). - تم إصلاح حالة السباق المتعلّقة باستخدام معرّف جلسة الصوت، حيث يتم استخدام معرّف جلسة الصوت الأوّلي الذي تم إنشاؤه تلقائيًا بواسطة
ExoPlayerبدلاً من القيمة التي تم ضبطها بواسطةsetAudioSessionId(#3241). - تمت إضافة ميزة تجريبية لتشغيل البيانات الوصفية المستندة إلى الوقت بتنسيق HAGC (ST 2094-50) للوسائط التقدمية (مثل MP4 وMatroska). يدمج المشغّل تلقائيًا
مسارات البيانات الوصفية لـ HAGC مع مسار الفيديو المرتبط بها، ويقدّم
البيانات الوصفية خارج النطاق إلى وحدة فك الترميز على الأجهزة التي تعمل بواجهة برمجة التطبيقات 37 والإصدارات الأحدث. يمكن إيقاف هذا السلوك
من خلال
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - إضافة
Format.selectionPriorityلتمثيل الخيار المفضَّل النسبي لـFormatفي اختيار المقطع الصوتي (#3236) - تم إصلاح مشكلة محتملة في وضع التقديم أو الترجيع السريع حيث يمكن أن يتوقف التقديم أو الترجيع السريع عند الانتقال إلى "نهاية البث".
- تم إصلاح خطأ في التزامن يعتمد على التوقيت ويمكن أن يؤدي إلى حدوث
- CompositionPlayer:
- تم إصلاح مشكلة عدم إصدار نُسخ
TrackSelector.
- تم إصلاح مشكلة عدم إصدار نُسخ
- Transformer:
- تم إصلاح مشكلة قد تؤدي إلى الإبلاغ عن
ExportResult.fileSizeBytesبشكل مفرط.
- تم إصلاح مشكلة قد تؤدي إلى الإبلاغ عن
- اختيار المقطع الصوتي:
- يجب عرض
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORوإضافةAdaptiveTrackSelection.Factory.setTrackFormatComparatorللسماح بترتيب التنسيقات المخصّصة وأولوية اختيار معدّل نقل البيانات التكيّفي (ABR) بما يتجاوز الترتيب حسب معدّل نقل البيانات فقط. - تم إصلاح مشكلة التزامن التي تعتمد على التوقيت، حيث يمكن أن تؤدي التحديثات المتسلسلة السريعة لمعلَمات اختيار المسار إلى فقدان بعض التحديثات أو استبدالها.
- يجب عرض
- أدوات الاستخراج:
- MP4 وMP3 وFLAC: تمت إضافة
FLAG_DISABLE_ARTWORK_METADATAللسماح بتجاهل الصور المرفقة والبيانات الوصفية لصورة الغلاف أثناء تحليل الحاوية لتقليل استهلاك الذاكرة أثناء التشغيل (#2077). يمكن أيضًا تفعيل هذه الميزة مركزيًا من خلالDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4: تمت إضافة إمكانية استخراج مسارات البيانات الوصفية المحدّدة زمنيًا ITU-T T.35 (
it35). - MP4: تمت إضافة إمكانية استخراج البيانات الوصفية للفصول (بتنسيقَي Nero وQuickTime). ويُفضَّل استخدام فصول QuickTime في حال توفّر كليهما. يتم عرض معلومات الفصول المستخرَجة كإدخالات
ChapterضمنMetadataللمقطع الصوتي، ما يتيح التنقّل بين الفصول في ملفات MP4 وM4A وM4B (مثل الكتب المسموعة وملفات البودكاست) (#2803). - WAV وMatroska وMP4: تمت إضافة إمكانية تشغيل ملفات الصوت PCM ذات النقطة العائمة 64 بت (#3090).
- Matroska: يتم استخدام البيانات الوصفية لتدفق وحدات البت في برنامج الترميز لتعبئة
ColorInfoبدقة. - MP4: تمت إضافة إمكانية البحث في ملفات MP4 المجزّأة باستخدام المربّع
mfraفي حال عدم توفّر المربّعsidx. لتفعيل هذه الميزة، يجب توفيرFLAG_READ_MFRA_FOR_SEEK_MAPإلىFragmentedMp4Extractor، وهو ما يتم الآن تلقائيًا فيDefaultExtractorsFactory(#3088). - تجاهُل بيانات "
av1C" التي تتضمّن إصدارًا غير متوافق - MP4: تمت إضافة إمكانية استخدام PCM بنقطة عائمة بتنسيق big-endian في مربّعات
fpcm. - Matroska: تحليل معلومات الفصل إلى إدخالات
ChapterفيMetadataالخاصة بالمسار - MPEG-TS: تم تحسين استخراج أحداث البث DTS-HD وDTS Express من خلال دمج أحداث البث الفرعية Core وExtension في عيّنة واحدة، ما يؤدي إلى حلّ مشاكل التشغيل التي كانت تحدث سابقًا عند إخراج الحدثَين كعيّنتَين منفصلتَين (#3147).
- MP4: تم منع التكرار اللانهائي وعمليات القراءة خارج الحدود عند تحليل عناصر علامات البيانات الوصفية الفارغة من النوع
ilst(#3191). - MPEG-TS: التأكّد من عرض آخر إطار لعمليات البث التي يكون فيها طول آخر حزمة PES معروفًا (#3206)
- MP3: تم إصلاح مشكلة الإبلاغ عن معدل نقل البيانات للملفات التي تحتوي على عنوان Xing وVBRI.
- Matroska: معالجة المقاطع الصوتية المحدّدة في المجموعة الأخيرة (#3250)
- Matroska: تمت إضافة إمكانية استخدام ALAC (#3268).
- MP4: السماح بمربّعات
sgpdذات طول متغيّر في ملفات MP4 المجزّأة (#3243). - AVI: تم إصلاح مشكلة كانت تؤدي إلى فقدان الصوت و
OutOfMemoryErrorعند تشغيل ملفات لا تتضمّن علامات الإطارات الرئيسية في المقاطع الصوتية. - MP3: استخدام مُدد تتيح التشغيل بدون فواصل من عناوين Xing/Info (#3183)
- MP3: تم تعديل البيانات الوصفية الخاصة بالتأخير والحشو في برنامج الترميز LAME/Xing لتتطابق مع عملية الاقتصاص في PCM بعد فك الترميز (#3200).
- MP4 وMP3 وFLAC: تمت إضافة
- الصوت:
- تمت إضافة فترة سماح مدتها 100 ملي ثانية في أدوات عرض الصوت في ExoPlayer عند الانتقال من الحالة "جاهز" إلى الحالة "غير جاهز"، وذلك لإزالة الارتداد المؤقت للنقص في البيانات وتجنُّب حالات التخزين المؤقت غير المتوقعة أثناء التشغيل النشط (#3210).
- يمكنك تغيير منطق حجم ذاكرة التخزين المؤقت التلقائي لـ PCM في
DefaultAudioTrackBufferSizeProviderلاستخدام مخزن مؤقت ثابت يبلغ 500 مللي ثانية لجعله أقل اعتمادًا على الجهاز. - يجب تعديل
MediaCodecAudioRendererلاستخراج قناع القناة المكانية من برنامج فك الترميز في المنصة، ما يسمح لـDefaultAudioSinkباستخدام هذا القناع الصريح بدلاً من استنتاج قناع من عدد القنوات. - تحويل مَعلمات
AudioSink.configureإلى فئة بيانات يجب نقل عمليات الإلغاء المخصّصة لـForwardingAudioSink.configureإلى توقيع الطريقة الجديد. - إضافة إمكانية الحفاظ على طبقة الصوت عند تمديد الوقت في بث صوتي باستخدام
EditedMediaItem.Builder#setSpeed(SpeedParameters) - تحسين
ToFloatPcmAudioProcessorلإتاحة تحويل ملفات PCM ذات 8 بت، وملفات PCM ذات 16 بت بنظام big-endian، وملفات PCM ذات 64 بت بنظام الفاصلة العائمة إلى ملفات PCM ذات 32 بت بنظام الفاصلة العائمة (#3090). - تغيير القيمة المعروضة لـ "
DecoderAudioRenderer.getChannelMapping" إلىImmutableIntArray. - تم إصلاح الخطأ الذي يتسبّب في توقُّف التشغيل عند تشغيل قائمة تشغيل صوتية بدون فواصل في وضع التفريغ المضغوط.
- إعادة توجيه
Timelineوالمعرّف الفريد العالمي للفترة إلىAudioSink.configureوAudioProcessor.StreamMetadataلتوفير سياق قائمة التشغيل لمعالِجات الصوت (#418) - يجب ضبط السمة
AudioProcessor.StreamMetadata.positionOffsetUsبشكل صحيح للسماح بمعالجة الصوت المستندة إلى الوقت (#418). - إضافة إمكانية استخدام تنسيق PCM بنظام "الترتيب التنازلي" (Big Endian) وبنظام الفاصلة العائمة 32 بت و64 بت
- تمت إزالة مسار الرجوع من EAC3-JOC إلى EAC3 للتشغيل على أجهزة Google Pixel لأنّ برامج فك ترميز EAC3 العادية لا يمكنها فك ترميز أحداث البث المباشر EAC3-JOC (#3257).
- الفيديو:
- تم إصلاح منطق دمج الفيديوهات لاحتساب المخازن المؤقتة التي تم تجاهلها أثناء الدمج على أنّها تم تخطيها بدلاً من تجاهلها.
- تم إصلاح قرار العرض الفوري عند ضبط مساحة عرض جديدة لتجنُّب فقدان الإطارات على الأجهزة التي لا تتيح استخدام مساحات العرض النائبة.
- إصلاح تقدير عدد اللقطات في الثانية في
MediaCodecVideoRendererليكون أكثر دقة من خلال احتساب اللقطات التي تم إسقاطها أو تخطيها - السماح بضبط الحدّ الأدنى المستخدَم لجدولة الإطارات مبكرًا القيمة التلقائية هي 50 ملي ثانية، ولكن يمكن تخصيص القيمة من خلال
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - تم إصلاح خطأ في
VideoFrameReleaseHelperحيث يمكن أن تؤدي تغييرات العرض إلى تشغيل عمليات استدعاءChoreographerمكررة وعمليات تنشيط مفرطة لوحدة المعالجة المركزية في سلسلة التعليمات الرئيسية.
- النص:
- البيانات الوصفية:
- أضِف حقل
MediaMetadata.discSubtitleوحلِّله من بيانات ID3v2.4TSSTوVorbisDISCSUBTITLE. - تحليل رقم القرص وعدد الأقراص من إطار ID3
TPOS
- أضِف حقل
- التأثير:
- محو حالة إعادة الرسم في
FinalShaderProgramWrapperعند المسح لمنع تجميد المشغّل عند البحث
- محو حالة إعادة الرسم في
- أدوات دمج الوسائط:
- إضافة إمكانية استخدام مراجع المسارات (مربّع
tref) فيMp4Muxerمن خلال واجهة برمجة تطبيقاتaddTrackReferenceجديدة يتيح ذلك إنشاء علاقات بين المسارات، مثل ربط مسار بيانات وصفية بمسار الفيديو الذي يصفه. - أضِف
OggMuxerللسماح بدمج مصادر الوسائطOPUSأوVORBISفي تنسيق الملفogg. - أضِف
WavMuxerلإنشاء ملف WAV (يتيح استخدام PCM للأعداد الصحيحة والأعداد العشرية). - أضِف
setAttemptStreamableOutputEnabledإلىInAppMp4Muxer.Factoryللسماح بكتابة ملفات أصغر حجمًا غير قابلة للبث بدون مساحة محجوزة. - إتاحة استخدام تنسيق IAMF الصوتي في
Mp4MuxerوFragmentedMp4Muxer
- إضافة إمكانية استخدام مراجع المسارات (مربّع
- إضافة IMA:
- أضِف
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotللسماح بتوفير خانة إعلانية لاستخدامها في "الإعلانات أثناء إيقاف الفيديو مؤقتًا". - تم إصلاح الخطأ الذي يؤدي إلى ظهور زر التخطّي فورًا في الإعلان الثاني عند عرض إعلانات VAST متتالية قابلة للتخطّي (#3165).
- أضِف
- الجلسة:
- تم إصلاح حالات التوقّف التام المحتملة وأعطال
IllegalStateExceptionداخلMediaNotificationManagerعند استخدام جلسة مع حلقة تكرار مشغّل سلسلة مهام في الخلفية. - فرض متطلبات أكثر صرامة على سلاسل المحادثات لطُرق
MediaSessionVoid methods now automatically post execution to the application looper thread, and state accessors (getters) explicitly throw anIllegalStateExceptionif called from a thread other than the application looper. - تم إصلاح عطل في دمج المخطط الزمني خارج الحدود (
IllegalStateExceptionفيMediaUtils.mergePlayerInfo) من خلال تتبُّع اتساق الحالة لكل وحدة تحكّم في جانب الجلسة. - أضِف
androidx.media3.session.MediaSessionManagerلإتاحة الاستعلام عن جلسات الوسائط النشطة وعرض مثيلات Media3SessionToken. - يمكنك تغيير الإعداد التلقائي لـ
MediaSession.Callback.onConnectإذا لم يتم تجاوز الطريقة لتوفير إذن الوصول للقراءة فقط إلى وحدات التحكّم غير الموثوق بها. - إضافة إمكانية إلغاء اسم الحزمة أثناء إنشاء
MediaSessionمن خلال واجهة برمجة تطبيقات جديدةMediaSession.Builder#setPackageNameOverrideيجب أن يكون لدى المتصل إذنandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERلتجاوز اسم حزمة الجلسة. - أضِف
MediaSession.Callback.onConnectAsync(). تسمح الطريقة الجديدة بمعالجة محاولة اتصال وحدة التحكّم بشكل غير متزامن. يمكن للتطبيقات عرضFutureفورًا معFutures.immediateFuture(ConnectionResult)لتحقيق السلوك السابق. ننصحك بالانتقال إلى الطريقة الجديدة لأنّCallback.onConnectمرشّح للإيقاف نهائيًا. - تم إصلاح مشكلة عدم تعرُّف تصفُّح Bluetooth AVRCP على
MediaLibraryServiceفي واجهتَي برمجة التطبيقات 36 و37. - تم إصلاح مشكلة تصغير حجم العمل الفني مرّتين في
MediaSessionعندما يكون حجم الصورة قريبًا من الحدّ الأقصى المسموح به في المنصة، ما يحلّ مشكلة عدم وضوح الصور في الإشعارات (#3134). - تم إصلاح عطل
ForegroundServiceStartNotAllowedExceptionفيMediaNotificationManagerعندما يحاول ردّ الاتصال غير المتزامن لتحميل الصورة النقطية للعمل الفني بدء خدمة تعمل في المقدّمة بينما يكون التطبيق قيد التشغيل في الخلفية (#3270). - تم إصلاح مشكلة عدم توفّر معرّفات UID الأصلية لـ
Timelineفي عناصرPositionInfoالتي تم تلقّيها من خلالMediaController. تترجم الجلسة الآن هذه المعرّفات الفريدة وتنشرها بشكل موثوق أثناء تحديثات الحالة. - تم إصلاح عطل من خلال رصد
ForegroundServiceStartNotAllowedExceptionفيMediaSessionService.stopSelfSafely()(#3310). - تم إصلاح مشكلة استدعاء
onMediaItemTransition()غير المتوقّع فيMediaControllerعند البحث داخل ملف الوسائط نفسه (#3248).
- تم إصلاح حالات التوقّف التام المحتملة وأعطال
- واجهة المستخدم:
- تم إصلاح مشكلة عرض الإطار الأول بحجم غير صحيح عند إعادة تركيب
ContentFrameفي منتصف التشغيل (#3238). - أضِف فئة
CurrentMediaItemStateوالدالة المركّبةrememberCurrentMediaItemStateالمقابلة لها إلى وحدةmedia3-ui-compose. يُستخدم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض معلومات متنوعة حول البيانات الوصفية لـ "MediaItem" الذي يتم تشغيله حاليًا. - أضِف فئة
PlaylistStateوالدالة المركّبةrememberPlaylistStateالمقابلة لها إلى وحدةmedia3-ui-compose. يُستخدَم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض معلومات مختلفة عن البيانات الوصفية حولMediaItemsالتي تم ضبطها في المشغّل. - إضافة واجهة برمجة تطبيقات للتقديم السريع/التصوير البطيء إلى
PlaybackSpeedStateاستخدِم هذه الوظيفة في "demo-compose" لعرض ميزة التقديم السريع من خلال الضغط مع الاستمرار. - أضِف الدالة المركّبة
MiniControllerإلى الوحدةmedia3-ui-compose-material3. توفّر هذه الميزة طريقة مدمجة للتحكّم فيPlayerأثناء عرض العنوان والفنان والعمل الفني ومستوى تقدّم ملف الوسائط الحالي. - أضِف فئة
ErrorStateوالدالة المركّبةrememberErrorStateالمقابلة لها إلى وحدةmedia3-ui-compose. أضِف دالةErrorTextالمركّبة إلىmedia3-ui-compose-material3واجعلها تراكبًا تلقائيًا علىPlayer. - نشر عنصر
PlayerDefaultsباستخدام دوال مركّبة لـTopControlsوCenterControlsوBottomControlsوErrorOverlay - أضِف
FocusRequesterإلى دالةPlayerالمركّبة وخانات المحتوى الخاصة بها. - يجب نشر
PlayerPool(common-ktx) وrememberPooledPlayer(ui-compose) لإتاحة التحميل المُسبق لـMediaItemsفي بيئات واجهة المستخدم التي تستخدم النوافذ المنزلقة. يمكنك عرض هذه الوظيفة في "demo-compose" باستخدامShortFormPlayerScreenجديد. - تم إصلاح خلل في ميزة "إيقاف الغالق" في
PlayerViewوComposePresentationStateكان يؤدي إلى تعطُّل المخططات الزمنية التي لا تتيح البحث عن معرّف UID للفترة (#3264).
- تم إصلاح مشكلة عرض الإطار الأول بحجم غير صحيح عند إعادة تركيب
- عمليات التنزيل:
- تم حلّ مشكلة متغيّرات HLS في قائمة تشغيل الوسائط عند جلبها للتنزيل (#3258).
- إضافة Ktor:
- إضافة HLS:
- تمت إضافة ميزة "توجيه المحتوى" (Content Steering) و"استنساخ المسار" (Pathway Cloning) في بروتوكول HLS (#1689).
- يجب إضافة
setWithAssetListResetإلىHlsInterstitialsAdsLoaderللسماح للتطبيقات بإعادة ضبط الإعلانات البينية لقائمة مواد العرض التي تمت معالجتها بالكامل إلى حالة غير متاحة لإعادة التحليل عند الطلب. - تحليل سمة
SCOREلكل منEXT-X-STREAM-INFوEXT-X-I-FRAME-STREAM-INF، وتعبئتها فيFormat.selectionPriority(#3236) - تم إصلاح خلل يتسبب في استمرار عمليات إعادة تحميل قائمة تشغيل HLS المجدوَلة حتى إذا لم تعد قائمة التشغيل أساسية أو نشطة (#3254).
- تم إصلاح عملية احتساب إزاحة استئناف المحتوى عند حلّ قوائم مواد العرض البينية (#3322).
- تم إصلاح مشكلة الانقطاع غير المتوقّع في الطابع الزمني للمقطع الصوتي عند استئناف تشغيل البث المباشر بزمن انتقال منخفض بعد تعذُّر طلب قائمة التشغيل (#3311).
- تم إصلاح الخطأ في
HlsMediaPeriod.getStreamKeys()حيث يتم اعتبار مقطع ID3 في العروض الصوتية كترجمة (#3333).
- إضافة DASH:
- فصل مقاطع الترجمة والشرح CEA إلى
TrackGroupمختلفة استنادًا إلى اللغة (#3113) - إضافة إمكانية تحليل عناصر
Locationمتعددة من البيان (MPD) واستخدام الموقع الجغرافي الاحتياطي فيDashMediaSourceعند تعذُّر تحميل البيان - تم إصلاح عطل (
IndexOutOfBoundsException) عند فتح ملفات البيان التي تحتوي على عنصر<SegmentTimeline/>فارغ (#3326).
- فصل مقاطع الترجمة والشرح CEA إلى
- إضافة RTSP:
- تم إصلاح مشكلة توقُّف التشغيل المؤقت أو تعذُّر التشغيل أثناء الإعداد لتشغيل RTSP بسبب أخطاء في ربط منفذ UDP.
- إضافة Cast:
- أضِف فئة
CastParamsجديدة للسماح بضبط إعدادات Cast من خلال استدعاءCast.initialize(CastParams). - إضافة خيار
CastParams.getShowSystemOutputSwitcherOnCastIconClick()الجديد الذي يتيح استخدام "أداة تبديل الإخراج" في SystemUI بدلاً من "أداة اختيار جهاز البث" داخل التطبيق عند توفّرها - تمت إضافة
MediaRouteButtonStateوrememberMediaRouteButtonStateلإتاحة رصد حالة ظهور منتقي مسار الوسائط، وتمت إضافة المَعلمةstateإلىMediaRouteButton(#3172). - تم إصلاح خلل يتسبّب في توقّف
RemoteCastPlayerنهائيًا في حالة إخفاء المسار بعد اختيار مسار، ما يؤدي إلى تجاهل التعديلات اللاحقة على المسار من جهاز استقبال البث (#3237). - تم إصلاح خلل يتسبب في ظهور خطأ
NullPointerExceptionفيDefaultMediaItemConverterعند محاولة الانضمام إلى جلسة بث بدأت من مُرسِل لا يستخدم Media3. - منع
CastPlayerمن نقلMediaItemsغير قابلة للتشغيل عند تغيير المشغّل النشط (#3199) - تم إصلاح الخطأ الذي كان يؤدي إلى وضع أحداث البث المباشر غير المضبوطة (
liveConfiguration == UNSET) في قائمة الانتظار على أنّهاSTREAM_TYPE_BUFFERED(#3318).
- أضِف فئة
- أدوات الاختبار المساعدة:
- توسيع
DataSourceContractTestلتشمل دعم طلباتPOSTمع العناوين والنصوص، وإضافة بعض مواردPOSTإلىHttpDataSourceTestEnv، وإضافة تأكيدات لطريقة HTTP المتوقعة والعناوين والنص فيWebServerDispatcher. - يجب تشديد التأكيدات في
DataSourceContractTestللأطوال التي يتم عرضها منDataSource.open(). يجب أن تشير الموارد التي قد تؤدي إلىC.LENGTH_UNSETإلى ذلك باستخدامTestResource.Builder.setMayResolveToUnknownLength(boolean). - أضِف "
setPlaybackLooper" إلى "TestExoPlayerBuilder".
- توسيع
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
androidx.media3.exoplayer.MetadataRetrieverيمكنك استخدامandroidx.media3.inspector.MetadataRetrieverكبديل. - إزالة
androidx.media3.exoplayer.MediaExtractorCompatيمكنك استخدامandroidx.media3.inspector.MediaExtractorCompatكبديل. - إزالة
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAاستخدِمHeifExtractorلاستخراج البيانات الوصفية للصور المتحركة من ملفات HEIC بدلاً من ذلك. - إزالة
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadataيمكنك استخدامandroidx.media3.extractor.metadata.MotionPhotoMetadataكبديل. - إزالة
androidx.media3.extractor.DummyTrackOutputيمكنك استخدامandroidx.media3.extractor.DiscardingTrackOutputكبديل. - إزالة
androidx.media3.extractor.DummyExtractorOutputيمكنك استخدامandroidx.media3.extractor.NoOpExtractorOutputكبديل. - إزالة
androidx.media3.common.C.generateAudioSessionIdV21يمكنك استخدامandroidx.media3.common.util.Util.generateAudioSessionIdكبديل.
- إزالة
- إنشاء
- تم تعديل تعليمات
README.mdللاعتماد على Media3 محليًا لاستخدام عمليات الإنشاء المركّبة في Gradle (includeBuild). تمت إزالة النص البرمجيcore_settings.gradle، ولم تعُد السمتانandroidxMediaModulePrefixوandroidxMediaEnableMidiModuleمستخدمتَين.
- تم تعديل تعليمات
1.11.0-rc01
استخدِم الإصدار الثابت 1.11.0.
1.11.0-beta01
7 يوليو 2026
استخدِم الإصدار الثابت 1.11.0.
1.11.0-alpha01
24 يونيو 2026
استخدِم الإصدار الثابت 1.11.0.
الإصدار 1.10.0
1.10.1
12 مايو 2026
- المكتبة المشتركة:
- تم إصلاح طريقة معالجة
onAudioSessionIdChangedفيSimpleBasePlayerوForwardingSimpleBasePlayer.
- تم إصلاح طريقة معالجة
- ExoPlayer:
- تم إصلاح حالة السباق المتعلّقة بإنشاء معرّف جلسة الصوت التي قد تؤدي إلى حدوث
IllegalStateExceptionفي وضع النفق. (#3099). - تم إصلاح الأعطال المحتملة في التطبيق عند الاسترداد من أخطاء وحدة فك الترميز من خلال الإحماء المسبق لأداة العرض.
- تم إصلاح مشكلة ظهور عيوب في الفيديو بسبب توفير بيانات الإعداد عند استخدام برنامج ترميز Dolby Vision المستند إلى AV1 (#3153).
- تم إصلاح حالة السباق المتعلّقة بإنشاء معرّف جلسة الصوت التي قد تؤدي إلى حدوث
- اختيار المقطع الصوتي:
- تم تعديل منطق اختيار المقاطع الصوتية في
VideoTrackInfoلحلّ مشكلة أنواع MIME الاحتياطية ونقل الإعدادات المفضّلة لدرجات النطاق العالي الديناميكية (HDR) وبرامج الترميز إلى الإعدادات المفضّلة للجودة (#3135).
- تم تعديل منطق اختيار المقاطع الصوتية في
- أدوات الاستخراج:
- MP3: تجاهُل طول بيانات Xing إذا كان أطول من طول البث المعروف (#3117)
- تم إصلاح
ArrayIndexOutOfBoundsExceptionفيMp4Extractorعند ضبطFLAG_OMIT_TRACK_SAMPLE_TABLEوعدم احتواء المقطع الصوتي على مربّع عيّنة المزامنة (stss).
- الصوت:
- تم إصلاح الخطأ الذي قد يؤدي إلى توجيه الأحداث الصوتية بشكل خاطئ في حال إضافة عدة أدوات عرض صوتية إلى المشغّل.
- الفيديو:
- تم تعديل منطق إعادة استخدام برامج الترميز عند تغيير عدد اللقطات في الثانية على واجهة برمجة التطبيقات التي يقل مستواها عن 30 لتجنُّب إعادة ضبط برامج الترميز في الحالات التي لا تكون فيها مفيدة (#3120).
- إيقاف الحل البديل للمزامنة الإلزامية في
queueSecureInputBufferلواجهة برمجة التطبيقات 31 والإصدارات الأحدث. كان الحل البديل عبارة عن عنق زجاجة اصطناعي يفرض تشغيل فك التشفير بشكل تسلسلي، ما يمنع تشويه الفيديو بسبب مشكلة في إطار العمل كانت موجودة قبل واجهة برمجة التطبيقات 31.
- الصورة:
- تم إصلاح مشكلة في وضع التقديم السريع حيث لا يتم تطبيق تعديلات الصور إلا عندما "يتوقف المستخدم عن التقديم السريع" (#2815).
- الجلسة:
- تم إصلاح الخطأ الذي كان يمنع نشر
ForegroundServiceStartNotAllowedExceptionعبر حدود سلاسل التعليمات في حال لم تكن سلسلة تعليمات التطبيق هي سلسلة التعليمات الرئيسية (#2499). - إصلاح الخطأ الذي يؤدي إلى عدم توفّر
COMMAND_SEEK_TO_MEDIA_ITEMفيMediaControllerعند الاتصال بجلسة على المنصة فقط تتيح البحث عن عناصر أخرى ولكن لا تتيح تعديل قائمة التشغيل - تم إصلاح مشكلة عدم تمكّن "
MediaController" من ضبط ملفات الوسائط في جلسات الوسائط على المنصة التي لا تسمح بإجراءات "PREPARE_FROM". - تم إصلاح الخطأ الذي كان يتسبب في عدم وضع علامة
Controller.isTrusted()على العملية الخاصة عند الاتصال عبر وحدات التحكّم في المنصة على المستوى 27 من واجهة برمجة التطبيقات أو المستويات السابقة.
- تم إصلاح الخطأ الذي كان يمنع نشر
- إضافة HLS:
- إضافة DASH:
- تم إصلاح عطل في
SampleQueueعند البحث في مقطع يتم إلغاؤه حاليًا.
- تم إصلاح عطل في
1.10.0
26 مارس 2026
- المكتبة المشتركة:
- ترقية
Player.mute()وPlayer.unmute()منUnstableApiإلى الإصدار الثابت - ترقية
Format.pcmEncodingوC.PcmEncodingمنUnstableApiإلى الإصدار الثابت - تمت إضافة
Format.primaryTrackGroupIdلتحديد المجموعة الأساسية من مثيلاتFormatالمضمّنة (#294).
- ترقية
- ExoPlayer:
- إضافة إمكانات الاقتصاص إلى
AdsMediaSource - إضافة ميزة الجدولة الديناميكية في
MediaCodecVideoRendererلمواءمة عمل الجدولة ودورات تنشيط وحدة المعالجة المركزية بشكل أفضل مع وقت معالجة إطارات الفيديو يمكنك تفعيل هذه الميزة باستخدامexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()فيDefaultRenderersFactory. - السماح بضبط
DataSource.Factoryمخصّص فيDefaultPreloadManager.Builder - السماح بمحاكاة
ExoPlayerبدون Robolectric من خلال نقل بعض الثوابت التلقائية إلىExoPlayer.BuilderMocking this complex interface is not generally encouraged - only when the usage is minimal/simple/incidental (#2985).- تطلّب ذلك نقل
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSمنExoPlayerإلىExoPlayer.Builder(بدون إيقاف نهائي).
- تطلّب ذلك نقل
- تم إصلاح خلل يؤدي إلى نشر
ProgressiveMediaSourceمعلومات قديمة عن المخطط الزمني للمشغّل، وإزالة الفترات المُدرَجة في قائمة المحتوى التالي بشكل غير متوقع (#3016). - تم إصلاح مشكلة عدم طلب ExoPlayer التركيز على الصوت المتأخر عند طلب التشغيل أثناء المكالمات الهاتفية.
- تم إصلاح الخطأ الذي قد يؤدي فيه الانتقال من المحتوى المسجّل إلى المحتوى المباشر إلى إعادة التخزين المؤقت في نهاية المحتوى المسجّل (#3052).
- تمت إضافة إمكانية استخدام Dolby Vision Profile 10 (#2830).
- تم إصلاح الخطأ الذي تسبّب في ظهور خطأ
ArrayIndexOutOfBoundsExceptionعند عرض إعلان ما قبل التشغيل غير مهيأ (#3125).
- إضافة إمكانات الاقتصاص إلى
- CompositionPlayer:
- أضِف دعمًا لـ
EditedMediaItem.removeVideo.
- أضِف دعمًا لـ
- Transformer:
- يمكن الآن لـ "
EditedMediaItem.Builder.setFrameRate()" ضبط الحد الأقصى لعدد اللقطات في الثانية للفيديو، وهو أمر مفيد بشكل خاص عند زيادة سرعة الوسائط باستخدام "setSpeed()".
- يمكن الآن لـ "
- اختيار المقطع الصوتي:
- يجب تغيير توقيع
DefaultTrackSelector.selectAllTracksلتضمين مصفوفة الإخراج كمَعلمة، مع تعبئتها تلقائيًا بعمليات إلغاء المسار. - تم إصلاح مشكلة اختيار المقاطع الصوتية المضمّنة في البيانات الوصفية بغض النظر عمّا إذا تم اختيار المقطع الصوتي الأساسي المقابل (#294).
- تثبيت خيارات
TrackSelectionParametersلـpreferredVideoLanguagesوpreferredVideoLabelsوpreferredAudioLabelsوpreferredTextLabelsوselectTextByDefault
- يجب تغيير توقيع
- أدوات الاستخراج:
- MP4: تمت إضافة إمكانية تشغيل الملفات التي تحتوي على مربّعات
uuidكبيرة قبل المربّعات الأخرى، مثلmoov(#3046). - MP4: تمت إضافة إمكانية تشغيل المقاطع الصوتية بترميز الفيديو المتعدد الاستخدامات (VVC) في حاويات MP4.
- MP4: تمت إضافة إمكانية تشغيل الملفات التي تحتوي على مربّعات
- المفتّش:
- تغيير قد يؤدي إلى عطل: إزالة
FrameExtractor. يجب أن يعتمد المستخدمون الآن على وحدة:media3-inspector-frameالجديدة وتحديث عمليات الاستيراد إلىandroidx.media3.inspector.frame.FrameExtractor. - تقديم وحدة جديدة لاستخراج إطارات الفيديو التي تم فك ترميزها ومعالجتها
- تغيير قد يؤدي إلى عطل: إزالة
- الصوت:
- تغيير مكتبة فك الترميز الأساسية لإضافة أداة فك ترميز IAMF من
libiamfإلىiamf_tools - يتيح فك ترميز IAMF إخراج الصوت بكلتا الأذنين إما من خلال وحدة فك الترميز (عند استخدام إضافة وحدة فك ترميز IAMF) أو من خلال ميزة "الصوت المكاني" في Android.
- تمت إزالة إمكانية تشغيل ملفات
AC4Profile22والملفات القديمة الأخرى بشكل صحيح عند تقييم إمكانية تشغيل برنامج فك ترميز AC-4 في سيناريوهات Automotive (#2609). - تحسين منطق إعادة المحاولة لعملية إعداد
AudioOutputفيDefaultAudioSink(#2905). - محاولة مطابقة تنسيق الإخراج لمكبّرات الصوت (أو ميزة "الصوت المكاني" إن وُجدت) عند فك ترميز IAMF، باستخدام كل من إضافة IAMF وبرامج فك ترميز الوسائط، وذلك من خلال حقول ومنطق جديدَين في AudioCapabilities وAudioCapabilitiesReceiver.
- تم إصلاح الخطأ الذي يتسبّب في توقُّف التشغيل عند تشغيل قائمة تشغيل صوتية بدون فواصل في وضع التفريغ المضغوط.
- تغيير مكتبة فك الترميز الأساسية لإضافة أداة فك ترميز IAMF من
- النص:
- VobSub: استخدام أوامر التحكّم
STARTوSTOPفي SPU لاستنتاج مدة الإشارة بدلاً من ضبطها تلقائيًا على 5 ثوانٍ (#2935)
- VobSub: استخدام أوامر التحكّم
- البيانات الوصفية:
- زيادة العدد التلقائي لأدوات عرض البيانات الوصفية إلى أربعة لتغطية جميع المقاطع الصوتية المحتملة للبيانات الوصفية التي تنشرها صيغ HLS وعروضها (#3043).
- التأثير:
- نقل
LottieOverlayإلى وحدة:media3-effect-lottieجديدة (والتي تضمنت أيضًا إعادة تسميتها منandroidx.media3.effect.LottieOverlayإلىandroidx.media3.effect.lottie.LottieOverlay).
- نقل
- تأثير Lottie:
- نقدّم وحدة
:media3-effect-lottieجديدة توفّر وظائف لتطبيق تأثيرات Lottie على إطارات الفيديو.
- نقدّم وحدة
- إضافة IMA:
- يُرجى تحديث إصدار حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) إلى 3.39.0 للوصول إلى أحدث إصدار من واجهة برمجة التطبيقات Ad media info API.
- تم إصلاح خلل حيث لم يتطابق نوع MIME للإعلان مع نوع MIME المقدَّم في حدث IMA LOADED. يعمل الإصلاح الآن على ربط نوع MIME للإعلان باستخدام معلومات وسائط الإعلان المقدَّمة من IMA.
- أضِف
setEnableCustomTabsإلىImaAdsLoaderوImaServerSideAdInsertionMediaSource، ما يسمح للمستخدمين بالتحكّم في ما إذا كان سيتم فتح عناوين URL للنقرات على الإعلانات باستخدام "علامات التبويب المخصّصة". - أضِف
ImaAdTagUriBuilder، وهي فئة توفّر طريقة بديلة لإنشاءadTagUri. وتحتوي على واجهة برمجة التطبيقاتsetPreferredLinearOrientation. هذه واجهة برمجة تطبيقات في مرحلة الاختبار الأوّلي ستسمح لك بضبط الاتجاه المفضّل للإعلانات الخطية. إذا أردت الانضمام إلى مجموعة الاختبار الأوّلي، يُرجى التواصل مع شريك حسابك.
- الجلسة:
- تم إصلاح خطأ يتسبب في تعطُّل التطبيق عند استخدام مصفوفات كبيرة في
MediaMetadata.artworkData. - استخدِم النوع int للوسيطة
@Player.Commandفي واجهةActionFactory(#2933). - تم جعل
MediaSessionServiceوMediaLibraryServiceLifecycleService، ما يسمح بإرفاق العمليات التي تراعي مراحل النشاط بمراحل نشاط الخدمة (#187). - إيقاف إتاحة أوامر تغيير مستوى صوت الجهاز من
MediaControllerوMediaBrowserلعمليات التشغيل المحلية يجب ألا تغيّر التطبيقات مستوى الصوت على الجهاز المحلي، ويمكنها استخدام واجهات برمجة التطبيقاتAudioManagerلهذا الغرض إذا لزم الأمر. - رصد مثيلات
Intentالقديمة التي بدأت الخدمة كخدمة تعمل في المقدّمة يمنع ذلك ظهور الخطأForegroundServiceDidNotStartInTimeExceptionمن النظام. هذا تغيير قد يؤدي إلى عطل في واجهة برمجة تطبيقات غير مستقرة للتطبيقات التي تستخدمMediaNotification.Providerمخصّصًا، لأنّ هناك طريقة جديدة مطلوبة. - إضافة أدوات إنشاء لمثيلات
PendingIntentلاستخدامها مع التطبيقات المصغّرة على الشاشة الرئيسية (#2933) - تمت إضافة طرق ثابتة لإنشاء نُسخ من
Intentللتطبيقات المصغّرة على الشاشة الرئيسية المستندة إلى Compose (#2933). - تم إصلاح خطأ كان يمنع إبلاغ وحدات التحكّم بانتقال ملف الوسائط عندما ينتقل التشغيل من فهرس ملف وسائط معيّن إلى فهرس آخر باستخدام ملف الوسائط نفسه لسبب الانقطاع "تلقائي" و"البحث" (#2997).
- تم إصلاح مشكلة تؤدي فيها الحلول البديلة لموضع زر واجهة مستخدم النظام إلى التأثير سلبًا في واجهات المستخدم الأخرى، مثل Android Auto أو الشركات المصنّعة التي لا تحتاج إلى الحلول البديلة (#3041).
- تم إصلاح مشكلة عدم مزامنة إمكانية الوصول إلى الاشتراكات (#3056).
- تم إصلاح خطأ في واجهة مستخدم النظام في واجهة برمجة التطبيقات 29 حيث يمكن أن يؤدي عمل فني لجلسة وسائط بحجم معيّن إلى تعطُّل واجهة مستخدم النظام وفرض إعادة تشغيل الجهاز (#3118).
- تم إصلاح مشكلة تغيير حجم رمز العمل الفني للإشعارات على Android Q (#3084).
- تم إصلاح خطأ يتسبب في تعطُّل التطبيق عند استخدام مصفوفات كبيرة في
- واجهة المستخدم:
- أضِف دالة
PlaybackSpeedControlالمركّبة إلىmedia3-ui-composeلعرض سرعة التشغيل وتعديلها. - أضِف دالة
PlaybackSpeedToggleButtonمركّبة إلىmedia3-ui-compose-material3للتحكّم في سرعة التشغيل. - تمت إضافة دالة
ProgressSliderمركّبة إلىmedia3-ui-compose-material3لعرض مستوى تقدّم المشغّل وتنفيذ عمليات البحث باستخدام السحب والنقر (#2288). - تجنَّب استخدام مخزن مؤقت كبير خارج الشاشة في PlayerControlView المتحركة.
- أضِف دالة
Playerمركّبة إلىmedia3-ui-compose-material3التي تجمع بينContentFrameوعناصر تحكّم قابلة للتخصيص تتم محاذاتها إلى الأعلى والوسط والأسفل. - يمكنك إخفاء موضع التشغيل من خدمة تسهيل الاستخدام لمنع
التحديث المستمر للإشعارات عندما يكون "
PlayerControlView" مرئيًا.
- أضِف دالة
- إضافة HLS:
- إتاحة استخدام السمة X-PLAYOUT-LIMIT مع الفواصل الإعلانية في HLS (#2484)
- إتاحة السمة
QUERYPARAMمع#EXT-X-DEFINE(#1854) - تحسين تحليل قائمة تشغيل HLS من خلال تخزين مطابِقات التعبيرات العادية مؤقتًا (#3008)
- عرض مسار البيانات الوصفية ID3 (EMSG) في نُسخ الصوت (#3043)
- السماح بالرجوع إلى الموقع الجغرافي عند حدوث أخطاء في التحميل، في حال توفّر مصادر بيانات مكرّرة من مواقع جغرافية مختلفة (#1988).
- تم إصلاح سلوك X-SNAP لإعلانات HLS البينية من أجل احتساب موضع البدء والاستئناف بشكل صحيح (#3013).
- إضافة DASH:
- إضافة RTSP:
- تم إصلاح مشكلة تراجُع في بث H.264 وH.265 كانت تؤدي إلى تحليل عينات من وحدة الوصول نفسها التي امتدت عبر حِزم RTP متعددة بشكل غير صحيح. وأدى ذلك إلى ظهور عيوب مرئية وتلف في الفيديو (#3121).
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- إضافة إمكانية استخدام مدير واجهة مستخدم MPEG-H إلى إضافة برنامج فك ترميز MPEG-H (#3066)
- إضافة Cast:
- تمت إضافة طريقة
RemoteCastPlayer.Builder#setTrackSelectorتتيح تنفيذ اختيار المقطع الصوتي لعمليات تشغيل Cast.
- تمت إضافة طريقة
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
ExperimentalFrameExtractorيمكنك استخدامandroidx.media3.inspector.frame.FrameExtractorكبديل. - إزالة
ChannelMixingMatrix.create()يمكنك استخدامChannelMixingMatrix.createForConstantGain()كبديل. - إزالة
androidx.media3.extractor.metadata.flac.VorbisCommentيمكنك استخدامandroidx.media3.extractor.metadata.vorbis.VorbisCommentكبديل. - إزالة
MediaSource.prepareSource(MediaSourceCaller, TransferListener)يمكنك استخدامMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)كبديل.
- إزالة
1.10.0-rc03
25 مارس 2026
استخدِم الإصدار الثابت 1.10.0.
1.10.0-rc02
16 مارس 2026
استخدِم الإصدار الثابت 1.10.0.
1.10.0-rc01
10 مارس 2026
استخدِم الإصدار الثابت 1.10.0.
1.10.0-beta01
25 فبراير 2026
استخدِم الإصدار الثابت 1.10.0.
1.10.0-alpha01
6 فبراير 2026
استخدِم الإصدار الثابت 1.10.0.
الإصدار 1.9.0
1.9.4
16 مايو 2026
يتضمّن الإصدار 1.9.4 عمليات النشر التالية.
- التأثير:
- يجب ضبط
GL_DRAW_BUFFERوGL_READ_BUFFERبشكل صريح عند الانتقال من سياق بدون سطح.
- يجب ضبط
1.9.3
16 مارس 2026
يتضمّن الإصدار 1.9.3 عمليات النشر التالية.
- الصوت:
- تم إصلاح الخطأ الذي يتسبّب في توقُّف التشغيل عند تشغيل قائمة تشغيل صوتية بدون فواصل في وضع التفريغ المضغوط.
1.9.2
6 فبراير 2026
يتضمّن الإصدار 1.9.2 التغييرات التالية.
- ExoPlayer:
- تم إصلاح خطأ يتسبب في نشر
ProgressiveMediaSourceلمعلومات المخطط الزمني القديمة إلى المشغّل وإزالة الفترات المدرَجة في قائمة الانتظار بشكل غير متوقع (#3016).
- تم إصلاح خطأ يتسبب في نشر
- الجلسة:
- تم إصلاح مشكلة تؤدي فيها الحلول البديلة لموضع زر واجهة مستخدم النظام إلى التأثير سلبًا في واجهات المستخدم الأخرى، مثل Android Auto أو الشركات المصنّعة التي لا تحتاج إلى الحلول البديلة (#3041).
- إضافة Cast:
- تم إصلاح الخطأ الذي تسبَّب في تعطُّل عملية النقل من Cast إلى التشغيل على الجهاز.
1.9.1
26 يناير 2026
يتضمّن الإصدار 1.9.1 هذه التعديلات.
- المكتبة المشتركة:
- إتاحة سلاسل التاريخ والوقت التي تتضمّن الساعات فقط في فرق المنطقة الزمنية (#2929)
- ExoPlayer:
- السماح للجدولة الديناميكية بإبطاء الفاصل الزمني لـ
doSomeWorkفقط بعد بدء الصوت لدعم مزامنة الصوت والصورة بشكل أكثر سلاسة في بداية التشغيل - تم إصلاح خلل في
DefaultLoadErrorHandlingPolicyحيث تمت إعادة محاولةFileNotFoundExceptionوأنواع الاستثناءات المماثلة عدة مرات. - تم إصلاح خطأ في الجدولة الديناميكية حيث تم تقليل الوقت المحسوب لـ
doSomeWorkالتالي عن طريق الخطأ بمقدار الوقت المنقضي للتكرار الحالي لـdoSomeWork. نأمل أن تؤدي معالجة هذه المشكلة إلى زيادة وقت خمول وحدة المعالجة المركزية وتوفير الطاقة. - تم إصلاح مشكلة تعذُّر تشغيل بعض ملفات Dolby Vision عند محاولة استخدام برنامج ترميز احتياطي من نوع AVC أو HEVC.
- تم إصلاح الخطأ الذي يؤدي إلى استمرار التحميل بعد انتهاء التشغيل عند إزالة العنصر الذي يتم تشغيله حاليًا من قائمة تشغيل (#2873).
- تجنُّب تسرُّب مثيلات
MediaItemعند استخدامExoPlayer.replaceMediaItemبشكل متكرر على العنصر نفسه (#2993). - منع أخطاء ANR المحتمَلة الناتجة عن عمليات تحرير قفل التنشيط في حالات الطوارئ (#2979)
- السماح للجدولة الديناميكية بإبطاء الفاصل الزمني لـ
- أدوات الاستخراج:
- MP3: تحليل بيانات ReplayGain في LAME (#2840)
- الصوت:
- تمت إزالة إمكانية تشغيل ملفات
AC4Profile22والملفات القديمة الأخرى بشكل صحيح عند تقييم إمكانية تشغيل برنامج فك ترميز AC-4 في سيناريوهات Automotive (#2609).
- تمت إزالة إمكانية تشغيل ملفات
- الفيديو:
- تم تجاهُل برامج ترميز الفيديو على الأجهزة التي تعمل بإصدارات أقدم من المستوى 30 من واجهة برمجة التطبيقات عندما يتغيّر عدد اللقطات في الثانية للمحتوى لتجنُّب تقطُّع التشغيل (#2941).
- النص:
- VobSub: تم إصلاح بعض الترجمات المفقودة من خلال التعامل بشكل صحيح مع وحدات SPU التي تحتوي على تسلسل تحكّم واحد فقط، أو تحتوي على معلومات مهمة مقسمة على عدة تسلسلات تحكّم (#2935).
- إضافة IMA:
- إصلاح خطأ: تم إصلاح مشكلة عدم تطابق نوع MIME للإعلان مع نوع MIME المقدَّم في حدث IMA LOADED. يحدّد الإصلاح الآن نوع MIME للإعلان باستخدام فهرس مجموعة الإعلانات المتسلسلة وموضع عرض الإعلان.
- يجب إضافة فحص قيمة فارغة قبل الوصول إلى نتيجة
getAdsManager()وAdEvent.getAd().
- الجلسة:
- تم إصلاح الخطأ الذي كان يؤدي إلى تعطُّل التطبيق عند إيقاف جلسة
MediaControllerمتصلة بمنصة إذا حدث الإيقاف أثناء تشغيل الإعلان (#2948). - يجب إضافة عمليات تحقّق إضافية على مثيلات
extrasBundleفي فئات مختلفة للحماية من مثيلاتBundleالمشوّهة التي يتم إرسالها من عمليات أخرى. - تم إصلاح مشكلة عدم توفّر بعض الأوامر في
COMMAND_SEEK_NEXTأوCOMMAND_SEEK_BACK، ما قد يؤدي إلى حدوث ثغرات في إشعارات الوسائط في النظام (#2976). - تم نقل عملية تغيير حجم الصورة النقطية لرمز الإشعار خارج سلسلة التعليمات الرئيسية (#2829).
- تم إصلاح الخطأ الذي تسبّب في عدم استخدام المؤلف والكاتب والملحن كبديل
عند التحويل من
MediaMetadataCompatوMediaDescriptionCompatالقديمين (#3018).
- تم إصلاح الخطأ الذي كان يؤدي إلى تعطُّل التطبيق عند إيقاف جلسة
- عمليات التنزيل:
- تم إصلاح التكرارات اللانهائية المحتملة عند معالجة
PriorityTooLowExceptionبواسطةSegmentDownloader(لـ DASH وHLS وSmoothStreaming). يجب أن توفّر عمليات التجاوز المخصّصة لـSegmentDownloaderباستخدام طريقةexecuteالمحمية مهمتها فيSupplierحتى يمكن إعادة إنشائها (#2931).
- تم إصلاح التكرارات اللانهائية المحتملة عند معالجة
- إضافة HLS:
- يجب تمرير مستند JSON الخاص بقائمة مواد العرض الأولية إلى دالة الاستدعاء
Listener.onAssetListLoadCompleted. هذا تغيير قد يؤدي إلى عطل في واجهة برمجة تطبيقات غير مستقرة، ويتطلب من التطبيقات التي تستخدم هذا الاستدعاء إضافة وسيطة أخرى من النوعJSONObject(#2950).
- يجب تمرير مستند JSON الخاص بقائمة مواد العرض الأولية إلى دالة الاستدعاء
- إضافة RTSP:
- تمت معالجة حزم RTP بشكل صحيح باستخدام طوابع زمنية تلتف حولها (#2930).
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- تم إصلاح
NullPointerExceptionالمحتمل الذي يمكن أن يحدث عند البحث قبل معالجة إطار الفيديو الأول (#2965).
- تم إصلاح
- إضافة Cast:
- تم إصلاح الخلل الذي يمنع تحديث المخطط الزمني لـ
RemoteCastPlayerبشكل صحيح عند استبدال قائمة التشغيل.
- تم إصلاح الخلل الذي يمنع تحديث المخطط الزمني لـ
1.9.0
17 ديسمبر 2025
- المكتبة المشتركة:
- تم تحديث
minSdkإلى23بما يتوافق مع مكتبات AndroidX الأخرى. - أضِف
PlayerTransferState، ما يسهّل نقل حالة التشغيل على مستوى نُسخPlayer. - أضِف الطريقتَين
void mute()وvoid unmute()إلى المشغّل للحفاظ على مستوى الصوت ثم استعادته قبل ضبطه على الصفر وبعده. - نشر فئات الأدوات المساعدة
WakeLockManagerوWifiLockManagerوAudioFocusManagerوAudioBecomingNoisyManagerوStuckPlayerDetectorالتي كانت تُستخدم سابقًا من قِبلExoPlayerداخليًا للسماح بإعادة استخدامها لمشغّلات أخرى (#1893) - تم إصلاح طريقة معالجة المستمعين في
ForwardingPlayerعندما يستخدم المشغّل المفوَّض الأساسي المساواة المرجعية لمقارنة نُسخ المستمعين (#2675). - أضِف دالة تعليق
Player.listenToفي مكتبةmedia3-common-ktxتحدّدPlayer.Eventsالمطلوب اتخاذ إجراء بشأنه. - تم إصلاح عطل في
BasePlayer.getBufferedPercentageناتج عن تجاوز سعة العدد الصحيح عندما يكون الموضع المخزّن مؤقتًا الذي تم الإبلاغ عنه أكبر بكثير من المدة التي تم الإبلاغ عنها (#2750). - تم إصلاح مشكلة الرصد التلقائي لنوع المقطع الصوتي
TrackGroupمن خلال عدم تجاهل نوع MIME المخصّص للعيّنة والرجوع إلى استخدام نوع المقطع الصوتي الذي يُحتمل أن يكون خاطئًا من نوع MIME للحاوية (#2860).
- تم تحديث
- ExoPlayer:
- أضِف ميزة رصد توقُّف المشغّل عن العمل والتي تؤدي إلى ظهور خطأ
StuckPlayerExceptionفي المشغّل إذا بدا أنّه متوقف عن العمل. يحدث ذلك في الحالات التالية، حيث يمكن ضبط كل مهلة تلقائية فيExoPlayer.Builderإذا لزم الأمر:- بعد 10 دقائق من
STATE_BUFFERINGأثناء محاولة التشغيل وعدم تقدّم التخزين المؤقت. - بعد 10 ثوانٍ من
STATE_READYأثناء محاولة التشغيل وعدم تقدُّم التشغيل - بعد دقيقة واحدة من
STATE_READYبعد المدة المعلَنة بدون الوصول إلى نهاية العنصر. - بعد مرور 10 دقائق على ظهور سبب منع التشغيل أثناء محاولة التشغيل
- بعد 10 دقائق من
- تفعيل معالجة قفل التنشيط تلقائيًا لحلّ المشاكل المتعلّقة بالتخزين المؤقت أثناء
التشغيل في الخلفية هذا الإجراء يعادل ضبط
ExoPlayer.Builder.setWakeModeعلىC.WAKE_MODE_LOCAL. - أضِف منطق الاستماع لتعديل رقم تعريف الجهاز الافتراضي تلقائيًا عند الإبلاغ عن تغيير في
Contextالذي تم تمريره في الأصل إلىExoPlayer.Builder. - أضِف
ExoPlayer.setVirtualDeviceIdلتعديل رقم تعريف الجهاز الافتراضي يدويًا الذي تم الحصول عليه منContextالذي تم تمريره إلىExoPlayer.Builder. - تأكَّد من أنّ أدوات العرض لا تستهلك بيانات من العنصر التالي في قائمة التشغيل قبل أكثر من 10 ثوانٍ من نهاية العنصر الحالي.
- يجب إضافة
setSeekBackIncrementMsوsetSeekForwardIncrementMsوsetMaxSeekToPreviousPositionMsإلىExoPlayerلتعديل هذه الإعدادات بعد الإنشاء (#2736). - إضافة وظيفة التخزين المؤقت المسبق في
DefaultPreloadManagerيمكن للتطبيقات الآن عرضDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)أوDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)من خلالTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)للإشارة إلى أنّ ملف الوسائط يحتاج إلى تخزين مؤقت مسبق. - استخدِم وظيفة التخزين المؤقّت المُسبق في
DefaultPreloadManagerفي التطبيق التجريبي للفيديوهات القصيرة. - إضافة دوال ضبط
DefaultLoadControl.Builderللتشغيل المحلي وضبط القيم التلقائية لـDefaultLoadControlلتعمل بشكل جيد مع مجموعة واسعة من الملفات المحلية - تم إصلاح الخطأ الذي يؤدي إلى ترك المشغّل في الحالة
STATE_READYأوSTATE_BUFFERINGعند ضبط قائمة تشغيل فارغة. - تحسين واجهات برمجة التطبيقات الخاصة بمدير التحميل المُسبَق:
- أضِف
addMediaItems(List<MediaItem>, List<T>)وaddMediaSources(List<MediaSource>, List<T>)لإضافة ملفات الوسائط أو مصادر الوسائط بشكل مجمّع، ثم استدعِinvalidate()تلقائيًا بعد ذلك. - أضِف
removeMediaItems((List<MediaItem>)وremoveMediaSources(List<MediaSource>)لإزالة ملفات الوسائط أو مصادر الوسائط بشكل مجمّع، وتأكَّد من أنّ مدير التحميل المُسبق لا يبدأ التحميل المُسبق أو يواصل التحميل المُسبق لأي منها بعد الإزالة. - السماح لـ "
DefaultPreloadManager.setCurrentPlayingIndex(int)" بإبطال نفسه تلقائيًا لم تعد التطبيقات بحاجة إلى استدعاءinvalidate()بشكل صريح بعد تحديث فهرس التشغيل الحالي.
- أضِف
- إضافة إمكانية تخطّي إعادة ضبط الإطار الرئيسي لعمليات البحث للأمام ضمن المجموعة نفسها من الصور أثناء استخدام وضع التمرير السريع
- أضِف
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)للتطبيقات لضبط قيمة وحدات بايت المخزن المؤقت المستهدفة لمشغّل باستخدام السمةplayerNameالمحدّدة. يمكن الآن لـDefaultLoadControlاتخاذ قرارات لكل مشغّل على حدة استنادًا إلى وحدات البايت المخصّصة له ووحدات البايت المستهدَفة في المخزن المؤقت. - أضِف
SkipInfoإلىAdPlaybackState.AdGroupلنقل معلومات التخطّي لكل إعلان في المجموعة الإعلانية. - تم إصلاح الخطأ الذي كان يؤدي إلى حدوث عطل عند استدعاء
removeMediaItems(List)أثناء تشغيل إعلان ما بعد التشغيل (#2746). - تم إصلاح بعض حالات التقطّع في تشغيل قوائم التشغيل حيث كان يتم دائمًا ضبط الإطارات بشكل خاطئ على أنّها آخر عيّنة ويتم عرضها.
- تفعيل مسار إعادة المحاولة في حال تعذّر على المشغّل إنشاء معرّف جلسة صوتية (#2382، #2678).
- تمت إضافة ميزة للتحكّم في إجمالي وحدات البايت في المخزن المؤقت للمصادر في
DefaultPreloadManagerلتجنُّب زيادة إجمالي وحدات البايت في المخزن المؤقت للتحميل المُسبق بشكل عشوائي. لاستخدام منطق التحكّم التلقائي، يمكن للتطبيقات ضبط وحدات البايت الاحتياطية المستهدَفة للتحميل المُسبَق من خلالDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)لـplayerNameمنPlayerId.Preload.name("التحميل المُسبَق")، وإدخالDefaultLoadControlالذي تم إنشاؤه من خلالDefaultPreloadManager.Builder.setLoadControl(LoadControl). - تمت إضافة
cloneAndSet(int, int)إلىShuffleOrderمع تنفيذ تلقائي (#2834). - إلحاق إزاحة استئناف المحتوى عند تخطّي تشغيل الإعلان بعد تعديل البحث أو الانتقال التلقائي (#2484)
- إضافة واجهة برمجة تطبيقات لضبط مَعلمات برامج الترميز لمقاطع الصوت والفيديو ومراقبتها
تم تنفيذ هذه الميزة لأدوات العرض المستندة إلى
MediaCodecوتتطلّب الإصدار 29 من واجهة برمجة التطبيقات أو الإصدارات الأحدث.- استخدِم
ExoPlayer.setAudioCodecParameters()وExoPlayer.setVideoCodecParameters()لتطبيق المَعلمات. - استخدِم
ExoPlayer.addAudioCodecParametersChangeListener()وExoPlayer.addVideoCodecParametersChangeListener()للاستماع إلى التغييرات. تتطلّب مراقبة المفاتيح الخاصة بالمورّد استخدام المستوى 31 أو أعلى من واجهة برمجة التطبيقات.
- استخدِم
- تم إصلاح الخطأ
IllegalStateExceptionالناتج عن ضبط مصدر وسائط فارغ بعد تقديم/ترجيع المحتوى إلى موضع غير صفري ثم إعداد المشغّل باستخدام مصدر وسائط غير فارغ. - تم إصلاح خلل كان يؤدي إلى حدوث
IllegalStateExceptionعند البحث في ملفات وسائط أخرى أثناء وضع التقديم أو الترجيع السريع. - تم إصلاح مشكلة
NullPointerExceptionمحتملة فيDefaultPlaybackSessionManager(#2885). - تفعيل التحسينات في أداء البحث عن الفيديوهات المؤهلة
- إعادة تفعيل استخدام فك التشفير غير المتزامن في MediaCodec على واجهة برمجة التطبيقات 36 والإصدارات الأحدث، حيث تم إصلاح مشاكل المهلة في واجهة برمجة التطبيقات هذه على النظام الأساسي (#1641)
- يمكنك تغيير القيمة التلقائية لـ
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsإلى 15 ملي ثانية وتفعيل ميزة إسقاط إطارات الفيديو بشكل أكثر كفاءة قبل فك ترميز الفيديوهات المؤهَّلة. - إضافة الحد الأقصى للذاكرة إلى عملية احتساب الذاكرة التلقائية في
DefaultLoadControlيجب أن يسري هذا الإجراء فقط في حال اختيار عدد كبير جدًا من المقاطع الصوتية (#2860). - تم إصلاح الخطأ الذي كان يتسبب في الانتقال إلى ملف الوسائط التالي عند البحث في وضع التمرير السريع بالقرب من نهاية الملف، وذلك أثناء التشغيل في قائمة تشغيل أو وضع التكرار.
- أضِف ميزة رصد توقُّف المشغّل عن العمل والتي تؤدي إلى ظهور خطأ
- CompositionPlayer:
- يمكنك نشر
CompositionPlayerضمن تعليق توضيحي جديد لـ@ExperimentalApiللإشارة إلى أنّه متاح للتجربة، ولكنّه لا يزال قيد التطوير. من المرجّح أن تتغيّر بعض واجهات برمجة التطبيقات بشكل كبير في الإصدارات المستقبلية، وهناك مشاكل وقيود معروفة في بعض حالات الاستخدام (بعضها غير موثَّق). - إضافة إمكانية استخدام
COMMAND_SET_AUDIO_ATTRIBUTESوالتحكّم في التركيز على الصوت فيCompositionPlayer - إضافة إمكانية تغيير السرعة في التسلسلات الثانوية في
CompositionPlayer - أضِف دعمًا لـ
EditedMediaItem.removeVideo.
- يمكنك نشر
- Transformer:
- استخدام
InAppMp4Muxerكأداة دمج تلقائية - أضِف
EditedMediaItem.Builder#setSpeed()وأوقِف نهائيًاEffects#createExperimentalSpeedChangingEffects(). - استبدِل
forceAudioTrackوforceVideoTrackبـtrackTypesفيEditedMediaItemSequence.
- استخدام
- اختيار المقطع الصوتي:
- أضِف
TrackSelectionParameters.selectTextByDefaultلتفضيل اختيار أي مقطع نصي بدون تحديد تفضيلات أخرى أكثر تحديدًا. - أضِف
preferredVideoLabelsوpreferredAudioLabelsوpreferredTextLabelsفيTrackSelectionParametersلتحديد تفضيل للمقاطع الصوتية التي تحمل تصنيفًا معيّنًا، مثل تلك التي تتم قراءتها من علامات HLS NAME (#1666).
- أضِف
- أدوات الاستخراج:
- FLAC: تم تشديد عملية رصد العناوين لتقليل فرصة العثور على عناوين زائفة في بيانات FLAC المرمّزة، ما يؤدي إلى حدوث أخطاء في فك الترميز (#558).
- MP3: السماح بوجود فواصل بين علامات ID3 (وقبلها) في بداية ملفات MP3 (#811، #5718).
- MP3: تمت زيادة حدّ التعرّف على المحتوى إلى 128 كيلوبايت ليتطابق مع حدّ البحث الحالي لبايت المزامنة (#2713).
- ملفات MP3: تم تغيير
FLAG_ENABLE_INDEX_SEEKINGلتفضيل البحث عن المعلومات من عناوين البيانات الوصفية (مثل Xing وVBRI) عند توفّرها، والرجوع إلى البحث المستند إلى الفهرس في حال عدم توفّر أي معلومات بحث أخرى. يؤدي ذلك إلى تحسين الأداء للملفات التي تتضمّن بيانات وصفية للبحث (#2839). - MP3: تغيير
Mp3Extractorإلى الإعداد التلقائي لمعدل نقل البيانات الثابت (CBR) عند عدم العثور على بيانات وصفية للبحث (مثل Xing وVBRI)، حتى عند ضبطFLAG_ENABLE_INDEX_SEEKING. ويستند ذلك إلى سجلّ مواصفات MP3، حيث كان معدّل CBR هو المعيار، ويتطلّب معدّل VBR عناوين صريحة. يؤدي ذلك إلى تحسين إمكانية البحث الفوري عن الملفات التي لا تحتوي على بيانات وصفية على حساب الدقة المحتملة لملفات VBR التي لا تحتوي على عناوين. يتم الآن استخدام البحث في الفهرس كحل احتياطي إذا كان افتراض معدل البت الثابت غير قابل للبحث (على سبيل المثال، لعمليات البث ذات الطول غير المعروف) (#2848). - MP4: تم توضيح الفرق بين أنواع MIME
audio/mpeg(MP3) وaudio/mpeg-L1وaudio/mpeg-L2من خلال إلقاء نظرة على قيمة الطبقة للعينة الأولى قبل إصدار تنسيق المقطع الصوتي من أداة الاستخراج (#2683). - MP4: تحسين كفاءة التعرّف على الملفات الكبيرة جدًا من خلال افتراض أنّ
مربّع
stblالذي يزيد حجمه عن 1 ميغابايت يعني أنّ الملف يجب أن يكون غير مجزّأ (#2650). - MP4: تمت إضافة إمكانية استخدام البيانات الوصفية
©mvn(اسم الحركة) و©mvi(فهرس الحركة)، ويتم الآن إصدارها كعناصرTextInformationFrameفيFormat.metadataبأرقام تعريفMVNMوMVINعلى التوالي (#2754). - MP4: تجاهُل المقاطع التي لا تتضمّن المربّع
stsd(بدلاً من تعذُّر تحليل الملف بأكمله) - Matroska: تمت إضافة ميزة رصد DTS-HD (#6225).
- تم إصلاح مشكلة في
MatroskaExtractorحيث قد يكون البحث غير دقيق للملفات التي تحتوي على مسارات متعددة. يتم الآن ربط نقاط عرض الأحداث بشكل صحيح بالمقاطع الصوتية الخاصة بها، ما يؤدي إلى بحث أكثر دقة. - MPEG-TS: تم إصلاح الخطأ
IllegalArgumentExceptionمنReorderingBufferQueueالناتج عن حِزم PES التي لا تتضمّن طابعًا زمنيًا (#2764). - تمت إضافة إمكانية استخراج "الصور الحيّة" بتنسيق HEIC. يمكن الآن لـ "
HeifExtractor" تحليل ملفات HEIC التي تحتوي على مقاطع فيديو ومقاطع صوتية مضمّنة.
- المفتّش:
- تم تقديم وحدة
:media3-inspectorجديدة لتكون بمثابة الصفحة الرئيسية المخصّصة لأدوات فحص الوسائط. تتضمّن هذه الوحدة الآن واجهة برمجة تطبيقات جديدة باسمandroidx.media3.inspector.MetadataRetriever، والتي ستوفّر واجهة برمجة تطبيقات موحّدة لكل من البيانات الوصفية واستخراج الإطارات. تم إيقاف الإصدار الحالي منandroidx.media3.exoplayer.MetadataRetrieverنهائيًا لصالح هذا الإصدار الجديد. - تم طرح
androidx.media3.inspector.FrameExtractor، وهي واجهة برمجة تطبيقات عامة جديدة لاستخراج الإطارات. توفّر فئةAutoCloseableهذه طريقة لاستخراج اللقطات مع إتاحة استخدام فيديو بنطاق عالي الديناميكية (HDR) وتأثيرات الفيديو واختيار وحدة فك ترميز مخصّصة. يجب إنشاؤه من خلالBuilderلـMediaItemمحدّد. - FrameExtractor: تمت إضافة
getThumbnail()لاستخراج إطار صورة مصغّرة تمثيلي من ملف وسائط بدون الحاجة إلى طابع زمني محدّد. - يمكنك إضافة
androidx.media3.inspector.MediaExtractorCompat، وهو بديل مباشر لـandroid.media.MediaExtractorفي النظام الأساسي، يوفّر طريقة لاستخراج عيّنات الوسائط الأولية والمشفّرة من ملف وسائط. تم إيقافandroidx.media3.exoplayer.MediaExtractorCompatالحالي نهائيًا لصالح هذه الفئة الجديدة.
- تم تقديم وحدة
- الصوت:
- إعلام مثيلات
AudioProcessorبعملية البحث - السماح بإدخال واجهة
AudioOutputProviderالجديدة فيDefaultAudioSink.Builderلإتاحة مسارات إخراج الصوت المخصّصة القيمة التلقائية هيAudioTrackAudioOutputProvider. - معالجة عمليات البحث في
GainProcessor - استخدام إمكانات مستوى ملف تعريف برنامج فك ترميز AC-4 في تقييم مدى توافق تنسيق المقطع الصوتي (#2580)
- تجنُّب التأخيرات المحتملة الناتجة عن معالجة عمليات الاستدعاء لتغيير التوجيه في بداية التشغيل (#2646)
- السماح بإعادة استخدام برامج الترميز لتنسيقات EAC3 وEAC3-JOC وAC-4 (#1346)
- إضافة ميزة استخدام عيّنات PCM ذات القيم العشرية في
Sonic - إضافة إمكانية استخدام عيّنات PCM بمعدّل 16 بت في
ToFloatPcmAudioProcessor
- إعلام مثيلات
- الفيديو:
- إيقاف إعادة استخدام برامج الترميز لمحتوى Dolby-Vision بملفات شخصية مختلفة
- إعادة تفعيل الحل البديل لنقاط الأداء التي تم الإبلاغ عنها بشكل خاطئ لبرامج الترميز الآمنة (#2856)
- النص:
- تم إصلاح مشكلة تحليل ترجمات CEA-6/708 في محتوى Dolby Vision (#2775).
- الصورة:
- تم إصلاح مشكلة ScrubbingMode التي تؤدي إلى توقُّف المشغّل أثناء تقديم أو ترجيع مقطع فيديو يتضمّن صورًا مصغّرة بتنسيق DASH (#2815).
- إدارة الحقوق الرقمية:
- تغيير نوع القيمة التي تم إرجاعها من طرق
MediaDrmCallbackمنbyte[]إلى نوعMediaDrmCallback.Responseجديد، للسماح بإرجاع معلومات اختيارية إضافية هذا تغيير قد يؤدي إلى عطل في المصدر، ولكن يمكن حلّ الأعطال بسهولة من خلال تضمين القيمة المعروضة السابقة لـbyte[]فيnew Responseقبل عرضها. - إضافة معلومات الطلب الرئيسية مثل عنوان URL ووقت الاستجابة إلى
AnalyticsListener.onDrmKeysLoaded(#1001). - انقل بيانات طلب إدارة الحسابات من مَعلمة عنوان URL إلى نص POST.
- تغيير نوع القيمة التي تم إرجاعها من طرق
- التأثير:
- أضِف
Presentation.copyWithUnsetSideRoundedToلتدوير جانب الناتج غير المحدّد عند إنشاءPresentationبطول جانب واحد.
- أضِف
- أدوات دمج الوسائط:
- إضافة
MediaMuxerCompat، وهو بديل مباشر لإطار العملMediaMuxer. - يُرجى إضافة
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()للسماح بإنشاء "صور حيّة". - أضِف
WebmMuxerللسماح بدمج أحداث البث المباشر للوسائطOPUSوVORBISوVP8وVP9في تنسيق ملفwebm.
- إضافة
- إضافة IMA:
- تمت إزالة قواعد proguard المخصّصة، لكي تتمكّن التطبيقات من استخدام القواعد التي تم إصدارها في أرشيف IMA لنظام التشغيل Android بدلاً من ذلك.
- تمت إضافة
ImaServerSideAdInsertionUriBuilder.setNetworkCode، وهي واجهة برمجة تطبيقات جديدة لضبط رمز شبكة "إدارة إعلانات Google" من أجل حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) بهدف معالجة معرّفات الإعلانات على النحو المحدّد في إعدادات "إدارة إعلانات Google". رموز الشبكة اختيارية، ولكن يُنصح بها لطلبات البث الكاملة. للعثور على رمز الشبكة، يُرجى الاطّلاع على هذه المقالة. - يجب ترقية تبعية IMA إلى الإصدار 3.37.0 الذي يتطلّب تفعيل إزالة التجميل اللغوي للمكتبة الأساسية. ويجب أيضًا تفعيل هذا الخيار من خلال التطبيقات التابعة. يمكنك الاطّلاع على ملاحظات الإعداد الخاصة بـ IMA. * إتاحة خيارات واجهة المستخدم المخصّصة في IMA DAI في أداة إنشاء معرّفات الموارد المنتظمة (URI) لإدراج الإعلانات من جهة الخادم (SSAI) تشمل خيارات واجهة المستخدم المخصّصة لإدراج الإعلانات من جهة الخادم إتاحة عرض "إعلان قابل للتخطّي" و"تفاصيل عن الإعلان". تتوفّر هذه الميزة حاليًا لناشرين محدّدين مدرَجين في قائمة مسموح بها. يؤدي هذا التغيير أيضًا إلى ترقية إصدار حزمة IMA SDK إلى 3.38.0 (ملاحظات الإصدار) للوصول إلى واجهة برمجة التطبيقات لخيارات واجهة المستخدم المخصّصة.
- تم إصلاح مشكلة الإبلاغ عن خطأ في إعداد المحتوى بعد الإعلان على أنّه خطأ في تشغيل الإعلان (#2656).
- الجلسة:
- تمت إضافة مَعلمة جديدة إلى
MediaSession.Callback.onPlaybackResumptionللإشارة إلى ما إذا كان الطلب يهدف إلى جمع المعلومات فقط أو بدء التشغيل (#1764). - تم تعديل
MediaSession.ControllerInfo.isTrustedلتعريف وحدات التحكّم من التطبيق نفسه على أنّها موثوقة (#2542). - إضافة
MediaSessionService.triggerNotificationUpdateلتشغيل تحديث الإشعارات يدويًا (#1833) - إضافة
ProgressListenerإلى طرق الأوامر المخصّصة - غيِّر القيمة التلقائية لـ
MediaLibrarySession.Builder.setLibraryErrorReplicationModeإلى غير خطيرة. - إضافة مَعلمة
ContextإلىMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625) - قراءة معرّف التحكّم في مستوى الصوت من المنصة
PlaybackInfoبدلاً من جلبه من خلال Binder يضمن ذلك قراءة نوع التشغيل ومعرّف التحكّم في مستوى الصوت بشكل ذري ومطابقتهما لبعضهما البعض. - تم إصلاح الخطأ الذي كان يؤدي إلى فلترة أحداث مفتاح
ACTION_UPقبل تمريرها إلى دالة الاستدعاء للمعالجة المخصّصة. يؤدي ذلك إلى تحقيق التكافؤ مع ما فعله media1 وما تفعله المنصة (#2637). - تم إصلاح الخطأ الذي تسبّب في استدعاء
PlayerWrapperلـgetCurrentTimeline()حتى عندما لا يكون الأمر متاحًا (#2665). - تم إصلاح خطأ يتعلّق بترك رسالة في قائمة انتظار الرسائل في حلقة التكرار الرئيسية، ما تسبّب في تسرُّب الذاكرة بعد إنهاء الخدمة (#2692).
- عند الاتصال بتطبيق جلسة قديم باستخدام
MediaBrowser، يتم إرسال الأوامر المخصّصة إلى الجلسة فقط إذا تم الإعلان عن الإجراء المخصّص كإجراء مخصّص فيPlaybackStateCompatمن الجلسة القديمة. ويتم إرسال جميع الإجراءات المخصّصة الأخرى إلى الخدمة. - تم تنفيذ
onAudioSessionIdChangedلإرسال إشعارات إلى وحدات التحكّم في الوسائط عند ضبط معرّف جلسة صوتية من خلال الجلسة (#244). - تم إصلاح خلل في
KEYCODE_HEADSETHOOKحيث لم يتم تشغيل المشغّل عند وصول حدث مفتاح الوسائطIntentفيonStartCommand(). تم إصلاح هذه المشكلة من خلال معالجة "KEYCODE_HEADSETHOOK" تمامًا مثلKEYCODE_MEDIA_PLAY_PAUSE(#2816). - تم إصلاح خطأ يتعلّق بعدم إرسال حجم Surface بين الجلسة ووحدة التحكّم، ما يؤدي إلى تعذُّر تطبيق تأثيرات الفيديو في الجلسة التجريبية. إذا كنت تستخدم وحدة تحكّم، قد يؤدي هذا التغيير إلى عطل
إذا لم يتمكّن المشغّل من معالجة طلب
setVideoSurfaceHolder. - تم إصلاح مشكلة انتشار قيم البيانات الوصفية غير التابعة لـ
StringCharSequence، مثل السلاسل ذات النمط span (#2853). - أضِف
CommandButton.executeActionلتسهيل تنفيذ الإجراء المطلوب على وحدات التحكّم. يمكنك أيضًا تحديد مَعلمات لبعض أوامر المشغّل والجلسة لتحديد الإجراء الذي سيتم تنفيذه. - يمكنك إضافة التوافق مع الأنظمة القديمة لمثيلات
CommandButtonباستخدامPlayer.CommandأوSessionCommandغير مخصّص لتحديد الإجراء الخاص بها. ويتم الآن تمثيلها بشكل صحيح في جلسات الوسائط على المنصة، على سبيل المثال في واجهة مستخدم النظام أو Android Auto. - تم إصلاح مشكلة ضغط
Bitmapنفسه عدة مرات عند ربطMediaControllerبجلسة وسائط على المنصة.
- تمت إضافة مَعلمة جديدة إلى
- واجهة المستخدم:
- أضِف فئة
ProgressStateWithTickIntervalوالدالة المركّبةrememberProgressStateWithTickIntervalالمقابلة لها إلى وحدةmedia3-ui-compose. يُستخدَم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض الموضع الحالي والمدة في شكل نص. - أضِف
MuteButtonStateإلىui-composeالتي تعالج كتم صوتPlayer. يُستخدَم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض زر الإيقاف/التفعيل لكتم الصوت أو إعادته. - أضِف فئات
ProgressStateWithTickCountوالدالة المركّبةrememberProgressStateWithTickCountالمقابلة إلى وحدةmedia3-ui-compose. يُستخدَم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض مستوى التقدّم كشريط تقدّم أفقي للقراءة فقط. - يمكنك إضافة دالة مركّبة
ContentFrameإلىmedia3-ui-composeالتي تجمع بين إدارةPlayerSurfaceوتغيير حجم نسبة العرض إلى الارتفاع والتغطية باستخدام غالق. - تم حلّ مشكلة معروفة في واجهة برمجة التطبيقات 34 للمنصة تؤدي إلى تمديد الفيديوهات أو اقتصاصها
عند استخدام
SurfaceViewداخلAndroidViewفي Compose، وبالتالي تؤثر في الدوال المركّبةContentFrameوPlayerSurfaceمعSURFACE_TYPE_SURFACE_VIEW(#1237، #2811). - أنشِئ وحدة
media3-ui-compose-material3جديدة وأضِف إليها دوال مركّبة مستندة إلى Material3 (PlayPauseButton وNextButton وPreviousButton وSeekBackButton وSeekForwardButton وRepeatButton وShuffleButton وMuteButton). - أضِف الدالة المركّبة
TimeTextإلىmedia3-ui-compose-material3لعرض مستوى تقدّم اللاعب في شكل نصي. ويمكن ضبطه لعرض الموضع الحالي أو المدة أو الوقت المتبقي. - إضافة إمكانية وضع زر مسار الوسائط في
PlayerView - استخدام
BidiFormatterلعرض علامات الترقيم بشكل صحيح في ترجمات النصوص المكتوبة من اليمين إلى اليسار (#11214)
- أضِف فئة
- إضافة HLS:
- تحليل سمات تخطّي الإعلانات البينية في HLS
- يجب ربط سمات التحكّم في التخطّي من قائمة تشغيل HLS ومستند قائمة مواد العرض
في
AdPlaybackStateلإتاحة الوصول العلني. - تم إصلاح الخطأ الذي كان يؤدي إلى تجاهل وقت بدء قائمة التشغيل عند إزالة العلامة EXT-X-PROGRAM-START-DATE التي تحدّد وقت البدء من قائمة التشغيل (#2760).
- استخدام البحث الثنائي للعثور على فهرس المقطع لموضع معيّن في قائمة التشغيل (#2826)
- أضِف
HlsInterstitialsAdsLoader.skipCurrentAd()وskipCurrentAdGroup()والطرق المقابلة لتخطّي الإعلانات والمجموعات الإعلانية حسب الفهرس. - إضافة
HlsInterstitialsAdsLoader.Listener.onAdStartedللإبلاغ عن بدء فترة الإعلان (#2859) - قبول المسافة كفاصل بين التاريخ والوقت في سلاسل التاريخ والوقت بتنسيق ISO 8601
- التعامل بشكل صحيح مع جلب الجزء التالي من
HlsMediaPlaylistبدون مقاطع (#2821). - استخدِم موضع البدء التلقائي لـ "إعلانات ما قبل التشغيل" في أحداث البث المباشر.
- إضافة DASH:
- تم إصلاح
UnsupportedOperationExceptionعند تشغيل أحداث بث DASH باستخدام بيان معرّف موارد منتظم (URI) غير هرمي لـdata:(#2688). - تمت إعادة ضبط
LiveConfigurationعلى القيمة التي يوفّرهاMediaItemلـDashMediaSourceعند الإصدار وعندما يعدّل المستخدم ملف الوسائط (#2606). - تم تجنُّب الأعطال الناتجة عن تحديثات البيان غير الصالحة التي لم يتم الإبلاغ عنها كأخطاء في المشغّل (#2805).
- تم إصلاح
- إضافة RTSP:
- تمت معالجة خطأ فقدان حزم RTP عند معالجة وحدات NAL المجزأة لبرنامجَي الترميز H264 وH265 (#2613).
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- إضافة AV1: يستخدم برنامج فك ترميز AV1 الآن مكتبة
dav1dالعالية الأداء، ليحلّ محلّ تنفيذlibgav1السابق من أجل تحسين سرعة فك الترميز. - إضافة FFmpeg: تم إصلاح مشكلة كانت تمنع تشغيل بعض ملفات FLAC من خلال التأكّد من تحليل مجموعة
STREAMINFOبشكل صحيح ونقلها إلى برنامج فك الترميز (#2887).
- إضافة AV1: يستخدم برنامج فك ترميز AV1 الآن مكتبة
- إضافة Cast:
- أضِف
CastPlayer.Builder، ما يتيح لـCastPlayerتشغيل المحتوى على الجهاز وعلى جهاز البث. للاحتفاظ بسلوكCastPlayerالقديم الذي يتيح تشغيل Cast فقط، يمكنك استخدامRemoteCastPlayer. تحتفظ دوال الإنشاءCastPlayerالحالية بسلوكها القديم، ولكن تم إيقافها نهائيًا لصالح استخدام أدوات الإنشاءCastPlayerأوRemoteCastPlayerبدلاً منها. - إيقاف فرض نوع MIME غير فارغ في
DefaultMediaItemConverter - استخدِم
MediaItem.mediaMetadata.mediaTypeلاستنتاج MEDIA_TYPE في Cast لاستخدامه فيDefaultCastOptionsProvider#toMediaQueueItem، عندما يكون متاحًا. - تفعيل عمليات النقل من جهاز التحكّم عن بُعد إلى الجهاز المحلي في "
DefaultCastOptionsProvider" - أضِف ميزة Cast في العرض التوضيحي للجلسة.
- إضافة إمكانية عرض زر مسار الوسائط على واجهة مستخدم دالة مركّبة
- أضِف ميزة عرض زر مسار الوسائط في قائمة شريط الإجراءات.
- أضِف ميزة عرض زر مسار الوسائط كواجهة مستخدم للعرض.
- أضِف
- أدوات الاختبار المساعدة:
- يُرجى إضافة الحد الأقصى للفرق الزمني لسلوك الانتقال التلقائي في "
FakeClock". ويتم ضبطها تلقائيًا على ثانية واحدة، ولكن يمكن ضبطها من خلالFakeClock.Builder. - إضافة الحد الأقصى للفرق الزمني بين الرسائل لـ
RobolectricUtil.runMainLooperUntil(وrunLooperUntil). يتم ضبطه تلقائيًا على ثانية واحدة، ولكن يمكن ضبطه من خلال التحميلات الزائدة الجديدة لهذه الطرق. - نقل
CapturingRenderersFactoryمن "test-utils" إلى "test-utils-robolectric"
- يُرجى إضافة الحد الأقصى للفرق الزمني لسلوك الانتقال التلقائي في "
- إزالة الرموز المتوقفة نهائيًا:
- إزالة دالة الإنشاء
DefaultPreloadManagerالتي تم إيقافها نهائيًا يمكنك استخدامDefaultPreloadManager.Builderكبديل. - تمت إزالة الدوال الإنشائية المتوقفة نهائيًا في
EditedMediaItemSequence. يمكنك استخدامEditedMediaItemSequence.Builderكبديل. - إزالة
BitmapFactoryImageDecoder.BitmapDecoderيمكنك استخدامExternallyLoadedImageDecoderكبديل. - إزالة
ShadowMediaCodecConfig.forAllSupportedMimeTypes()المتوقّف نهائيًا يمكنك استخدامShadowMediaCodecConfig.withAllDefaultSupportedCodecs()كبديل. - إزالة
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()المتوقّفة نهائيًا يمكنك استخدامShadowMediaCodecConfig.withNoDefaultSupportedCodecs()كبديل.
- إزالة دالة الإنشاء
1.9.0-rc01
1 ديسمبر 2025
استخدِم الإصدار الثابت 1.9.0.
1.9.0-beta01
20 نوفمبر 2025
استخدِم الإصدار الثابت 1.9.0.
1.9.0-alpha01
22 أكتوبر 2025
استخدِم الإصدار الثابت 1.9.0.
الإصدار 1.8.0
1.8.1
21 مايو 2026
يتضمّن الإصدار 1.8.1 التعديلات التالية.
- التأثير:
- يجب ضبط
GL_DRAW_BUFFERوGL_READ_BUFFERبشكل صريح عند الانتقال من سياق بدون سطح.
- يجب ضبط
الإصدار 1.8.0
30 يوليو 2025
يتضمّن الإصدار 1.8.0 هذه التعديلات.
- المكتبة المشتركة:
- إضافة إمكانية استبدال المشغّل في
ForwardingSimpleBasePlayer
- إضافة إمكانية استبدال المشغّل في
- ExoPlayer:
- إضافة دالة getter لوضع الترتيب العشوائي إلى واجهة
ExoPlayer(#2522) - More clearly throw an exception if
DefaultAudioSinkis accessed from multiple threads. إذا حدث ذلك بسبب استدعاءRendererCapabilities.getFormatSupportخارج المشغّل، تأكَّد من استدعاء هذه الطريقة في سلسلة التعليمات نفسها التي تستخدمها سلسلة تعليمات التشغيل في ExoPlayer أو استخدام مثيل مختلف عن المثيل المستخدَم للتشغيل (#1191). - تم إصلاح الخطأ الذي قد يؤدي إلى وضع علامة على تنسيقات الصوت غير الاستيريو على أجهزة التلفزيون على أنّها غير متوافقة مع "
DefaultTrackSelector". - التأكّد من عرض الإطار الأخير بشكل صحيح عند استخدام علامة
DECODE_ONLYفي MediaCodec (التي تكون مفعَّلة تلقائيًا في وضع التقديم أو الترجيع السريع) - إضافة إمكانية استخدام رقم تعريف الجهاز الافتراضي من
Contextالذي تم تمريره إلىExoPlayer.Builder - تفعيل الجدولة الديناميكية تلقائيًا في وضع التنظيف
- تجنُّب إعادة تحميل مصدر غير ضروري عند الانتقال إلى نهاية عنصر
- استخدام "
MediaCodec.BUFFER_FLAG_DECODE_ONLY" بشكل تلقائي في وضع التقديم أو الترجيع السريع - يتم طرح
IllegalStateExceptionعندما يتم تشغيلPreloadMediaSourceبواسطةExoPlayerباستخدام سلسلة تعليمات تشغيل مختلفة عن سلسلة تعليمات التحميل المُسبَق (#2495). - إضافة
cloneAndMoveإلىShuffleModeمع تنفيذ تلقائي (#2226) - تغيير الإعداد التلقائي لـ
Renderer.getMinDurationToProgressUsلإرجاع قيمة أكبر إذا لم يكن هناك حاجة إلى استدعاءrender. - تم إصلاح خطأ كان يؤدي إلى تأخير الإطار الأخير في الجدولة الداخلية عند الانتقال إلى النهاية أثناء الإيقاف المؤقت. في الوقت الحالي، لا يتم تطبيق إصلاح الخطأ إلا في حال تفعيل
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled. - أضِف طريقة
ExoPlayer.setScrubbingModeEnabled(boolean). يؤدي ذلك إلى تحسين المشغّل لعمليات البحث المتكررة (على سبيل المثال، من مستخدم يسحب شريط التمرير). يمكن تخصيص سلوك وضع التصفّح السريع باستخدامsetScrubbingModeParameters(..)علىExoPlayerوExoPlayer.Builder. - السماح بتخصيص نسبة التسامح في البحث الجزئي في وضع التقديم أو الترجيع السريع
- زيادة معدّل تشغيل برنامج الترميز في وضع التصفّح السريع
- تم إصلاح الخطأ الذي قد يؤدي إلى عدم الإبلاغ عن أخطاء الإعداد في محتوى
AdsMediaSource(#2337). - تم إصلاح مشكلة تسرُّب الذاكرة في
MergingMediaSource، على سبيل المثال، عند تحميل الترجمة من مصدر خارجي (#2338). - السماح لـ
CmcdConfiguration.Factoryبإرجاعnullلإيقاف تسجيل CMCD لملفات وسائط معيّنة (#2386) - زيادة حجم ذاكرة التخزين المؤقت التلقائي للصور من 128 كيلوبايت (خطأ في النسخ واللصق من المقاطع النصية) إلى 26 ميغابايت، وهو حجم كبير بما يكفي لصور بدقة HDR فائقة تبلغ 50 ميغابكسل (#2417).
- إضافة
PreCacheHelperالتي تسمح للتطبيقات بالتخزين المؤقت المسبق لملف وسائط واحد مع تحديد موضع البدء والمدة. - إضافة إمكانية التحميل المُسبق من موضع محدّد في
DefaultPreloadManager
- إضافة دالة getter لوضع الترتيب العشوائي إلى واجهة
- Transformer:
- إضافة
CodecDbLiteالذي يتيح تحسينات خاصة بشريحة التعريف لإعدادات ترميز الفيديو - أضِف علامة
setEnableCodecDbLiteإلىDefaultEncoderFactoryلتفعيل تحسين إعدادات CodecDB Lite. يتم ضبط هذه العلامة تلقائيًا على false. - يتطلب ملء الفجوة الأولية (التي تمت إضافتها عبر
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 أو تنسيق "نافذة ضمن النافذة"
- إضافة
- أدوات الاستخراج:
- تحليل البيانات الوصفية من ملفات MP4 المجزّأة (#2084)
- JPEG: إتاحة الصور الحيّة التي لا تحتوي على قسم Exif في البداية (#2552)
- تمت إضافة إمكانية البحث في ملفات MP4 المجزّأة التي تحتوي على عدة عناصر
sidx. يمكن تفعيل هذا السلوك باستخدام العلامةFLAG_MERGE_FRAGMENTED_SIDXفيFragmentedMp4Extractor(#9373). - تجاهُل جداول البحث الفارغة في ملفات FLAC (بما في ذلك تلك التي تحتوي فقط على نقاط بحث نائبة)، والعودة إلى البحث الثنائي إذا كانت مدة الملف معروفة (#2327)
- تم إصلاح مشكلة تحليل وحدات H.265 SEI لتخطّي أنواع SEI غير المعروفة بالكامل (#2456).
- يجب تعديل
WavExtractorلاستخدام بيانات SubFormat الخاصة بإضافة العنوان لتنسيق الصوت عند تحليل ملف من النوعWAVE_FORMAT_EXTENSIBLE. - MP4: تمت إضافة إمكانية استخدام مربّعات
ipcmوfpcmالتي تحدّد المقاطع الصوتية بتنسيق PCM الأولي (لا يمكن استخدام تنسيق PCM بنقطة عائمة 64 بت). - MP4: معالجة جزء التدوير في مصفوفات التحويل
tkhdالتي تدوّر الفيديو وتعكسه يضمن ذلك عرض الفيديوهات المنعكسة التي تم التقاطها باستخدام الكاميرا الأمامية لهاتف iPhone بشكل صحيح، ولكن يتم عكسها بشكل غير صحيح في المحور ص (#2012). - MP3: استخدام المدة وحجم البيانات من Xing وVBRI غير القابلَين للبحث والبيانات الوصفية المشابهة لمعدل نقل البيانات المتغيّر عند الرجوع إلى البحث عن معدل نقل البيانات الثابت بسبب
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194)
- الصوت:
- تم إصلاح خلل عدم استدعاء
AnalyticsListener.onAudioPositionAdvancingعند بدء تشغيل الصوت في وقت قريب جدًا من نهاية الوسائط. - تمت إضافة إمكانية استخدام جميع تنسيقات عيّنات PCM الخطية في
ChannelMappingAudioProcessorوTrimmingAudioProcessor. - إضافة إمكانية استخدام الفواصل الصوتية في
CompositionPlayer - إزالة الاستدعاء الزائف لـ
BaseAudioProcessor#flush()منBaseAudioProcessor#reset() - السماح بالمزج التصاعدي/التنازلي للطاقة الثابتة في DefaultAudioMixer
- جعل
ChannelMappingAudioProcessorوTrimmingAudioProcessorوToFloatPcmAudioProcessorعلنية (#2339) - استخدِم
AudioTrack#getUnderrunCount()فيAudioTrackPositionTrackerلرصد حالات النقص فيDefaultAudioSinkبدلاً من التقدير بأفضل جهد. - تحسين سلاسة الطابع الزمني للصوت في حال حدوث انحراف غير متوقّع في الموضع من جهاز إخراج الصوت
- تم إصلاح الخطأ الذي يؤدي إلى تعطُّل مزامنة الصوت والفيديو في أول 10 ثوانٍ بعد استئناف التشغيل من وضع الإيقاف المؤقت عند الاتصال بأجهزة تتضمّن بلوتوث.
- تم إصلاح الخلل الذي كان يتسبب في عدم إبلاغ
AnalyticsListener.onAudioPositionAdvancingعن الوقت الذي بدأ فيه الصوت في التقدم، ولكن عن وقت القياس الأول. - تم إصلاح مشكلة استعادة الصوت المتعدّد القنوات بعد الرجوع إلى الصوت الاستيريو على بعض الأجهزة (#2258).
- تم إصلاح خلل عدم استدعاء
- الفيديو:
- توسيع نطاق الحلّ البديل لمشكلة السطح المنفصل ليشمل أجهزة Lenovo وMotorola (#2059)
- تحسين سلاسة عرض إطارات الفيديو عند بدء التشغيل عندما لا تبدأ عيّنات الصوت من الموضع المطلوب بالضبط
- تمت إتاحة الحلّ البديل لمشكلة السطح المنفصل على أجهزة "realme" (#2059).
- إضافة واجهة برمجة التطبيقات
ExoPlayerالتجريبية لتضمين العلامةMediaCodec.BUFFER_FLAG_DECODE_ONLYعند إضافة مخازن الإدخال المؤقتة المخصّصة لفك الترميز فقط إلى قائمة الانتظار ستشير هذه العلامة إلى برنامج فك الترميز لتخطّي المخازن المؤقتة المخصّصة لفك الترميز فقط، ما يؤدي إلى البحث بشكل أسرع. يمكنك تفعيلها باستخدامDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * تحسين عمليات التحقّق من أداء برامج ترميز الفيديو وقد يؤدي ذلك إلى تصنيف بعض المقاطع الصوتية الإضافية على أنّهاEXCEEDS_CAPABILITIES. - تم إصلاح أخطاء تشغيل VP9 Widevine على بعض الأجهزة (#2408).
- النص:
- إضافة إمكانية تشغيل مقاطع VobSub في ملفات MP4 (#2510)
- تم إصلاح مشكلة توقُّف التشغيل مؤقتًا عندما يتعذّر تحميل مقطع من الترجمة في البداية ثم يتم تحميله بنجاح، يليه عدة مقاطع ترجمة فارغة (#2517).
- تم إصلاح 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)
- البيانات الوصفية:
- تمت إضافة إمكانية استرداد مدة الوسائط و
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).
- يجب حصر الصور النقطية التي تم فك ترميزها بحجم العرض في
- إدارة الحقوق الرقمية:
- إضافة تحميل زائد جديد من
OfflineLicenseHelper.newWidevineInstanceيقبلMediaItem.DrmConfigurationبحيث يمكن تطبيق عناوين طلبات HTTP بشكل صحيح (#2169).
- إضافة تحميل زائد جديد من
- التأثير:
- أضِف
Presentation.createForShortSide(int)لإنشاءPresentationيضمن تطابق الجانب الأقصر دائمًا مع القيمة المحدّدة، بغض النظر عن اتجاه الإدخال.
- أضِف
- أدوات دمج الوسائط:
- تم إصلاح خلل يتعلّق بعدم ضبط علامات العيّنات الصحيحة لعيّنات الصوت في ملفات MP4 المجزّأة.
- تستخدم واجهة برمجة التطبيقات
writeSampleData()الآن فئةBufferInfoالخاصة بالمُضاعِف بدلاً منMediaCodec.BufferInfo. - أضِف
Muxer.Factory#supportsWritingNegativeTimestampsInEditListالذي يتم ضبطه تلقائيًا على "خطأ".
- إضافة IMA:
- تم إصلاح خطأ حيث قد يؤدي خطأ في تحميل إعلان واحد إلى إبطال مجموعة إعلانية أخرى عن طريق الخطأ.
- تم إصلاح خلل كان يؤدي إلى توقّف تشغيل المجموعات الإعلانية بعد انتهاء نافذة الفيديو عند الطلب.
لم يعُد يتم إدراج المجموعات الإعلانية التي يبدأ وقتها بعد النافذة في قائمة الانتظار في
MediaPeriodQueue(#2215).
- الجلسة:
- تم إصلاح الخطأ الذي يؤدي إلى تجاهل الاتصالات من وحدات التحكّم Media3 غير المميّزة التابعة لجهات خارجية.
- إزالة التحقّق من الأوامر المتاحة عند إرسال أوامر مخصّصة إلى جهاز
MediaBrowserServiceCompatقديم يتوافق هذا مع سلوك وحدات التحكّم أو المتصفّحات القديمة عند الاتصال بتطبيق قديم. - تم إصلاح خلل يتسبب في التعامل مع خطأ التشغيل الأول للمشغّل بشكل غير صحيح كاستثناء مخصّص مستمر. يمنع هذا التطبيق من الاسترداد.
- تم إصلاح الخطأ الذي قد يؤدي فيه عدم معالجة الجلسة لبعض التغييرات في وحدة التحكّم إلى حدوث
IllegalStateExceptions. - تم إصلاح الخطأ الذي يتسبب في ترك وحدة التحكّم في حالة غير صالحة عند تنفيذ إجراءات وحدة التحكّم التي لا تتم معالجتها بواسطة الجلسة.
- تم إصلاح تحذير انتهاك التشغيل غير الآمن في StrictMode (#2330).
- تم إصلاح خلل كان يؤدي إلى حدوث خطأ
IllegalStateExceptionعند استدعاءsetSessionExtrasمن سلسلة التعليمات الرئيسية أثناء تشغيل المشغّل من سلسلة تعليمات تطبيق مختلفة عن سلسلة التعليمات الرئيسية (#2265). - عدم عرض إشعار تلقائيًا إذا تم إعداد مشغّل بملفات وسائط بدون إعدادها أو تشغيلها (#2423https://github.com/androidx/media/issues/2423) يمكن ضبط هذا السلوك من خلال
MediaSessionService.setShowNotificationForIdlePlayer. - أضِف
PlaybackExceptionمخصّصة لجميع وحدات التحكّم أو لوحدات محدّدة. - تم إصلاح الخطأ الذي يتسبب في حدوث
IllegalArgumentExceptionعند البحث في بث مباشر علىMediaController. - بالنسبة إلى أحداث البث المباشر، تم إيقاف نشر موضع التشغيل وإمكانية البحث في العنصر الحالي لوحدات التحكّم في الوسائط على النظام الأساسي، وذلك لتجنُّب ظهور عناصر الموضع في واجهة مستخدم Android Auto (ووحدات التحكّم الأخرى التي تستخدم هذه المعلومات من جلسة الوسائط على النظام الأساسي) (#1758).
- تم إصلاح خطأ كان يؤدي إلى ظهور
NullPointerExceptionعند تمرير قيمة فارغة إلىgetLibraryRootفيMediaBrowserمرتبط بـMediaBrowserServiceCompatقديم. - تم إصلاح خطأ كان يؤدي إلى تعطُّل تطبيق الجلسة القديم مع ظهور رسالة
ClassNotFoundExceptionعند إرسال إجراءات مخصّصة أو نتيجة بحث أو طلب getItem. - تم إصلاح خطأ تسبّب في مشاركة
MediaItem.LocalConfiguration.uriمعMediaMetadataفي جلسات المنصة. لمشاركة معرّف موارد منتظم (URI) عن قصد للسماح لوحدات التحكّم بإعادة طلب الوسائط، اضبطMediaItem.RequestMetadata.mediaUriبدلاً من ذلك.
- واجهة المستخدم:
- تم إصلاح الخطأ الذي كان يتسبب في عدم عمل
PlayerSurfaceبشكل صحيح داخل المكوّنات القابلة لإعادة الاستخدام مثلLazyColumn(#2493). - تم إصلاح خطأ في 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ملموس وتنزيل المحتوى وفقًا لذلك.
- إضافة ميزة التنزيل الجزئي لعمليات البث التدريجي يمكن للتطبيقات إعداد بث تدريجي باستخدام
- إضافة Cronet:
- تمت إضافة معالجة تلقائية لملفات تعريف الارتباط (#5975).
- إضافة HLS:
- تم إصلاح الخطأ الذي يحاول فيه
HlsSampleStreamWrapperالبحث داخل المخزن المؤقت عندما لا تتوفّر أجزاء في المخزن المؤقت #2598. - تم إصلاح الخطأ الذي يتسبب في تغيير اختيار المقطع الصوتي بعد تحميل أجزاء ذات وقت استجابة منخفض وتلميحات التحميل المُسبق، ما قد يؤدي إلى توقّف التشغيل أو تجميده (#2299).
- منع عمليات إعادة التحميل المفرطة من خلال الانتظار لنصف المدة المستهدفة عندما لا يلتزم الخادم بـ
CAN-BLOCK-RELOAD=YES(#2317) - تم إصلاح الخطأ الذي كان يؤدي إلى توقّف التشغيل عند بدء بث إعلانات بينية قبل محاولة حلّ قائمة مواد العرض والإعلانات أثناء التشغيل للإعلان الخاطئ (#2558).
- تم إصلاح تحليل قائمة التشغيل لقبول
\f(تغذية النموذج) في قيم سمات السلسلة المقتبسة (#2420). - إتاحة تعديل الإعلانات البينية التي تحمل المعرّف نفسه (#2427)
- تم إصلاح الخطأ الذي يتسبب أحيانًا في عدم نشر أخطاء تحميل قائمة التشغيل بعد نفاد الأجزاء التي يمكن تحميلها في البث المباشر (#2401https://github.com/androidx/media/issues/2401).
- تجميع إصدارات الترجمة المصاحبة حسب علامة NAME، على غرار طريقة تجميع الإصدارات الصوتية حاليًا (#1666)
- إتاحة استخدام العلامة X-ASSET-LIST وأحداث البث المباشر مع
HlsInterstitialsAdsLoader
- تم إصلاح الخطأ الذي يحاول فيه
- إضافة DASH:
- تم إصلاح مشكلة دمج مجموعة التكيّف الخاصة بالتشغيل السريع مع مجموعة التكيّف الرئيسية لتشكيل
TrackGroupغير صالح (#2148). - تم إصلاح خلل حيث يمكن أن يؤدي تقصير مدة DASH إلى طرح استثناء عندما تكون العينات التي تتجاوز المدة الجديدة قد تمت قراءتها بالفعل بواسطة مسار العرض (#2440).
- تم إصلاح خطأ كان يؤدي إلى عدم اتّباع عملية إعادة التوجيه عند استخدام مَعلمات طلب البحث في CMCD (#2475).
- تم إصلاح مشكلة دمج مجموعة التكيّف الخاصة بالتشغيل السريع مع مجموعة التكيّف الرئيسية لتشكيل
- إضافة RTSP:
- تمت إضافة إمكانية استخدام حزمة تجميع RTP لبرنامج H265 وفقًا لمعيار RFC 7798#4.4.2 (#2413).
- تم إصلاح
RtspClientلاستخدام معرّف الموارد المنتظم (URI) للموقع الجغرافي كما هو مقدَّم عند معالجة استجابة HTTP 302 (#2398). - إضافة إمكانية تحليل SessionDescriptions التي تحتوي على أسطر تتضمّن أحرف مسافة بيضاء زائدة (#2357)
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- تم إصلاح الخطأ الذي يتسبب في عدم تأثير
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeفي إضافات برامج فك ترميز الصوت (#2258).
- تم إصلاح الخطأ الذي يتسبب في عدم تأثير
- إضافة Cast:
- أدوات الاختبار المساعدة:
- أضِف
advance(player).untilPositionAtLeastوuntilMediaItemIndexإلىTestPlayerRunHelperلتقديم المشغّل حتى يصل إلى موضع محدّد. في معظم الحالات، تكون هذه الطرق أكثر موثوقية من طريقتَيuntilPositionوuntilStartOfMediaItemالحاليتَين. - انقل "
FakeDownloader" إلى وحدة "test-utils-robolectric" لإعادة استخدامها في اختبارات أخرى. - تمت إزالة
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.8.0-rc02
24 يوليو 2025
استخدِم الإصدار الثابت 1.8.0.
الإصدار 1.8.0-rc01
16 يوليو 2025
استخدِم الإصدار الثابت 1.8.0.
الإصدار 1.8.0-beta01
2 يوليو 2025
استخدِم الإصدار الثابت 1.8.0.
الإصدار 1.8.0-alpha01
19 مايو 2025
استخدِم الإصدار الثابت 1.8.0.
الإصدار 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).
- تم إصلاح مشكلة ظهور خطأ
IllegalStateExceptionفيProgressiveMediaPeriodعند محاولة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 مللي ثانية وإضافة دالة setter تجريبية للسماح للتطبيقات بضبط هذه القيمة - تم إصلاح مشكلة ظهور الإشعارات مرة أخرى بعد أن يغلقها المستخدم (#2302).
- تم إصلاح خلل حيث عرضت الجلسة مخططًا زمنيًا لعنصر واحد عندما يكون المشغّل المغلّف فارغًا في الواقع. حدث ذلك عندما لا يتوفّر
COMMAND_GET_TIMELINEفي المشغّل المغلَّف بينما يتوفّرCOMMAND_GET_CURRENT_MEDIA_ITEMويكون المشغّل المغلَّف فارغًا (#2320). - تم إصلاح خطأ يتجاهل استدعاء
MediaSessionService.setMediaNotificationProviderبدون إشعار بعد التفاعلات الأخرى مع الخدمة مثلsetForegroundServiceTimeoutMs(#2305).
- تقليل مهلة التجميع لعمليات الاستدعاء في نظام التشغيل
- واجهة المستخدم:
- تفعيل
PlayerSurfaceللعمل معExoPlayer.setVideoEffectsوCompositionPlayer - تم إصلاح الخطأ الذي يمنع إعادة إنشاء
PlayerSurfaceباستخدامPlayerجديد.
- تفعيل
- إضافة HLS:
- تم إصلاح مشكلة عدم ضبط مدة المقطع في
CmcdDataلوسائط HLS، ما يؤدي إلى تعذُّر التأكيد عند معالجة أجزاء الوسائط المشفّرة (#2312).
- تم إصلاح مشكلة عدم ضبط مدة المقطع في
- إضافة RTSP:
- تمت إضافة إمكانية استخدام معرّف الموارد المنتظم (URI) مع نظام RTSPT كطريقة لضبط جلسة RTSP لاستخدام بروتوكول TCP (#1484).
- إضافة Cast:
- إضافة إمكانية استخدام البيانات الوصفية لقائمة التشغيل (#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باستخدامnullMediaMetadata(#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).
- أضِف
- Transformer:
- إضافة إمكانية تحويل الترميز إلى تنسيقات بديلة متوافقة مع الأنظمة القديمة
- تمت إضافة إمكانية تحويل الترميز وإعادة دمج تنسيق 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). - إضافة تحليل تجريبي لاعتمادية عيّنات AV1 في
ExoPlayerلتسريع عملية البحث يمكنك تفعيلها باستخدام واجهة برمجة التطبيقات الجديدة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).
- إدارة الحقوق الرقمية:
- تم إصلاح الخطأ
MediaCodec$CryptoException: Operation not supported in this configurationعند تشغيل محتوى ClearKey على الأجهزة التي تستخدم واجهة برمجة تطبيقات أقل من 27 (#1732).
- تم إصلاح الخطأ
- التأثير:
- تم نقل وظائف
OverlaySettingsإلىStaticOverlaySettings. يمكن إنشاء فئة فرعية منOverlaySettingsللسماح بإعدادات تراكب ديناميكية.
- تم نقل وظائف
- أدوات دمج الوسائط:
- تم نقل
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()بدلاً من ذلك. - يجب إبقاء الإشعار مرئيًا عند حدوث خطأ في التشغيل أو توقّفه. لا تتم إزالة الإشعار إلا إذا تم محو قائمة التشغيل أو إغلاق المشغّل.
- تحسين معالجة إجراءات ACTION_PLAY وACTION_PAUSE في MediaSession على نظام Android الأساسي لضبط أحدهما فقط وفقًا للأوامر المتاحة، وقبول ضبط أحدهما فقط.
- إضافة
Contextكمَعلمة إلىMediaButtonReceiver.shouldStartForegroundService(#1887). - تم إصلاح خلل يؤدي إلى تجاهل التغييرات من تعديل في انتظار المراجعة عند استدعاء طريقة
PlayerعلىMediaControllerمتصل بجلسة قديمة. - السماح لـ "
MediaSession.setSessionActivity(PendingIntent)" بقبول القيمة الفارغة (#2109) - تم إصلاح الخطأ الذي يتسبب في بقاء الإشعار القديم مرئيًا عند محو قائمة التشغيل (#2211).
- يمكنك الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو نهائيًا أو تعذُّر التشغيل. يتيح ذلك للمستخدمين استئناف التشغيل خلال هذه المهلة بدون المخاطرة بفرض قيود على عمليات التطبيقات الظاهرة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد من الممكن استخدام استدعاء
- واجهة المستخدم:
- أضِف عناصر الاحتفاظ بالحالة والدوال المركّبة إلى وحدة
media3-ui-composeلكل منPlayerSurfaceوPresentationStateوPlayPauseButtonStateوNextButtonStateوPreviousButtonStateوRepeatButtonStateوShuffleButtonStateوPlaybackSpeedState.
- أضِف عناصر الاحتفاظ بالحالة والدوال المركّبة إلى وحدة
- عمليات التنزيل:
- تم إصلاح خطأ في
CacheWriterيترك مصادر البيانات مفتوحة ومناطق ذاكرة التخزين المؤقت مقفلة في حال عرض مصدر البياناتExceptionغيرIOException(#9760).
- تم إصلاح خطأ في
- إضافة HLS:
- أضِف الإصدار الأول من
HlsInterstitialsAdsLoader. يقرأ برنامج تحميل الإعلانات "الإعلانات البينية" في بروتوكول HLS لقائمة تشغيل وسائط HLS ويربطها بـAdPlaybackStateالذي يتم تمريره إلىAdsMediaSource. يتيح هذا الإصدار الأولي فقط بث فيديوهات HLS عند الطلب باستخدام سماتX-ASSET-URI. - أضِف
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. يمكن للتطبيقات استخدامها لإنشاء مثيلاتAdsMediaSourceتستخدمHlsInterstitialsAdsLoaderبطريقة مريحة وآمنة. - تحليل علامة
SUPPLEMENTAL-CODECSمن قائمة تشغيل HLS لرصد تنسيقات Dolby Vision (#1785) - تم تخفيف شرط البحث عن مواضع المزامنة في بث HLS (#2209).
- أضِف الإصدار الأول من
- إضافة DASH:
- إضافة إمكانية استخدام تنسيق AC-4 Level-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.
- يمكنك دمج مثيلات
- إضافة Cast:
- تمت ترقية تبعية
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 تم إنشاؤها على أساس مكتبة Common. - أضِف دالة الإضافة المعلّقة
Player.listenلتشغيل دالة coroutine للاستماع إلىPlayer.Eventsفي مكتبةmedia3-common-ktx. - إزالة تعليقات
@DoNotInlineالتوضيحية من الفئات الداخلية غير المضمّنة يدويًا والمصمّمة لتجنُّب أخطاء التحقّق من الفئات أثناء التشغيل تتجنّب الإصدارات الحديثة من R8 الآن تلقائيًا المكالمات غير المباشرة مثل هذه لتجنّب أخطاء وقت التشغيل (وبالتالي لم تعُد هناك حاجة إلى إجراء المكالمات غير المباشرة يدويًا). يجب أن يكون جميع مستخدمي Gradle للمكتبة يستخدمون حاليًا إصدارًا من المكوّن الإضافي لنظام Gradle المتوافق مع Android يستخدم إصدارًا من R8 ينفّذ ذلك، بسببcompileSdk = 35. على مستخدمي المكتبة الذين يستخدمون أنظمة إنشاء غير Gradle التأكّد من أنّ خطوة التصغير/الإخفاء المكافئة لـ R8 تنفّذ عملية تلقائية مماثلة لإخراج الرموز من السطر لتجنُّب حدوث أخطاء في التحقّق من الفئات أثناء التشغيل. وقد تم تطبيق هذا التغيير بالفعل في مكتبات AndroidX الأخرى.
- إضافة
- ExoPlayer:
- يمكن الآن استدعاء
MediaCodecRenderer.onProcessedStreamChange()لكل ملف وسائط. في السابق، لم يتم استدعاؤها للمرة الأولى. استخدِمMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()لتفعيل هذه الميزة. - أضِف
PreloadMediaSource.PreloadControl.onPreloadErrorللسماح لعمليات تنفيذPreloadMediaSource.PreloadControlباتخاذ إجراءات عند حدوث خطأ. - أضِف
BasePreloadManager.Listenerلنشر أحداث التحميل المُسبق في التطبيقات. - السماح بتغيير مهلة عميل SNTP وإعادة محاولة العناوين البديلة عند انتهاء المهلة (#1540).
- إزالة
MediaCodecAdapter.Configuration.flagsلأنّ قيمة الحقل كانت دائمًا صفرًا - السماح للمستخدم باختيار مكبّر الصوت المدمج للتشغيل على Wear OS API 35 والإصدارات الأحدث (حيث يعلن الجهاز عن دعمه لذلك).
- تأجيل طلب الحظر إلى
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)
- يمكن الآن استدعاء
- Transformer:
- إضافة
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).
- السماح لـ
- مصدر البيانات:
- تحديث
HttpEngineDataSourceللسماح بالاستخدام بدءًا من الإصدار S extension 7 بدلاً من مستوى واجهة برمجة التطبيقات 34 (#1262). DataSourceContractTest: التأكّد من أنّDataSource.getUri()يعرض معرّف الموارد المنتظم (URI) الذي تم حلّه (كما هو موضّح في المستندات) إذا كان هذا يختلف عن عنوان URI المطلوب، يمكن للاختبارات الإشارة إلى ذلك باستخدام طريقةDataSourceContractTest.TestResource.Builder.setResolvedUri()الجديدة.-
DataSourceContractTest: التأكّد من أنّDataSource.getUri()وgetResponseHeaders()يعرضان القيمة "open" بعد تعذُّر الاتصال بـopen()(بسبب عدم العثور على المورد) وقبل الاتصال اللاحق بـclose()- Overriding
DataSourceContractTest.getNotFoundResources()allows test sub-classes to provide multiple 'not found' resources, and to provide any expected headers too. يتيح ذلك التمييز بين الخطأ HTTP 404 (مع العناوين) والخطأ "لم يتم العثور على الخادم" (بدون عناوين).
- Overriding
- تحديث
- الصوت:
- ضبط البيانات الوصفية لجهارة الصوت CTA-2075 تلقائيًا على برنامج الترميز إذا كانت متوفّرة في الوسائط
- تأكَّد من خفض مستوى الصوت بسلاسة عند تقديم الفيديو أو ترجيعه.
- تم إصلاح أصوات الفرقعة التي قد تحدث أثناء عمليات البحث.
- تم إصلاح مشكلة تراكم أخطاء الاقتطاع في خوارزمية Sonic لتغيير مدة الصوت/تغيير حدة الصوت.
- تم إصلاح خطأ في
SpeedChangingAudioProcessorيتسبب في إسقاط إطارات الإخراج.
- الفيديو:
- يتجنّب
MediaCodecVideoRendererفك ترميز العيّنات التي لا يتم عرضها أو استخدامها كمرجع من قِبل عيّنات أخرى. - في المستوى 35 من واجهة برمجة التطبيقات والإصدارات الأحدث، قد يتلقّى
MediaCodecAdapterالآنnullSurfaceفيconfigureوطلبات إلى طريقة جديدةdetachOutputSurfaceلإزالةSurfaceتم ضبطه سابقًا إذا كان برنامج الترميز يتيح ذلك (MediaCodecInfo.detachedSurfaceSupported). - استخدام قيم نسبة العرض إلى الارتفاع للبكسل المقدَّمة من
MediaCodecAdapterفي حال توفّرها عند معالجةonOutputFormatChanged(#1371). - تمت إضافة حلّ بديل لمشكلة في جهاز Galaxy Tab S7 FE تؤدي إلى وضع علامة "غير متوافق" على أحداث البث الآمنة H264 بمعدل 60 لقطة في الثانية (#1619).
- إضافة حل بديل لبرامج الترميز التي تتوقف بعد العيّنة الأخيرة بدون إرجاع إشارة نهاية البث
- يتجنّب
- النص:
- إضافة
VoiceSpanمخصّص وتعبئته لأقسام صوت WebVTT (#1632) - التأكّد من عرض ملفات WebVTT في HLS التي تتضمّن طوابع زمنية كبيرة جدًا للترجمة (والتي تتجاوز
longمن 64 بت عند تمثيلها بالميكروثانية وضربها في القاعدة الزمنية90,000MPEG) (#1763) - إتاحة ترجمة CEA-608 في محتوى Dolby Vision (#1820)
- تم إصلاح مشكلة توقُّف التشغيل في أحداث البث المتعددة الفترات في DASH عند تفعيل الترجمة والشرح بتنسيق CEA-608 (#1863).
- إضافة
- البيانات الوصفية:
- يجب تخصيص النوع
C.TRACK_TYPE_METADATAللمقاطع الصوتية التي تتضمّن محتوى icy أو vnd.dvb.ait.
- يجب تخصيص النوع
- الصورة:
- يمكنك إضافة
ExternallyLoadedImageDecoderلتسهيل عملية التكامل مع مكتبات تحميل الصور الخارجية، مثل Glide أو Coil.
- يمكنك إضافة
- مصدر البيانات:
- تمت إضافة
FileDescriptorDataSource، وهوDataSourceجديد يمكن استخدامه للقراءة منFileDescriptor(#3757).
- تمت إضافة
- التأثير:
- إضافة حل بديل لـ
DefaultVideoFrameProcessorلمشكلة بسيطة في تغيير حجمSurfaceTextureقد يتضمّنSurfaceTextureعملية تصغير بسيطة تؤدي إلى اقتصاص حدّ بمقدار تكسل واحد حول حافة المخزن المؤقت الذي تم اقتصاصه. يتم التعامل مع هذا الآن بحيث يكون الناتج أقرب إلى المتوقع. - تسريع
DefaultVideoFrameProcessor.queueInputBitmap()نتيجةً لذلك، أصبح تصدير الصور إلى فيديوهات باستخدامTransformerأسرع.
- إضافة حل بديل لـ
- إضافة IMA:
- تم إصلاح خلل قد يؤدي إلى حدوث خطأ
ArrayIndexOutOfBoundsExceptionفي "ImaServerSideAdInsertionMediaSource" عند محو قائمة التشغيل. - تم إصلاح الخطأ الذي يتسبب في حدوث
ArrayIndexOutOfBoundsExceptionعند تشغيل آخر إعلان أثناء التشغيل (#1741) في أحداث البث المباشر التي يتم إدراجها من جهة الخادم بدون إعلان ما قبل التشغيل.
- تم إصلاح خلل قد يؤدي إلى حدوث خطأ
- الجلسة:
- يمكنك إضافة
MediaButtonReceiver.shouldStartForegroundService(Intent)للسماح للتطبيقات بإيقاف أمر تشغيل وارد لاستئناف التشغيل من خلال إلغاء هذه الطريقة. يتم تشغيل الخدمة دائمًا بشكل تلقائي، ولا يمكن إيقاف التشغيل بدون أن يتعطّل النظام في الخدمة مع ظهور الخطأForegroundServiceDidNotStartInTimeException(#1528). - تم إصلاح الخلل الذي تسبّب في إرسال الأوامر المخصّصة من
MediaBrowserإلىMediaSessionCompat.Callbackبدلاً من صيغةMediaBrowserServiceCompatللطريقة عند الاتصال بخدمة قديمة. وقد منع ذلكMediaBrowserمن تلقّي القيمة المعروضة الفعلية التي أرسلتها الخدمة القديمة (#1474). - تمت معالجة الخطأ
IllegalArgumentExceptionالذي يظهر على أجهزة بعض الشركات المصنّعة عند ضبط جهاز استقبال البث لطلبات زر الوسائط (#1730). - إضافة أزرار أوامر لملفات الوسائط يؤدي ذلك إلى إضافة واجهة برمجة التطبيقات Media3 لما كان يُعرف باسم
Custom browse actionsمع المكتبة القديمة معMediaBrowserCompat. يُرجى العِلم أنّ أزرار الأوامر لملفات الوسائط في Media3 متاحة لكل منMediaBrowserوMediaController. يُرجى الاطّلاع على تنفيذ إجراءات التصفّح المخصّصة. * تم إصلاح خلل كان يمنع أحيانًا وحدة التحكّم في Media3 من السماح لتطبيق جلسة بتشغيل خدمة تعمل في المقدّمة بعد طلبplay(). - يجب حصر
CommandButton.Builder.setIconUriعلى قبول معرّفات الموارد المنتظمة للمحتوى فقط. - يمكنك تمرير تلميحات الاتصال لمتصفّح Media3 إلى
MediaBrowserCompatالأولي عند الاتصال بـMediaBrowserCompatقديم. يمكن للخدمة تلقّي تلميحات الاتصال التي تم تمريرها كتلميحات جذرية مع أول طلب إلىonGetRoot(). - تم إصلاح الخطأ الذي تسبّب في عدم تلقّي
MediaBrowserمتصل بخدمة متصفّح قديمة لرسالة خطأ أرسلتها الخدمة بعد اشتراك المتصفّح فيparentid. - تحسين سلوك إمكانية التشغيل التفاعلي، بحيث لا يطلب متصفّح Media3 المتصل بخدمة
MediaBrowserServiceقديمة العناصر الفرعية لـparentIdمرتين عند الاشتراك في عنصر رئيسي
- يمكنك إضافة
- واجهة المستخدم:
- إتاحة خيار تمديد/اقتصاص الفيديو في حلّ
PlayerView-in-Compose-AndroidViewالبديل، بسبب مشاكل في عمليات الانتقال المشتركة المستندة إلى 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 عند توفيرContextThis enables linking theMediaSessionto aRoutingSession, which is necessary for integrating 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: تم إصلاح طريقة معالجة قيم
- إدارة الحقوق الرقمية:
- تم إصلاح الخطأ
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEعلى الأجهزة التي تعمل بواجهة برمجة التطبيقات 31 والإصدارات الأحدث عند تشغيل محتوى L1 Widevine. يحدث هذا الخطأ بسبب تنفيذ غير مكتمل لطريقة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هذه الطريقة عند احتساب الوقت لجدولة Work Tasks. - يمكنك إضافة
MediaCodecAdapter#OnBufferAvailableListenerللتنبيه عند توفّر مخازن الإدخال والإخراج المؤقتة لاستخدامها من قِبلMediaCodecRenderer.MediaCodecRendererwill signalExoPlayerwhen receiving these callbacks and ifExoPlayeris set withexperimentalSetDynamicSchedulingEnabled(), thenExoPlayerwill schedule its work loop as renderers can make progress. - استخدِم فئة البيانات لطُرق
LoadControlبدلاً من المَعلمات الفردية. - أضِف
ExoPlayer.isReleased()للتحقّق مما إذا تم استدعاءExoplayer.release(). - إضافة
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()لضبط الحد الأقصى للموضع الذي يسعى إليهseekToPrevious()إلى العنصر السابق (#1425). - تم إصلاح بعض حالات عدم الاتساق في التركيز على الصوت، مثل عدم الإبلاغ عن فقدان التركيز الكامل أو المؤقت أثناء إيقاف المشغّل مؤقتًا (#1436).
- تم إصلاح مشكلة
IndexOutOfBoundsExceptionالمحتملة الناتجة عن إبلاغ أدوات الاستخراج عن مقاطع صوتية إضافية بعد خطوة الإعداد الأولية (#1476). - ستتلقّى السمة
EffectsفيExoPlayer.setVideoEffect()الطوابع الزمنية مع إزالة إزاحة العارض (#1098). - تم إصلاح خطأ
IllegalArgumentExceptionمحتمل عند معالجة خطأ في المشغّل حدث أثناء القراءة مسبقًا في عنصر آخر في قائمة التشغيل (#1483).
- أضِف
- Transformer:
- أضِف
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 من مخطّطات معرّفات الموارد المنتظمة (URI) للمحتوى. (#1373).
- اضبط مدة المقطع الصوتي في "
AudioGraphInput" لتحسين مزامنة الصوت والصورة. - إزالة حقل
ExportResult.processedInputsإذا كنت تستخدم هذا الحقل لتفاصيل برامج الترميز، استخدِمDefaultDecoderFactory.listenerبدلاً منه. في حال حدوث استثناء في برنامج الترميز، ستتوفّر تفاصيل برنامج الترميز فيExportException.codecInfo.
- أضِف
- أدوات الاستخراج:
- MPEG-TS: تم طرح التغيير الذي يضمن عرض آخر إطار من خلال تمرير آخر وحدة وصول للبث إلى قائمة انتظار العيّنات (#7909). تم دمج إصلاحات لحلّ المشاكل التي ظهرت في أحداث بث HLS التي تتضمّن إطارات I فقط (#1150) وأحداث بث HLS بتنسيق H.262 (#1126).
- MP3: يُفضَّل استخدام حجم البيانات من إطار
Infoبدلاً من الحجم الذي يتم الإبلاغ عنه من خلال البث الأساسي (مثل حجم الملف أو عنوان HTTPContent-Length). يساعد ذلك في استبعاد بيانات المقاطع الدعائية غير القابلة للتشغيل (مثل صورة الألبوم) من عمليات احتساب البحث عن معدل نقل البيانات الثابت، ما يجعل عمليات البحث أكثر دقة (#1376). - MP3: استخدام عدد اللقطات والبيانات الأخرى في لقطة
Info(إذا كانت متوفّرة) لاحتساب متوسط معدل نقل البيانات للبحث عن معدل نقل بيانات ثابت، بدلاً من الاستقراء من معدل نقل البيانات للقطة بعد لقطةInfo، والذي قد يكون صغيرًا بشكل مصطنع، مثل لقطةPCUT(#1376). - تم إصلاح مشكلة استخراج تنسيق الصوت PCM في حاويات AVI.
- الصوت:
- تم إصلاح سمات ترميز DTS:X Profile 2 لتشغيل الصوت بتقنية Passthrough (#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) مرتبطة بشكل خاطئ بعلامات ID3TSO2وTSOAوTSOP(#1302). - تم إصلاح مشكلة قراءة علامات MP4 (/iTunes) الرقمية
gnre(النوع) وtmpo(الإيقاع) عندما تكون القيمة أطول من بايت واحد. - نشر إطار ID3
TCONإلىMediaMetadata.genre(#1305).
- تم إصلاح مشكلة ربط MP4 بعلامات ترتيب ID3. في السابق، كانت علامات MP4 "ترتيب الألبوم" (
- الصورة:
- إتاحة شبكات الصور المصغّرة غير المربّعة في DASH (#1300)
- إتاحة استخدام تنسيق AVIF للمستوى 34 من واجهة برمجة التطبيقات والإصدارات الأحدث
- السماح باستخدام
nullكمَعلمة لـExoPlayer.setImageOutput()لمحوImageOutputتم ضبطه سابقًا
- مصدر البيانات:
- يجب تنفيذ ميزة إتاحة استخدام معرّفات الموارد المنتظمة (URI) للموارد الأوّلية في
android.resource://package/idحيث يختلفpackageعن حزمة التطبيق الحالي. لم يتم توثيق هذه الطريقة سابقًا، ولكنّها طريقة أكثر كفاءة للوصول إلى الموارد في حزمة أخرى بدلاً من استخدام الاسم. - يجب التحقّق من أنّ قيمة
urlليست فارغة في دوال الإنشاءDataSpec. تمت إضافة تعليق توضيحي لهذه المَعلمة من قبل لتكون غير فارغة. - السماح لـ
ByteArrayDataSourceبتحويل معرّف موارد منتظم (URI) إلى مصفوفة بايت أثناءopen()، بدلاً من أن يكون غير قابل للتغيير في البرنامج عند الإنشاء (#1405).
- يجب تنفيذ ميزة إتاحة استخدام معرّفات الموارد المنتظمة (URI) للموارد الأوّلية في
- إدارة الحقوق الرقمية:
- السماح بضبط
LoadErrorHandlingPolicyعلىDefaultDrmSessionManagerProvider(#1271).
- السماح بضبط
- التأثير:
- إتاحة تغييرات متعددة في السرعة ضمن
EditedMediaItemأوCompositionنفسه فيSpeedChangeEffect - إتاحة إخراج HLG وPQ من إدخال صورة نقطية بدقة HDR فائقة
- إضافة إمكانية استخدام EGL_GL_COLORSPACE_BT2020_HLG_EXT، ما يحسِّن إخراج سطح HLG في ExoPlayer.setVideoEffect وDebug SurfaceView في Transformer
- تعديل تنفيذ مصفوفة التراكب لجعلها متسقة مع
الوثائق عن طريق قلب قيم x وy المطبقة في
setOverlayFrameAnchor(). في حال استخدامOverlaySettings.Builder.setOverlayFrameAnchor()، اقلِب قيمتَي x وy من خلال ضربهما في-1. - تم إصلاح الخطأ الذي يؤدي إلى تعطُّل
TimestampWrapperعند استخدامه معExoPlayer#setVideoEffects(#821). - تغيير مساحة العمل التلقائية لألوان SDR من الألوان الخطية إلى فيديو BT 709 SDR الكهربائي يجب أيضًا توفير خيار ثالث للاحتفاظ بمساحة الألوان الأصلية.
- السماح بتحديد ترتيب z غير محدّد لـ EditedMediaItemSequences (#1055).
- الحفاظ على نطاق إضاءة متّسق في مختلف أجزاء محتوى HDR (يستخدم نطاق HLG)
- إضافة إمكانية استخدام تراكبات Ultra HDR (صورة نقطية) على محتوى HDR
- السماح باستخدام تأثيرات
SeparableConvolutionقبل الإصدار 26 من واجهة برمجة التطبيقات - يجب إزالة
OverlaySettings.useHdrغير المستخدَمة لأنّ النطاق الديناميكي للتراكب والإطار يجب أن يتطابقا. - أضِف ميزة النطاق العالي الديناميكية (HDR) إلى
TextOverlay. يمكن تعديل سطوع النص المركّب باستخدامOverlaySettings.Builder.setHdrLuminanceMultiplier().
- إتاحة تغييرات متعددة في السرعة ضمن
- إضافة IMA:
- ترقية واجهة برمجة التطبيقات المطلوبة للتطبيقات لتشغيل مصادر إعلانات "إدراج الإعلان ديناميكيًا" إلى إصدار ثابت
- أضِف
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()لاختيار نوع الخطأ أو إيقاف تكرار الأخطاء المفعَّل تلقائيًا.
- تغيير القيمة التلقائية لـ
- واجهة المستخدم:
- إضافة ميزة عرض الصور إلى "
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 مع أجزاء الإعداد. - تم إصلاح الخطأ الذي يتسبب في عدم إعادة تحميل قوائم التشغيل غير الأساسية أثناء التشغيل المباشر (#1240).
- تم إصلاح الخطأ الذي يؤدي إلى حدوث
ArrayIndexOutOfBoundsExceptionعند تفعيل CMCD لأحداث البث المباشر عبر HLS (#1395).
- تم إصلاح الخلل الذي كان يؤدي إلى تفويض عيّنات 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.FormatSupportIntDef و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).
- تم إصلاح المشكلة المتمثّلة في عدم تمكُّن
- Transformer:
- تمت إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
MediaMuxerمع الطوابع الزمنية السلبية للعرض قبل الإصدار 30 من واجهة برمجة التطبيقات.
- تمت إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
- اختيار المقطع الصوتي:
-
DefaultTrackSelector: تفضيل مقاطع الفيديو التي تتضمّن عدد لقطات في الثانية "معقول" (أكبر من أو يساوي 10 لقطات في الثانية) على تلك التي تتضمّن عدد لقطات في الثانية أقل أو غير محدّد يضمن ذلك أن يختار المشغّل مقطع الفيديو "الحقيقي" في ملفات MP4 المستخرَجة من الصور المتحركة التي يمكن أن تحتوي على مقطعين بتنسيق HEVC، أحدهما بدقة أعلى ولكن بعدد صغير جدًا من اللقطات (#1051).
-
- أدوات الاستخراج:
- تم إصلاح مشكلة عدم تخطّي المساحة المتروكة عند قراءة أجزاء ذات حجم فردي من ملفات WAV (#1117).
- MP3: تتم تعبئة الحقل "
Format.averageBitrate" من إطارات البيانات الوصفية، مثلXINGوVBRI. - MPEG-TS: تم التراجع عن تغيير كان يهدف إلى ضمان عرض الإطار الأخير من خلال تمرير آخر وحدة وصول للبث إلى قائمة انتظار العيّنات (#7909). ويرجع ذلك إلى أنّ التغيير يتسبب في حدوث مشاكل جديدة في أحداث بث HLS التي تتضمّن إطارات I فقط (#1150) وأحداث بث HLS التي تستخدم ترميز H.262 (#1126).
- الصوت:
- السماح باسترداد المعالج من خلال إيقاف ميزة تخفيف الحمل في حال تعذّر إعداد المقطع الصوتي في وضع تخفيف الحمل
- الفيديو:
- إضافة حلّ بديل لمشكلة في جهاز Galaxy Tab S7 FE وChromecast مع Google TV وLenovo M10 FHD Plus تؤدي إلى وضع علامة "غير متوافق" على أحداث البث المباشر بدقة 60 لقطة في الثانية بتنسيق H265
- تمت إضافة حلّ بديل يضمن عرض الإطار الأول دائمًا أثناء استخدام ميزة "النفق" حتى إذا لم ينفّذ الجهاز ذلك تلقائيًا على النحو المطلوب من خلال واجهة برمجة التطبيقات (#1169). (#966).
- تم إصلاح مشكلة تؤدي فيها معالجة معلومات ألوان HDR إلى حدوث خلل في برنامج الترميز ومنع تبديل التنسيق التكيُّفي لمقاطع فيديو SDR (#1158).
- النص:
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء مثيلات
CuesWithTimingإضافية زائفة منWebvttParser.parse(#1177)
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء مثيلات
- إدارة الحقوق الرقمية:
- تم حلّ مشكلة
NoSuchMethodErrorالتي يمكن أن تظهر في إطار عملMediaDrmبدلاً منResourceBusyExceptionأوNotProvisionedExceptionعلى بعض أجهزة Android 14 (#1145).
- تم حلّ مشكلة
- التأثير:
- تحسين ربط درجات الألوان من PQ إلى SDR من خلال تحويل الفضاءات اللونية
- الجلسة:
- واجهة المستخدم:
- العودة إلى تضمين اسم لغة المقطع الصوتي إذا لم يتمكّن
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عن حزمة التطبيق الحالي. لطالما تم توثيق هذه الطريقة على أنّها فعّالة، ولكن لم يتم تنفيذها بشكل صحيح حتى الآن. - Normalize MIME types set by app code or read from media to be fully lower-case.
- حدِّد الإعلانات باستخدام
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). - تم إصلاح التعبير النمطي المستخدَم للتحقّق من صحة أسماء مفاتيح "بيانات عميل الوسائط الشائعة" (CMCD) المخصّصة من خلال تعديله للتحقّق من الواصلة فقط (#1028).
- تم إيقاف الترميز المزدوج لمَعلمات طلب البحث في CMCD (#1075).
- إضافة
- Transformer:
- إضافة ميزة تسوية فيديوهات الحركة البطيئة بتنسيق 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(ما يعادل CBR لعنوان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 يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية لـ "
- إدارة الحقوق الرقمية:
- تشغيل عيّنات "clear lead" غير المشفّرة في محتوى إدارة الحقوق الرقمية (DRM) على الفور وبشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفّرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقُّف التشغيل في منتصفه إذا لم تكن المفاتيح جاهزة بعد
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك
باستخدام
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyأوDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- إضافة IMA:
- تم إصلاح مشكلة تعذُّر تشغيل إعلانات DASH وHLS التي لا تتضمّن امتداد الملف المناسب.
- تشغيل عيّنات "clear lead" غير المشفّرة في محتوى إدارة الحقوق الرقمية (DRM) على الفور وبشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفّرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقُّف التشغيل في منتصفه إذا لم تكن المفاتيح جاهزة بعد
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك
باستخدام
- الجلسة:
- إيقاف ميزة رصد النقر مرّتين في تطبيقات البث التلفزيوني (#962)
- تم إصلاح مشكلة عدم نقل
MediaItem.RequestMetadataمع الإضافات غير الفارغة فقط بين وحدات التحكّم في الوسائط والجلسات. - إضافة دالة إنشائية إلى
MediaLibrarySession.Builderتأخذ فقطContextبدلاً منMediaLibraryService.
- إضافة HLS:
- تقليل مستوى ظهور
HlsMediaPeriodإلى مستوى ظهور خاص بالحزمة يجب عدم الاعتماد على هذا النوع مباشرةً من خارج حزمة HLS. - تم حلّ مشكلة البحث عن بداية مقطع بشكل أكثر كفاءة (#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).
- تم إصلاح المشكلة التي تؤدي إلى استمرار تعديل الإزاحة إلى
- Transformer:
- تم حلّ مشكلة ظهور خطأ في برنامج الترميز أثناء عملية الضبط بسبب ضبط معدّل تشغيل مرتفع.
- أدوات الاستخراج:
- يمكنك وضع علامة على مسارات HEVC الثانوية (غير القابلة للتشغيل) في صور JPEG المتحركة على أنّها
ROLE_FLAG_ALTERNATEلمنع اختيارها تلقائيًا للتشغيل بسبب دقتها العالية. - تم إصلاح مشكلة رصد الإطارات الرئيسية الخاطئة في أحداث البث المباشر بتنسيق TS H264 (#864).
- تم إصلاح تقدير مدة أحداث البث المباشر بتنسيق TS التي تزيد مدتها عن 47,721 ثانية (#855).
- يمكنك وضع علامة على مسارات HEVC الثانوية (غير القابلة للتشغيل) في صور JPEG المتحركة على أنّها
- الصوت:
- تم إصلاح طريقة معالجة EOS لـ
SilenceSkippingAudioProcessorعند استدعائها عدة مرات (#712).
- تم إصلاح طريقة معالجة EOS لـ
- الفيديو:
- إضافة حلّ بديل لمشكلة في أجهزة Galaxy Tab S7 FE و"Chromecast مع Google TV" وLenovo M10 FHD Plus تؤدي إلى وضع علامة "غير متوافق" على أحداث البث المباشر بترميز AVC وبمعدّل 60 لقطة في الثانية (#693)
- البيانات الوصفية:
- تم إصلاح الخطأ الذي كان يؤدي إلى تعبئة
MediaMetadataمن تعليقات Vorbis فقط باستخدام مفاتيح بأحرف كبيرة (#876). - يتم رصد
OutOfMemoryErrorعند تحليل إطارات ID3 الكبيرة جدًا، ما يعني أنّه يمكن مواصلة التشغيل بدون معلومات العلامة بدلاً من تعذُّر التشغيل تمامًا.
- تم إصلاح الخطأ الذي كان يؤدي إلى تعبئة
- إدارة الحقوق الرقمية:
- تمت إتاحة الحل البديل لترخيص ClearKey
https://default.urlالزائف على المستوى 33 من واجهة برمجة التطبيقات والإصدارات الأحدث (في السابق، كان الحل البديل ينطبق فقط على المستوى 33 من واجهة برمجة التطبيقات تحديدًا) (#837). - تم إصلاح
ERROR_DRM_SESSION_NOT_OPENEDعند التبديل من المحتوى المشفّر إلى المحتوى الواضح بدون إرفاق سطح بالمشغّل. حدث الخطأ بسبب استخدام برنامج فك ترميز آمن بشكل غير صحيح لتشغيل المحتوى غير المشفّر.
- تمت إتاحة الحل البديل لترخيص ClearKey
- الجلسة:
- وضع المفاتيح والقيم المخصّصة في
MediaMetadataCompatإلىMediaMetadata.extrasوMediaMetadata.extrasإلىMediaMetadataCompat(#756، #802). - تم إصلاح مشكلة بث
notifyChildrenChangedلوحدات التحكّم القديمة (#644). - تم إصلاح خلل كان يؤدي إلى تعطُّل بعض الأجهزة عند ضبط وقت سالب لموقّت
setWhenغير مفعَّل للإشعار (#903). - تم إصلاح
IllegalStateExceptionعندما لا يكتمل اتصال وحدة التحكّم في إشعارات الوسائط عند طلب أول تحديث للإشعار (#917).
- وضع المفاتيح والقيم المخصّصة في
- واجهة المستخدم:
- إضافة 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. - انقل
ExoPlayer.setAudioAttributesإلى واجهةPlayer.
- أضِف مَعلمة
- 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) - إضافة عمق البت لـ luma وchroma إلى
ColorInfo(#491). - إضافة حقول أخرى إلى تسجيل بيانات عميل الوسائط الشائعة (CMCD): طلب العنصر التالي (
nor) وطلب النطاق التالي (nrr) (#8699) - إضافة وظيفة لنقل بيانات Common Media Client Data (CMCD) باستخدام معلمات طلب البحث (#553).
- حلّ المشكلة "
ConcurrentModificationException" في "ExperimentalBandwidthMeter" (#612) - أضِف المَعلمة
MediaPeriodIdإلىCompositeMediaSource.getMediaTimeForChildMediaTime. - إتاحة استخدام
ClippingMediaSource(والمصادر الأخرى التي تتضمّن فترات زمنية/فروق زمنية) فيConcatenatingMediaSource2(#11226). - يجب تغيير
BaseRenderer.onStreamChanged()لتلقّي وسيطةMediaPeriodIdأيضًا.
- Transformer:
- تحليل بيانات تدوير 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 الكلاسيكي
في
Mp4Extractor
- الصوت:
- إضافة إمكانية استخدام ترميز PCM بتنسيق big-endian بدقة 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).
- تم إصلاح الخطأ الذي يؤدي إلى ظهور رسالة خطأ عند التحقّق من إمكانات E-AC3-JOC
IllegalArgumentException(#677).
- إضافة إمكانية استخدام ترميز PCM بتنسيق big-endian بدقة 24/32 بت في ملفات MP4 وMatroska، وتحليل ترميز PCM لـ
- الفيديو:
- السماح لـ "
MediaCodecVideoRenderer" باستخدامVideoFrameProcessor.Factoryمخصّص - تم إصلاح الخطأ الذي كان يمنع عرض الإطار الأول إذا كان البث الصوتي يبدأ بطوابع زمنية سالبة (#291).
- السماح لـ "
- النص:
- إزالة
ExoplayerCuesDecoderتتم الآن معالجة المقاطع النصية التي تتضمّنsampleMimeType = application/x-media3-cuesمباشرةً من خلالTextRendererبدون الحاجة إلى مثيلSubtitleDecoder.
- إزالة
- البيانات الوصفية:
- لن يتم استدعاء
MetadataDecoder.decodeبعد الآن لعيّنات "فك الترميز فقط" لأنّ عملية التنفيذ يجب أن تعرض قيمة فارغة على أي حال.
- لن يتم استدعاء
- التأثير:
- إضافة
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)إدخال صورة نقطية في قائمة الانتظار حسب الطابع الزمني - غيِّر
VideoFrameProcessor.registerInputStream()إلى غير محظور. يجب أن تنفّذ التطبيقاتVideoFrameProcessor.Listener#onInputStreamRegistered(). - تم تغيير المَعلمتَين "
frameRate" و"durationUs" في "VideoFrameProcessor.queueInputBitmap" إلى "TimestampIterator".
- إضافة
- إضافة IMA:
- تم إصلاح خطأ يتعلّق ببث مباشر متعدد الفترات بتنسيق DASH، حيث يمكن أن يظهر استثناء إذا لم يكن البث هو العنصر الأول في قائمة التشغيل (#571).
- يجب تحرير StreamManager قبل استدعاء
AdsLoader.destroy() - تمت ترقية إصدار حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) إلى 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)للسماح للتطبيقات بتجاوز المعالجة التلقائية لأحداث زر الوسائط
- ضبط سلوك خدمة الإشعارات التي تعمل في المقدّمة على
- واجهة المستخدم:
- أضِف تنفيذ
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 المخصّصة في العنوان العام لاستجابة Options (#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" و"عنوان التعليق" إلى بداية سلسلة البت لتشغيل Opus بدون تحميل وفقًا لمعيار RFC 7845.
- الفيديو:
- H.265/HEVC: تم إصلاح مشكلة تحليل معلومات الصور المرجعية القصيرة والطويلة المدى في SPS.
- النص:
- CEA-608: تم تغيير منطق اقتطاع الإشارات ليأخذ في الاعتبار النص المرئي فقط. في السابق، كان يتم تضمين المسافة البادئة وإزاحة علامة التبويب عند تحديد طول الإشارة بـ 32 حرفًا (وهو ما كان صحيحًا من الناحية الفنية وفقًا للمواصفات) (#11019).
- إضافة IMA:
- تمت ترقية إصدار حزمة تطوير البرامج (SDK) للإعلانات التفاعلية (IMA) إلى 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
- المكتبة المشتركة:
- إضافة سبب الإيقاف المؤقت لمسار الصوت غير المناسب والتشغيل عندما يكون جاهزًا تغيير سبب الإيقاف المؤقت لفترة طويلة جدًا (#15).
- إضافة أوامر إلى المشغّل:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_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 - إضافة إمكانية تضمين بيانات عميل الوسائط الشائعة (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()لتفعيل تسجيل المفاتيح المخصّصة.
- يكون تسجيل 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:
- إزالة
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)يُرجى استخدامExoPlayerAssetLoader.Factory(MediaSource.Factory)وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)بدلاً من ذلك. - إزالة
Transformer.startTransformation(MediaItem, ParcelFileDescriptor) - تم إصلاح خطأ قد يؤدي إلى توقُّف عملية التحويل (ما يؤدي إلى انتهاء مهلة المُضاعِف) إذا تم الإشارة إلى نهاية بث الفيديو في اللحظة التي كان فيها إطار الإدخال في انتظار المعالجة.
- يمكنك الاستعلام عن برامج الترميز من خلال
MediaCodecListبدلاً من استخدام أدواتfindDecoder/EncoderForFormatالمساعدة، وذلك لتوسيع نطاق الدعم. - يجب إزالة إعدادات الإطار B في "
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مع الفيديو، أو عندما لا يتم تحديد حجم مقطع الفيديو المتوافق بعد.
- يجب جعل
- إدارة الحقوق الرقمية:
- تقليل مستوى ظهور العديد من الطرق الداخلية فقط في
DefaultDrmSessionالتي لا يُتوقع استدعاؤها من خارج حزمة إدارة الحقوق الرقمية:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- تقليل مستوى ظهور العديد من الطرق الداخلية فقط في
- المُجمِّع:
- إضافة مكتبة جديدة لدمج الوسائط يمكن استخدامها لإنشاء ملف حاوية MP4
- إضافة IMA:
- تفعيل أحداث البث المباشر المتعددة الفترات بتنسيق DASH لـ "إدراج الإعلان الديناميكي" يُرجى العِلم أنّ الإصدار الحالي لا يتيح بعد البحث في أحداث البث المباشر (#10912).
- تم إصلاح خلل يؤدي إلى إدراج مجموعة إعلانية جديدة في أحداث البث المباشر بسبب اختلاف طفيف في موضع المحتوى المحسوب في المخططات الزمنية المتتالية.
- الجلسة:
- أضِف طريقة المساعدة
MediaSession.getControllerForCurrentRequestللحصول على معلومات حول وحدة التحكّم التي تستدعي حاليًا طريقةPlayer. - أضِف
androidx.media3.session.MediaButtonReceiverللسماح للتطبيقات باستئناف التشغيل من خلال أحداث أزرار الوسائط التي يتم إرسالها، على سبيل المثال، من خلال سماعة رأس بلوتوث (#167). - Add default implementation to
MediaSession.Callback.onAddMediaItemsto allow requestedMediaItemsto be passed ontoPlayerif they haveLocalConfiguration(e.g. URI) (#282). - إضافة زرَّي الأمر "تقديم إلى السابق" و "تقديم إلى التالي" في طريقة العرض المصغّرة لإشعارات الوسائط تلقائيًا على نظام التشغيل Android 12 والإصدارات الأقدم (#410)
- Add default implementation to
MediaSession.Callback.onAddMediaItemsto allow requestedMediaItemsto be passed ontoPlayerif they haveLocalConfiguration(e.g. URI) (#282). - إضافة زرَّي الأمر "تقديم إلى السابق" و "تقديم إلى التالي" في طريقة العرض المصغّرة لإشعارات الوسائط تلقائيًا على نظام التشغيل Android 12 والإصدارات الأقدم (#410)
- أضِف طريقة المساعدة
- واجهة المستخدم:
- أضِف طريقتَي Util
shouldShowPlayButtonوhandlePlayPauseButtonActionلكتابة عناصر مخصّصة في واجهة المستخدم مع زر تشغيل/إيقاف مؤقت.
- أضِف طريقتَي Util
- إضافة RTSP:
- إضافة DASH:
- تمّت إزالة إزاحة وقت الوسائط من
MediaLoadData.startTimeMsوMediaLoadData.endTimeMsلتدفقات DASH المتعددة الفترات. - تم إصلاح خطأ يتعلّق بإعادة إعداد مصدر وسائط Dash مباشر متعدد الفترات
ينتج عنه
IndexOutOfBoundsException(#10838).
- تمّت إزالة إزاحة وقت الوسائط من
- إضافة 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()وطرق setter بدلاً منها - يجب إزالة السمة
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).
- أضِف
- أدوات الاستخراج:
- تم إصلاح مشكلة تحليل H.265 SPS في ملفات MPEG-TS من خلال إعادة استخدام منطق التحليل المستخدَم حاليًا من قِبل أدوات استخراج RTSP وMP4 (#303).
- النص:
- SSA: تمت إضافة إمكانية استخدام ملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب البايت (#319).
- الجلسة:
- حلّ مشكلة عدم تحديث "
MediaController" لأوامره المتاحة عند الاتصال بجهاز "MediaSessionCompat" قديم يعدّل إجراءاته - تم إصلاح الخطأ الذي كان يمنع
MediaLibraryServiceمن عرض قيمة فارغة لطلب من واجهة مستخدم النظام إلىCallback.onGetLibraryRootباستخدامparams.isRecent == trueفي المستوى 30 لواجهة برمجة التطبيقات (#355). - تم إصلاح تسرّب الذاكرة في
MediaSessionServiceأوMediaLibraryService(#346). - تم إصلاح الخطأ الذي قد يؤدي فيه تعديل مجمّع لـ
Timelineوالموضع فيMediaSessionإلى ظهورIllegalStateExceptionفيMediaController.
- حلّ مشكلة عدم تحديث "
الإصدار 1.0.1
18 أبريل 2023
تم طرح androidx.media3:media3-*:1.0.1. يتضمّن الإصدار 1.0.1 هذه
التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.6 من ExoPlayer.
- المكتبة الأساسية:
- إعادة ضبط تجاوز البث المباشر المستهدَف عند التقديم أو الترجيع إلى الموضع التلقائي (#11051)
- تم إصلاح الخطأ الذي قد يؤدي فيه وجود عيّنات فارغة من أحداث البث في الوسائط إلى توقُّف التشغيل.
- الجلسة:
- تم إصلاح خلل يؤدي إلى حدوث استثناء في
MediaControllerعند نشر عناصر متعددة متطابقة في قائمة الانتظار من خلالMediaSessionCompatقديم (#290). - إضافة إعادة التوجيه المفقودة من
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 مع ظهور خطأ بروتوكول RTSP 461 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:
- تم رصد IllegalArgumentException الذي تم طرحه في تحليل رسائل استجابة Describe غير الصالحة في RTSP (#10971).
- الجلسة:
- تم إصلاح خطأ يتعلّق بعدم تعديل زر التشغيل/الإيقاف المؤقت في الإشعارات وفقًا لحالة المشغّل (#192).
- إضافة IMA:
- تم إصلاح خطأ كان يمنع بدء أحداث البث المباشر التي تستخدم ميزة "إدراج الإعلانات ديناميكيًا" (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" في عمليات التشغيل المباشر (تقنية مرور الإشارة).
- استخدِم معدل نقل البيانات لتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم ذاكرة التخزين المؤقت لـ "
- النص:
- تم إصلاح مشكلة تمرير
TextRendererلفهرس غير صالح (سالب) إلىSubtitle.getEventTimeإذا كان ملف الترجمة لا يحتوي على أي إشارات. - SubRip: تمت إضافة إمكانية استخدام ملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب البايت.
- تم إصلاح مشكلة تمرير
- البيانات الوصفية:
- تحليل قيم متعددة مفصولة بقيمة فارغة من إطارات ID3، كما هو مسموح به في الإصدار 2.4 من ID3
- أضِف
MediaMetadata.mediaTypeللإشارة إلى نوع المحتوى أو نوع المجلد الذي تصفه البيانات الوصفية. - أضِف "
MediaMetadata.isBrowsable" كبديل لـ "MediaMetadata.folderType". سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- DASH:
- إضافة تحليل كامل لمجموعات تكييف الصور، بما في ذلك عدد المربّعات (#3752)
- واجهة المستخدم:
- الجلسة:
- أضِف فئة
SimpleBasePlayerالمجرّدة للمساعدة في تنفيذ واجهةPlayerلمشغّلات الوسائط المخصّصة. - إضافة طريقة مساعِدة لتحويل الرمز المميّز لجلسة المنصة إلى Media3
SessionToken(#171). - استخدام
onMediaMetadataChangedلتشغيل تحديثات جلسة الوسائط على المنصة (#219) - إضافة جلسة الوسائط كوسيطة لـ
getMediaButtons()فيDefaultMediaNotificationProviderواستخدام قوائم غير قابلة للتغيير لمزيد من الوضوح (#216) - تمت إضافة مستمع معاودة الاتصال
onSetMediaItemsلتوفير وسائل لتعديل/ضبط قائمةMediaItemوالفهرس والموضع الأولي حسب الجلسة قبل الضبط على المشغّل (#156). - تجنُّب رصد النقر مرّتين لأحداث أزرار الوسائط غير المتصلة بالبلوتوث (#233).
- تم تحسين
QueueTimelineليكون أكثر فعالية في حال كانت حالة الجلسة القديمة غير واضحة (#241).
- أضِف فئة
- البيانات الوصفية:
- تحليل قيم متعددة مفصولة بقيمة فارغة من إطارات ID3، كما هو مسموح به في الإصدار 2.4 من ID3
- أضِف
MediaMetadata.mediaTypeللإشارة إلى نوع المحتوى أو نوع المجلد الذي تصفه البيانات الوصفية. - أضِف "
MediaMetadata.isBrowsable" كبديل لـ "MediaMetadata.folderType". سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- إضافة Cast:
- تمت ترقية إصدار حزمة تطوير البرامج (SDK) لتطبيق Cast إلى 21.2.0.
- إضافة IMA:
- يجب إزالة مستمع المشغّل في
ImaServerSideAdInsertionMediaSourceمن سلسلة محادثات التطبيق لتجنُّب مشاكل سلاسل المحادثات. - أضِف السمة
focusSkipButtonWhenAvailableإلىImaServerSideAdInsertionMediaSource.AdsLoader.Builderلطلب التركيز على زر التخطّي على أجهزة التلفزيون واضبطها على "صحيح" تلقائيًا. - أضِف طريقة
focusSkipButton()إلىImaServerSideAdInsertionMediaSource.AdsLoaderلطلب التركيز على زر التخطّي برمجيًا. - تمت ترقية إصدار حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK) إلى 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)لتحديد ما إذا كان العارض سيُخرج البيانات الوصفية مبكرًا أو بشكل متزامن مع موضع المشغّل.
- يمكن الآن ضبط
- إدارة الحقوق الرقمية:
- Work around a bug in the Android 13 ClearKey implementation that returns a non-empty but invalid license URL.
- تم إصلاح الخطأ
setMediaDrmSession failed: session not openedعند التبديل بين أنظمة "إدارة الحقوق الرقمية" في قائمة تشغيل (مثل Widevine إلى ClearKey).
- النص:
- CEA-608: التأكّد من معالجة أوامر تبديل الخدمة في الحقل 2 بشكل صحيح (#10666)
- DASH:
- تحليل
EventStream.presentationTimeOffsetمن ملفات البيان (#10460)
- تحليل
- واجهة المستخدم:
- استخدام عمليات الإلغاء الحالية للمشغّل كإعدادات مسبقة في
TrackSelectionDialogBuilder(#10429)
- استخدام عمليات الإلغاء الحالية للمشغّل كإعدادات مسبقة في
- الجلسة:
- التأكّد من تنفيذ الأوامر دائمًا بالترتيب الصحيح حتى إذا كان بعضها يتطلّب حلولاً غير متزامنة (#85)
- أضِف
DefaultMediaNotificationProvider.BuilderلإنشاءDefaultMediaNotificationProviderنسخة. يمكن لأداة الإنشاء ضبط معرّف الإشعار ومعرّف قناة الإشعارات واسم قناة الإشعارات التي يستخدمها مقدّم الخدمة. أضِف أيضًا الطريقةDefaultMediaNotificationProvider.setSmallIcon(int)لضبط الرمز الصغير للإشعارات. (#104). - التأكّد من عدم تجاهل الأوامر المُرسَلة قبل
MediaController.release()(#99) - يمكن لـ "
SimpleBitmapLoader" تحميل الصور النقطية من معرّفات الموارد المنتظمة (URI) لـ "file://" (#108). - تم إصلاح التأكيد الذي يمنع
MediaControllerمن البحث في إعلان خلال فترة زمنية (#122). - عند انتهاء التشغيل، يتم إيقاف
MediaSessionServiceمن المقدّمة ويظهر إشعار لإعادة تشغيل آخر ملف وسائط تم تشغيله (#112). - لا تبدأ خدمة تعمل في المقدّمة باستخدام intent مؤجّلة للإيقاف المؤقت (#167).
- إخفاء "الشارة" المرتبطة بالإشعار الذي تم إنشاؤه بواسطة
DefaultNotificationProviderيدويًا على واجهة برمجة التطبيقات 26 وواجهة برمجة التطبيقات 27 (يتم إخفاء الشارة تلقائيًا على واجهة برمجة التطبيقات 28 والإصدارات الأحدث) (#131). - تم إصلاح الخطأ الذي يتسبب في حدوث استثناءات IllegalStateExceptions عند إجراء اتصال ثانٍ من MediaSession قديم إلى MediaController في Media3 (#49).
- RTSP:
- وكالة التسويق عبر المؤثرين:
- تمت إضافة مهلة لتحميل معلومات الإعلان من أجل معالجة الحالات التي تتوقف فيها حزمة IMA SDK عن تحميل الإعلان (#10510).
- منع تخطّي "الإعلانات أثناء التشغيل" عند تقديم المحتوى إلى نهايته (#10685)
- احتساب مدة النافذة بشكل صحيح لأحداث البث المباشر التي تتضمّن إعلانات مدرَجة من جهة الخادم، مثل IMA DAI (#10764)
- إضافة FFmpeg:
- تمت إضافة العلامات المطلوبة حديثًا لربط مكتبات FFmpeg مع NDK 23.1.7779620 والإصدارات الأحدث (#9933).
- إضافة AV1:
- تحديث إصدار CMake لتجنُّب حالات عدم التوافق مع أحدث إصدارات "استوديو Android" (#9933)
- إضافة Cast:
- يجب تنفيذ
getDeviceInfo()لتتمكّن من تحديدCastPlayerعند التحكّم في التشغيل باستخدامMediaController(#142).
- يجب تنفيذ
- Transformer:
- أضِف موقّت مراقبة لبرنامج الدمج من أجل رصد الحالات التي يكون فيها إنشاء عيّنة من الناتج بطيئًا جدًا.
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
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).
- واجهة المستخدم:
- تأكَّد من أنّ 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 ستفترض عمليات التشغيل هذه شبكة 4G.
- يمنع هذا الخيار تمرير
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المقاطع الصوتية التي لا يتجاوز عدد قنواتها إمكانات إخراج الجهاز. على الأجهزة المحمولة، يفضّلDefaultTrackSelectorتنسيقات الصوت الاستيريو/الأحادي على تنسيقات الصوت المتعدد القنوات، ما لم يكن التنسيق المتعدد القنوات مكانيًا (الإصدار 12L من Android والإصدارات الأحدث) أو تنسيق صوت محيطي من Dolby. بالإضافة إلى ذلك، في الأجهزة التي تتيح ميزة الصوت المكاني، سيراقبDefaultTrackSelectorالتغييرات في خصائص Spatializer ويشغّل اختيار مقطع صوتي جديد بناءً على هذه التغييرات. يتم استبعاد الأجهزة التي تتضمّنtelevisionوضع واجهة المستخدم من هذه القيود، وسيتم تفضيل التنسيق الذي يتضمّن أكبر عدد من القنوات. لتفعيل هذه الميزة، يجب إنشاء مثيلDefaultTrackSelectorباستخدامContext.
- دمج فئة "
- الفيديو:
- تمّت إعادة تسمية
DummySurfaceإلىPlaceholderSurface. - أضِف دعم AV1 إلى
MediaCodecVideoRenderer.getCodecMaxInputSize.
- تمّت إعادة تسمية
- الصوت:
- استخدام وحدة فك ترميز الصوت LG AC3 التي تعلن عن نوع MIME غير عادي
- يجب تغيير نوع القيمة التي تم إرجاعها من
AudioAttributes.getAudioAttributesV21()منandroid.media.AudioAttributesإلى فئة تضمينAudioAttributesV21جديدة، لمنع بطء عملية التحقّق من وقت تشغيل Android (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.
- يجب تغيير
- أدوات الاستخراج:
- واجهة المستخدم:
- تم إصلاح مشكلة تسليم الأحداث إلى
OnClickListeners التي تم ضبطها علىPlayerViewفي حالةuseController=false(#9605). يجب أيضًا إصلاح عملية تسليم الأحداث إلىOnLongClickListenerلجميع إعدادات العرض. - تم إصلاح مشكلة التعامل بشكل غير صحيح مع سلسلة من أحداث اللمس التي تخرج عن حدود
PlayerViewقبلACTION_UPعلى أنّها نقرة (#9861). - تم إصلاح مشكلة في أدوات تسهيل الاستخدام في
PlayerViewحيث قد يؤدي النقر إلى تبديل حالة التشغيل بدلاً من إخفاء عناصر التحكّم (#8627). - أعِد كتابة
TrackSelectionViewوTrackSelectionDialogBuilderللعمل مع واجهةPlayerبدلاً منExoPlayer. يتيح ذلك استخدام طرق العرض مع عمليات تنفيذPlayerالأخرى، ويزيل التبعية من وحدة واجهة المستخدم إلى وحدة ExoPlayer. هذا تغيير قد يؤدي إلى عطل. - عدم عرض مسارات النصوص الإلزامية في أداة اختيار المسار
PlayerView، وإبقاء مسار نص إلزامي مناسب محدّدًا في حال اختيار "بلا" (#9432).
- تم إصلاح مشكلة تسليم الأحداث إلى
- DASH:
AudioChannelConfigurationتحليل عدد القنوات من عناصر DTS. يؤدي ذلك إلى إعادة تفعيل ميزة "تجاوز الصوت" لبث DTS (#10159).- يمنع هذا الخيار تمرير
nullإلىDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryبشكل صريح إذا لزم الأمر.
- HLS:
- العودة إلى الإعداد الكامل إذا كانت سمة CODECS في قائمة التشغيل لا تحتوي على برنامج ترميز الصوت (#10065)
- يمنع هذا الخيار تمرير
nullإلىHlsMediaSource.Factory.setCompositeSequenceableLoaderFactoryوHlsMediaSource.Factory.setPlaylistParserFactoryوHlsMediaSource.Factory.setPlaylistTrackerFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryأوDefaultHlsPlaylistParserFactoryأو مرجع إلىDefaultHlsPlaylistTracker.FACTORYبشكل صريح إذا لزم الأمر.
- البث السلس:
- يمنع هذا الخيار تمرير
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" (#9933).
- يجب تحديث إصدار CMake إلى
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)يمكنك استخدامPlayer.Listener.onTracksChanged(Tracks)كبديل. - إزالة
Player.getCurrentTrackGroupsوPlayer.getCurrentTrackSelectionsيمكنك استخدامPlayer.getCurrentTracksكبديل. يمكنك أيضًا مواصلة استخدامExoPlayer.getCurrentTrackGroupsوExoPlayer.getCurrentTrackSelections، على الرغم من أنّ هاتين الطريقتين لا تزالان متوقفتين نهائيًا. - تمّت إزالة الثوابت
DownloadHelperDEFAULT_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 بترتيب خاطئ في أحداث البث التي تحتوي على تنسيقات emsg من الإصدارَين v0 وv1 (#9996).
- النص:
- تم إصلاح التفاعل بين
SingleSampleMediaSource.Factory.setTrackIdوMediaItem.SubtitleConfiguration.Builder.setIdلإعطاء الأولوية لحقلSubtitleConfigurationوالرجوع إلى قيمةFactoryفي حال عدم ضبطه (#10016).
- تم إصلاح التفاعل بين
- تشغيل الإعلان:
- تم إصلاح مشكلة عدم توفّر بيانات كافية في مخزن الصوت المؤقت بين فترات عرض الإعلانات في أحداث البث المباشر التي تستخدم بروتوكول HLS وتقنية SSAI.
الإصدار 1.0.0-alpha02
2 مارس 2022
تم طرح androidx.media3:media3-*:1.0.0-alpha02. يتضمّن الإصدار 1.0.0-alpha02
هذه
التعديلات.
يتوافق هذا مع الإصدار 2.17.0 من ExoPlayer.
- المكتبة الأساسية:
- يجب إضافة طريقة محمية
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)
- <strong style="font-weight:bold;">تعديل منطق اختيار مقاطع الفيديو</strong> ليأخذ في الاعتبار أنواع MIME المفضّلة وعلامات الأدوار عند اختيار مقاطع فيديو متعددة للتكيّف (#9519)
- تعديل منطق اختيار مقاطع الفيديو والمقاطع الصوتية لاختيار التنسيقات فقط للاختيارات التكيُّفية التي تتضمّن المستوى نفسه من وحدة فك الترميز والتوافق مع الأجهزة (#9565).
- تعديل منطق اختيار مقطع الفيديو لتفضيل برامج الترميز الأكثر كفاءة إذا كانت برامج فك الترميز الأساسية المسرَّعة على الأجهزة تتيح استخدام برامج ترميز متعددة (#4835)
- تفضيل إعدادات المحتوى الصوتي المفضّلة (على سبيل المثال، المقطع الصوتي "التلقائي" أو مقطع صوتي يتطابق مع لغة النظام المحلية) على قيود اختيار المقطع الصوتي الفنية (على سبيل المثال، نوع MIME المفضّل أو الحد الأقصى لعدد القنوات)
- تم إصلاح مشكلة اختيار المسار حيث لم يؤدِّ إلغاء مجموعة مسارات واحدة إلى إيقاف مجموعات المسارات الأخرى من النوع نفسه (#9675).
- تم إصلاح مشكلة في اختيار المقاطع الصوتية، حيث لا يتم تطبيق مزيج من عمليات إلغاء المقاطع الصوتية غير الفارغة والفارغة بشكل صحيح (#9649).
- حظر تكرار
TrackGroupفيTrackGroupArrayيمكن دائمًا تمييزTrackGroups من خلال ضبط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).
- أدوات الاستخراج:
- النص:
- إدارة الحقوق الرقمية:
- ستتم إزالة
playbackLooperمنDrmSessionManager.(pre)acquireSession. عندما يستخدم أحد التطبيقاتDrmSessionManagerفيMediaSourceمخصّص، يجب تمريرplaybackLooperإلىDrmSessionManager.setPlayerبدلاً من ذلك.
- ستتم إزالة
- تشغيل الإعلانات / IMA:
- إضافة إمكانية استخدام إدراج الإعلان الديناميكي (DAI) في IMA (#8213)
- تمت إضافة طريقة إلى
AdPlaybackStateللسماح بإعادة ضبط مجموعة إعلانية لكي يتم تشغيلها مرة أخرى (#9615). - فرض سرعة تشغيل تبلغ 1.0 أثناء تشغيل الإعلانات (#9018).
- تم إصلاح مشكلة تؤدي إلى إعادة ضبط التشغيل فورًا في حال تعذُّر تحميل مجموعة إعلانية (#9929).
- واجهة المستخدم:
- 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:
- Transformer:
- زيادة الحد الأدنى المطلوب لإصدار واجهة برمجة التطبيقات إلى 21
- يُستخدَم
TransformationExceptionالآن لوصف الأخطاء التي تحدث أثناء عملية التحويل. - أضِف
TransformationRequestلتحديد خيارات التحويل. - يسمح هذا الإعداد بتسجيل عدة مستمعين.
- تم إصلاح مشكلة توقُّف Transformer عن العمل عند قراءة ناتج برنامج الترميز جزئيًا.
- تم إصلاح استثناء محتمل من النوع NullPointerException في
Transformer.getProgressعند طرح استثناءات من أداة دمج الوسائط. - أضِف تطبيقًا تجريبيًا لتطبيق عمليات التحويل.
- إضافة MediaSession:
- بشكل تلقائي، يمحو "
MediaSessionConnector" الآن قائمة التشغيل عند الإيقاف. يمكن للتطبيقات التي تريد الاحتفاظ بقائمة التشغيل استدعاءsetClearMediaItemsOnStop(false)في الموصِّل.
- بشكل تلقائي، يمحو "
- إضافة Cast:
- إضافة FFmpeg:
- جعل
build_ffmpeg.shيعتمد على أدوات bin في LLVM بدلاً من أدوات GNU (#9933).
- جعل
- التوافق مع Android 12:
- يمكنك ترقية إضافة Cast لتعتمد على
com.google.android.gms:play-services-cast-framework:20.1.0. الإصدارات السابقة منplay-services-cast-frameworkغير متوافقة مع التطبيقات التي تستهدف Android 12، وستتعطّل مع ظهور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استخدِم ExoPlayer 2.16.1 أو إصدارًا أقدم لاستخدام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 الجديدة. يتيح ذلك التكامل المباشر بين المشغّلات وجلسات الوسائط بدون الحاجة إلى استخدام فئة محوّل أو موصّل.