Media3
| آخر تحديث | الإصدار المستقر | إصدار محتمل | الإصدار التجريبي | الإصدار الأولي |
|---|---|---|---|---|
| 21 أكتوبر 2026 | 1.11.1 | - | - | 1.12.0-alpha01 |
تحديد الاعتماديات
لإضافة اعتمادية على 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-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) من مسارات البيانات الوصفية المجمّعة في ملفات
mebxبتنسيق MP4 - تم إصلاح مشكلة تخطّي فترات الوسائط التي يتم إعدادها ببطء في قائمة تشغيل.
- 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 حيث يمكن أن يتوقف صوت 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" بجلسة قديمة تُبلغ عن مستوى صوت أقصى سالب. - تم إصلاح مشكلة تؤدي إلى إرسال رد اتصال
onPrepareFrom*غير متوافق بدلاً منonPlayFrom*، أو إرسالonPlay()بدون إعادة إعداد ملف الوسائط المطلوب، وذلك عند استدعاءMediaController.setMediaItemأوsetMediaItemsمتبوعًا بـplay()فيMediaSessionCompatقديم متوقف مؤقتًا. - تم إصلاح
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حيث كان الوصول إلى نهاية قائمة انتظار جهاز استقبال البث يؤدي إلى محو المخطط الزمني بدلاً من الاحتفاظ بقائمة التشغيل. - تم إصلاح مشكلة عدم نقل أو تطبيق
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من خلال الرجوع إلى حدود حجم وحدات البايت في المخزن المؤقت إذا كانت ذاكرة الـ heap المتاحة تبدو ضيقة. - محاذاة معالجة الصور الثابتة عندما لا يتم ضبط
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 للقيم العشرية ذات النهاية الكبرى في مربّعات
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 بت بنظام الترتيب الأكثر أهمية، وملفات 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 الاحتياطية ونقل الإعدادات المفضّلة لدرجات الترميز والنطاق العالي الديناميكية إلى الإعدادات المفضّلة للجودة (#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:
- تم إصلاح خطأ يتسبّب في ظهور
ArrayIndexOutOfBoundsExceptionأثناء الرجوع إلى مصدر بيانات احتياطي إذا كان المقطع الصوتي المحدّد هو مجموعة فرعية من المقاطع الصوتية المتاحة (#3161). - تم إصلاح مشكلة عدم نقل مقطع الإعداد
عبر تحديثات قائمة تشغيل الوسائط إذا لم يتم تكرار علامة
#EXT-X-MAPفي التحديثات اللاحقة (#3105).
- تم إصلاح خطأ يتسبّب في ظهور
- إضافة 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وMediaLibraryServiceإلىLifecycleService، ما يسمح بإرفاق عمليات تتبّع مراحل النشاط بمراحل نشاط الخدمة (#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). - تم إصلاح الخطأ الذي كان يؤدي إلى استدعاء
getCurrentTimeline()من قِبلPlayerWrapperحتى عندما لا يكون الأمر متاحًا (#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تشغيل المحتوى على الجهاز وعلى جهاز Cast. للاحتفاظ بسلوك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 ميغابايت، وهو حجم كبير بما يكفي لصور Ultra 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-order للإشارات عند عرض أكثر من إشارة على الشاشة في الوقت نفسه (#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).
- تم إصلاح خطأ حيث يؤدي تمرير قيمة فارغة إلى
getLibraryRootمنMediaBrowserمتصل بـMediaBrowserServiceCompatقديم إلى ظهورNullPointerException. - تم إصلاح خطأ كان يؤدي إلى تعطُّل تطبيق الجلسة القديم مع ظهور رسالة
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)" بقبول القيمة null (#2109) - تم إصلاح الخطأ الذي يتسبب في بقاء إشعار قديم مرئيًا عند محو قائمة التشغيل (#2211).
- يمكنك الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو نهائيًا أو تعذُّر التشغيل. يتيح ذلك للمستخدمين استئناف التشغيل خلال هذه المهلة بدون المخاطرة بفرض قيود على عمليات التطبيقات الظاهرة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد من الممكن استخدام استدعاء
- واجهة المستخدم:
- أضِف عناصر الاحتفاظ بالحالة والدوال المركّبة إلى وحدة
media3-ui-composeلكل منPlayerSurfaceوPresentationStateوPlayPauseButtonStateوNextButtonStateوPreviousButtonStateوRepeatButtonStateوShuffleButtonStateوPlaybackSpeedState.
- أضِف عناصر الاحتفاظ بالحالة والدوال المركّبة إلى وحدة
- عمليات التنزيل:
- تم إصلاح خطأ في
CacheWriterيترك مصادر البيانات مفتوحة ومناطق ذاكرة التخزين المؤقت مقفلة في حال عرض مصدر البياناتExceptionغيرIOException(#9760).
- تم إصلاح خطأ في
- إضافة HLS:
- أضِف الإصدار الأول من
HlsInterstitialsAdsLoader. يقرأ برنامج تحميل الإعلانات "الإعلانات البينية" في قائمة تشغيل وسائط HLS ويربطها بـAdPlaybackStateالذي يتم تمريره إلىAdsMediaSource. يتيح هذا الإصدار الأولي فقط بث الفيديو عند الطلب (VOD) بتنسيق 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 تنفّذ عملية تلقائية مماثلة لـ out-of-lining لتجنُّب حدوث أخطاء في التحقّق من الفئات أثناء التشغيل. وقد تم تطبيق هذا التغيير بالفعل في مكتبات 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)
- السماح لـ
- DataSource:
- تحديث
HttpEngineDataSourceللسماح بالاستخدام بدءًا من الإصدار S extension 7 بدلاً من المستوى 34 لواجهة برمجة التطبيقات (#1262). DataSourceContractTest: التأكّد من أنّDataSource.getUri()يعرض عنوان URI الذي تم حلّه (كما هو موضّح). في حال اختلاف عنوان URI هذا عن عنوان URI المطلوب، يمكن أن تشير الاختبارات إلى ذلك باستخدام طريقةDataSourceContractTest.TestResource.Builder.setResolvedUri()الجديدة.-
DataSourceContractTest: التأكّد من أنّDataSource.getUri()وgetResponseHeaders()يعرضان القيمة "مفتوح" بعد تعذُّر طلب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,000قاعدة زمنية لـ MPEG) (#1763) - إتاحة ترجمة CEA-608 في محتوى Dolby Vision (#1820)
- تم إصلاح مشكلة توقُّف التشغيل في أحداث البث المتعددة الفترات في DASH عند تفعيل الترجمة والشرح بتنسيق CEA-608 (#1863).
- إضافة
- البيانات الوصفية:
- يجب تخصيص النوع
C.TRACK_TYPE_METADATAللمقاطع التي تحتوي على محتوى icy أو vnd.dvb.ait.
- يجب تخصيص النوع
- الصورة:
- يمكنك إضافة
ExternallyLoadedImageDecoderلتسهيل عملية الدمج مع مكتبات تحميل الصور الخارجية، مثل Glide أو Coil.
- يمكنك إضافة
- DataSource:
- إضافة
FileDescriptorDataSource، وهوDataSourceجديد يمكن استخدامه للقراءة منFileDescriptor(#3757).
- إضافة
- التأثير:
- إضافة حل بديل لـ
DefaultVideoFrameProcessorلمشكلة بسيطة في تغيير حجمSurfaceTextureقد يتضمّنSurfaceTextureعملية تصغير بسيطة تؤدي إلى اقتصاص حدّ بمقدار تكسل واحد حول حافة المخزن المؤقت الذي تم اقتصاصه. يتم التعامل مع هذا الآن بحيث يكون الناتج أقرب إلى المتوقع. - تسريع
DefaultVideoFrameProcessor.queueInputBitmap()نتيجةً لذلك، يتم تصدير الصور إلى فيديوهات باستخدامTransformerبشكل أسرع.
- إضافة حل بديل لـ
- إضافة IMA:
- تم إصلاح خلل قد يؤدي إلى حدوث خطأ
ArrayIndexOutOfBoundsExceptionفيImaServerSideAdInsertionMediaSourceعند محو قائمة التشغيل. - تم إصلاح الخطأ الذي يتسبب في حدوث
ArrayIndexOutOfBoundsExceptionعند تشغيل إعلانات أثناء عرض الفيديو بعد آخر إعلان أثناء عرض الفيديو (#1741) في أحداث البث المباشر التي يتم إدراجها من جهة الخادم بدون إعلانات ما قبل التشغيل.
- تم إصلاح خلل قد يؤدي إلى حدوث خطأ
- الجلسة:
- يمكنك إضافة
MediaButtonReceiver.shouldStartForegroundService(Intent)للسماح للتطبيقات بإيقاف أمر تشغيل وارد لاستئناف التشغيل من خلال إلغاء هذه الطريقة. يتم تشغيل الخدمة تلقائيًا دائمًا، ولا يمكن إيقاف التشغيل بدون أن يتعطّل النظام مع ظهور رسالة الخطأForegroundServiceDidNotStartInTimeException(#1528). - تم إصلاح الخلل الذي تسبّب في إرسال الأوامر المخصّصة من
MediaBrowserإلىMediaSessionCompat.Callbackبدلاً من صيغةMediaBrowserServiceCompatللطريقة عند الاتصال بخدمة قديمة. وقد منع ذلكMediaBrowserمن تلقّي القيمة المعروضة الفعلية التي أرسلتها الخدمة القديمة (#1474). - تمت معالجة الخطأ
IllegalArgumentExceptionالذي يظهر على أجهزة بعض الشركات المصنّعة عند ضبط جهاز استقبال البث لطلبات زر الوسائط (#1730). - إضافة أزرار أوامر لملفات الوسائط يؤدي ذلك إلى إضافة واجهة برمجة التطبيقات Media3 API لما
كان يُعرف باسم
Custom browse actionsمع المكتبة القديمة معMediaBrowserCompat. يُرجى العِلم أنّ أزرار إجراءات Media3 لملفات الوسائط تتوفّر لكل منMediaBrowserوMediaController. يُرجى الاطّلاع على تنفيذ إجراءات التصفّح المخصّصة. * تم إصلاح خلل كان يؤدي أحيانًا إلى عدم تمكُّن وحدة التحكّم في 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 عند توفيرContextيتيح ذلك ربطMediaSessionبـRoutingSession، وهو أمر ضروري لدمج "أداة التبديل بين أجهزة التشغيل" (#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هذه الطريقة عند احتساب الوقت لجدولة مهمة العمل. - أضِف
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 لتشغيل الصوت المحيطي (#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تم ضبطه سابقًا
- DataSource:
- يجب تنفيذ الدعم لمعرّفات الموارد المنتظمة (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).
- الجلسة:
- Change default of
CommandButton.enabledtotrueand ensure the value can stay false for controllers even if the associated command is available. - إضافة ثوابت الرموز لـ
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()لاختيار نوع الخطأ أو إيقاف تكرار الأخطاء المفعَّل تلقائيًا.
- Change default of
- واجهة المستخدم:
- إضافة ميزة عرض الصور إلى
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 تؤدي إلى وضع علامة "غير متوافق" على فيديوهات H265 التي يتم بثها بمعدل 60 لقطة في الثانية
- تمت إضافة حلّ بديل يضمن عرض الإطار الأول دائمًا أثناء استخدام ميزة "النفق" حتى إذا لم ينفّذ الجهاز ذلك تلقائيًا على النحو المطلوب من خلال واجهة برمجة التطبيقات (#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للسماح للتطبيقات بتحميل مصدر وسائط المحتوى مسبقًا في موضع بدء محدّد قبل التشغيلPreloadMediaSourcetakes care of preparing the content media source to receive theTimeline, preparing and caching the period at the given start position, selecting tracks and loading media data for the period. تتحكّم التطبيقات في مستوى تقدّم التحميل المُسبق من خلال تنفيذ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. يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية لـ "
- إدارة الحقوق الرقمية:
- تشغيل عيّنات غير مشفّرة من "المحتوى الرئيسي الواضح" في محتوى إدارة الحقوق الرقمية (DRM) فورًا وبشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفّرة اللاحقة جاهزة بعد. قد يؤدي ذلك إلى توقُّف التشغيل في منتصفه إذا لم تكن المفاتيح جاهزة بعد
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك
باستخدام
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyأوDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- إضافة IMA:
- تم إصلاح مشكلة تعذُّر تشغيل إعلانات DASH وHLS التي لا تتضمّن امتداد الملف المناسب.
- تشغيل عيّنات غير مشفّرة من "المحتوى الرئيسي الواضح" في محتوى إدارة الحقوق الرقمية (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 الكبيرة جدًا، ما يعني أنّه يمكن مواصلة التشغيل بدون معلومات العلامة بدلاً من تعذُّر التشغيل تمامًا.
- تم إصلاح الخطأ الذي كان يؤدي إلى ملء
- إدارة الحقوق الرقمية:
- تم تمديد الحل البديل لعنوان URL لترخيص ClearKey
https://default.urlالزائف إلى المستوى 33 من واجهة برمجة التطبيقات والإصدارات الأحدث (في السابق، كان الحل البديل ينطبق فقط على المستوى 33 من واجهة برمجة التطبيقات) (#837). - تم إصلاح
ERROR_DRM_SESSION_NOT_OPENEDعند التبديل من المحتوى المشفّر إلى المحتوى الواضح بدون إرفاق سطح بالمشغّل. حدث الخطأ بسبب استخدام وحدة فك ترميز آمنة بشكل غير صحيح لتشغيل المحتوى غير المشفّر.
- تم تمديد الحل البديل لعنوان URL لترخيص ClearKey
- الجلسة:
- وضع المفاتيح والقيم المخصّصة في
MediaMetadataCompatإلىMediaMetadata.extrasوMediaMetadata.extrasإلىMediaMetadataCompat(#756، #802). - تم إصلاح مشكلة البث
notifyChildrenChangedلوحدات التحكّم القديمة (#644). - تم إصلاح خلل كان يؤدي إلى تعطُّل بعض الأجهزة عند ضبط وقت سلبي لموقّت
setWhenغير مفعَّل للإشعار (#903). - تم إصلاح
IllegalStateExceptionعندما لا يكتمل اتصال وحدة التحكّم في إشعارات الوسائط عند طلب أول تحديث للإشعار (#917).
- وضع المفاتيح والقيم المخصّصة في
- واجهة المستخدم:
- إضافة 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مقطعًا صوتيًا فقط، وذلك في حال كان تنسيق المقطع متوافقًا مع ميزة التفريغ. إذا لم يكن هناك مقطع صوتي متوافق مع ميزة التفريغ، لن يتم اختيار أي مقطع. - Disabling gapless support for offload when pre-API level 33 due to playback position issue after track transition.
- تمّت إزالة المَعلمة
enableOffloadمن توقيع الدالةDefaultRenderersFactory.buildAudioSink. - إزالة الطريقة
DefaultAudioSink.Builder.setOffloadMode - إزالة قيمة intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - إضافة إمكانية استخدام البيانات الوصفية لملفات Opus الصوتية التي يتم تشغيلها بدون فواصل أثناء التشغيل بدون اتصال بالإنترنت
- السماح باسترداد المعالج من خلال إيقاف التفريغ في حال تعذّر ذلك عند الكتابة الأولى (#627).
- تفعيل ميزة "جدولة تخفيف الحمل" تلقائيًا لتشغيل الصوت فقط
- حذف
ExoPlayer.experimentalSetOffloadSchedulingEnabledوAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged - تمت إعادة تسمية
onExperimentalSleepingForOffloadChangedإلىonSleepingForOffloadChangedوonExperimentalOffloadedPlaybackإلىonOffloadedPlayback. - نقل واجهات
TrackSelectionParametersوتعريفاتها ذات الصلة بوضع تفريغ الصوت إلى فئةAudioOffloadPreferencesداخلية - أضِف عمليات معاودة الاتصال من قِبل
onAudioTrackInitializedوonAudioTrackReleasedإلىAnalyticsListenerوAudioRendererEventListenerوAudioSink.Listener. - تم إصلاح مشكلة نقص تدفق مخزن الصوت المؤقت في DTS Express (#650).
- تم إصلاح الخطأ الذي يؤدي إلى ظهور رسالة
IllegalArgumentExceptionعند التحقّق من إمكانات E-AC3-JOC (#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 view.
- اجعل
- إزالة الرموز المتوقفة نهائيًا:
- إزالة
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) للإعلانات التفاعلية إلى 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 - تمت إضافة إمكانية تضمين بيانات Common Media Client Data (CMCD) في الطلبات الصادرة لتنسيقات البث التكيُّفي DASH وHLS وSmoothStreaming. تم دمج الحقول التالية:
brوblوcidوrtpوsid(#8699). بنية واجهة برمجة التطبيقات وطرقها:- يكون تسجيل CMCD غير مفعَّل تلقائيًا، ويمكنك استخدام
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)لتفعيله. - يتم تفعيل جميع المفاتيح تلقائيًا، ويمكنك إلغاء
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)لفلترة المفاتيح التي يتم تسجيلها. - يمكنك إلغاء
CmcdConfiguration.RequestConfig.getCustomData()لتفعيل تسجيل المفاتيح المخصّصة.
- يكون تسجيل CMCD غير مفعَّل تلقائيًا، ويمكنك استخدام
- تمت إضافة إجراء إضافي إلى بيان العرض التوضيحي الرئيسي لتسهيل بدء تطبيق العرض التوضيحي باستخدام ملف
*.exolist.jsonمخصّص (#439). - أضِف
ExoPlayer.setVideoEffects()لاستخدامEffectأثناء تشغيل الفيديو. - عدِّل
SampleQueueلتخزينsourceIdكـlongبدلاً منint. يؤدي ذلك إلى تغيير توقيعات الطرق العامةSampleQueue.sourceIdوSampleQueue.peekSourceId. - أضِف مَعلمات إلى الطريقتَين
shouldStartPlaybackوonTracksSelectedفيLoadControlتتيح ربط هاتَين الطريقتَين بـ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). - إضافة عملية تنفيذ تلقائية إلى
MediaSession.Callback.onAddMediaItemsللسماح بتمريرMediaItemsالمطلوب إلىPlayerإذا كان لديهLocalConfiguration(مثل معرّف الموارد المنتظم) (#282). - إضافة زرَّي الأمر "تقديم إلى السابق" و "تقديم إلى التالي" في العرض المصغّر لإشعارات الوسائط تلقائيًا على نظام التشغيل Android 12 والإصدارات الأقدم (#410)
- إضافة عملية تنفيذ تلقائية إلى
MediaSession.Callback.onAddMediaItemsللسماح بتمريرMediaItemsالمطلوب إلىPlayerإذا كان لديهLocalConfiguration(مثل معرّف الموارد المنتظم) (#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 مع ظهور الخطأ 461 UnsupportedTransport في بروتوكول RTSP (#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 الذي تم طرحه في تحليل رسائل استجابة وصف 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)لتحديد ما إذا كان العارض سيُخرج البيانات الوصفية مبكرًا أو بشكل متزامن مع موضع المشغّل.
- يمكن الآن ضبط
- إدارة الحقوق الرقمية:
- حلّ مشكلة في تنفيذ ClearKey في Android 13 الذي يعرض عنوان 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 قديم إلى Media3 MediaController (#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 على واجهة برمجة التطبيقات < 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:
- تحليل عدد القنوات من عناصر DTS
AudioChannelConfigurationيؤدي هذا إلى إعادة تفعيل ميزة "تجاوز الصوت" لبث DTS (#10159). - يمنع هذا الخيار تمرير
nullإلىDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryبشكل صريح إذا لزم الأمر.
- تحليل عدد القنوات من عناصر DTS
- HLS:
- العودة إلى الإعداد الكامل إذا لم تتضمّن سمة CODECS في قائمة التشغيل برنامج ترميز الصوت (#10065)
- يمنع هذا الخيار تمرير
nullإلىHlsMediaSource.Factory.setCompositeSequenceableLoaderFactoryوHlsMediaSource.Factory.setPlaylistParserFactoryوHlsMediaSource.Factory.setPlaylistTrackerFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryأوDefaultHlsPlaylistParserFactoryأو مرجع إلىDefaultHlsPlaylistTracker.FACTORYبشكل صريح إذا لزم الأمر.
- البث السلس:
- يمنع هذا الخيار تمرير
nullإلىSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryبشكل صريح إذا لزم الأمر.
- يمنع هذا الخيار تمرير
- RTSP:
- إضافة قارئ RTP لـ H263 (#63)
- إضافة قارئ RTP لـ MPEG4 (#35)
- إضافة قارئ RTP لـ HEVC (#36)
- إضافة قارئ RTP لملفات 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). - تعديل معلومات موضع الجلسة عند تغيير المخطط الزمني(#51)
- تم إصلاح NPE في
MediaControllerImplBaseبعد إصدار وحدة التحكّم (#74).
- استبدِل
- تشغيل الإعلانات / IMA:
- خفض معدّل استطلاع الإعلانات من كل 100 ملي ثانية إلى كل 200 ملي ثانية، ليتماشى مع توصيات مجلس تقييم وسائل الإعلام (MRC).
- إضافة FFmpeg:
- يجب تحديث إصدار CMake إلى
3.21.0+لتجنُّب حدوث خطأ في CMake يؤدي إلى تعذُّر مزامنة Gradle في AndroidStudio (#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 بترتيب خاطئ في أحداث البث التي تحتوي على كل من v0 وv1 emsg atoms (#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)
- تعديل منطق اختيار مقاطع الفيديو ليأخذ في الاعتبار أنواع 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 عن العمل عند قراءة مخرجات برنامج الترميز جزئيًا.
- إصلاح استثناء NPE المحتمل في
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 الجديدة. يتيح ذلك التكامل المباشر بين المشغّلات وجلسات الوسائط بدون الحاجة إلى استخدام فئة محوّل أو موصّل.