Media3
| آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأولي |
|---|---|---|---|---|
| 24 يونيو 2026 | 1.10.1 | - | - | 1.11.0-alpha01 |
تحديد الاعتماديات
لإضافة اعتمادية على Media3، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:
Groovy
dependencies { def media3_version = "1.10.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.10.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.11.0
1.11.0-alpha01
- المكتبة المشتركة:
- أضِف
Format.channelMaskلتمثيل قناع قناة الصوت بشكل صريح، وUtil.getAudioTrackChannelConfig(Format)جديدًا لحلّه بأمان. - تمت ترقية Kotlin من الإصدار 2.0.20 إلى الإصدار 2.2.0.
- أضِف
- ExoPlayer:
- تم إصلاح خطأ التزامن الذي يعتمد على التوقيت والذي قد يتسبّب في حدوث
IllegalStateExceptionأوIndexOutOfBoundsExceptionفي ExoPlayer. - تخفيف عمليات التحقّق من عدد المجموعات الإعلانية في
AdsMediaSourceللسماح بانخفاض عدد المجموعات الإعلانية عند معالجة مجموعة إعلانية بالكامل (hasUnplayedAds()هوfalse)، ما يتيح تغيير حجم المجموعة الإعلانية الديناميكية أثناء عمليات إعادة الضبط. - إتاحة عرض الإعلانات في المحتوى المتعدد الفترات (مثل DASH) من خلال تقسيم
AdPlaybackStateوإزاحته لكل فترة - أضِف
getFlags()وFLAG_STRICT_DURATIONإلىSampleStreamللسماح لعمليات البث بالإبلاغ عن العلامات، وعدِّل أدوات العرض للتحقّق من هذه العلامات ديناميكيًا. - الرجوع إلى أداة تقدير عدد اللقطات في الثانية في
MediaCodecVideoRendererوإلى تنسيق إخراج الترميز فيMediaCodecAudioRendererلاحتساب معدّل تشغيل الترميز عندما لا توفّر تنسيقات البث قيمة صالحة، وتجنُّب إعادة ضبط الترميز بدون داعٍ - إزالة قصاصات المحتوى للإعلانات التي يتم إدراجها من جهة العميل في مشغّل الفيديو الأساسي بدلاً من ذلك، تتولّى السمة
AdsMediaSourceمهمة منطق الاقتصاص. يجب تعديل مصادر الإعلانات المخصّصة التي يتم إدخالها من جهة العميل لتنفيذ عملية قص المحتوى داخليًا. - يجب وضع علامة
supported=NO_EXCEEDS_CAPABILITIESعلى المقاطع الصوتية التي تتضمّن ملف تعريف أو مستوى ترميز مكتوبًا بشكل صحيح ولكن غير معروف، بدلاً من وضع علامةsupported=YES(وهي العلامة التي يتم وضعها على المقاطع الصوتية التي تتضمّن معلومات غير صحيحة أو غير مكتملة عن ملف التعريف أو المستوى). يضمن ذلك عدم اختيار هذه المقاطع الصوتية (التي من غير المحتمل أن تكون متوافقة مع الجهاز) عندما تتوفّر بدائل متوافقة بشكل أفضل. - أضِف
DefaultPreloadManager.SimpleRankingDataComparator، وهوRankingDataComparatorيقارن ترتيب ملفات الوسائط استنادًا إلى المسافة بينها وبين فهرس ملف الوسائط الذي يتم تشغيله حاليًا. يمكن للتطبيقات إلغاء طريقةcompare(Integer, Integer)إذا دعت الحاجة إلى منطق مقارنة أكثر دقة. يمكن إدخالSimpleRankingDataComparatorالمخصّص من خلال دالة إنشاء جديدة خاصة بالفئةDefaultPreloadManager.Builder. - تقليل خطر حدوث خطأ OOM في
DefaultLoadControl.prioritizeTimeOverSizeThresholdsمن خلال الرجوع إلى حدود حجم بايت المخزن المؤقت إذا كانت ذاكرة الكومة المتاحة تبدو محدودة. - تعديل طريقة التعامل مع الصور الثابتة عندما لا يتم ضبط
MediaItem.imageDurationUs: أصبحت الصور الثابتة بتنسيقَي JPEG وHEIC "تُعرض" الآن بمدة تلقائية قصيرة جدًا (بالطريقة نفسها التي كانت تُعرض بها الصور بتنسيق PNG وغيرها من الصور سابقًا). - أضِف
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)إلىBandwidthMeterلتوصيلها بـMediaSource. سيظل يتم استدعاء الطريقة المتوقّفة نهائيًا التي تتضمّن تنفيذًا مخصّصًا تلقائيًا، ولكن يُنصح بتنفيذ الطريقة الجديدة واستخدامBandwidthMeter.getTransferListener()لتحقيق التكافؤ مع الطريقة القديمة. - في
DefaultBandwidthMeter، أضِف دعمًا لـInitialBitrateSupplier. يتيح ذلك للتطبيقات توفير منطقها الخاص لتحديد تقدير معدّل نقل البيانات الأولي، والذي سيتم استخدامه عند إنشاءDefaultBandwidthMeterوعند تغيير أنواع الشبكات. يمكن ضبط المورّد من خلالDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - تفعيل الجدولة الديناميكية تلقائيًا سيتم تشغيل حلقة عمل
ExoPlayerالتشغيل بشكل ديناميكي بدلاً من تشغيلها على فترات زمنية ثابتة. - إزالة عملية إعادة ضبط غير ضرورية يمكن أن تحدث عند دمج مقاطع صوتية تتضمّن عيّنات ما قبل التشغيل مع تشغيل نشط
- في
DefaultBandwidthMeter، يمكنك تحسينgetInitialBitrateCountryGroupAssignmentلعرض مهام مجموعات البلدان المجمّعة في عدد صحيح 32 بت بدلاً من مصفوفة، ما يقلّل من حجم الرمز البرمجي ويتجنّب عمليات التخصيص. - تم إصلاح حالات تعذُّر تهيئة
AudioTrackعلى بعض الأجهزة من خلال التأكّد من أنّ منطق إعادة المحاولة يحاول دائمًا استخدام الحد الأدنى لحجم ذاكرة التخزين المؤقت وهو ثانية واحدة إذا لم تنجح محاولات إعادة المحاولة الأخرى (عن طريق خفض حجم المخزن المؤقت إلى النصف) (#3207). - إصلاح مشكلة الترميز على بعض الأجهزة التي كان الترميز فيها يستهلك جميع العيّنات إذا تم مسحها سابقًا قبل تلقّي مخازن مؤقتة للإدخال
- أضِف
ExoPlayer.Builder.enablePerStreamMediaProgression()التجريبي للسماح بتقديم معالجة الوسائط على أساس كل بث. يؤدي ذلك إلى تقليل وقت الاستجابة عند بدء التشغيل بين عناصر قائمة التشغيل وتجنُّب توقّف التشغيل بشكل مفاجئ عند عرض محتوى قصير جدًا (#3122). - تم إصلاح مشكلة حالة التزامن المتعلّقة باستخدام معرّف جلسة الصوت، حيث سيتم استخدام معرّف جلسة الصوت الأوّلي الذي يتم إنشاؤه تلقائيًا بواسطة
ExoPlayerبدلاً من القيمة التي تم ضبطها بواسطةsetAudioSessionId(#3241). - إضافة دعم تجريبي لتشغيل البيانات الوصفية الموقّتة بتنسيق HAGC (ST 2094-50) للوسائط المتدفقة (مثل MP4 وMatroska) يدمج المشغّل تلقائيًا مسارات البيانات الوصفية بتنسيق HAGC مع مسار الفيديو المرتبط بها، ويقدّم البيانات الوصفية خارج النطاق إلى برنامج الترميز على الأجهزة التي تعمل بالإصدار 37 من واجهة برمجة التطبيقات أو الإصدارات الأحدث. يمكن إيقاف هذا السلوك من خلال
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false).
- تم إصلاح خطأ التزامن الذي يعتمد على التوقيت والذي قد يتسبّب في حدوث
- CompositionPlayer:
- تم إصلاح مشكلة عدم إصدار مثيلات
TrackSelector.
- تم إصلاح مشكلة عدم إصدار مثيلات
- المحوّل:
- تم إصلاح مشكلة قد تؤدي إلى الإبلاغ عن
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 من خلال دمج البث الفرعي الأساسي والبث الفرعي الإضافي في عيّنة واحدة، ما يؤدي إلى حلّ مشاكل التشغيل التي كان يتم فيها عرض البثين كعينات منفصلة (#3147).
- MP4: منع الحلقات المتكرّرة والقراءات خارج النطاق عند تحليل عناصر علامة البيانات الوصفية الفارغة
(#3191).
ilst - MPEG-TS: تأكَّد من عرض الإطار الأخير في عمليات البث التي تكون فيها حزمة PES الأخيرة ذات طول معروف (#3206).
- MP3: إصلاح عملية إعداد التقارير عن معدل نقل البيانات للملفات التي تتضمّن عنوان Xing وVBRI
- Matroska: التعامل مع المقاطع الصوتية المحدّدة في المجموعة الأخيرة (#3250)
- Matroska: إضافة دعم لبرنامج ALAC (#3268)
- MP4: السماح بمربّعات
sgpdذات طول متغير في ملفات MP4 المجزّأة (#3243)
- MP4 وMP3 وFLAC: أضِف
- الصوت:
- إضافة فترة سماح مدتها 100 ملي ثانية في أدوات عرض الصوت في ExoPlayer عند الانتقال من حالة "جاهز" إلى حالة "غير جاهز"، وذلك لتجنُّب حالات نقص مؤقتة في المخزن المؤقت وتجنُّب حالات التخزين المؤقت غير المتوقّعة أثناء البث النشط (#3210).
- تغيير منطق حجم المخزن المؤقت التلقائي لترميز PCM في
DefaultAudioTrackBufferSizeProviderلاستخدام مخزن مؤقت ثابت يبلغ 500 ملي ثانية لتقليل الاعتماد على الجهاز - تعديل
MediaCodecAudioRendererلاستخراج spatial channelMask من برنامج الترميز الخاص بالنظام الأساسي، ما يتيحDefaultAudioSinkاستخدام هذه القناع الواضح بدلاً من استنتاج قناع من عدد القنوات - حوِّل مَعلمات
AudioSink.configureإلى فئة بيانات. يجب نقل عمليات الإلغاء المخصّصة لـForwardingAudioSink.configureإلى توقيع الطريقة الجديد. - إضافة إمكانية الحفاظ على درجة الصوت عند تغيير سرعة تشغيل بث صوتي باستخدام
EditedMediaItem.Builder#setSpeed(SpeedParameters) - تحسين
ToFloatPcmAudioProcessorلتتيح تحويل 8-bit PCM و16-bit big-endian PCM و64-bit floating point PCM إلى 32-bit floating point PCM (#3090). - تغيير قيمة الإرجاع الخاصة بـ
DecoderAudioRenderer.getChannelMappingإلىImmutableIntArray - تم إصلاح الخطأ الذي يتسبّب في توقُّف التشغيل عند تشغيل قائمة تشغيل تتضمّن ملفات صوتية متواصلة في وضع النقل المضغوط.
- أرسِل
Timelineوالمعرّف الفريد العالمي للفترة إلىAudioSink.configureوAudioProcessor.StreamMetadataلتوفير سياق قائمة التشغيل لمعالجات الصوت (#418). - اضبط
AudioProcessor.StreamMetadata.positionOffsetUsالصحيح للسماح بمعالجة الصوت المستندة إلى الوقت (#418). - إضافة دعم لترميز PCM ذي الفاصلة العائمة 32 بت و64 بت بنظام الترتيب الكبير.
- الفيديو:
- تم إصلاح منطق الانضمام إلى الفيديو لاحتساب المخازن المؤقتة التي تم إسقاطها أثناء الانضمام على أنّها تم تخطّيها بدلاً من إسقاطها.
- إصلاح قرار العرض الفوري عند ضبط سطح جديد لتجنُّب فقدان إطارات على الأجهزة التي لا تتوافق مع أسطح العناصر النائبة
- إصلاح تقدير عدد اللقطات في الثانية في
MediaCodecVideoRendererليكون أكثر دقة من خلال احتساب اللقطات التي تم إسقاطها أو تخطّيها - السماح بضبط الحدّ المستخدَم لتحديد موعد عرض الإطارات مبكرًا. القيمة التلقائية هي 50 ملي ثانية، ولكن يمكن تخصيص القيمة من خلال
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold().
- النص:
- البيانات الوصفية:
- أضِف حقل
MediaMetadata.discSubtitleوحلِّله من بيانات ID3v2.4TSSTوVorbisDISCSUBTITLE. - تحليل رقم القرص وعدده من إطار ID3
TPOS
- أضِف حقل
- التأثير:
- محو حالة إعادة الرسم في
FinalShaderProgramWrapperعند إفراغ المخزن المؤقت لمنع توقّف المشغّل عند البحث
- محو حالة إعادة الرسم في
- Muxers:
- إضافة إمكانية استخدام مراجع المسارات (المربّع
tref) فيMp4Muxerمن خلال واجهة برمجة تطبيقاتaddTrackReferenceجديدة يتيح ذلك إنشاء علاقات بين المقاطع، مثل ربط مقطع بيانات وصفية بمقطع الفيديو الذي يصفه. - أضِف
OggMuxerللسماح بدمج وسائطOPUSأوVORBISفي تنسيق الملفogg. - أضِف
WavMuxerلإنشاء ملف WAV (يتوافق مع PCM ذي الأعداد الصحيحة والأعداد العشرية). - أضِف
setAttemptStreamableOutputEnabledإلىInAppMp4Muxer.Factoryللسماح بكتابة ملفات أصغر غير قابلة للبث بدون مساحة محجوزة. - إتاحة استخدام تنسيق IAMF الصوتي في
Mp4MuxerوFragmentedMp4Muxer
- إضافة إمكانية استخدام مراجع المسارات (المربّع
- إضافة "إعلانات الوسائط التفاعلية":
- أضِف
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotللسماح بتوفير خانة إعلانية لاستخدامها في الإعلانات أثناء الإيقاف المؤقت. - تم إصلاح الخطأ الذي يؤدي إلى ظهور زر التخطّي في الإعلان الثاني مباشرةً عند عرض إعلانات VAST متتالية يمكن تخطّيها (#3165).
- أضِف
- الجلسة:
- إصلاح حالات الإغلاق التام المحتملة وأعطال
IllegalStateExceptionداخلMediaNotificationManagerعند استخدام جلسة مع مشغّل حلقة تكرار في سلسلة الخلفية - فرض متطلبات أكثر صرامة بشأن سلاسل المحادثات لطُرق
MediaSessionتُرسِل الآن طرق Void عمليات التنفيذ تلقائيًا إلى سلسلة المكرّر الحلقي للتطبيق، وتُصدر أدوات الوصول إلى الحالة (getters) صراحةًIllegalStateExceptionعند استدعائها من سلسلة أخرى غير المكرّر الحلقي للتطبيق. - إصلاح عُطل دمج المخطط الزمني خارج النطاق (
IllegalStateExceptionفيMediaUtils.mergePlayerInfo) من خلال تتبُّع اتساق الحالة لكل وحدة تحكّم على مستوى الجلسة - أضِف
androidx.media3.session.MediaSessionManagerلتوفير الدعم للاستعلام عن جلسات الوسائط النشطة وعرض مثيلاتSessionTokenمن Media3. - تغيير السلوك التلقائي للدالة
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 من واجهة برمجة التطبيقات.
- إصلاح حالات الإغلاق التام المحتملة وأعطال
- UI:
- إصلاح مشكلة عرض الإطار الأول بحجم غير صحيح عند إعادة إنشاء
ContentFrameفي منتصف التشغيل (#3238) - أضِف الفئة
CurrentMediaItemStateوrememberCurrentMediaItemStateComposable المقابل إلى الوحدةmedia3-ui-compose. يتم استخدام عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض معلومات وصفية مختلفة حولMediaItemالذي يتم تشغيله حاليًا. - أضِف الفئة
PlaylistStateوrememberPlaylistStateComposable المقابل إلى الوحدةmedia3-ui-compose. يتم استخدام عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض معلومات وصفية مختلفة حولMediaItemsالتي تم ضبطها في "مشغّل الفيديو". - إضافة واجهة برمجة تطبيقات للتقديم السريع/التصوير البطيء إلى
PlaybackSpeedStateاستخدِم هذه الوظيفة فيdemo-composeلعرض التقديم السريع من خلال الضغط مع الاستمرار. - أضِف العنصر القابل للإنشاء
MiniControllerإلى الوحدةmedia3-ui-compose-material3. ويوفّر عنصرًا مضغوطًا للتحكّم فيPlayerمع عرض العنوان والفنان والعمل الفني ومستوى تقدّم عنصر الوسائط الحالي. - أضِف الفئة
ErrorStateوrememberErrorStateComposable المقابل إلى الوحدةmedia3-ui-compose. أضِفErrorTextComposable إلىmedia3-ui-compose-material3واجعله تراكبًا تلقائيًا علىPlayer. - نشر عنصر
PlayerDefaultsمع عناصر قابلة للإنشاء لكل منTopControlsوCenterControlsوBottomControlsوErrorOverlay - أضِف
FocusRequesterإلىPlayerComposable وفتحات المحتوى الخاصة به. - انشر
PlayerPool(common-ktx) وrememberPooledPlayer(ui-compose) لتفعيل التحميل المُسبَقMediaItemsفي بيئات واجهة المستخدم ذات النافذة المنزلقة. اعرض هذه الوظيفة فيdemo-composeباستخدامShortFormPlayerScreenجديد.
- إصلاح مشكلة عرض الإطار الأول بحجم غير صحيح عند إعادة إنشاء
- إضافة Ktor:
- أضِف وحدة إضافة
media3-datasource-ktorجديدة توفّرKtorDataSourceتستند إلى حزمة HTTP في Ktor.
- أضِف وحدة إضافة
- إضافة HLS:
- إضافة إمكانية استخدام ميزة "توجيه المحتوى" و"استنساخ المسار" في HLS (#1689)
- أضِف
setWithAssetListResetإلىHlsInterstitialsAdsLoaderللسماح للتطبيقات بإعادة ضبط الإعلانات البينية لقائمة مواد العرض التي تمت معالجتها بالكامل إلى حالة غير متوفّرة لإعادة عرضها عند الطلب.
- إضافة DASH:
- قسِّم مقاطع الترجمة والشرح بتنسيق CEA إلى ملفات
TrackGroupمختلفة استنادًا إلى اللغة (#3113).
- قسِّم مقاطع الترجمة والشرح بتنسيق CEA إلى ملفات
- إضافة RTSP:
- إصلاح حالات توقّف التشغيل أو تعذّره بشكل مؤقت أثناء إعداد تشغيل RTSP بسبب أخطاء في ربط منفذ UDP
- إضافة البث:
- أضِف فئة
CastParamsجديدة للسماح بإعداد ميزة "البث من خلال الاتصال" عن طريق استدعاءCast.initialize(CastParams). - تمت إضافة الخيار الجديد
CastParams.getShowSystemOutputSwitcherOnCastIconClick()الذي يؤدي إلى استخدام أداة اختيار جهاز البث في SystemUI بدلاً من أداة اختيار جهاز البث داخل التطبيق عندما تكون متاحة.
- أضِف فئة
- أدوات الاختبار:
- وسّع نطاق
DataSourceContractTestليشمل إتاحة طلباتPOSTمع الرؤوس والنصوص، وأضِف بعض مواردPOSTإلىHttpDataSourceTestEnv، وأضِف تأكيدات لطريقة HTTP المتوقّعة والرؤوس والنص فيWebServerDispatcher. - تضييق نطاق التأكيدات في
DataSourceContractTestللأطوال التي يتم عرضها منDataSource.open(). يجب أن تشير المراجع التي قد تؤدي إلى ظهورC.LENGTH_UNSETإلى ذلك باستخدامTestResource.Builder.setMayResolveToUnknownLength(boolean).
- وسّع نطاق
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
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بدلاً من ذلك.
- إزالة
- إنشاء
- تم تعديل تعليمات
README.mdالخاصة بالاعتماد على Media3 محليًا لاستخدام "عمليات الإنشاء المجمّعة" في Gradle (includeBuild). تمت إزالة النص البرمجيcore_settings.gradle، ولم يعُد يتم استخدام السمتَينandroidxMediaModulePrefixوandroidxMediaEnableMidiModule.
- تم تعديل تعليمات
الإصدار 1.10.0
1.10.1
12 مايو 2026
- المكتبة المشتركة:
- إصلاح طريقة التعامل مع
onAudioSessionIdChangedفيSimpleBasePlayerوForwardingSimpleBasePlayer
- إصلاح طريقة التعامل مع
- ExoPlayer:
- تم إصلاح مشكلة حالة التزامن المتعلقة بإنشاء معرّف جلسة الصوت التي قد تؤدي إلى
IllegalStateExceptionمع وضع النفق. (#3099). - إصلاح الأعطال المحتملة للتطبيقات عند استعادة البيانات بعد حدوث أخطاء في برنامج الترميز مع عملية التسخين المُسبَق لبرنامج العرض
- تم إصلاح المشكلة التي كانت تؤدي إلى ظهور تشوّهات في الفيديو بسبب توفير بيانات التهيئة عند استخدام برنامج ترميز Dolby Vision المستند إلى AV1 (#3153).
- تم إصلاح مشكلة حالة التزامن المتعلقة بإنشاء معرّف جلسة الصوت التي قد تؤدي إلى
- اختيار المقطع الصوتي:
- تعديل منطق اختيار المسار في
VideoTrackInfoلحلّ أنواع MIME الاحتياطية ونقل إعدادات HDR المفضّلة وإعدادات ترميز الفيديو المفضّلة إلى إعدادات الجودة المفضّلة (#3135)
- تعديل منطق اختيار المسار في
- أدوات الاستخراج:
- MP3: تجاهل طول بيانات Xing إذا كان أطول من طول البث المعروف (#3117).
- إصلاح
ArrayIndexOutOfBoundsExceptionفيMp4Extractorعندما يتم ضبطFLAG_OMIT_TRACK_SAMPLE_TABLEولا يحتوي المقطع الصوتي على مربّعstss(نموذج مزامنة).
- الصوت:
- إصلاح الخطأ الذي قد يؤدي إلى إعادة توجيه أحداث الصوت بشكل خاطئ في حال إضافة عدة أدوات عرض صوت إلى المشغّل.
- الفيديو:
- تعديل منطق إعادة استخدام برنامج الترميز عند تغيير عدد اللقطات في الثانية في واجهة برمجة التطبيقات التي تقل عن 30 لتجنُّب إعادة ضبط برنامج الترميز في الحالات التي لا يكون فيها ذلك مفيدًا (#3120).
- إيقاف الحلّ البديل للمزامنة الإجبارية في
queueSecureInputBufferللإصدار 31 من واجهة برمجة التطبيقات أو الإصدارات الأحدث، لأنّ الحلّ البديل كان عبارة عن عنق زجاجة اصطناعي فرض تشغيل عملية فك التشفير بشكل تسلسلي، ما منع تشوّه الفيديو بسبب مشكلة في إطار العمل كانت موجودة قبل الإصدار 31 من واجهة برمجة التطبيقات.
- الصورة:
- تم إصلاح مشكلة في وضع "التنقل السريع" حيث لا يتم تطبيق تحديثات الصور إلا عندما "يتوقف المستخدم عن التنقل السريع" (#2815).
- الجلسة:
- تم إصلاح الخطأ الذي كان يؤدي إلى عدم نقل
ForegroundServiceStartNotAllowedExceptionبين حدود سلاسل المحادثات في حال لم تكن سلسلة محادثات التطبيق هي سلسلة المحادثات الرئيسية (#2499). - إصلاح الخطأ الذي لا يتوفّر فيه
COMMAND_SEEK_TO_MEDIA_ITEMفيMediaControllerعند الاتصال بجلسة على المنصة فقط تتيح الانتقال إلى عناصر أخرى ولكن بدون تعديلات على قائمة التشغيل - تم إصلاح المشكلة التي كانت تتسبب في عدم تمكّن
MediaControllerمن ضبط عناصر الوسائط في جلسات الوسائط على الإصدارات الأقدم من 0x0A التي لا تسمح بإجراءاتPREPARE_FROM. - إصلاح الخطأ الذي لم يتم فيه وضع العلامة
Controller.isTrusted()على العملية الخاصة على الإصدار 27 من واجهة برمجة التطبيقات أو الإصدارات الأقدم عند الاتصال عبر أدوات التحكّم في المنصة
- تم إصلاح الخطأ الذي كان يؤدي إلى عدم نقل
- إضافة HLS:
- إضافة DASH:
- إصلاح عُطل في
SampleQueueعند الانتقال إلى جزء يتم إلغاؤه حاليًا
- إصلاح عُطل في
1.10.0
26 مارس 2026
- المكتبة المشتركة:
- ترقية
Player.mute()وPlayer.unmute()منUnstableApiإلى الإصدار الثابت - ترقية
Format.pcmEncodingوC.PcmEncodingمنUnstableApiإلى الإصدار الثابت - أضِف
Format.primaryTrackGroupIdلتحديد المجموعة الأساسية من مثيلاتFormatالمضمّنة (#294).
- ترقية
- ExoPlayer:
- إضافة إمكانات قص إلى
AdsMediaSource - إضافة إمكانية الجدولة الديناميكية في
MediaCodecVideoRendererلتحسين توافق عمل الجدولة ودورات تنشيط وحدة المعالجة المركزية مع الوقت الذي يمكن فيه معالجة لقطات الفيديو يمكنك تفعيل هذه الميزة باستخدامexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()فيDefaultRenderersFactory. - السماح بتحديد
DataSource.Factoryمخصّص فيDefaultPreloadManager.Builder - السماح بمحاكاة
ExoPlayerبدون Robolectric من خلال نقل بعض الثوابت التلقائية إلىExoPlayer.Builderلا يُنصح عمومًا بمحاكاة هذه الواجهة المعقّدة، إلا في حال كان الاستخدام بسيطًا أو عرضيًا (#2985).- وقد تطلّب ذلك نقل
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSمنExoPlayerإلىExoPlayer.Builder(بدون إيقاف نهائي).
- وقد تطلّب ذلك نقل
- تم إصلاح الخطأ الذي كان يؤدي إلى نشر
ProgressiveMediaSourceمعلومات قديمة عن المخطط الزمني إلى المشغّل، وإزالة الفترات المدرَجة في قائمة الانتظار بشكل غير متوقع (#3016). - تم إصلاح مشكلة عدم طلب ExoPlayer التركيز الصوتي المؤجّل عند طلب التشغيل أثناء المكالمات الهاتفية.
- تم إصلاح الخطأ الذي قد يتسبّب في إعادة التخزين المؤقت عند الانتقال من المحتوى المسجّل إلى المحتوى المباشر في نهاية المحتوى المسجّل (#3052).
- إتاحة استخدام ملف تعريف Dolby Vision 10 (#2830)
- تم إصلاح الخطأ الذي كان يتسبّب في عرض إعلان ما قبل التشغيل غير مهيأ
ArrayIndexOutOfBoundsException(#3125).
- إضافة إمكانات قص إلى
- CompositionPlayer:
- إضافة دعم لـ
EditedMediaItem.removeVideo
- إضافة دعم لـ
- المحوّل:
- يمكن الآن لـ
EditedMediaItem.Builder.setFrameRate()ضبط الحد الأقصى لعدد اللقطات في الثانية للفيديو، ما يساعد بشكل خاص عند زيادة سرعة الوسائط باستخدامsetSpeed().
- يمكن الآن لـ
- اختيار المقطع الصوتي:
- تغيير توقيع
DefaultTrackSelector.selectAllTracksليشمل مصفوفة الإخراج كمعلَمة، مع ملء البيانات مسبقًا بعمليات إلغاء مسار الصوت - تم إصلاح المشكلة التي يتم فيها اختيار مقاطع البيانات الوصفية المضمّنة بغض النظر عما إذا كان قد تم اختيار المقطع الأساسي المقابل (#294).
- تثبيت خيارات
TrackSelectionParametersلكل منpreferredVideoLanguagesوpreferredVideoLabelsوpreferredAudioLabelsوpreferredTextLabelsوselectTextByDefault
- تغيير توقيع
- أدوات الاستخراج:
- MP4: إتاحة ملفات تتضمّن مربّعات
uuidكبيرة قبل المربّعات الأخرى، مثلmoov(#3046) - MP4: إضافة إمكانية استخدام مقاطع فيديو بتنسيق Versatile Video Coding (VVC) في حاويات MP4
- MP4: إتاحة ملفات تتضمّن مربّعات
- أداة الفحص:
- تغيير قد يؤدي إلى عطل: إزالة
FrameExtractor. على المستخدمين الآن الاعتماد على وحدة:media3-inspector-frameالجديدة وتعديل عمليات الاستيراد إلىandroidx.media3.inspector.frame.FrameExtractor. - إضافة وحدة جديدة لاستخراج ومعالجة إطارات الفيديو التي تم فك ترميزها
- تغيير قد يؤدي إلى عطل: إزالة
- الصوت:
- تغيير مكتبة فك الترميز الأساسية لإضافة برنامج فك ترميز IAMF من
libiamfإلىiamf_tools - يتيح فك ترميز IAMF إخراج الصوت المجسّم إما من خلال أداة فك الترميز (عند استخدام إضافة أداة فك ترميز IAMF) أو من خلال أداة Spatializer في Android.
- إزالة دعم
AC4Profile22وملفات التعريف القديمة الأخرى بشكل صحيح عند تقييم توافق برنامج الترميز AC-4 في سيناريوهات Automotive (#2609) - تحسين منطق إعادة المحاولة لعملية تهيئة
AudioOutputفيDefaultAudioSink(#2905) - محاولة مطابقة تنسيق الإخراج لمكبّرات الصوت (أو أداة Spatializer إذا كان ذلك منطبقًا) عند فك ترميز 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 SDK إلى 3.39.0 للوصول إلى أحدث واجهة برمجة تطبيقات لمعلومات وسائط الإعلان.
- تم إصلاح الخطأ الذي لم يكن فيه نوع MIME للإعلان مطابقًا لنوع MIME المقدَّم في حدث LOADED الخاص بـ IMA. يعمل الإصلاح الآن على ربط نوع 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) - تم إصلاح الخطأ الذي لم يتم فيه إبلاغ أدوات التحكّم بانتقال عنصر الوسائط عندما انتقل التشغيل من فهرس عنصر وسائط معيّن إلى آخر يتضمّن عنصر الوسائط نفسه لسبب عدم الاستمرارية "AUTO" و"SEEK" (#2997).
- إصلاح مشكلة تؤدي فيها الحلول البديلة لموضع أزرار واجهة مستخدم النظام إلى التأثير سلبًا في مساحات أخرى من واجهة المستخدم، مثل Android Auto أو الشركات المصنّعة التي لا تحتاج إلى الحلول البديلة (#3041).
- تم إصلاح المشكلة المتمثّلة في عدم مزامنة إذن الوصول إلى الاشتراكات (#3056).
- حلّ بديل لخطأ في واجهة مستخدم النظام على الإصدار 29 من واجهة برمجة التطبيقات، حيث يمكن أن يؤدي عمل فني لجلسة وسائط بحجم معيّن إلى تعطيل واجهة مستخدم النظام وإجبار الجهاز على إعادة التشغيل (#3118).
- إصلاح مشكلة تغيير حجم رمز العمل الفني للإشعارات على الإصدار Android Q (#3084).
- إصلاح خطأ يؤدي إلى تعطُّل التطبيق عند استخدام مصفوفات كبيرة في
- UI:
- أضِف
PlaybackSpeedControlComposable إلىmedia3-ui-composeلعرض سرعة التشغيل وتعديلها. - أضِف
PlaybackSpeedToggleButtonComposable إلىmedia3-ui-compose-material3للتحكّم في سرعة التشغيل. - أضِف
ProgressSliderComposable إلىmedia3-ui-compose-material3لعرض تقدّم اللاعبين وتنفيذ عمليات البحث باستخدام السحب والنقر (#2288). - تجنُّب استخدام مخزن مؤقت كبير خارج الشاشة عند تحريك PlayerControlView
- أضِف
PlayerComposable إلى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)
- إضافة البث:
- تمت إضافة طريقة
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).
- إضافة البث:
- تم إصلاح الخطأ الذي تسبَّب في تعذُّر النقل من ميزة "البث" إلى التشغيل على الجهاز المحلي.
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: تحليل بيانات LAME ReplayGain (#2840)
- الصوت:
- إزالة دعم
AC4Profile22وملفات شخصية قديمة أخرى بشكل صحيح عند تقييم توافق برنامج الترميز AC-4 في سيناريوهات Automotive (#2609)
- إزالة دعم
- الفيديو:
- يتم تجاهل برامج ترميز الفيديو على الأجهزة التي تعمل بإصدارات أقل من المستوى 30 لواجهة برمجة التطبيقات عند تغيير عدد اللقطات في الثانية للمحتوى لتجنُّب تشغيل المحتوى بشكل متقطّع (#2941).
- النص:
- VobSub: تم إصلاح بعض الترجمات الناقصة من خلال التعامل بشكل صحيح مع وحدات SPU التي تحتوي على تسلسل تحكّم واحد فقط، أو التي تتضمّن معلومات مهمة مقسّمة على عدة تسلسلات تحكّم (#2935).
- إضافة "إعلانات الوسائط التفاعلية":
- إصلاح الخطأ: تم إصلاح مشكلة عدم تطابق نوع MIME للإعلان مع نوع MIME المقدَّم في حدث LOADED الخاص بـ IMA. يعيّن الإصلاح الآن نوع 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)
- إصلاح
- إضافة البث:
- تم إصلاح الخطأ الذي كان يمنع تعديل
RemoteCastPlayerالمخطط الزمني بشكل صحيح عند استبدال قائمة التشغيل.
- تم إصلاح الخطأ الذي كان يمنع تعديل
1.9.0
17 ديسمبر 2025
- المكتبة المشتركة:
- يجب تعديل
minSdkإلى23بما يتوافق مع مكتبات AndroidX الأخرى. - أضِف
PlayerTransferState، ما يسهّل نقل حالة التشغيل بين مثيلاتPlayer. - أضِف الطريقتَين
void mute()وvoid unmute()إلى Player للحفاظ على مستوى صوت Player واستعادته قبل وبعد ضبطه على صفر. - تم نشر فئات الأدوات المساعدة
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
- انشر
- المحوّل:
- استخدام
InAppMp4Muxerكأداة دمج تلقائية - أضِف
EditedMediaItem.Builder#setSpeed()وأوقِف نهائيًاEffects#createExperimentalSpeedChangingEffects(). - استبدِل
forceAudioTrackوforceVideoTrackبـtrackTypesفيEditedMediaItemSequence.
- استخدام
- اختيار المقطع الصوتي:
- أضِف
TrackSelectionParameters.selectTextByDefaultلتفضيل اختيار أي مسار نصي بدون تحديد أي إعدادات مفضّلة أخرى أكثر تحديدًا. - أضِف
preferredVideoLabelsوpreferredAudioLabelsوpreferredTextLabelsفيTrackSelectionParametersلتحديد إعداد مفضّل للمقاطع التي تحمل تصنيفًا معيّنًا، مثل تلك التي تتم قراءتها من علامات NAME في HLS (#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) عناوين صريحة. يؤدي ذلك إلى تحسين إمكانية البحث الفوري في الملفات التي لا تتضمّن بيانات وصفية، ولكن على حساب الدقة المحتملة للملفات ذات معدل البت المتغيّر التي لا تتضمّن عناوين. يتم الآن استخدام البحث في الفهرس كحلّ احتياطي إذا لم يكن من الممكن البحث في افتراض معدّل البت الثابت (CBR) (مثلاً، في حال بث محتوى غير معروف المدة) (#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).
- DRM:
- تغيير نوع القيمة التي تم إرجاعها لطُرق
MediaDrmCallbackمنbyte[]إلى نوعMediaDrmCallback.Responseجديد، للسماح بإرجاع معلومات إضافية اختيارية هذا تغيير غير متوافق مع الإصدارات السابقة، ولكن يمكن حلّ المشاكل بسهولة من خلال تضمين قيمة الإرجاع السابقةbyte[]فيnew Responseقبل الإرجاع. - أضِف معلومات طلب المفتاح، مثل عنوان URL ووقت الاستجابة، إلى
AnalyticsListener.onDrmKeysLoaded(#1001). - نقل بيانات طلب توفير الخدمة من مَعلمة عنوان URL إلى نص POST
- تغيير نوع القيمة التي تم إرجاعها لطُرق
- التأثير:
- أضِف
Presentation.copyWithUnsetSideRoundedToلتقريب ناتج الجانب غير المضبوط عند إنشاءPresentationبطول ضلع واحد.
- أضِف
- Muxers:
- إضافة
MediaMuxerCompat، وهو بديل جاهز للاستخدام للإطارMediaMuxer. - أضِف
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()للسماح بإنشاء صور "صور حية". - أضِف
WebmMuxerللسماح بدمج وسائطOPUSوVORBISوVP8وVP9في تنسيق ملفwebm.
- إضافة
- إضافة "إعلانات الوسائط التفاعلية":
- إزالة قواعد ProGuard المخصّصة، حتى تتمكّن التطبيقات من استخدام تلك التي تم إصدارها في أرشيف IMA لنظام التشغيل Android بدلاً من ذلك
- أضِف
ImaServerSideAdInsertionUriBuilder.setNetworkCode، وهي واجهة برمجة تطبيقات جديدة لضبط معرِّف شبكة "إدارة إعلانات Google" لكي تتعامل حزمة IMA SDK مع معرّفات الإعلانات على النحو المحدّد في إعدادات "إدارة إعلانات Google". رموز الشبكة اختيارية، ولكن يُنصح باستخدامها في طلبات بث الخدمة الكاملة. للعثور على معرِّف الشبكة، يمكنك الاطّلاع على هذه المقالة. - تمت زيادة إصدار IMA إلى 3.37.0، ما يتطلّب تفعيل ميزة إزالة التشويش في المكتبة الأساسية. يجب أن يتم تفعيلها أيضًا من خلال التطبيقات التابعة. اطّلِع على ملاحظات الإعداد في IMA. * توفير خيارات واجهة مستخدم مخصّصة لميزة "إدراج الإعلان الديناميكي" في "مجموعة أدوات IMA" في أداة إنشاء عناوين URI الخاصة بخدمة "إدراج الإعلان من جهة الخادم" تشمل خيارات واجهة المستخدم المخصّصة لإدراج الإعلانات من جهة الخادم إمكانية عرض الإعلانات "القابلة للتخطّي" و"تفاصيل عن الإعلان". تتوفّر هذه الميزة حاليًا لناشرين محدّدين فقط من خلال قائمة مسموح بها. تؤدي هذه التغييرات أيضًا إلى ترقية إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 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). - تم إصلاح الخطأ الذي كان يتسبّب في عدم بدء المشغّل عند وصول حدث مفتاح الوسائط
IntentإلىonStartCommand()عند الضغط علىKEYCODE_HEADSETHOOK. تم إصلاح هذه المشكلة من خلال معالجة KEYCODE_HEADSETHOOK تمامًا مثلKEYCODE_MEDIA_PLAY_PAUSE(#2816). - تم إصلاح الخطأ الذي لم يتم فيه إرسال حجم Surface بين الجلسة ووحدة التحكّم، ما أدّى إلى تعذُّر تطبيق تأثيرات الفيديو في الجلسة التجريبية. إذا كنت تستخدم وحدة تحكّم، قد يكون هذا تغييرًا غير متوافق إذا كان المشغّل لا يمكنه التعامل مع طلب
setVideoSurfaceHolder. - إصلاح عملية نشر قيم البيانات الوصفية غير
StringCharSequence، مثل السلاسل ذات النمط span (#2853). - أضِف
CommandButton.executeActionحتى تتمكّن أدوات التحكّم من تنفيذ الإجراء المطلوب بسهولة أكبر. يجب أيضًا السماح بتحديد مَعلمات لبعض أوامر المشغّل والجلسة لتحديد الإجراء الذي سيتم تنفيذه. - أضِف توافقًا مع الإصدارات القديمة لحالات
CommandButtonباستخدامPlayer.CommandأوSessionCommandغير المخصّص لتحديد الإجراء. ويتم الآن تمثيلها بشكل صحيح في جلسات الوسائط على المنصة، على سبيل المثال، في واجهة مستخدم النظام أو Android Auto. - تم إصلاح مشكلة يتم فيها ضغط
Bitmapنفسه عدة مرات عند ربطMediaControllerبجلسة وسائط على المنصة.
- إضافة مَعلمة جديدة إلى
- UI:
- أضِف الفئة
ProgressStateWithTickIntervalوrememberProgressStateWithTickIntervalComposable المقابل إلى الوحدةmedia3-ui-compose. يتم استخدام عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض الموضع الحالي والمدة في شكل نص. - أضِف
MuteButtonStateإلىui-composeالذي يتعامل مع كتم مستوى صوتPlayer. يُستخدَم عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض زر تبديل كتم الصوت/إلغاء كتم الصوت. - أضِف فئات
ProgressStateWithTickCountوrememberProgressStateWithTickCountComposable المقابل إلى وحدةmedia3-ui-compose. يتم استخدام عنصر الاحتفاظ بالحالة هذا فيdemo-composeلعرض مستوى التقدّم كشريط تقدّم أفقي للقراءة فقط. - أضِف
ContentFrameComposable إلىmedia3-ui-composeالذي يجمع بين إدارةPlayerSurfaceوتغيير حجم نسبة العرض إلى الارتفاع وتغطية المحتوى باستخدام غالق. - حلّ مشكلة معروفة في النظام الأساسي لواجهة برمجة التطبيقات 34 تؤدي إلى عرض فيديوهات ممدودة أو مقصوصة
عند استخدام
SurfaceViewداخلAndroidViewفي Compose، وبالتالي تؤثر في عناصرContentFrameوPlayerSurfaceالقابلة للإنشاء معSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - أنشئ وحدة
media3-ui-compose-material3جديدة وأضِف إليها عناصر Composables متوافقة مع 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:
- تم إصلاح المشكلة التي كانت تحدث عند تشغيل بثوط DASH باستخدام بيان معرّف موارد منتظم (URI)
data:غير هرميUnsupportedOperationException(#2688). - أعِد ضبط
LiveConfigurationعلى القيمة التي يوفّرهاMediaItemفيDashMediaSourceعند الإصدار وعندما يعدّل المستخدم عنصر الوسائط (#2606). - تجنُّب الأعطال الناتجة عن تحديثات غير صالحة لملف البيان لم يتم الإبلاغ عنها كأخطاء في المشغّل (#2805)
- تم إصلاح المشكلة التي كانت تحدث عند تشغيل بثوط DASH باستخدام بيان معرّف موارد منتظم (URI)
- إضافة RTSP:
- التعامل مع خطأ عدم توفّر حِزم RTP عند معالجة وحدات NAL المجزّأة لبرنامجي الترميز H264 وH265 (#2613)
- إضافات برنامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- إضافة AV1: يستخدم برنامج فك ترميز AV1 الآن مكتبة
dav1dعالية الأداء، ما يحل محل عملية التنفيذ السابقةlibgav1لتحسين سرعة فك الترميز. - إضافة FFmpeg: تم إصلاح مشكلة كانت تمنع تشغيل بعض ملفات FLAC من خلال التأكّد من تحليل حزمة
STREAMINFOبشكل صحيح وتمريرها إلى برنامج الترميز (#2887).
- إضافة AV1: يستخدم برنامج فك ترميز AV1 الآن مكتبة
- إضافة البث:
- أضِف
CastPlayer.Builder، ما يتيح لتطبيقCastPlayerتشغيل المحتوى محليًا وعبر البث. للحفاظ على السلوك القديمCastPlayerالذي يتيح تشغيل المحتوى باستخدام Cast فقط، يمكنك استخدامRemoteCastPlayer. تحتفظ دوال الإنشاء الحالية فيCastPlayerبسلوكها القديم، ولكن تم إيقافها نهائيًا لصالح استخدام أدوات الإنشاءCastPlayerأوRemoteCastPlayerبدلاً من ذلك. - توقّف عن فرض نوع MIME غير فارغ في
DefaultMediaItemConverter. - استخدِم
MediaItem.mediaMetadata.mediaTypeللاستدلال على MEDIA_TYPE في Cast لاستخدامه فيDefaultCastOptionsProvider#toMediaQueueItem، عندما يكون متاحًا. - فعِّل عمليات النقل من الجهاز البعيد إلى الجهاز المحلي في
DefaultCastOptionsProvider. - إتاحة استخدام ميزة Cast في العرض التوضيحي للجلسة
- إضافة إمكانية عرض زر مسار الوسائط على واجهة مستخدم قابلة للإنشاء
- إضافة إمكانية عرض زر مسار الوسائط في قائمة شريط الإجراءات
- إضافة إمكانية عرض زر مسار الوسائط كواجهة مستخدم للعرض
- أضِف
- أدوات الاختبار:
- أضِف الحد الأقصى لفرق الوقت لسلوك التقدّم التلقائي في
FakeClock. يتم ضبطها تلقائيًا على ثانية واحدة، ولكن يمكن ضبطها من خلالFakeClock.Builder. - أضِف الحدّ الأقصى للفرق الزمني بين الرسائل في
RobolectricUtil.runMainLooperUntil(وrunLooperUntil). القيمة التلقائية هي ثانية واحدة، ولكن يمكن ضبطها من خلال عمليات التحميل الزائد الجديدة لهذه الطرق. - نقل
CapturingRenderersFactoryمنtest-utilsإلىtest-utils-robolectric
- أضِف الحد الأقصى لفرق الوقت لسلوك التقدّم التلقائي في
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة الدالة الإنشائية
DefaultPreloadManagerالمتوقّفة نهائيًا استخدِمDefaultPreloadManager.Builderبدلاً من ذلك. - تمت إزالة دوال إنشاء
EditedMediaItemSequenceالمتوقّفة نهائيًا. استخدِمEditedMediaItemSequence.Builderبدلاً من ذلك. - إزالة
BitmapFactoryImageDecoder.BitmapDecoderاستخدِمExternallyLoadedImageDecoderبدلاً من ذلك. - إزالة
ShadowMediaCodecConfig.forAllSupportedMimeTypes()المتوقّف نهائيًا يمكنك استخدامShadowMediaCodecConfig.withAllDefaultSupportedCodecs()كبديل. - إزالة
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()المتوقّف نهائيًا استخدِمShadowMediaCodecConfig.withNoDefaultSupportedCodecs()بدلاً من ذلك.
- إزالة الدالة الإنشائية
1.9.0-rc01
1 ديسمبر 2025
استخدِم الإصدار الثابت 1.9.0.
1.9.0-beta01
20 نوفمبر 2025
استخدِم الإصدار الثابت 1.9.0.
1.9.0-alpha01
22 أكتوبر 2025
استخدِم الإصدار الثابت 1.9.0.
الإصدار 1.8.0
1.8.1
21 مايو 2026
يتضمّن الإصدار 1.8.1 التعديلات التالية.
- التأثير:
- اضبط
GL_DRAW_BUFFERوGL_READ_BUFFERبشكل صريح عند الانتقال من سياق بدون واجهة.
- اضبط
الإصدار 1.8.0
30 يوليو 2025
يتضمّن الإصدار 1.8.0 هذه التعديلات.
- المكتبة المشتركة:
- إضافة إمكانية استبدال مشغّل الفيديو في
ForwardingSimpleBasePlayer
- إضافة إمكانية استبدال مشغّل الفيديو في
- ExoPlayer:
- إضافة دالة getter لوضع الترتيب العشوائي إلى واجهة
ExoPlayer(#2522) - طرح استثناء بشكل أكثر وضوحًا في حال الوصول إلى
DefaultAudioSinkمن سلاسل تعليمات متعددة إذا حدث ذلك بسبب طلب إلىRendererCapabilities.getFormatSupportخارج المشغّل، تأكَّد من طلب هذه الطريقة في سلسلة التعليمات نفسها التي تستخدمها سلسلة تعليمات التشغيل في ExoPlayer أو استخدِم مثيلاً مختلفًا عن المثيل المستخدَم في التشغيل (#1191). - إصلاح الخطأ الذي قد يؤدي إلى تصنيف
DefaultTrackSelectorلتنسيقات الصوت غير المجسم على أجهزة التلفزيون على أنّها غير متوافقة - تأكَّد من عرض آخر إطار بشكل صحيح عند استخدام العلامة
DECODE_ONLYفي MediaCodec (وهي مفعَّلة تلقائيًا في وضع التقديم السريع). - إضافة إمكانية استخدام معرّف الجهاز الافتراضي من
Contextالذي تم تمريره إلىExoPlayer.Builder - تفعيل الجدولة الديناميكية تلقائيًا في وضع "التنظيف"
- تجنَّب إعادة تحميل المصدر بلا داعٍ عند الانتقال إلى نهاية العنصر.
- استخدام
MediaCodec.BUFFER_FLAG_DECODE_ONLYتلقائيًا في وضع التقديم السريع والترجيع - يتم طرح
IllegalStateExceptionعند تشغيلPreloadMediaSourceبواسطةExoPlayerباستخدام سلسلة تشغيل تختلف عن سلسلة التحميل المسبق (#2495). - إضافة
cloneAndMoveإلىShuffleModeمع تنفيذ تلقائي (#2226) - تغيير السلوك التلقائي للدالة
Renderer.getMinDurationToProgressUsلعرض قيمة أكبر إذا لم يكن من الضروري استدعاء الدالةrender - إصلاح الخطأ الذي يؤدي إلى تأخير عرض الإطار الأخير عند الانتقال إلى نهاية الفيديو أثناء الإيقاف المؤقت. في الوقت الحالي، لن يتم تطبيق إصلاح الخطأ إلا في حال تفعيل
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled. - أضِف طريقة الدفع
ExoPlayer.setScrubbingModeEnabled(boolean). يؤدي ذلك إلى تحسين أداء المشغّل في حالات البحث المتكرّر (على سبيل المثال، عندما يسحب المستخدم شريط التمرير). يمكن تخصيص سلوك وضع التقديم السريع باستخدامsetScrubbingModeParameters(..)علىExoPlayerوExoPlayer.Builder. - السماح بتخصيص مدى التفاوت في البحث الجزئي في وضع البحث السريع
- زيادة معدّل تشغيل الترميز في وضع التقديم السريع أو الترجيع
- تم إصلاح الخطأ الذي قد لا يتم فيه الإبلاغ عن أخطاء الإعداد في محتوى
AdsMediaSource(#2337). - إصلاح مشكلة تسرّب الذاكرة في
MergingMediaSource، على سبيل المثال، عند تحميل الترجمة والشرح بشكل جانبي (#2338) - السماح
CmcdConfiguration.Factoryبإرجاعnullلإيقاف تسجيل بيانات CMCD لعناصر وسائط محدّدة (#2386) - زيادة حجم ذاكرة التخزين المؤقت التلقائي للصور من 128 كيلوبايت (خطأ في النسخ واللصق من مسارات النص) إلى 26 ميغابايت، وهو حجم كبير بما يكفي لصور دقة HDR فائقة بدقة 50 ميغابكسل (#2417).
- أضِف
PreCacheHelperالذي يتيح للتطبيقات التخزين المؤقت المسبق لملف وسائط واحد مع تحديد موضع البدء والمدة. - إضافة إمكانية التحميل المُسبَق من موضع محدّد في
DefaultPreloadManager
- إضافة دالة getter لوضع الترتيب العشوائي إلى واجهة
- المحوّل:
- أضِف
CodecDbLiteالتي تتيح تحسينات خاصة بمجموعة الشرائح لإعدادات ترميز الفيديو. - أضِف العلامة
setEnableCodecDbLiteإلىDefaultEncoderFactoryلتفعيل تحسين إعدادات CodecDB Lite. ويتم ضبط هذه العلامة تلقائيًا على "خطأ". - عند ملء فجوة أولية (تمت إضافتها من خلال
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)
- تم إصلاح مشكلة تحليل وحدات SEI بتنسيق H.265 لتخطّي أنواع SEI غير المعروفة بالكامل (#2456).
- عدِّل
WavExtractorلاستخدام بيانات SubFormat الخاصة بإضافة العنوان لتحديد تنسيق الصوت عند تحليل ملف من النوعWAVE_FORMAT_EXTENSIBLE. - MP4: إضافة دعم للمربّعين
ipcmوfpcmاللذين يحدّدان مسارات صوت PCM الأوّلية (لا يتوفّر دعم لـ PCM بنقطة عائمة 64 بت). - MP4: التعامل مع جزء التدوير في مصفوفات التحويل
tkhdالتي تدور وتعكس الفيديو يضمن ذلك أن تعرض الكاميرا الأمامية في iPhone الفيديوهات المنعكسة بشكل صحيح، ولكنها تنعكس بشكل غير صحيح على المحور y (#2012). - MP3: استخدِم المدة وحجم البيانات من البيانات الوصفية غير القابلة للبحث في Xing وVBRI وما شابهها من معدّل نقل البيانات المتغيّر عند الرجوع إلى البحث بمعدّل نقل البيانات الثابت بسبب
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- الصوت:
- تم إصلاح الخطأ الذي لا يتم فيه استدعاء
AnalyticsListener.onAudioPositionAdvancingعند بدء تشغيل الصوت بالقرب من نهاية الوسائط. - إضافة دعم لجميع تنسيقات عيّنات PCM الخطية في
ChannelMappingAudioProcessorوTrimmingAudioProcessor - إضافة إمكانية معالجة الفجوات الصوتية في
CompositionPlayer - إزالة المكالمة الواردة غير المرغوب فيها إلى
BaseAudioProcessor#flush()منBaseAudioProcessor#reset() - السماح بالتحويل المستمر منخفض الدقة إلى عالي الدقة أو العكس في DefaultAudioMixer
- إتاحة
ChannelMappingAudioProcessorوTrimmingAudioProcessorوToFloatPcmAudioProcessorللجميع (#2339) - استخدِم
AudioTrack#getUnderrunCount()فيAudioTrackPositionTrackerلرصد حالات نقص البيانات فيDefaultAudioSinkبدلاً من التقدير بأفضل جهد. - تحسين عملية تنعيم الطابع الزمني للصوت عند حدوث انحراف غير متوقّع في الموضع من مصدر إخراج الصوت
- تم إصلاح الخطأ الذي يتسبب في عدم مزامنة الصوت والفيديو خلال أول 10 ثوانٍ بعد استئناف التشغيل من وضع الإيقاف المؤقت عند الاتصال بأجهزة بلوتوث.
- تم إصلاح الخطأ الذي كان يتسبّب في عدم تسجيل
AnalyticsListener.onAudioPositionAdvancingللوقت الذي بدأ فيه الصوت بالتقدّم، بل كان يسجّل وقت القياس الأول. - تم إصلاح مشكلة عدم إمكانية استعادة الصوت المتعدد القنوات بعد الرجوع إلى الصوت المجسم على بعض الأجهزة (#2258).
- تم إصلاح الخطأ الذي لا يتم فيه استدعاء
- الفيديو:
- توسيع نطاق الحلّ البديل لمشكلة فصل الشاشة ليشمل أجهزة "lenovo" و "motorola" (#2059)
- تحسين عرض إطارات الفيديو بسلاسة عند بدء التشغيل عندما لا تبدأ عيّنات الصوت في الموضع المطلوب بالضبط
- توسيع نطاق الحلّ البديل لسطح العرض المنفصل ليشمل أجهزة "realme" (#2059)
- أضِف واجهة برمجة التطبيقات التجريبية
ExoPlayerلتضمين العلامةMediaCodec.BUFFER_FLAG_DECODE_ONLYعند وضع مخازن مؤقتة للإدخال مخصّصة لفك الترميز فقط في قائمة الانتظار. سيشير هذا العلم إلى برنامج الترميز ليتخطّى المخازن المؤقتة التي يتم فك ترميزها فقط، ما يؤدي إلى تسريع عملية البحث. فعِّلها باستخدامDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * تحسين عمليات التحقّق من أداء برامج ترميز الفيديو. وقد يؤدي ذلك إلى تصنيف بعض المقاطع الصوتية الإضافية على أنّهاEXCEEDS_CAPABILITIES. - إصلاح أخطاء تشغيل VP9 Widevine على بعض الأجهزة (#2408)
- النص:
- إتاحة مسارات VobSub في ملفات MP4 (#2510)
- إصلاح مشكلة توقّف التشغيل مؤقتًا عندما يتعذّر تحميل جزء من الترجمة والشرح في البداية ثم يتم تحميله بنجاح، يليه عدّة أجزاء فارغة من الترجمة والشرح (#2517)
- إصلاح SSA وSubRip لعرض إشارة قيد التقدّم عند تفعيل الترجمة (#2309)
- تم إصلاح مشكلة توقّف التشغيل عند التبديل من بث يتضمّن خطأ في الترجمة والشرح إلى بث مباشر يتضمّن مسار ترجمة وشرح فارغًا (#2328).
- إصلاح مشكلة ظهور ترجمة CEA-608 مشوّهة عند تشغيل بث H.262 يتضمّن إطارات B (#2372)
- إضافة دعم لترجمة SSA مع
CodecId = S_TEXT/SSAفي ملفات Matroska في السابق، كانMatroskaExtractorيتيح استخدامCodecId = S_TEXT/ASSفقط، وهو مصمّم لتمثيل الإصدار "المتقدّم" (الإصدار 4 والإصدارات الأحدث) من ترجمات SubStation Alpha (إلا أنّ منطق تحليل ExoPlayer هو نفسه لكلا الإصدارَين) (#2384). - إضافة إمكانية استخدام السمة
layerفي ملفات الترجمة والشرح بتنسيق SubStation Alpha (SSA) لتحديد ترتيب العرض على المحور Z للإشارات عندما يتم عرض أكثر من إشارة واحدة على الشاشة في الوقت نفسه (#2124)
- البيانات الوصفية:
- تمت إضافة إمكانية استرداد مدة الوسائط و
TimelineإلىMetadataRetrieverونقلها إلى واجهة برمجة تطبيقاتAutoCloseableمستندة إلى مثيل. استخدِمBuilderالجديد لإنشاء مثيل لـMediaItem، ثم استدعِretrieveTrackGroups()وretrieveTimeline()وretrieveDurationUs()للحصول علىListenableFutureللبيانات الوصفية. تم الآن إيقاف استخدام الطرق الثابتة السابقة نهائيًا (#2462).
- تمت إضافة إمكانية استرداد مدة الوسائط و
- الصورة:
- احرص على أن تكون الصور النقطية التي تم فك ترميزها بحجم الشاشة في
BitmapFactoryImageDecoder، وذلك لتجنُّب تعطُّل التطبيق بسببCanvas: trying to draw too large bitmap.منPlayerViewعند محاولة عرض صور كبيرة جدًا (مثل 50 ميغابكسل). - غيِّر توقيع
DefaultRenderersFactory.getImageDecoderFactory()ليأخذ مَعلمةContext. - يجب أن يتطابق الحد الأقصى لحجم إخراج الصورة النقطية المستخدَم في
CompositionPlayerمع الحد الأقصى المستخدَم فيTransformer(ما يعني أنّCompositionPlayerلا يأخذ في الاعتبار حجم الشاشة عند فك ترميز الصور النقطية، على عكسExoPlayer).
- احرص على أن تكون الصور النقطية التي تم فك ترميزها بحجم الشاشة في
- DRM:
- إضافة حمولة زائدة جديدة من
OfflineLicenseHelper.newWidevineInstanceتقبلMediaItem.DrmConfigurationحتى يمكن تطبيق عناوين طلب HTTP بشكل صحيح (#2169).
- إضافة حمولة زائدة جديدة من
- التأثير:
- أضِف
Presentation.createForShortSide(int)لإنشاءPresentationيضمن تطابق أقصر ضلع دائمًا مع القيمة المحدّدة، بغض النظر عن اتجاه الإدخال.
- أضِف
- Muxers:
- إصلاح الخلل الذي كان يؤدي إلى عدم ضبط علامات العيّنات الصحيحة لعيّنات الصوت في ملفات MP4 المجزّأة.
- تستخدم واجهة برمجة التطبيقات
writeSampleData()الآن الفئةBufferInfoالخاصة ببرنامج الترميز بدلاً منMediaCodec.BufferInfo. - أضِف
Muxer.Factory#supportsWritingNegativeTimestampsInEditListالذي تكون قيمته التلقائية هي false.
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح خطأ كان يؤدي إلى إبطال مجموعة إعلانية أخرى عن طريق الخطأ عند حدوث خطأ في تحميل إعلان واحد.
- تم إصلاح الخطأ الذي كان يؤدي إلى توقّف التشغيل مؤقتًا للمجموعات الإعلانية بعد انتهاء فترة عرض الفيديو عند الطلب.
لن يتم بعد الآن وضع المجموعات الإعلانية التي يتجاوز وقت بدئها الفترة الزمنية المحدّدة في قائمة الانتظار ضمن
MediaPeriodQueue(#2215).
- الجلسة:
- إصلاح الخطأ الذي يتم فيه تجاهل عمليات الربط من وحدات تحكّم Media3 غير المميزة التابعة لجهات خارجية
- إزالة عملية التحقّق من الأوامر المتاحة عند إرسال أوامر مخصّصة إلى
MediaBrowserServiceCompatقديم يتوافق ذلك مع سلوك وحدات التحكّم/المتصفّحات القديمة عند توصيلها بتطبيق قديم. - تم إصلاح الخطأ الذي يتسبب في التعامل بشكل غير صحيح مع أول خطأ في التشغيل يواجهه أحد المشغّلين على أنّه استثناء مخصّص ثابت. يمنع ذلك التطبيق من استعادة البيانات.
- تم إصلاح الخطأ الذي قد يؤدي فيه إجراء بعض التغييرات على وحدة التحكّم التي لا تتعامل معها الجلسة إلى حدوث
IllegalStateExceptions. - تم إصلاح الخطأ الذي يؤدي إلى ترك ذراع التحكّم في حالة غير صالحة عند تنفيذ إجراءات لا تتم معالجتها من خلال الجلسة.
- إصلاح التحذير بشأن مخالفة الإطلاق غير الآمن في StrictMode (#2330)
- تم إصلاح الخطأ الذي كان يتسبّب في ظهور
IllegalStateException(#2265) عند استدعاءsetSessionExtrasمن سلسلة المحادثات الرئيسية عند تشغيل المشغّل من سلسلة محادثات تطبيق مختلفة عن سلسلة المحادثات الرئيسية. - عدم عرض إشعار تلقائيًا إذا تم إعداد مشغّل باستخدام عناصر وسائط بدون إعدادها أو تشغيلها
(#2423https://github.com/androidx/media/issues/2423). يمكن ضبط هذا السلوك من خلال
MediaSessionService.setShowNotificationForIdlePlayer. - إضافة
PlaybackExceptionمخصّص لجميع وحدات التحكّم أو وحدات التحكّم المحدّدة - إصلاح الخطأ الذي يؤدي إلى ظهور
IllegalArgumentExceptionعند محاولة التقديم أو الترجيع في بث مباشر علىMediaController - بالنسبة إلى أحداث البث المباشر، أوقِف نشر موضع التشغيل وإمكانية البحث في العنصر الحالي لوحدات التحكّم في الوسائط على المنصة، وذلك لتجنُّب حدوث مشاكل في الموضع في واجهة مستخدم Android Auto (وغيرها من وحدات التحكّم التي تستخدم هذه المعلومات من جلسة الوسائط على المنصة) (#1758).
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
NullPointerExceptionعند تمرير قيمة فارغة إلىgetLibraryRootفيMediaBrowserمرتبط بـMediaBrowserServiceCompatقديم. - تم إصلاح الخطأ الذي كان يؤدي إلى تعطُّل تطبيق الجلسة القديم عند إرسال إجراءات مخصّصة أو نتيجة بحث أو طلب getItem
مع ظهور
ClassNotFoundException. - تم إصلاح الخطأ الذي كان يؤدي إلى مشاركة
MediaItem.LocalConfiguration.uriمعMediaMetadataفي جلسات المنصة. لمشاركة معرّف موارد منتظم (URI) عن قصد للسماح لأدوات التحكّم بإعادة طلب الوسائط، اضبطMediaItem.RequestMetadata.mediaUriبدلاً من ذلك.
- UI:
- تم إصلاح الخطأ الذي كان يتسبّب في عدم عمل
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لاستخدام معرّف الموارد المنتظم الخاص بالموقع الجغرافي كما هو محدّد عند معالجة الردّ HTTP 302 (#2398). - تمت إضافة إمكانية تحليل SessionDescriptions التي تحتوي على أسطر تتضمّن أحرف مسافة بيضاء لاحقة (#2357).
- إضافات برنامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- تم إصلاح الخطأ الذي لا يؤدي فيه
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeأي وظيفة في ما يخص إضافات برنامج ترميز الصوت (#2258).
- تم إصلاح الخطأ الذي لا يؤدي فيه
- إضافة البث:
- أدوات الاختبار:
- أضِف
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. - إزالة الدالة الإنشائية المتوقّفة نهائيًا
MediaCodecVideoRendererMediaCodecVideoRenderer(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 يوليو 2022
استخدِم الإصدار الثابت 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).
- تم إصلاح مشكلة تؤدي إلى ظهور الخطأ
ProgressiveMediaPeriodIllegalStateExceptionعند محاولةPreloadMediaSourceاستدعاءgetBufferedDurationUs()قبل أن يكون جاهزًا (#2315). - إصلاح مشكلة عدم إرسال
CmcdDataفي طلبات البيان الخاصة ببروتوكولات DASH وHLS وSmoothStreaming (#2253) - التأكّد من إمكانية استخدام
AdPlaybackState.withAdDurationsUs(long[][])بعد إزالة المجموعات الإعلانية سيظل على المستخدم إدخال مصفوفة من المدد الزمنية للمجموعات الإعلانية التي تمت إزالتها، ويمكن أن تكون هذه المصفوفة فارغة أو بقيمة فارغة (#2267).
- أدوات الاستخراج:
- MP4: حلِّل
alternate_groupمن المربّعtkhdواعرضه كإدخالMp4AlternateGroupDataفيFormat.metadataلكل مقطع صوتي (#2242).
- MP4: حلِّل
- الصوت:
- تم إصلاح مشكلة إيقاف التحميل مؤقتًا حيث قد يتوقف الموضع عند تشغيل قائمة تشغيل تتضمّن محتوًى قصيرًا (#1920).
- الجلسة:
- تقليل مهلة التجميع لعمليات معاودة الاتصال في النظام الأساسي
MediaSessionمن 500 إلى 100 ملي ثانية وإضافة أداة تحديد قيمة تجريبية للسماح للتطبيقات بضبط هذه القيمة - تم إصلاح المشكلة التي تؤدي إلى إعادة ظهور الإشعارات بعد أن تجاهلها المستخدم (#2302).
- تم إصلاح خطأ كان يؤدي إلى عرض الجلسة لمخطط زمني يتضمّن عنصرًا واحدًا عندما يكون المشغّل المضمّن فارغًا في الواقع. يحدث ذلك عندما لا يتوفّر
COMMAND_GET_TIMELINEفي مشغّل الفيديو المضمّن، بينما يتوفّرCOMMAND_GET_CURRENT_MEDIA_ITEM، ويكون مشغّل الفيديو المضمّن فارغًا (#2320). - تم إصلاح خطأ يؤدي إلى تجاهل طلب الاتصال بـ
MediaSessionService.setMediaNotificationProviderبدون إشعار بعد التفاعل مع الخدمة بطرق أخرى، مثلsetForegroundServiceTimeoutMs(#2305).
- تقليل مهلة التجميع لعمليات معاودة الاتصال في النظام الأساسي
- UI:
- فعِّل
PlayerSurfaceللعمل معExoPlayer.setVideoEffectsوCompositionPlayer. - إصلاح الخطأ الذي كان يؤدي إلى عدم إمكانية إعادة إنشاء
PlayerSurfaceباستخدامPlayerجديد
- فعِّل
- إضافة HLS:
- تم إصلاح المشكلة المتمثّلة في عدم ضبط مدة الأجزاء في
CmcdDataلوسائط HLS، ما يؤدي إلى حدوث خطأ في التأكيد عند معالجة مقاطع الوسائط المشفّرة (#2312).
- تم إصلاح المشكلة المتمثّلة في عدم ضبط مدة الأجزاء في
- إضافة RTSP:
- إضافة إمكانية استخدام معرّف الموارد المنتظم (URI) مع نظام RTSPT كطريقة لإعداد جلسة RTSP لاستخدام TCP (#1484)
- إضافة البث:
- إضافة دعم للبيانات الوصفية لقوائم التشغيل (#2235)
1.6.0
26 مارس 2025
تم طرح androidx.media3:media3-*:1.6.0. يتضمّن الإصدار 1.6.0 هذه التعديلات.
- المكتبة المشتركة:
- أضِف
AudioManagerCompatوAudioFocusRequestCompatلاستبدال الفئات المكافئة فيandroidx.media. - ترقية Kotlin من الإصدار 1.9.20 إلى الإصدار 2.0.20 واستخدام المكوّن الإضافي Compose Compiler Gradle تمت ترقية مكتبة KotlinX Coroutines من الإصدار 1.8.1 إلى الإصدار 1.9.0.
- أزِل طريقة
Format.toBundle(boolean excludeMetadata)واستخدِمFormat.toBundle()بدلاً منها. - تم إصلاح الخطأ في
SimpleBasePlayerحيث لا تؤدي إضافةcurrentMediaItemIndexجديد فيStateبعدsetPlaylistباستخدام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)
- أضِف
- المحوّل:
- إتاحة إمكانية تحويل الترميز إلى تنسيقات بديلة متوافقة مع الأنظمة القديمة
- إضافة دعم لترميز وتعديل تنسيق 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نهائيًا. - إضافة دعم لـ float PCM إلى
ChannelMappingAudioProcessorوTrimmingAudioProcessor
- تم تعديل
- الفيديو:
- تغيير
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceإلى protected حتى تتمكّن التطبيقات من تجاهل ذلك وحظر استخدام مساحات العناصر النائبة (#1905). - إضافة تحليل تجريبي لتبعيات عيّنات
ExoPlayerAV1 من أجل تسريع عملية البحث فعِّلها باستخدام واجهة برمجة التطبيقات الجديدةDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - إضافة واجهة برمجة التطبيقات التجريبية
ExoPlayerلإسقاط مخازن مؤقتة متأخرةMediaCodecVideoRendererلمدخلات أداة فك الترميز التي لا تعتمد عليها. فعِّلها باستخدامDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * تم إصلاح المشكلة التي يكون فيها المشغّل بدون سطح جاهزًا على الفور ويفك تشفير أي إطارات معلّقة ببطء شديد (#1973). - استبعاد أجهزة Xiaomi وOPPO من وضع "السطح المنفصل" لتجنُّب وميض الشاشة (#2059)
- تغيير
- النص:
- إتاحة ترجمة VobSub (#8260)
- إيقاف التحميل المسبق لجميع ملفات الترجمة والشرح التي تم ضبطها باستخدام
MediaItem.Builder.setSubtitleConfigurations، والتحميل المسبق لملف واحد فقط في حال اختياره من خلال أداة اختيار المقاطع (#1721) - TTML: إضافة إمكانية الإشارة إلى
tts:originوtts:extentباستخدامstyle(#2953) - يجب أن يقتصر عدد المنازل العشرية في الطوابع الزمنية بتنسيق WebVTT وSubRip على 3 منازل عشرية فقط. في السابق، كنا نحلّل بشكل غير صحيح أي عدد من المنازل العشرية، ولكننا كنا نفترض دائمًا أنّ القيمة بالملي ثانية، ما يؤدي إلى طوابع زمنية غير صحيحة (#1997).
- إصلاح مشكلة تعليق التشغيل عندما تحتوي قائمة تشغيل على مقاطع تتضمّن ترجمة وشرحًا بتنسيق CEA-608 أو CEA-708
- تم إصلاح الخطأ
IllegalStateExceptionالذي يحدث عندما يحتوي ملف SSA على إشارة مدتها صفر (وقت البدء ووقت الانتهاء متساويان) (#2052). - إخفاء (وتسجيل) أخطاء تحليل الترجمة والشرح عند دمجها في الحاوية نفسها التي تضم الصوت والفيديو (#2052)
- تم إصلاح مشكلة معالجة أحرف UTF-8 المتعددة البايتات في ملفات WebVTT باستخدام نهايات الأسطر CR (#2167).
- DRM:
- تم إصلاح الخطأ
MediaCodec$CryptoException: Operation not supported in this configurationالذي يحدث عند تشغيل محتوى ClearKey على الأجهزة التي تعمل بإصدار أقل من 27 من واجهة برمجة التطبيقات (#1732).
- تم إصلاح الخطأ
- التأثير:
- تم نقل وظيفة
OverlaySettingsإلىStaticOverlaySettings. يمكن إنشاء فئة فرعية منOverlaySettingsللسماح بإعدادات تراكب ديناميكية.
- تم نقل وظيفة
- Muxers:
- تم نقل
MuxerExceptionخارج واجهةMuxerلتجنُّب اسم مؤهَّل بالكامل طويل جدًا. - تمت إعادة تسمية طريقة
setSampleCopyEnabled()إلىsetSampleCopyingEnabled()في كل منMp4Muxer.BuilderوFragmentedMp4Muxer.Builder. - تعرض الآن
Mp4Muxer.addTrack()وFragmentedMp4Muxer.addTrack()رقم تعريفintبدلاً منTrackToken. - لم يعُد
Mp4MuxerوFragmentedMp4Muxerينفّذان واجهةMuxer. - إيقاف
Mp4Muxerتجميع العيّنات ونسخها تلقائيًا - تم إصلاح خطأ في
FragmentedMp4Muxerيؤدي إلى إنشاء الكثير من الأجزاء عند كتابة المقطع الصوتي فقط.
- تم نقل
- الجلسة:
- الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو إيقافه أو تعذّره يتيح ذلك للمستخدمين استئناف التشغيل خلال هذه المهلة بدون المخاطرة بفرض قيود على عمليات التطبيقات الظاهرة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد بإمكانك استخدام
player.pause()فقط لإيقاف الخدمة التي تعمل في المقدّمة قبلstopSelf()عند إلغاءonTaskRemoved، بل عليك استخدامMediaSessionService.pauseAllPlayersAndStopSelf()بدلاً من ذلك. - إبقاء الإشعار مرئيًا عندما يحدث خطأ في التشغيل أو يتوقف. لا تتم إزالة الإشعار إلا إذا تم محو قائمة التشغيل أو تم إيقاف المشغّل.
- تحسين طريقة التعامل مع إجراءات MediaSession في نظام Android الأساسي ACTION_PLAY وACTION_PAUSE لضبط أحدهما فقط وفقًا للأوامر المتاحة، وقبول أحدهما فقط إذا تم ضبطه
- أضِف
Contextكمَعلمة إلىMediaButtonReceiver.shouldStartForegroundService(#1887). - تم إصلاح الخطأ الذي كان يؤدي إلى تجاهل التغييرات من عملية تعديل معلّقة عند استدعاء طريقة
PlayerفيMediaControllerمرتبطة بجلسة قديمة. - السماح بأن يقبل
MediaSession.setSessionActivity(PendingIntent)القيمة الخالية (#2109) - إصلاح الخطأ الذي كان يؤدي إلى بقاء إشعار قديم مرئيًا عند محو قائمة التشغيل (#2211)
- الاحتفاظ بحالة الخدمة التي تعمل في المقدّمة لمدة 10 دقائق إضافية عند إيقاف التشغيل مؤقتًا أو إيقافه أو تعذّره يتيح ذلك للمستخدمين استئناف التشغيل خلال هذه المهلة بدون المخاطرة بفرض قيود على عمليات التطبيقات الظاهرة على الأجهزة المختلفة. يُرجى العِلم أنّه لم يعُد بإمكانك استخدام
- UI:
- أضِف عناصر قابلة للإنشاء وحاويات للحالة إلى الوحدة
media3-ui-composeمن أجلPlayerSurfaceوPresentationStateوPlayPauseButtonStateوNextButtonStateوPreviousButtonStateوRepeatButtonStateوShuffleButtonStateوPlaybackSpeedState.
- أضِف عناصر قابلة للإنشاء وحاويات للحالة إلى الوحدة
- عمليات التنزيل:
- إصلاح الخطأ في
CacheWriterالذي يترك مصادر البيانات مفتوحة ومناطق التخزين المؤقت محظورة في حال عرض مصدر البياناتExceptionغيرIOException(#9760).
- إصلاح الخطأ في
- إضافة HLS:
- أضِف إصدارًا أوليًا من
HlsInterstitialsAdsLoader. يقرأ أداة تحميل الإعلانات الإعلانات البينية بتنسيق HLS من قائمة تشغيل وسائط بتنسيق HLS ويربطها بـAdPlaybackStateالذي يتم تمريره إلىAdsMediaSource. لا يتوافق هذا الإصدار الأوّلي إلا مع بثوق HLS VOD التي تتضمّن سماتX-ASSET-URI. - أضِف
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. ويمكن للتطبيقات استخدامها لإنشاء مثيلاتAdsMediaSourceتستخدمHlsInterstitialsAdsLoaderبطريقة مريحة وآمنة. - تحليل العلامة
SUPPLEMENTAL-CODECSمن قائمة تشغيل HLS لرصد تنسيقات Dolby Vision (#1785) - تخفيف شرط البحث عن مزامنة المواضع في بث مباشر وفق بروتوكول HTTP (HLS) (#2209)
- أضِف إصدارًا أوليًا من
- إضافة DASH:
- إضافة دعم تنسيق AC-4 المستوى 4 إلى DASH (#1898)
- تم حلّ مشكلة عند احتساب فاصل التعديل لإدراج الإعلانات في عمليات البث المباشر المتعددة الفترات (#1698).
- تحليل السمة
scte214:supplementalCodecsمن ملف بيان DASH لرصد تنسيقات Dolby Vision (#1785) - تحسين معالجة عمليات الانتقال بين الفترات في أحداث البث المباشر التي تحتوي الفترة فيها على عيّنات وسائط تتجاوز مدة الفترة المحددة (#1698)
- تم إصلاح المشكلة التي يتم فيها دمج مجموعات التكيّف التي تم وضع علامة
adaptation-set-switchingعليها ولكن بلغات مختلفة أو بعلامات أدوار مختلفة (#2222).
- إضافات برنامج الترميز (FFmpeg وVP9 وAV1 وما إلى ذلك):
- أضِف وحدة فك ترميز MPEG-H التي تستخدم برنامج فك ترميز MPEG-H المضمّن لفك ترميز الصوت بتنسيق MPEG-H (#1826).
- إضافة MIDI:
- ربط مثيلات
AudioSinkوAudioRendererEventListenerالمخصّصة بـMidiRenderer
- ربط مثيلات
- إضافة البث:
- ارفع مستوى إصدار التبعية
play-services-cast-frameworkإلى 21.5.0 لإصلاح عطلFLAG_MUTABLEفي التطبيقات التي تستهدف المستوى 34 من واجهة برمجة التطبيقات أو أعلى على الأجهزة التي تم تثبيت "خدمات Google Play" عليها ولكن تم إيقافها (#2178).
- ارفع مستوى إصدار التبعية
- التطبيق التجريبي:
- توسيع نطاق
demo-composeباستخدام أزرار إضافية وتحسين تكاملPlayerSurfaceمع إمكانية تغيير الحجم واستخدام الغالق
- توسيع نطاق
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة الطريقة المتوقّفة نهائيًا
AudioMixer.create()استخدِمDefaultAudioMixer.Factory().create()بدلاً من ذلك. - إزالة طرق
Transformer.Builderالمتوقّفة نهائيًا التالية:setTransformationRequest()، يُرجى استخدامsetAudioMimeType()وsetVideoMimeType()وsetHdrMode()بدلاً منها.setAudioProcessors()، اضبط معالج الصوت فيEditedMediaItem.Builder.setEffects()، ثم مرِّره إلىTransformer.start()بدلاً من ذلك.setVideoEffects()، اضبط تأثير الفيديو فيEditedMediaItem.Builder.setEffects()، ثم مرِّره إلىTransformer.start()بدلاً من ذلك.setRemoveAudio()، استخدِمEditedMediaItem.Builder.setRemoveAudio()لإزالة الصوت منEditedMediaItemالذي تم تمريره إلىTransformer.start()بدلاً من ذلك.setRemoveVideo()، استخدِمEditedMediaItem.Builder.setRemoveVideo()لإزالة الفيديو منEditedMediaItemالذي تم تمريره إلىTransformer.start()بدلاً من ذلك.setFlattenForSlowMotion()، استخدِمEditedMediaItem.Builder.setFlattenForSlowMotion()لتسويةEditedMediaItemالتي تم تمريرها إلىTransformer.start()بدلاً من ذلك.setListener()، يُرجى استخدامaddListener()أوremoveListener()أوremoveAllListeners()بدلاً منها.
- إزالة طرق
Transformer.Listenerالمتوقّفة نهائيًا التالية:onTransformationCompleted(MediaItem)، استخدِمonCompleted(Composition, ExportResult)بدلاً منها.onTransformationCompleted(MediaItem, TransformationResult)، استخدِمonCompleted(Composition, ExportResult)بدلاً منها.onTransformationError(MediaItem, Exception)، استخدِمonError(Composition, ExportResult, ExportException)بدلاً منها.onTransformationError(MediaItem, TransformationException)، استخدِمonError(Composition, ExportResult, ExportException)بدلاً منها.onTransformationError(MediaItem, TransformationResult, TransformationException)، يُرجى استخدامonError(Composition, ExportResult, ExportException)بدلاً منها.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)، يُرجى استخدامonFallbackApplied(Composition, TransformationRequest, TransformationRequest)بدلاً منها.
- إزالة الفئة
TransformationResultالمتوقّفة نهائيًا يمكنك استخدامExportResultكبديل. - إزالة الفئة
TransformationExceptionالمتوقّفة نهائيًا يمكنك استخدامExportExceptionكبديل. - إزالة
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONالمتوقّف نهائيًا استخدِمTransformer.PROGRESS_STATE_NOT_STARTEDبدلاً من ذلك. - إزالة
Transformer.setListener()المتوقّف نهائيًا يُرجى استخدامTransformer.addListener()أوTransformer.removeListener()أوTransformer.removeAllListeners()بدلاً من ذلك. - إزالة
Transformer.startTransformation()المتوقّف نهائيًا استخدِمTransformer.start(MediaItem, String)بدلاً من ذلك. - إزالة
SingleFrameGlShaderProgramالمتوقّف نهائيًا استخدِمBaseGlShaderProgramبدلاً من ذلك. - إزالة
Transformer.flattenForSlowMotionاستخدِمEditedMediaItem.flattenForSlowMotionبدلاً من ذلك. - تمت إزالة
ExoPlayer.VideoComponentوExoPlayer.AudioComponentوExoPlayer.TextComponentوExoPlayer.DeviceComponent. - تمت إزالة جهة الاتصال "
androidx.media3.exoplayer.audio.SonicAudioProcessor". - تمت إزالة طرق
DownloadHelperالمتوقّفة نهائيًا التالية:- استخدِم الدالة الإنشائية
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])بدلاً منDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). - يمكن تحقيق وظائف مكافئة لـ
getRendererCapabilities(RenderersFactory)من خلال إنشاءDefaultRendererCapabilitiesListمعRenderersFactoryواستدعاءDefaultRendererCapabilitiesList.getRendererCapabilities(). - تمت إزالة الطريقة
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). استخدِمPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)وقدِّم(MediaSession.Token) compatToken.getToken()بدلاً من ذلك.
- استخدِم الدالة الإنشائية
- إزالة الطريقة المتوقّفة نهائيًا
1.6.0-rc02
19 مارس 2025
استخدِم الإصدار الثابت 1.6.0.
1.6.0-rc01
12 مارس 2025
استخدِم الإصدار الثابت 1.6.0.
1.6.0-beta01
26 فبراير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha03
6 فبراير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha02
30 يناير 2025
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.6.0-alpha01
20 ديسمبر 2024
استخدِم الإصدار الثابت 1.6.0.
الإصدار 1.5
الإصدار 1.5.1
19 ديسمبر 2024
تم طرح androidx.media3:media3-*:1.5.1. يتضمّن الإصدار 1.5.1 هذه التعديلات.
- ExoPlayer:
- إيقاف استخدام فك التشفير غير المتزامن في MediaCodec لتجنُّب مشاكل انتهاء المهلة التي تم الإبلاغ عنها في برنامج الترميز مع واجهة برمجة التطبيقات هذه (#1641).
- أدوات الاستخراج:
- MP3: لا توقِف التشغيل مبكرًا عندما لا يغطّي جدول محتويات إطار
VBRIجميع بيانات MP3 في ملف (#1904).
- MP3: لا توقِف التشغيل مبكرًا عندما لا يغطّي جدول محتويات إطار
- الفيديو:
- تم التراجع عن استخدام قيم نسبة عرض البكسل إلى ارتفاعه
MediaCodecAdapterالمقدَّمة عند توفيرها أثناء معالجةonOutputFormatChanged(#1371).
- تم التراجع عن استخدام قيم نسبة عرض البكسل إلى ارتفاعه
- النص:
- إصلاح الخطأ في
ReplacingCuesResolver.discardCuesBeforeTimeUsالذي كان يؤدي إلى تجاهل الإشارة النشطة فيtimeUs(بدأت قبل ذلك ولكنها لم تنتهِ بعد) بشكل غير صحيح (#1939)
- إصلاح الخطأ في
- البيانات الوصفية:
- استخراج أرقام الأقراص/المقاطع الموسيقية والنوع من تعليقات Vorbis إلى
MediaMetadata(#1958)
- استخراج أرقام الأقراص/المقاطع الموسيقية والنوع من تعليقات Vorbis إلى
الإصدار 1.5.0
27 نوفمبر 2024
تم طرح androidx.media3:media3-*:1.5.0. يتضمّن الإصدار 1.5.0 هذه التعديلات.
- المكتبة المشتركة:
- أضِف
ForwardingSimpleBasePlayerالتي تتيح إعادة التوجيه إلى مشغّل آخر مع إجراء تعديلات بسيطة مع ضمان التوافق الكامل والتعامل مع المستمعين (#1183). - استبدِل طريقة الدفع
SimpleBasePlayer.State.playlistبطريقة الدفعgetPlaylist(). - أضِف عملية إلغاء لـ
SimpleBasePlayer.State.Builder.setPlaylist()لتحديدTimelineوTracksوMetadataالحالية مباشرةً بدلاً من إنشاء بنية قائمة تشغيل. - ارفع قيمة
minSdkإلى 21 (Android Lollipop). يتوافق ذلك مع جميع مكتبات AndroidX الأخرى. - أضِف العنصر
androidx.media3:media3-common-ktxالذي يوفّر وظائف خاصة بلغة Kotlin تستند إلى المكتبة المشتركة. - أضِف دالة تعليق
Player.listenإلى إضافةPlayer.Eventsفي مكتبةmedia3-common-ktx. - إزالة التعليقات التوضيحية
@DoNotInlineمن الفئات الداخلية التي تم إنشاؤها يدويًا بدون محاذاة والمصمَّمة لتجنُّب أخطاء التحقّق من الفئة في وقت التشغيل تتجاهل الإصدارات الحديثة من R8 تلقائيًا عمليات الاستدعاء غير المضمّنة مثل هذه لتجنُّب حدوث أخطاء أثناء وقت التشغيل (وبالتالي لم يعُد من الضروري تجاهلها يدويًا). يجب أن يكون جميع مستخدمي Gradle للمكتبة يستخدمون إصدارًا من المكوّن الإضافي لنظام Gradle المتوافق مع Android يتضمّن إصدارًا من R8 يتيح ذلك، بسببcompileSdk = 35. على مستخدمي المكتبة الذين لديهم أنظمة إنشاء غير Gradle التأكّد من أنّ خطوة التصغير/التشويش المكافئة لـ R8 تنفّذ عملية مماثلة تلقائية لإزالة التداخل لتجنُّب حدوث أخطاء في التحقّق من فئة وقت التشغيل. تم إجراء هذا التغيير في مكتبات AndroidX الأخرى.
- أضِف
- ExoPlayer:
- يمكن الآن طلب "
MediaCodecRenderer.onProcessedStreamChange()" لكل عنصر وسائط. في السابق، لم يكن يتم استدعاؤها عند ظهور الإعلان الأول. استخدِمMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()لتفعيل هذه الميزة. - أضِف
PreloadMediaSource.PreloadControl.onPreloadErrorللسماح بتنفيذPreloadMediaSource.PreloadControlلإجراءات عند حدوث خطأ. - أضِف
BasePreloadManager.Listenerلنشر أحداث التحميل المُسبَق إلى التطبيقات. - السماح بتغيير مهلة برنامج SNTP وإعادة محاولة العناوين البديلة عند انتهاء المهلة (#1540)
- إزالة الحقل
MediaCodecAdapter.Configuration.flagsلأنّ قيمته كانت دائمًا صفرًا. - السماح للمستخدم باختيار مكبّر الصوت المدمج لتشغيل المحتوى على الإصدار 35 من Wear OS API أو الإصدارات الأحدث (حيث يعلن الجهاز عن إتاحة هذه الميزة)
- تأجيل المكالمة التي تحظر إلى
Context.getSystemService(Context.AUDIO_SERVICE)إلى حين تفعيل ميزة التعامل مع أولويّة الصوت يضمن ذلك عدم حظر المكالمة إذا لم يتم تفعيل ميزة معالجة التركيز الصوتي (#1616). - السماح بالتشغيل بغض النظر عن مدة التخزين المؤقت عند تعذُّر التحميل (#1571)
- أضِف
AnalyticsListener.onRendererReadyChanged()للإشارة إلى الوقت الذي تسمح فيه أدوات العرض الفردية بأن يصبح التشغيل جاهزًا. - تم إصلاح مشكلة عرض
MediaCodec.CryptoExceptionأحيانًا على أنّه "خطأ غير متوقّع في وقت التشغيل" عند تشغيلMediaCodecفي الوضع غير المتزامن (السلوك التلقائي على الإصدار 31 من واجهة برمجة التطبيقات والإصدارات الأحدث). - استخدِم القيمة
bufferedDurationUsبدلاً منbufferedPositionUsمعPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). بالإضافة إلى ذلك، يتم تغييرDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSإلىDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS، ويجب أن تُدخل التطبيقات بعد ذلك قيمة تمثّل مدة معيّنة من موضع البدء التلقائي الذي يجب أن يتم التحميل المُسبَق لمصدر الوسائط المناسب له باستخدام IntDef هذا، بدلاً من موضع. - أضِف عملية تنفيذ
ForwardingRendererتعيد توجيه جميع طلبات الطرق إلى أداة عرض أخرى (1703). - إضافة ميزة التحميل المُسبَق لقوائم التشغيل للعنصر التالي في قائمة التشغيل يمكن للتطبيقات تفعيل ميزة التحميل المُسبَق من خلال استدعاء
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)وفقًا لذلك. يكون التحميل المُسبق غير مفعَّل تلقائيًا. عند تفعيل ميزة التحميل المسبق، لا تتدخّلDefaultLoadControlفي عملية التشغيل، بل تقتصر على بدء التحميل المسبق ومواصلته فقط عندما لا يكون المشغّل بصدد تحميل المحتوى لتشغيله. يمكن للتطبيقات تغيير هذا السلوك من خلال تنفيذLoadControl.shouldContinuePreloading()وفقًا لذلك (مثلما يحدث عند إلغاء هذا الإجراء فيDefaultLoadControl). يؤدي التنفيذ التلقائي لـLoadControlإلى إيقاف التحميل المُسبَق في حال كان التطبيق يستخدم تنفيذًا مخصّصًا لـLoadControl. - أضِف الطريقة
MediaSourceEventListener.EventDispatcher.dispatchEvent()للسماح باستدعاء أحداث أدوات معالجة الفئة الفرعية (1736). - أضِف
DefaultPreloadManager.Builderالتي تنشئ مثيلاتDefaultPreloadManagerوExoPlayerباستخدام إعدادات مشتركة بشكل متّسق. - أزِل المَعلمة
Renderer[]منLoadControl.onTracksSelected()لأنّ عملية تنفيذDefaultLoadControlيمكنها استرداد أنواع البث منExoTrackSelection[]. - تم إيقاف
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])نهائيًا ووضع علامة على الطريقة باعتبارها نهائية لمنع عمليات التجاوز. يجب استخدامDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])الجديد بدلاً من ذلك. - تسجيل بيانات أحداث
MediaSourceEventListenerمن مصادر ثانوية فيMergingMediaSourceسيؤدي ذلك إلى تسجيل أحداث بدء التحميل/الخطأ/الإلغاء/الاكتمال للترجمة والشرح المحمّلة بشكل جانبي (تلك التي تمت إضافتها باستخدامMediaItem.LocalConfiguration.subtitleConfigurations)، والتي قد تظهر كأحداث تحميل مكرّرة صادرة منAnalyticsListener. - منع حدوث أخطاء في الترجمة والشرح والبيانات الوصفية تؤدي إلى إيقاف التشغيل تمامًا
بدلاً من ذلك، يتم إيقاف المقطع الصوتي الذي يتضمّن المشكلة، ويستمر تشغيل المقاطع الصوتية المتبقية (#1722).
- في معالجة الترجمة والشرح الجديدة (أثناء الاستخراج)، يتم إرسال أخطاء التحليل المرتبطة (مثل بيانات ترجمة وشرح غير صالحة) وأخطاء التحميل (مثل HTTP 404) من خلال عمليات معاودة الاتصال
onLoadError. - في معالجة الترجمة والشرح القديمة (أثناء العرض)، يتم إرسال أخطاء التحميل المرتبطة فقط من خلال عمليات رد الاتصال
onLoadError، بينما يتم تجاهل أخطاء التحليل بدون إشعار (هذا السلوك موجود مسبقًا).
- في معالجة الترجمة والشرح الجديدة (أثناء الاستخراج)، يتم إرسال أخطاء التحليل المرتبطة (مثل بيانات ترجمة وشرح غير صالحة) وأخطاء التحميل (مثل HTTP 404) من خلال عمليات معاودة الاتصال
- تم إصلاح الخطأ الذي كان يؤدي إلى توقّف عرض الإطارات في نهاية عناصر قائمة التشغيل أو الفترات في بث DASH المتعدد الفترات الذي يتضمّن مدة لا تتطابق مع المحتوى الفعلي (#1698).
- إضافة دالة setter إلى
SntpClientلضبط الحد الأقصى للوقت المنقضي منذ آخر تعديل، وبعده تتم إعادة تهيئة البرنامج (#1794).
- يمكن الآن طلب "
- المحوّل:
- أضِف
SurfaceAssetLoader، الذي يتيح إضافة بيانات الفيديو إلى قائمة الانتظار في Transformer من خلالSurface. - تعرض
ImageAssetLoaderتقارير عن الإدخال غير المتوافق من خلالAssetLoader.onErrorبدلاً من عرضIllegalStateException. - اجعل ضبط مدة عرض الصورة باستخدام
MediaItem.Builder.setImageDurationMsإلزاميًا عند تصدير الصورة. - تمت إضافة إمكانية تصدير الفجوات في تسلسلات EditedMediaItems الصوتية.
- أضِف
- اختيار المقطع الصوتي:
-
DefaultTrackSelector: يجب تفضيل الصوت المستند إلى عناصر على الصوت المستند إلى قنوات عندما تكون العوامل الأخرى متساوية.
-
- أدوات الاستخراج:
- السماح لـ
Mp4ExtractorوFragmentedMp4Extractorبتحديد عيّنات H264 التي لا تستخدم كمرجع للعيّنات اللاحقة - إضافة خيار لتفعيل البحث المستند إلى الفهرس في
AmrExtractor - يجب التعامل مع ملفات MP3 التي يتجاوز حجمها 128 كيلوبايت بين الإطارات الصالحة على أنّها مقطوعة (بدلاً من غير صالحة). هذا يعني أنّ الملفات التي تتضمّن بيانات غير MP3 في نهايتها،
بدون أي بيانات وصفية أخرى للإشارة إلى طول وحدات بايت MP3، ستتوقف الآن
عن التشغيل عند نهاية بيانات MP3 بدلاً من عرض الخطأ
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - تم إصلاح مشكلة معالجة عيّنات الإعلانات التمهيدية لمواضع بدء الوسائط غير إطارات المفاتيح عند معالجة قوائم التعديل في ملفات MP4 (#1659).
- تم تحسين عملية احتساب عدد اللقطات في الثانية من خلال استخدام مدة الوسائط من المربّع
mdhdفيMp4ExtractorوFragmentedMp4Extractor(#1531). - إصلاح مشكلة تغيير الحجم بشكل غير صحيح في
media_timeفي قوائم تعديل ملفات MP4 مع أنّsegment_durationكان يتم تغيير حجمه بشكل صحيح باستخدام المقياس الزمني الخاص بالفيلم، يتم الآن تغيير حجمmedia_timeبشكل صحيح باستخدام المقياس الزمني الخاص بالمقطع، كما هو محدّد في معيار تنسيق MP4 (#1792). - التعامل مع اللقطات غير المرتبة في عملية احتساب
endIndicesلملفات MP4 التي تتضمّن قائمة تعديل (#1797) - تم إصلاح مشكلة تحليل مدة الوسائط في المربّع
mdhdلملفات MP4 من أجل التعامل مع القيم-1(#1819). - إتاحة تحديد المربّع
h263في ملفات MP4 لفيديوهات H.263 (#1821) - إضافة دعم لتنسيق ملفات الوسائط الأساسية ISO من المستوى 4 بتنسيق AC-4 (#1265)
- السماح لـ
- DataSource:
- تعديل
HttpEngineDataSourceللسماح باستخدامه بدءًا من الإصدار 7 من حزمة S بدلاً من المستوى 34 لواجهة برمجة التطبيقات (#1262) DataSourceContractTest: تأكَّد من أنّDataSource.getUri()تعرض عنوان URI الذي تم تحويله (كما هو موضّح في المستندات). وفي حال اختلاف ذلك عن معرّف الموارد الموحّد المطلوب، يمكن أن تشير الاختبارات إلى ذلك باستخدام الطريقة الجديدةDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: تأكَّد من أنّDataSource.getUri()وgetResponseHeaders()تعرضان القيمة "مفتوح" بعد تعذُّر إجراء طلب إلىopen()(بسبب عدم العثور على المورد) وقبل إجراء طلبclose()لاحق.- تتيح عملية إلغاء
DataSourceContractTest.getNotFoundResources()لفئات الاختبار الفرعية توفير موارد متعددة "لم يتم العثور عليها"، كما تتيح توفير أي عناوين متوقّعة أيضًا. يتيح ذلك التمييز بين الخطأ HTTP 404 (مع العناوين) والخطأ "لم يتم العثور على الخادم" (بدون عناوين).
- تتيح عملية إلغاء
- تعديل
- الصوت:
- ضبط البيانات الوصفية لمستوى الصوت وفقًا لمعيار CTA-2075 تلقائيًا على برنامج الترميز إذا كانت متوفّرة في الوسائط
- ضمان خفض مستوى الصوت بسلاسة عند البحث
- إصلاح أصوات الطقطقة التي قد تحدث أثناء عمليات البحث
- إصلاح مشكلة تراكم أخطاء الاقتطاع في خوارزمية Sonic لتغيير سرعة التشغيل/درجة الصوت
- تم إصلاح الخطأ في
SpeedChangingAudioProcessorالذي يتسبب في حذف إطارات الإخراج.
- الفيديو:
- يتجنّب
MediaCodecVideoRendererفك ترميز العيّنات التي لا يتم عرضها ولا يتم استخدامها كمرجع من قِبل عيّنات أخرى. - في الإصدار 35 من واجهة برمجة التطبيقات والإصدارات الأحدث، يمكن أن تتلقّى
MediaCodecAdapterالآنnullSurfaceفيconfigure، كما يمكنها تلقّي طلبات إلى طريقة جديدةdetachOutputSurfaceلإزالةSurfaceتم ضبطها سابقًا إذا كان برنامج الترميز يتيح ذلك (MediaCodecInfo.detachedSurfaceSupported). - استخدِم قيم نسبة عرض البكسل إلى ارتفاعه المقدَّمة في
MediaCodecAdapterإذا كانت متوفّرة عند معالجةonOutputFormatChanged(#1371). - إضافة حلّ بديل لمشكلة في جهاز Galaxy Tab S7 FE تؤدي إلى وضع علامة "غير متوافق" على بث H264 آمن بمعدل 60 إطارًا في الثانية (#1619)
- إضافة حلّ بديل لبرامج الترميز التي تتوقف بعد آخر عيّنة بدون عرض إشارة نهاية البث
- يتجنّب
- النص:
- أضِف
VoiceSpanمخصّصًا واملأه بفواصل زمنية صوتية بتنسيق WebVTT(#1632). - التأكّد من عرض ملفات WebVTT في HLS التي تتضمّن طوابع زمنية كبيرة جدًا للترجمة والشرح (تتجاوز
long64 بت عند تمثيلها كوحدات ميكروثانية وضربها في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تغييرًا صغيرًا في الحجم يؤدي إلى قطع إطار 1-texel حول حافة المخزن المؤقت الذي تم اقتصاصه. يتم الآن التعامل مع هذه الحالة بحيث تكون النتيجة أقرب إلى النتيجة المتوقّعة. - تسريع
DefaultVideoFrameProcessor.queueInputBitmap()نتيجةً لذلك، أصبح بإمكانك تصدير الصور إلى فيديوهات باستخدامTransformerبشكل أسرع.
- إضافة حل بديل
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح الخطأ الذي قد يؤدي فيه محو قائمة التشغيل إلى حدوث خطأ في
ArrayIndexOutOfBoundsExceptionفيImaServerSideAdInsertionMediaSource. - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
ArrayIndexOutOfBoundsExceptionعند تشغيل بث مباشر يتضمّن إعلانات ديناميكية مدرَجة من جهة الخادم بدون إعلان تمهيدي، وذلك بعد تجاوز آخر إعلان أثناء التشغيل (#1741).
- تم إصلاح الخطأ الذي قد يؤدي فيه محو قائمة التشغيل إلى حدوث خطأ في
- الجلسة:
- أضِف
MediaButtonReceiver.shouldStartForegroundService(Intent)للسماح للتطبيقات بمنع تنفيذ أمر تشغيل لاستئناف التشغيل من خلال إلغاء هذه الطريقة. يتم بدء الخدمة دائمًا بشكل تلقائي، ولا يمكن إيقاف التشغيل بدون أن يعطّل النظام الخدمة بسبب حدوث خطأForegroundServiceDidNotStartInTimeException(#1528). - تم إصلاح الخطأ الذي كان يتسبّب في إرسال الأوامر المخصّصة من
MediaBrowserإلىMediaSessionCompat.Callbackبدلاً منMediaBrowserServiceCompatعند الاتصال بخدمة قديمة. وقد أدّى ذلك إلى منعMediaBrowserمن تلقّي قيمة العائد الفعلية التي أرسلتها الخدمة القديمة (#1474). - التعامل مع الخطأ
IllegalArgumentExceptionالذي تعرضه أجهزة بعض الشركات المصنّعة عند ضبط أداة استقبال البث لتلقّي طلبات تنفيذ إجراءات أزرار الوسائط (#1730) - إضافة أزرار أوامر لملفات الوسائط يؤدي ذلك إلى إضافة Media3 API لما كان يُعرف باسم
Custom browse actionsمع المكتبة القديمة التي تحمل الرقمMediaBrowserCompat. يُرجى العِلم أنّه تتوفّر أزرار أوامر Media3 لعناصر الوسائط لكل منMediaBrowserوMediaController. اطّلِع على تنفيذ إجراءات تصفّح مخصّصة. * تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى عدم تمكُّن أداة تحكّم Media3 من السماح لتطبيق جلسة بتشغيل خدمة تعمل في المقدّمة بعد طلبplay(). - يجب حصر
CommandButton.Builder.setIconUriعلى قبول معرّفات الموارد الموحّدة للمحتوى فقط. - تمرير إشارات ربط متصفّح Media3 إلى
MediaBrowserCompatالأولي عند الربط بـMediaBrowserCompatقديم يمكن للخدمة تلقّي تلميحات الاتصال التي تم تمريرها كتلميحات جذرية مع المكالمة الأولى إلىonGetRoot(). - تم إصلاح الخطأ الذي كان يؤدي إلى عدم تلقّي
MediaBrowserالمرتبط بخدمة متصفّح قديمة للخطأ الذي أرسلته الخدمة بعد اشتراك المتصفّح فيparentid. - تحسين سلوك التشغيل التفاعلي، حتى لا يطلب متصفّح Media3 المرتبط بـ
MediaBrowserServiceالقديم عناصرparentIdمرتين عند الاشتراك في عنصر رئيسي
- أضِف
- UI:
- تفعيل الحلّ البديل الخاص بالفيديوهات الممدّدة/المقتصة في
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 لتركيب الصوت.
- إضافة البث:
- إيقاف تنظيف المخطط الزمني بعد إلغاء ربط CastSession، ما يتيح لتطبيق المرسِل استئناف التشغيل محليًا بعد إلغاء الربط
- ملء
DeviceInfoفي CastPlayer عند توفيرContextيتيح ذلك ربطMediaSessionبـRoutingSession، وهو أمر ضروري لدمج أداة Output Switcher (#1056).
- أدوات الاختبار:
- يتضمّن
DataSourceContractTestالآن اختبارات للتحقّق من:- تم تعديل مصدر البيانات
read position. - يتم تطبيق مخزن الإخراج المؤقت
offsetبشكل صحيح.
- تم تعديل مصدر البيانات
- يتضمّن
- تطبيق تجريبي
- حلّ مشاكل تسرُّب الذاكرة في تطبيق العرض التوضيحي القصير (#1839)
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.hasPreviousوPlayer.hasPreviousWindow()اللذين تم إيقافهما يمكنك استخدامPlayer.hasPreviousMediaItem()كبديل. - إزالة الطريقة
Player.previous()التي تم إيقاف استخدامها استخدِمPlayer.seekToPreviousMediaItem()بدلاً من ذلك. - إزالة الطريقة المتوقّفة نهائيًا
DrmSessionEventListener.onDrmSessionAcquired - إزالة منشئات
DefaultEncoderFactoryالمتوقّفة نهائيًا استخدِمDefaultEncoderFactory.Builderبدلاً من ذلك.
- إزالة
الإصدار 1.5.0-rc02
19 نوفمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-rc01
13 نوفمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-beta01
30 أكتوبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.5.0-alpha01
10 سبتمبر 2024
استخدِم الإصدار الثابت 1.5.0.
الإصدار 1.4.0
الإصدار 1.4.1
27 أغسطس 2024
تم طرح androidx.media3:media3-*:1.4.1. يتضمّن الإصدار 1.4.1 هذه التعديلات.
- ExoPlayer:
- أدوات الاستخراج:
- MP3: إصلاح الخطأ
Searched too many bytesمن خلال تجاهل البيانات غير التابعة لملف MP3 بشكل صحيح استنادًا إلى حقل الطول في إطارInfo(#1480).
- MP3: إصلاح الخطأ
- النص:
- TTML: تم إصلاح مشكلة معالجة قيم النسبة المئوية
tts:fontSizeلضمان اكتسابها بشكل صحيح من العُقد الرئيسية التي تتضمّن قيم النسبة المئويةtts:fontSize. - تم إصلاح الخطأ
IndexOutOfBoundsExceptionفيLegacySubtitleUtilبسبب التعامل غير الصحيح مع حالة وقت بدء الإخراج المطلوب الأكبر من أو يساوي وقت الحدث النهائي فيSubtitle(#1516).
- TTML: تم إصلاح مشكلة معالجة قيم النسبة المئوية
- DRM:
- إصلاح الخطأ
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEعلى الأجهزة التي تعمل بالإصدار 31 من واجهة برمجة التطبيقات أو الإصدارات الأحدث عند تشغيل محتوى Widevine L1 يرجع حدوث هذا الخطأ إلى عدم اكتمال تنفيذ طريقةMediaDrm.requiresSecureDecoderفي إطار العمل (#1603).
- إصلاح الخطأ
- التأثير:
- أضِف طريقة
release()إلىGlObjectsProvider.
- أضِف طريقة
- الجلسة:
- تحويل النقر مرّتين على
KEYCODE_HEADSETHOOKإلى إجراء "الانتقال إلى التالي"، كما هو موضّح في المستندات (#1493) - تعامَل مع
KEYCODE_HEADSETHOOKكأمر "تشغيل" فيMediaButtonReceiverعند تحديد ما إذا كان سيتم تجاهله لتجنُّبForegroundServiceDidNotStartInTimeException(#1581).
- تحويل النقر مرّتين على
- إضافة RTSP:
- تخطّي أوصاف الوسائط غير الصالحة عند تحليل بروتوكول وصف الجلسة (SDP) (#1087)
الإصدار 1.4.0
25 يوليو 2024
تم طرح androidx.media3:media3-*:1.4.0. يتضمّن الإصدار 1.4.0 هذه التعديلات.
- المكتبة المشتركة:
- إعادة توجيه طلبات البحث التي يُفترض أنّها لا تؤدي إلى أي عملية إلى الطريقتَين المحميتَين
BasePlayer.seekTo()وSimpleBasePlayer.handleSeek()بدلاً من تجاهلها إذا كنت تنفّذ هذه الطرق في مشغّل مخصّص، قد تحتاج إلى معالجة هذه الطلبات الإضافية باستخدامmediaItemIndex == C.INDEX_UNSET. - إزالة تبعية وقت التجميع من عملية إزالة التشويش المحسّنة في Java 8 (#1312)
- تأكَّد من تجاهل المدة التي تم تمريرها إلى
MediaItem.Builder.setImageDurationMs()بالنسبة إلىMediaItemغير الصورة (كما هو موضّح في المستندات). - أضِف
Format.customDataلتخزين معلومات مخصّصة تقدّمها التطبيقات حول مثيلاتFormat.
- إعادة توجيه طلبات البحث التي يُفترض أنّها لا تؤدي إلى أي عملية إلى الطريقتَين المحميتَين
- ExoPlayer:
- أضِف
BasePreloadManagerالذي ينسّق عملية التحميل المُسبَق لمصادر متعدّدة استنادًا إلى الأولويات المحدّدة فيrankingData. يمكن إجراء التخصيص من خلال توسيع هذه الفئة. أضِفDefaultPreloadManagerالتي تستخدمPreloadMediaSourceلتحميل عيّنات الوسائط مسبقًا من المصادر إلى الذاكرة، واستخدِم عددًا صحيحًاrankingDataيشير إلى فهرس عنصر في واجهة المستخدم. - أضِف
PlayerIdإلى معظم طرقLoadControlلتفعيل عمليات تنفيذLoadControlالتي تتيح إمكانية مشاركة عدة لاعبين. - إزالة
Buffer.isDecodeOnly()وC.BUFFER_FLAG_DECODE_ONLYلا حاجة إلى ضبط هذه العلامة لأنّ أدوات العرض وبرامج الترميز ستتجاهل المخازن المؤقتة استنادًا إلى الطابع الزمني. يجب أن تتحقّق عمليات تنفيذRendererالمخصّصة مما إذا كان وقت التخزين المؤقتBaseRenderer.getLastResetPositionUs()على الأقل لتحديد ما إذا كان يجب عرض عيّنة. يمكن لعمليات التنفيذ المخصّصةSimpleDecoderالتحقّقisAtLeastOutputStartTimeUs()إذا لزم الأمر أو وضع علامةDecoderOutputBuffer.shouldBeSkippedعلى المخازن المؤقتة الأخرى لتخطّيها. - السماح بعرض قيمة فارغة من خلال
TargetPreloadStatusControl.getTargetPreloadStatus(T)للإشارة إلى عدم التحميل المُسبَق لـMediaSourceباستخدامrankingDataالمحدّدة - إضافة
remove(MediaSource)إلىBasePreloadManager - أضِف
reset()إلىBasePreloadManagerلتحرير جميع المصادر التي تمّ تجميدها مع الاحتفاظ بمثيل "مدير التحميل المُسبَق". - أضِف
ExoPlayer.setPriority()(وBuilder.setPriority()) لتحديد قيمة الأولوية المستخدَمة فيPriorityTaskManagerوأهمية MediaCodec من الإصدار 35 من واجهة برمجة التطبيقات. - تم إصلاح مشكلة في تعديل وقت إعادة التخزين المؤقت الأخير، ما أدّى إلى ظهور المفتاح
bs(نقص في المخزن المؤقت) غير الصحيح في CMCD (#1124). - أضِف
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)للإشارة إلى أنّه تم تحميل المصدر إلى النهاية. يتيح ذلك لعمليات التنفيذDefaultPreloadManagerوPreloadMediaSource.PreloadControlالمخصّصة التحميل المُسبَق للمصدر التالي أو اتّخاذ إجراءات أخرى. - تم إصلاح الخطأ الذي يتسبّب في ظهور استثناء في التشغيل عند تخطّي الصمت في نهاية العناصر.
- أضِف
clearإلىPreloadMediaSourceلتجاهل فترة التحميل المُسبق. - إضافة رمز خطأ جديد
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDيتم استخدامه عند استعادة موارد الترميز لمهام ذات أولوية أعلى - السماح لـ
AdsMediaSourceبتحميل الإعلانات قبل التشغيل قبل اكتمال إعداد وسائط المحتوى الأولية (#1358) - تم إصلاح الخطأ الذي كان يؤدي إلى انتقال التشغيل إلى
STATE_ENDEDعند إعادة إعداد بث مباشر بتنسيق DASH متعدد الفترات بعد أن تمت إزالة الفترة الأصلية من ملف البيان. - أعِد تسمية
onTimelineRefreshed()إلىonSourcePrepared()وonPrepared()إلىonTracksSelected()فيPreloadMediaSource.PreloadControl. يجب أيضًا إعادة تسمية IntDefs فيDefaultPreloadManager.Stageوفقًا لذلك. - تمت إضافة دعم تجريبي للجدولة الديناميكية بهدف تحسين توافق العمل مع دورات تنشيط وحدة المعالجة المركزية وتأخير التنشيط إلى حين إمكانية تقدّم أدوات العرض.
يمكنك تفعيل هذا الخيار باستخدام
experimentalSetDynamicSchedulingEnabled()عند إعداد مثيل ExoPlayer. - أضِف
Renderer.getDurationToProgressUs(). يمكن أن تنفّذRendererهذه الطريقة لإرجاع المدة التي يجب أن يتقدّم فيها التشغيل إلى ExoPlayer كي يتقدّم العارض. إذا تم ضبطExoPlayerعلىexperimentalSetDynamicSchedulingEnabled()، سيستدعيExoPlayerهذه الطريقة عند احتساب الوقت اللازم لتحديد موعد لمهمة العمل. - أضِف
MediaCodecAdapter#OnBufferAvailableListenerلتلقّي تنبيه عند توفّر مخازن مؤقتة للإدخال والإخراج ليستخدمهاMediaCodecRenderer. سترسلMediaCodecRendererإشارة إلىExoPlayerعند تلقّي عمليات الاستدعاء هذه، وإذا تم ضبطExoPlayerباستخدامexperimentalSetDynamicSchedulingEnabled()، ستجدولExoPlayerحلقة العمل الخاصة بها كي تتمكّن أدوات العرض من إحراز تقدّم. - استخدِم فئة البيانات لطُرق
LoadControlبدلاً من المَعلمات الفردية. - أضِف
ExoPlayer.isReleased()للتحقّق ممّا إذا تم استدعاءExoplayer.release(). - أضِف
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()لضبط الحد الأقصى للموضع الذي يحاولseekToPrevious()الانتقال إلى العنصر السابق فيه (#1425). - إصلاح بعض حالات عدم الاتساق في أولويّة الصوت، مثل عدم الإبلاغ عن فقدان أولويّة الصوت الكامل أو المؤقت أثناء إيقاف المشغّل مؤقتًا (#1436).
- تم إصلاح مشكلة محتملة
IndexOutOfBoundsExceptionناتجة عن إبلاغ أدوات الاستخراج عن مقاطع صوتية إضافية بعد خطوة الإعداد الأولية (#1476). - ستتلقّى
EffectsفيExoPlayer.setVideoEffect()الطوابع الزمنية بعد إزالة إزاحة أداة العرض (#1098). - إصلاح مشكلة محتملة في
IllegalArgumentExceptionعند معالجة خطأ في المشغّل حدث أثناء القراءة المسبقة لعنصر آخر في قائمة التشغيل (#1483)
- أضِف
- المحوّل:
- أضِف
audioConversionProcessوvideoConversionProcessإلىExportResultللإشارة إلى طريقة إنشاء المقطع الصوتي المعنيّ في ملف الإخراج. - إيقاف عمليات التحقّق من مستوى H.264 لتحسين عملية القص
- إضافة إمكانية التبديل بين وسائط الإدخال SDR وHDR في تسلسل
- إتاحة المؤثرات الصوتية على مستوى التركيبة
- إضافة إمكانية تحويل صور دقة HDR فائقة إلى فيديوهات نطاق عالي الديناميكية
- تم إصلاح المشكلة التي لا تعرض فيها
DefaultAudioMixerعدد وحدات البايت الصحيح بعد إعادة ضبطها وإعادة استخدامها. - حلّ مشكلة في برنامج الترميز حيث تم تحديد عدد القنوات الصوتية بصوت ستيريو عند التعامل مع إدخال PCM.
- عند اختيار المقاطع الصوتية في
ExoPlayerAssetLoader، تجاهل القيود المفروضة على عدد قنوات الصوت لأنّها تنطبق فقط على التشغيل. - استبدِل واجهة
androidx.media3.transformer.Muxerبواجهةandroidx.media3.muxer.Muxerوأزِلandroidx.media3.transformer.Muxer. - إصلاح مشكلة تحميل صور HEIC من مخططات معرّف موارد منتظم للمحتوى (#1373).
- اضبط مدة المقطع الصوتي في
AudioGraphInputلتحسين مزامنة الصوت والفيديو. - إزالة الحقل "
ExportResult.processedInputs" إذا كنت تستخدم هذا الحقل لتضمين تفاصيل برنامج الترميز، استخدِمDefaultDecoderFactory.listenerبدلاً من ذلك. في حال حدوث استثناء في برنامج الترميز، ستتوفّر تفاصيل برنامج الترميز فيExportException.codecInfo.
- أضِف
- أدوات الاستخراج:
- MPEG-TS: يجب تطبيق التغيير مع ضمان عرض آخر إطار من خلال تمرير آخر وحدة وصول لتدفق إلى قائمة انتظار العيّنات (#7909). تم دمج إصلاحات لحلّ المشاكل التي ظهرت في بث مباشر وفق بروتوكول HTTP (HLS) يتضمّن إطارات I فقط (#1150) وبث مباشر وفق بروتوكول HTTP (HLS) يتضمّن ترميز H.262 (#1126).
- MP3: يُفضّل استخدام حجم البيانات من إطار
Infoبدلاً من الحجم الذي يحدّده المصدر الأساسي (مثل حجم الملف أو عنوان HTTPContent-Length). يساعد ذلك في استبعاد بيانات المقطع الدعائي غير القابلة للتشغيل (مثل صورة الألبوم) من عمليات احتساب البحث بمعدل نقل ثابت للبيانات، ما يجعل عمليات البحث أكثر دقةً (#1376). - MP3: استخدِم عدد اللقطات والبيانات الأخرى في لقطة
Info(إذا كانت متوفرة) لاحتساب متوسط معدل البت للبحث عن معدل بت ثابت، بدلاً من استقراء معدل البت من اللقطة التي تلي لقطةInfo، والتي قد تكون صغيرة بشكل مصطنع، مثلاً لقطةPCUT(#1376). - تم إصلاح مشكلة استخراج تنسيق الصوت PCM في حاويات AVI.
- الصوت:
- إصلاح سمات ترميز DTS:X Profile 2 لتشغيل المحتوى بدون تعديل (#1299)
- بالنسبة إلى التشغيل المحمّل، أعِد ضبط حقل التتبُّع الخاص باكتمال البث
في
DefaultAudioSinkقبل طلبAudioTrack.stop()، وذلك لكي تحدّدAudioTrack.StreamEventCallback#onPresentationEndedبشكل صحيح الوقت الذي تم فيه تشغيل جميع البيانات المعلقة. - تم إصلاح الخطأ في
SilenceSkippingAudioProcessorالذي يمكن أن يؤدي إلى حدوث استثناء في المعالج عند الانتقال بين تنسيقات صوتية مختلفة (على سبيل المثال، من الاستيريو إلى الأحادي) (#1352). - نفِّذ
MediaCodecAudioRenderer.getDurationToProgressUs()لكي يجدول ExoPlayer حلقة العمل الرئيسية بشكل ديناميكي عندما يتمكّن MediaCodecAudioRenderer من إحراز تقدّم.
- الفيديو:
- تم إصلاح المشكلة التي تؤدي إلى وصول
Listener.onRenderedFirstFrame()مبكرًا جدًا عند التبديل بين الأسطح أثناء التشغيل. - إصلاح منطق الرجوع إلى أداة فك الترميز الاحتياطية في Dolby Vision لاستخدام أداة فك ترميز AV1 متوافقة عند الحاجة (#1389)
- إصلاح خطأ برنامج الترميز الذي قد يحدث بسبب تفعيل عارض فيديو أثناء التشغيل
- تم إصلاح المشكلة التي تؤدي إلى وصول
- النص:
- تم إصلاح المشكلة التي يتم فيها تخطّي الترجمة والشرح اللذين يبدآن قبل موضع البحث. تم طرح هذه المشكلة فقط في الإصدار 1.4.0-alpha01 من Media3.
- تغيير السلوك التلقائي لتحليل الترجمة والشرح لكي يحدث أثناء الاستخراج
بدلاً من العرض (راجِع مخطط بنية ExoPlayer
لمعرفة الفرق بين الاستخراج والعرض).
- يمكن إلغاء هذا التغيير من خلال استدعاء كلّ من
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)وTextRenderer.experimentalSetLegacyDecodingEnabled(true). راجِع المستندات حول التخصيص لمعرفة كيفية دمج هذه المكوّنات في مثيلExoPlayer. ستتم إزالة هذه الطرق (وجميع ميزات فك ترميز الترجمة والشرح القديمة) في إصدار مستقبلي. - على التطبيقات التي تستخدم عمليات تنفيذ مخصّصة لسياسة
SubtitleDecoderتعديلها لتنفيذ سياسةSubtitleParserبدلاً من ذلك (وسياسةSubtitleParser.Factoryبدلاً منSubtitleDecoderFactory).
- يمكن إلغاء هذا التغيير من خلال استدعاء كلّ من
- PGS: إصلاح فك ترميز طول التشغيل لحل
0كفهرس ألوان، بدلاً من قيمة لون حرفية (#1367). - CEA-708: تجاهُل القيمة
rowLockتوضّح مواصفات CEA-708-E S-2023 أنّه يجب افتراض أنّ كلتا القيمتينrowLockوcolumnLockصحيحتان، بغض النظر عن القيم المتوفّرة في البث (لم يتم تنفيذ دعمcolumnLock، لذا يُفترض أنّها خاطئة دائمًا).- تم تضمين هذه الميزة في ملاحظات الإصدار
1.3.0-alpha01، ولكن تم إلغاء التغيير عن طريق الخطأ قبل الإصدار1.3.0-rc01. تم إصلاح هذه المشكلة الآن، لذا يظهر التغيير مرة أخرى.
- تم تضمين هذه الميزة في ملاحظات الإصدار
- CEA-708: تجنُّب إضافة أسطر جديدة مكرّرة بسبب طريقة ExoPlayer البسيطة في التعامل مع الأمر "تحديد موضع القلم" (#1315)
- إصلاح
IllegalArgumentExceptionمنLegacySubtitleUtilعندما لا تحتوي عيّنة ترجمة وشرح WebVTT على أي إشارات، مثلاً كجزء من بث DASH (#1516).
- البيانات الوصفية:
- إصلاح عملية ربط ملفات MP4 بعلامات الفرز ID3 في السابق، تم ربط علامات MP4 الخاصة بـ "ترتيب الألبوم" (
soal) و"ترتيب الفنان" (soar) و"ترتيب فنان الألبوم" (soaa) بشكل خاطئ بعلامات ID3 الخاصة بـTSO2وTSOAوTSOP(#1302). - تم إصلاح مشكلة قراءة علامات MP4 (/iTunes) الرقمية
gnre(النوع) وtmpo(الإيقاع) عندما تكون القيمة أطول من بايت واحد. - نشر إطار ID3
TCONإلىMediaMetadata.genre(#1305)
- إصلاح عملية ربط ملفات MP4 بعلامات الفرز ID3 في السابق، تم ربط علامات MP4 الخاصة بـ "ترتيب الألبوم" (
- الصورة:
- إضافة إمكانية استخدام شبكات صور مصغّرة غير مربّعة بتنسيق DASH (#1300)
- إتاحة استخدام تنسيق AVIF للإصدار 34 من واجهة برمجة التطبيقات أو الإصدارات الأحدث
- السماح باستخدام
nullكمَعلمة لـExoPlayer.setImageOutput()من أجل محوImageOutputتم ضبطه سابقًا
- DataSource:
- تنفيذ إمكانية استخدام معرّفات الموارد الموحّدة (URI) الخاصة بالموارد الأولية
حيث يختلف
packageعن حزمة التطبيق الحاليandroid.resource://package/idلم يكن هذا السلوك موثّقًا من قبل، ولكنّه طريقة أكثر فعالية للوصول إلى الموارد في حزمة أخرى بدلاً من الوصول إليها بالاسم. - تحقَّق من أنّ
urlليس قيمة فارغة في دوال الإنشاءDataSpec. تمت إضافة تعليق توضيحي إلى هذه المَعلمة لتكون غير فارغة. - السماح
ByteArrayDataSourceبحلّ معرّف موارد منتظم (URI) إلى مصفوفة بايت أثناءopen()، بدلاً من أن يكون مبرمَجًا بشكل ثابت عند الإنشاء (#1405)
- تنفيذ إمكانية استخدام معرّفات الموارد الموحّدة (URI) الخاصة بالموارد الأولية
حيث يختلف
- DRM:
- السماح بتعيين
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 من الألوان الخطية إلى فيديو SDR كهربائي بتنسيق BT 709 يجب توفير خيار ثالث للاحتفاظ بمساحة الألوان الأصلية.
- السماح بتحديد ترتيب z غير محدّد لـ EditedMediaItemSequences (#1055)
- الحفاظ على نطاق إضاءة متسق في مختلف أجزاء محتوى HDR (يستخدم نطاق HLG)
- إضافة دعم لتراكبات دقة HDR فائقة (صورة نقطية) على محتوى نطاق عالي الديناميكية.
- يسمح هذا الخيار باستخدام تأثيرات
SeparableConvolutionقبل الإصدار 26 من واجهة برمجة التطبيقات. - إزالة
OverlaySettings.useHdrغير المستخدَم لأنّ النطاق الديناميكي للتراكب والإطار يجب أن يكونا متطابقَين. - إضافة دعم النطاق العالي الديناميكية (HDR) لـ
TextOverlayيمكن ضبط مستوى سطوع النص المركّب باستخدامOverlaySettings.Builder.setHdrLuminanceMultiplier().
- إتاحة تغييرات متعدّدة في السرعة ضمن
- إضافة "إعلانات الوسائط التفاعلية":
- ترقية واجهة برمجة التطبيقات المطلوبة لتشغيل بث إعلانات DAI في التطبيقات إلى إصدار ثابت
- أضِف
replaceAdTagParameters(Map <String, String>)إلىImaServerSideAdInsertionMediaSource.AdLoaderالتي تتيح استبدال مَعلمات علامة الإعلان في وقت التشغيل. - تم إصلاح الخطأ الذي لم يتم فيه استدعاء
VideoAdPlayer.VideoAdPlayerCallback.onError()عند حدوث خطأ في المشغّل أثناء تشغيل الإعلان (#1334). - تمت ترقية إصدار "حزمة تطوير البرامج للإعلانات التفاعلية" إلى 3.33.0 لإصلاح
NullPointerExceptionعند استخدام معرّفات الموارد المنتظمة (URI) لعلامات الإعلاناتdata://(#700).
- الجلسة:
- غيِّر القيمة التلقائية لـ
CommandButton.enabledإلىtrueوتأكَّد من أنّ القيمة يمكن أن تظل خطأ لوحدات التحكّم حتى إذا كان الأمر المرتبط متاحًا. - أضِف ثوابت الرموز الخاصة بـ
CommandButtonالتي يجب استخدامها بدلاً من موارد الرموز المخصّصة. - أضِف
MediaSessionService.isPlaybackOngoing()للسماح للتطبيقات بالاستعلام عمّا إذا كانت الخدمة بحاجة إلى التوقف فيonTaskRemoved()(#1219). - أضِف
MediaSessionService.pauseAllPlayersAndStopSelf()التي تتيح إيقاف تشغيل جميع الجلسات مؤقتًا واستدعاءstopSelf()لإنهاء دورة حياةMediaSessionService. - يمكنك تجاهل
MediaSessionService.onTaskRemoved(Intent)لتوفير تنفيذ تلقائي آمن يُبقي الخدمة قيد التشغيل في المقدّمة إذا كان التشغيل مستمرًا أو يوقف الخدمة في الحالات الأخرى. - إخفاء شريط البحث في إشعار الوسائط لأحداث البث المباشر من خلال عدم ضبط المدة في البيانات الوصفية لجلسة النظام الأساسي (#1256)
- تعديل عملية تحويل
MediaMetadataإلىMediaDescriptionCompatلاستخدام الترتيب والمنطق المفضّلين نفسيهما عند اختيار خصائص البيانات الوصفية كما هو الحال في media1 - أضِف
MediaSession.sendError()التي تسمح بإرسال الأخطاء غير الخطيرة إلى وحدة التحكّم Media3. عند استخدام أداة التحكّم في الإشعارات (راجِعMediaSession.getMediaNotificationControllerInfo())، يتم استخدام الخطأ المخصّص لتعديلPlaybackStateلجلسة النظام الأساسي إلى حالة خطأ تتضمّن معلومات الخطأ المحدّدة (#543). - أضِف
MediaSession.Callback.onPlayerInteractionFinished()لإعلام الجلسات عند انتهاء سلسلة من تفاعلات اللاعبين من وحدة تحكّم معيّنة. - أضِف
SessionErrorواستخدِمه فيSessionResultوLibraryResultبدلاً من رمز الخطأ لتقديم المزيد من المعلومات حول الخطأ وكيفية حلّه إذا أمكن. - نشر رمز تطبيق اختبار أداة التحكّم في Media3 الذي يمكن استخدامه لاختبار التفاعلات مع التطبيقات التي تنشر جلسة وسائط
- نقل البيانات الإضافية التي تم تمريرها إلى
MediaSession[Builder].setSessionExtras()في Media3 إلىPlaybackStateCompat.getExtras()في أداة تحكّم Media1 - ربط الأخطاء الفادحة وغير الفادحة بجلسة المنصة يتم ربط
PlaybackExceptionبحالة خطأ فادح فيPlaybackStateCompat. يتم ربطSessionErrorتم إرساله إلى وحدة التحكّم في إشعار الوسائط معMediaSession.sendError(ControllerInfo, SessionError)بخطأ غير فادح فيPlaybackStateCompat، ما يعني أنّه يتم ضبط رمز الخطأ والرسالة، ولكن تظل حالة جلسة النظام الأساسي مختلفة عنSTATE_ERROR. - السماح بضبط نشاط الجلسة لكل وحدة تحكّم لتجاوز نشاط الجلسة العام يمكن تحديد نشاط الجلسة لوحدة تحكّم في وقت الاتصال من خلال إنشاء
ConnectionResultباستخدامAcceptedResultBuilder.setSessionActivivty(PendingIntent). بعد الاتصال، يمكن تعديل نشاط الجلسة باستخدامMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - تحسين عملية تكرار الأخطاء في طلبات البيانات من واجهة برمجة التطبيقات
MediaLibrarySession.Callback. يمكن الآن ضبط عملية تكرار الخطأ باستخدامMediaLibrarySession.Builder.setLibraryErrorReplicationMode()لاختيار نوع الخطأ أو إيقاف عملية تكرار الخطأ التي تكون مفعّلة تلقائيًا.
- غيِّر القيمة التلقائية لـ
- UI:
- إضافة إمكانية عرض الصور إلى
PlayerViewعند توصيله بجهازExoPlayer(#1144) - إضافة خيار تخصيص الرموز المختلفة في
PlayerControlViewمن خلال سمات xml للسماح باستخدام عناصر قابلة للرسم مختلفة لكل مثيلPlayerView، بدلاً من عمليات الإلغاء العامة (#1200) - حلّ مشكلة في النظام الأساسي تؤدي إلى عرض الفيديو بشكل ممدود أو مقصوص عند استخدام
SurfaceViewداخلAndroidViewفي Compose على الإصدار 34 من واجهة برمجة التطبيقات (#1237).
- إضافة إمكانية عرض الصور إلى
- عمليات التنزيل:
- تأكَّد من أنّ
DownloadHelperلا يؤدي إلى تسرُّب مثيلاتRendererغير المُصدرة، ما قد يؤدي في النهاية إلى تعطُّل التطبيق مع ظهورIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- تأكَّد من أنّ
- إضافة Cronet:
- حلّ المشاكل في
SocketTimeoutExceptionفيCronetDataSourceفي بعض إصدارات Cronet، لا يكون الطلب الذي توفّره دالة الرجوع هو نفسه دائمًا. يؤدي ذلك إلى عدم إكمال عملية معاودة الاتصال وانتهاء مهلة الطلب (https://issuetracker.google.com/328442628).
- حلّ المشاكل في
- إضافة HLS:
- تم إصلاح الخطأ الذي كان يؤدي إلى تفويض عيّنات EMSG المعلقة التي تنتظر انقطاعًا في
HlsSampleStreamWrapperمع إزاحة غير صحيحة، ما يؤدي إلى حدوثIndexOutOfBoundsExceptionأوIllegalArgumentException(#1002). - إصلاح الخطأ الذي كان يؤدي إلى إعادة تحميل قوائم التشغيل غير الأساسية بشكل متكرر عند بث المحتوى وفق بروتوكول LL-HLS (#1240)
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
Source ErrorوIllegalArgumentExceptionعند تفعيل CMCD لبروتوكول HLS مع مقاطع التهيئة. - تم إصلاح الخطأ الذي يؤدي إلى عدم إعادة تحميل قوائم التشغيل غير الأساسية أثناء تشغيل البث المباشر (#1240).
- تم إصلاح الخطأ الذي كان يتسبّب في حدوث
ArrayIndexOutOfBoundsException(#1395) عند تفعيل CMCD لأحداث البث المباشر وفق بروتوكول HTTP (HLS).
- تم إصلاح الخطأ الذي كان يؤدي إلى تفويض عيّنات EMSG المعلقة التي تنتظر انقطاعًا في
- إضافة DASH:
- إضافة البث:
- تم إصلاح الخطأ الذي كان يحوّل عنوان الألبوم الخاص بـ
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)
- تم إصلاح مشكلة عدم احتفاظ
- المحوّل:
- تمت إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
MediaMuxerمع الطوابع الزمنية السلبية للعرض التقديمي قبل الإصدار 30 من واجهة برمجة التطبيقات.
- تمت إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
- اختيار المقطع الصوتي:
DefaultTrackSelector: يجب تفضيل مسارات الفيديو التي تتضمّن عدد لقطات في الثانية "معقولاً" (أكبر من أو يساوي 10 لقطات في الثانية) على تلك التي تتضمّن عدد لقطات في الثانية أقل أو غير محدّد. يضمن ذلك أن يختار المشغّل مسار الفيديو "الحقيقي" في ملفات MP4 المستخرَجة من الصور المتحركة التي يمكن أن تحتوي على مسارَين بتنسيق HEVC، أحدهما بدقة أعلى ولكن بعدد صغير جدًا من اللقطات (#1051).
- أدوات الاستخراج:
- تم إصلاح المشكلة المتمثّلة في عدم تخطّي المساحة المتروكة عند قراءة أجزاء ذات حجم فردي من ملفات WAV (#1117).
- MP3: املأ
Format.averageBitrateمن إطارات البيانات الوصفية، مثلXINGوVBRI. - MPEG-TS: تم التراجع عن تغيير كان يهدف إلى ضمان عرض الإطار الأخير من خلال تمرير آخر وحدة وصول في البث إلى قائمة انتظار العيّنات (#7909). ويعود السبب إلى أنّ هذا التغيير يتسبّب في مشاكل جديدة في بثوق HLS التي تتضمّن إطارات أساسية فقط (#1150) وبثوق HLS بتنسيق H.262 (#1126).
- الصوت:
- السماح باسترداد أداة العرض من خلال إيقاف ميزة "تخفيف الحمل" إذا تعذّر تهيئة مقطع صوتي في وضع "تخفيف الحمل".
- الفيديو:
- إضافة حلّ بديل لمشكلة في الأجهزة على Galaxy Tab S7 FE وChromecast with Google TV وLenovo M10 FHD Plus تؤدي إلى تصنيف بث H265 بمعدل 60 إطارًا في الثانية على أنّه غير متوافق
- إضافة حلّ بديل يضمن عرض الإطار الأول دائمًا أثناء النقل عبر الأنفاق حتى إذا لم ينفّذ الجهاز ذلك تلقائيًا على النحو المطلوب من خلال واجهة برمجة التطبيقات (#1169). (#966)
- تم إصلاح مشكلة تؤدي فيها معالجة معلومات ألوان HDR إلى حدوث سلوك غير صحيح في برنامج الترميز وتمنع التبديل التكيّفي بين تنسيقات مسارات الفيديو بتنسيق SDR (#1158).
- النص:
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء
نسخ إضافية غير صحيحة من
CuesWithTimingمنWebvttParser.parse(#1177).
- WebVTT: منع الإشارات المتتالية مباشرةً من إنشاء
نسخ إضافية غير صحيحة من
- DRM:
- حلّ مشكلة
NoSuchMethodErrorالتي قد يطرحها إطار عملMediaDrmبدلاً منResourceBusyExceptionأوNotProvisionedExceptionعلى بعض أجهزة Android 14 (#1145)
- حلّ مشكلة
- التأثير:
- تم تحسين عملية ربط درجات الألوان من PQ إلى SDR من خلال تحويل مساحات الألوان.
- الجلسة:
- UI:
- الرجوع إلى تضمين اسم لغة المقطع الصوتي إذا لم يتمكّن
Localeمن تحديد اسم معروض (#988)
- الرجوع إلى تضمين اسم لغة المقطع الصوتي إذا لم يتمكّن
- إضافة DASH:
- املأ جميع عناصر
Labelمن ملف البيان فيFormat.labels(#1054).
- املأ جميع عناصر
- إضافة RTSP:
- تخطّي قيم معلومات الجلسة الفارغة (علامات i) في تحليل SDP (#1087)
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إيقاف إضافة MIDI كعنصر تابع محلي تلقائيًا لأنّها تتطلّب ضبط مستودع Maven إضافي يمكن للمستخدمين الذين يحتاجون إلى هذه الوحدة من اعتمادية محلية إعادة تفعيلها.
الإصدار 1.3.0
6 آذار (مارس) 2024
تم طرح androidx.media3:media3-*:1.3.0. يتضمّن الإصدار 1.3.0 هذه التعديلات.
- المكتبة المشتركة:
- توفير إمكانية استخدام معرّفات الموارد الموحّدة
android.resource://package/[type/]nameالأولية حيث يختلفpackageعن حزمة التطبيق الحالي كانت هذه الميزة متاحة دائمًا، ولكن لم يتم تنفيذها بشكل صحيح حتى الآن. - يجب توحيد أنواع MIME التي يتم ضبطها بواسطة رمز التطبيق أو قراءتها من الوسائط لتكون بأحرف صغيرة بالكامل.
- حدِّد الإعلانات باستخدام
MediaItemكامل بدلاً منUriواحد فيAdPlaybackState. - زيادة
minSdkإلى 19 (Android KitKat) يتوافق ذلك مع جميع مكتبات AndroidX الأخرى، وهو شرط أساسي لنتمكّن من الترقية إلى أحدث إصدارات التبعيات في AndroidX. - املأ الحقلَين
artworkUriوartworkDataفيMediaMetadata.Builder.populate(MediaMetadata)عندما يكون أحد الحقلَين على الأقل غير فارغ (#964).
- توفير إمكانية استخدام معرّفات الموارد الموحّدة
- ExoPlayer:
- أضِف
PreloadMediaSourceوPreloadMediaPeriodاللذين يتيحان للتطبيقات التحميل المُسبَق لمصدر وسائط المحتوى عند موضع بدء محدّد قبل التشغيل. تتولّىPreloadMediaSourceإعداد مصدر وسائط المحتوى لتلقّيTimeline، وإعداد الفترة وتخزينها مؤقتًا في موضع البدء المحدّد، واختيار المقاطع وتحميل بيانات الوسائط للفترة. تتحكّم التطبيقات في مستوى تقدّم التحميل المُسبَق من خلال تنفيذPreloadMediaSource.PreloadControlوتضبط مصدر التحميل المُسبَق على المشغّل لتشغيل المحتوى. - أضِف
ExoPlayer.setImageOutputالذي يسمح للتطبيقات بضبطImageRenderer.ImageOutput. - توفّر
DefaultRenderersFactoryالآنImageRendererللاعب تلقائيًا مع قيمتَيImageOutputوImageDecoder.Factory.DEFAULTفارغتين. - إصدار حدث
Player.Listener.onPositionDiscontinuityعند تخطّي الصمت (#765) - إضافة دعم تجريبي لتحليل الترجمة والشرح أثناء الاستخراج يمكنك تفعيل هذه الميزة باستخدام
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - تتيح هذه السمة استخدام مصادر الوسائط التكيُّفية مع
PreloadMediaSource. - نفِّذ
HttpEngineDataSource، وهوHttpDataSourceباستخدام واجهة برمجة التطبيقات HttpEngine. - منع إنشاء فئات فرعية
CompositeSequenceableLoaderكان هذا المكوّن قابلاً للتوسيع سابقًا، ولكن لم يتم تصنيفه ضمن فئة فرعية في المكتبة. يمكن إجراء عمليات التخصيص من خلال تضمين مثيل باستخدام نمط الزخرفة وتنفيذCompositeSequenceableLoaderFactoryمخصّص. - تم إصلاح المشكلة التي تؤدي إلى محو البيانات الوصفية الخاصة بهذا العنصر عند تكرار الوقت نفسه (#1007).
- أعِد تسمية طرق
experimentalSetSubtitleParserFactoryفيBundledChunkExtractor.FactoryوDefaultHlsExtractorFactoryإلىsetSubtitleParserFactory، ولا تسمح بتمريرnull. استخدِم طرقexperimentalParseSubtitlesDuringExtraction(boolean)الجديدة للتحكّم في سلوك التحليل. - إضافة إمكانية تخصيص
SubtitleParser.Factoryالمستخدَمة أثناء الاستخراج ويمكن تحقيق ذلك باستخدامMediaSource.Factory.setSubtitleParserFactory(). - أضِف بادئة المصدر إلى جميع حقول
Format.idالتي تم إنشاؤها منMergingMediaSource. يساعد ذلك في تحديد المصدر الذي أنتجFormat(#883). - إصلاح التعبير العادي المستخدَم للتحقّق من صحة أسماء مفاتيح Common Media Client Data (CMCD) المخصّصة من خلال تعديله للتحقّق من وجود شرطة فقط (1028#)
- إيقاف الترميز المزدوج لمَعلمات طلب البحث CMCD (#1075)
- أضِف
- المحوّل:
- إضافة إمكانية تسوية فيديوهات التصوير البطيء بتنسيق H.265/HEVC SEF
- زيادة سرعة نقل البيانات، خاصةً عند إجراء تعديلات من النوع "إزالة الفيديو"
- أضِف واجهة برمجة التطبيقات للتأكّد من أنّ ملف الإخراج يبدأ بإطار فيديو. يمكن أن يؤدي ذلك إلى جعل نتائج عمليات الاقتصاص أكثر توافقًا مع عمليات تنفيذ المشغّل التي لا تعرض إطار الفيديو الأول إلا بعد الطابع الزمني للعرض التقديمي (#829).
- إضافة إمكانية تحسين عمليات قص ملفات MP4 لمادة عرض واحدة
- إضافة دعم لضمان احتواء إطار الفيديو على الطابع الزمني الأول في ملف الإخراج إصلاح مشكلة بدء تشغيل ملفات الإخراج بإطار أسود على مشغّلات iOS (#829)
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.selectImageTrackلتفعيل خيار اختيار مسار الصورة. - أضِف
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledلتحديد ما إذا كان سيتم اختيار مقطع صورة إذا كان كل من مقطع الصورة ومقطع الفيديو متاحَين. القيمة التلقائية هيfalse، ما يعني أنّه يتم إعطاء الأولوية لاختيار مقطع فيديو.
- أضِف
- أدوات الاستخراج:
- إضافة تحليل AV1C إضافي إلى أداة استخراج MP4 لاسترداد قيم
ColorInfo.colorSpaceوColorInfo.colorTransferوColorInfo.colorRange(#692) - MP3: استخدِم معدّل نقل بيانات ثابت (CBR) للبحث عن الملفات التي تتضمّن العنوان
Info(معدّل نقل البيانات الثابت المكافئ للعنوانXing). في السابق، كنا نستخدم جدول البحث من العنوانInfo، ولكن يؤدي ذلك إلى التقديم/الترجيع بدقة أقل من تجاهله وافتراض أنّ الملف CBR. - MPEG2-TS: إضافة دعم DTS وDTS-LBR وDTS:X Profile2 (#275)
- استخراج أنواع الصوت من أوصاف TS وربطها بعلامات الأدوار، ما يتيح للمستخدمين اتّخاذ قرارات أفضل بشأن اختيار المقاطع الصوتية (#973).
- إضافة تحليل AV1C إضافي إلى أداة استخراج MP4 لاسترداد قيم
- الصوت:
- الفيديو:
- غيِّر الدالة الإنشائية
MediaCodecVideoRendererالتي تأخذ وسيطةVideoFrameProcessor.Factoryواستبدلها بدالة إنشائية تأخذ وسيطةVideoSinkProvider. يمكن للتطبيقات التي تريد إدخالVideoFrameProcessor.Factoryمخصّص إنشاءCompositingVideoSinkProviderيستخدمVideoFrameProcessor.Factoryالمخصّص وتمرير موفّر مصدر الفيديو إلىMediaCodecVideoRenderer.
- غيِّر الدالة الإنشائية
- النص:
- إصلاح تسلسل إشارات الصور النقطية لحلّ الخطأ
Tried to marshall a Parcel that contained Binder objectsعند استخدامDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836) - CEA-708: تجاهُل القيمة
rowLockتوضّح مواصفات CEA-708-E S-2023 أنّه يجب افتراض أنّ كلتا القيمتينrowLockوcolumnLockصحيحتان، بغض النظر عن القيم المتوفّرة في البث (لم يتم تنفيذ دعمcolumnLock، لذا يُفترض أنّها خاطئة دائمًا).
- إصلاح تسلسل إشارات الصور النقطية لحلّ الخطأ
- الصورة:
- تمت إضافة إمكانية استخدام الصور المصغّرة بتنسيق DASH. يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية لها
ImageOutputبالقرب من أوقات عرضها.
- تمت إضافة إمكانية استخدام الصور المصغّرة بتنسيق DASH. يتم اقتصاص صور الشبكة وتوفير صور مصغّرة فردية لها
- DRM:
- تشغيل عيّنات "التقدّم الواضح" غير المشفرة في المحتوى الخاضع لإدارة الحقوق الرقمية على الفور بشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقّف التشغيل مؤقتًا إذا لم تكن المفاتيح جاهزة
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق،
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyأوDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- إضافة IMA:
- تم إصلاح مشكلة تعذُّر تشغيل إعلانات DASH وHLS التي لا تتضمّن امتداد الملف المناسب.
- تشغيل عيّنات "التقدّم الواضح" غير المشفرة في المحتوى الخاضع لإدارة الحقوق الرقمية على الفور بشكل تلقائي، حتى إذا لم تكن مفاتيح العيّنات المشفرة اللاحقة جاهزة بعد قد يؤدي ذلك إلى توقّف التشغيل مؤقتًا إذا لم تكن المفاتيح جاهزة
عندما يصل موضع التشغيل إلى العيّنات المشفّرة (ولكن في السابق،
لم يكن التشغيل ليبدأ على الإطلاق عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
- الجلسة:
- إيقاف ميزة رصد النقر المزدوج في تطبيقات التلفزيون (#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).
- تم إصلاح المشكلة التي كانت تتسبّب في استمرار تعديل الإزاحة إلى
- المحوّل:
- حلّ مشكلة كانت تؤدي إلى حدوث خطأ في برنامج الترميز أثناء عملية الإعداد بسبب ضبط معدّل تشغيل مرتفع.
- أدوات الاستخراج:
- الصوت:
- إصلاح مشكلة معالجة نهاية البث (EOS) في
SilenceSkippingAudioProcessorعند استدعائها عدة مرات (#712)
- إصلاح مشكلة معالجة نهاية البث (EOS) في
- الفيديو:
- تمت إضافة حلّ بديل لمشكلة في أجهزة Galaxy Tab S7 FE وChromecast with Google TV وLenovo M10 FHD Plus تؤدي إلى تصنيف بث AVC بمعدل 60 إطارًا في الثانية على أنّه غير متوافق (#693).
- البيانات الوصفية:
- تم إصلاح الخطأ الذي كان يتم فيه ملء
MediaMetadataفقط من تعليقات Vorbis باستخدام مفاتيح بأحرف كبيرة (#876). - إصلاح الخطأ
OutOfMemoryErrorعند تحليل إطارات ID3 كبيرة جدًا، ما يعني أنّه يمكن مواصلة التشغيل بدون معلومات العلامة بدلاً من تعذُّر التشغيل تمامًا.
- تم إصلاح الخطأ الذي كان يتم فيه ملء
- DRM:
- توسيع الحلّ البديل لعنوان URL غير صحيح لترخيص ClearKey
https://default.urlليشمل المستوى 33 من واجهة برمجة التطبيقات والإصدارات الأحدث (كان الحلّ البديل ينطبق سابقًا على المستوى 33 من واجهة برمجة التطبيقات فقط) (#837) - إصلاح
ERROR_DRM_SESSION_NOT_OPENEDعند التبديل من محتوى مشفّر إلى محتوى غير مشفّر بدون ربط سطح بعارض الفيديو حدث الخطأ بسبب استخدام برنامج ترميز آمن بشكل غير صحيح لتشغيل المحتوى غير المحمي.
- توسيع الحلّ البديل لعنوان URL غير صحيح لترخيص ClearKey
- الجلسة:
- ضَع المفاتيح والقيم المخصّصة في
MediaMetadataCompatإلىMediaMetadata.extrasوMediaMetadata.extrasإلىMediaMetadataCompat(#756, #802). - إصلاح مشكلة البث
notifyChildrenChangedلوحدات التحكّم القديمة (#644) - تم إصلاح الخطأ الذي كان يؤدي إلى تعذُّر عمل بعض الأجهزة عند ضبط وقت سلبي
setWhenلمؤقت الإشعار الذي تم إيقافه (#903). - إصلاح الخطأ
IllegalStateExceptionالذي يحدث عندما لا يكتمل ربط أداة التحكّم في إشعارات الوسائط عند طلب أول تعديل للإشعار (#917)
- ضَع المفاتيح والقيم المخصّصة في
- UI:
- إضافة DASH:
- يجب تحليل "f800" على أنّه عدد القنوات 5 لبرنامج Dolby في ملف بيان DASH (#688).
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إضافة البث:
- تنظيف عملية إنشاء
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) - أضِف عمق البتات الخاص بالسطوع واللون إلى
ColorInfo(#491). - إضافة حقول إضافية إلى تسجيل بيانات Common Media Client Data (CMCD): طلب العنصر التالي (
nor) وطلب النطاق التالي (nrr) (#8699) - إضافة وظيفة لنقل بيانات Common Media Client Data (CMCD) باستخدام مَعلمات طلب البحث (#553)
- حلّ المشكلة
ConcurrentModificationExceptionفيExperimentalBandwidthMeter(#612) - أضِف المَعلمة
MediaPeriodIdإلىCompositeMediaSource.getMediaTimeForChildMediaTime. - إتاحة
ClippingMediaSource(والمصادر الأخرى التي تتضمّن إزاحات الفترة/النافذة الزمنية) فيConcatenatingMediaSource2(#11226) - غيِّر
BaseRenderer.onStreamChanged()لتلقّي وسيطةMediaPeriodIdأيضًا.
- المحوّل:
- تحليل بيانات تدوير EXIF لمدخلات الصور
- أزِل نوع التعليق التوضيحي
TransformationRequest.HdrModeوالثوابت المرتبطة به. استخدِمComposition.HdrModeوالثوابت المرتبطة به بدلاً من ذلك. - بسِّط
OverlaySettingsلحلّ مشاكل التدوير. - تم تغيير المَعلمتَين
frameRateوdurationUsالخاصتَين بـSampleConsumer.queueInputBitmapإلىTimestampIterator.
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessللسماح صراحةً بالتشغيل التكيّفي غير السلس أو عدم السماح به. وسيظل الإعداد التلقائي على سلوكه الحالي وهوtrue.
- أضِف
- أدوات الاستخراج:
- MPEG-TS: تأكَّد من عرض الإطار الأخير من خلال تمرير آخر وحدة وصول إلى قائمة العيّنات (#7909).
- إصلاح الخطأ الإملائي عند تحديد
rotationDegreesتم تغييرprojectionPosePitchإلىprojectionPoseRoll(#461). - إزالة الافتراض بأنّه يمكن فحص مثيلات
Extractorمباشرةً باستخدامinstanceofإذا أردت الوصول إلى تفاصيل تنفيذExtractorفي وقت التشغيل، عليك أولاً استدعاءExtractor.getUnderlyingInstance. - أضِف
BmpExtractor. - أضِف
WebpExtractor. - أضِف
HeifExtractor. - إضافة دعم QuickTime الكلاسيكي إلى
Mp4Extractor
- الصوت:
- إضافة دعم لترميز PCM ذي الترتيب الكبير 24/32 بت في ملفات MP4 وMatroska، وتحليل ترميز PCM لـ
lpcmفي ملفات MP4 - إضافة إمكانية استخراج صوت Vorbis في MP4
- أضِف
AudioSink.getFormatOffloadSupport(Format)الذي يسترد مستوى توافق جهاز استقبال الصوت مع التنسيق من خلالDefaultAudioOffloadSupportProvider. تعرض هذه الدالةAudioOffloadSupportالجديد الذي يتضمّنisFormatSupportedوisGaplessSupportedوisSpeedChangeSupported. - أضِف
AudioSink.setOffloadMode()يتم من خلاله ضبط إعدادات تخفيف الحِمل على جهاز استقبال الصوت. القيمة التلقائية هيAudioSink.OFFLOAD_MODE_DISABLED. - يمكن تفعيل ميزة "التفريغ" من خلال
setAudioOffloadPreferenceفيTrackSelectionParameters. إذا كان الإعداد المفضّل هو التفعيل، وكان الجهاز يتيح نقل البيانات إلى جهاز آخر بالتنسيق المحدد، وكان اختيار المقطع الصوتي عبارة عن مقطع صوتي واحد، سيتم تفعيل ميزة نقل البيانات إلى جهاز آخر. - إذا تم ضبط
audioOffloadModePreferenceعلىAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED، سيتم اختيار مقطع صوتي واحد فقط من خلالDefaultTrackSelector، وذلك فقط إذا كان تنسيق هذا المقطع متوافقًا مع ميزة "تخفيف الحِمل". إذا لم يكن أي مقطع صوتي متوافقًا مع ميزة "تخفيف الحِمل"، لن يتم اختيار أي مقطع. - تم إيقاف إمكانية تشغيل المحتوى بدون انقطاع عند إيقاف التحميل قبل المستوى 33 لواجهة برمجة التطبيقات بسبب حدوث مشكلة في موضع التشغيل بعد الانتقال إلى المسار التالي.
- أزِل المَعلمة
enableOffloadمن توقيع الدالةDefaultRenderersFactory.buildAudioSink. - إزالة طريقة الدفع
DefaultAudioSink.Builder.setOffloadMode - إزالة قيمة intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED - إضافة إمكانية استخدام البيانات الوصفية لتشغيل Opus بدون انقطاع أثناء التشغيل من الجهاز
- السماح باسترداد أداة العرض من خلال إيقاف ميزة "نقل البيانات" في حال تعذُّر الكتابة في المرة الأولى (#627)
- تفعيل ميزة "تحديد موعد تخفيف الحمل" تلقائيًا لتشغيل المحتوى الصوتي فقط الذي تم تخفيف حمله
- احذف
ExoPlayer.experimentalSetOffloadSchedulingEnabledوAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - تمت إعادة تسمية
onExperimentalSleepingForOffloadChangedإلىonSleepingForOffloadChangedوonExperimentalOffloadedPlaybackإلىonOffloadedPlayback. - نقل واجهات
TrackSelectionParametersوالتعريفات ذات الصلة بوضع تخفيف حمل الصوت إلى فئةAudioOffloadPreferencesداخلية - أضِف عمليات رد الاتصال
onAudioTrackInitializedوonAudioTrackReleasedإلىAnalyticsListenerوAudioRendererEventListenerوAudioSink.Listener. - تم إصلاح مشكلة نقص سعة تخزين مؤقت الصوت في DTS Express (#650).
- تم إصلاح الخطأ الذي يؤدي إلى ظهور
IllegalArgumentException(#677) عند التحقّق من إمكانات E-AC3-JOC.
- إضافة دعم لترميز PCM ذي الترتيب الكبير 24/32 بت في ملفات MP4 وMatroska، وتحليل ترميز PCM لـ
- الفيديو:
- السماح للمكوّن
MediaCodecVideoRendererباستخدامVideoFrameProcessor.Factoryمخصّص - إصلاح الخطأ الذي كان يؤدي إلى عدم عرض الإطار الأول إذا كان بث الصوت يبدأ بطوابع زمنية سالبة (#291).
- السماح للمكوّن
- النص:
- إزالة
ExoplayerCuesDecoderتتعاملTextRendererالآن مباشرةً مع مسارات النصوص التي تتضمّنsampleMimeType = application/x-media3-cuesبدون الحاجة إلى مثيلSubtitleDecoder.
- إزالة
- البيانات الوصفية:
- لن يتم استدعاء
MetadataDecoder.decodeلعينات "فك التشفير فقط"، لأنّ التنفيذ يجب أن يعرض قيمة فارغة على أي حال.
- لن يتم استدعاء
- التأثير:
- إضافة
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)إدخال صورة نقطية في قائمة الانتظار حسب الطابع الزمني - غيِّر
VideoFrameProcessor.registerInputStream()ليكون غير مانع. يجب أن تتضمّن التطبيقاتVideoFrameProcessor.Listener#onInputStreamRegistered(). - تم تغيير المَعلمتَين
frameRateوdurationUsالخاصتَين بـVideoFrameProcessor.queueInputBitmapإلىTimestampIterator.
- إضافة
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح الخطأ الذي يتسبّب في ظهور استثناء (#571) عند تشغيل بث مباشر بتنسيق DASH يتضمّن عدة فترات وليس العنصر الأول في قائمة التشغيل.
- إصدار StreamManager قبل طلب
AdsLoader.destroy() - رفع إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.31.0
- الجلسة:
- اضبط سلوك الخدمة التي تعمل في المقدّمة للإشعارات على
FOREGROUND_SERVICE_IMMEDIATEفيDefaultMediaNotificationProvider(#167). - استخدِم فقط
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()المستوى 31 لواجهة برمجة التطبيقات أو أعلى لتجنُّب المشاكل المتعلقة بواجهة برمجة التطبيقات المتوقّفة نهائيًا على أجهزة Samsung (#167). - استخدِم أداة التحكّم في إشعارات الوسائط كخادم وكيل لضبط الأوامر المتاحة والتنسيق المخصّص المستخدَم لتعبئة الإشعار وجلسة النظام الأساسي.
- تحويل أحداث أزرار الوسائط التي يتلقّاها
MediaSessionService.onStartCommand()في Media3 بدلاً من توجيهها إلى جلسة النظام الأساسي ثم إلى Media3 بهذه الطريقة، يكون عنصر التحكّم في المكالمات هو نفسه عنصر التحكّم في إشعارات الوسائط دائمًا، ويمكن للتطبيقات التعرّف بسهولة على المكالمات الواردة من الإشعار بالطريقة نفسها على جميع مستويات واجهة برمجة التطبيقات المتوافقة. - تم إصلاح الخطأ الذي كان يتسبّب في عدم تقدُّم
MediaController.getCurrentPosition()عند الاتصال بجهازMediaSessionCompatقديم. - أضِف
MediaLibrarySession.getSubscribedControllers(mediaId)لتسهيل الأمر. - تجاوز
MediaLibrarySession.Callback.onSubscribe()لتأكيد توفّر رقم تعريف العنصر الرئيسي الذي يشترك فيه عنصر التحكّم. في حال نجاح العملية، يتم قبول الاشتراك ويتم استدعاءnotifyChildrenChanged()على الفور لإبلاغ المتصفّح (#561). - أضِف وحدة العرض التوضيحي للجلسة في نظام التشغيل Automotive وفعِّل العرض التوضيحي للجلسة في Android Auto.
- لا تضبط قائمة انتظار جلسة إطار العمل عندما لا يتوفّر
COMMAND_GET_TIMELINEلوحدة التحكّم في إشعار الوسائط. عندما يكون Android Auto هو أداة التحكّم في العميل التي تقرأ من جلسة إطار العمل، يؤدي ذلك إلى عدم عرض الزرqueueفي واجهة مستخدم Android Auto (#339). - استخدِم
DataSourceBitmapLoaderتلقائيًا بدلاً منSimpleBitmapLoader(#271, #327). - أضِف
MediaSession.Callback.onMediaButtonEvent(Intent)الذي يسمح للتطبيقات بتجاوز معالجة أحداث زر الوسائط التلقائية.
- اضبط سلوك الخدمة التي تعمل في المقدّمة للإشعارات على
- UI:
- أضِف عملية تنفيذ
Player.Listenerلأجهزة Wear OS تعالج إيقاف التشغيل بسببPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTمن خلال عرض مربّع حوار نظام يتيح للمستخدم توصيل جهاز إخراج صوتي مناسب (مثل سماعات رأس تعمل بالبلوتوث). سيستأنف المستمع التشغيل تلقائيًا إذا تم توصيل جهاز مناسب خلال مهلة قابلة للضبط (المهلة التلقائية هي 5 دقائق).
- أضِف عملية تنفيذ
- عمليات التنزيل:
- يجب تقديم بيان عن نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" من أجل توفير التوافق مع
DownloadServiceعلى Android 14. عند استخدام هذه الخدمة، يجب أن يضيف التطبيق أيضًاdataSyncكـforegroundServiceTypeفي ملف البيان، وأن يضيف إذنFOREGROUND_SERVICE_DATA_SYNC(#11239).
- يجب تقديم بيان عن نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" من أجل توفير التوافق مع
- إضافة HLS:
- إعادة تحميل قائمة تشغيل البث المباشر بتنسيق HLS بفاصل زمني يتم احتسابه من وقت بدء آخر عملية تحميل بدلاً من وقت اكتمال آخر عملية تحميل (#663)
- إضافة DASH:
- السماح بتكرار معرّف DASH نفسه في عنوان URL لنموذج المقطع
- إضافة دعم تجريبي لتحليل الترجمة والشرح أثناء الاستخراج يتيح هذا التنسيق دمج الترجمة والشرح المتداخلَين بشكل أفضل، بما في ذلك حل مشكلة الوميض عند الانتقال بين مقاطع الترجمة والشرح. يمكنك تفعيل هذه الميزة باستخدام
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- إضافة RTSP:
- تم إصلاح مشكلة تزامن قد تؤدي إلى ظهور
IndexOutOfBoundsExceptionعند الرجوع إلى TCP أو توقّف التشغيل مؤقتًا في بعض الحالات. - التحقّق من الحالة في إعداد RTSP عند عرض حالة التحميل الخاصة بـ
RtspMediaPeriod(#577) - تجاهل طرق طلبات Rtsp المخصّصة في العنوان العام لردّ الخيارات (#613).
- استخدام قيمة مهلة الردّ على طلب إعداد RTSP في الفاصل الزمني لإرسال طلبات خيارات RTSP الخاصة بإبقاء الاتصال نشطًا (#662)
- تم إصلاح مشكلة تزامن قد تؤدي إلى ظهور
- إضافات برامج الترميز (FFmpeg وVP9 وAV1 وMIDI وما إلى ذلك):
- إصدار وحدة فك ترميز MIDI التي تتيح تشغيل ملفات MIDI العادية باستخدام مكتبة Jsyn لإنشاء الصوت
- أضِف
DecoderOutputBuffer.shouldBeSkippedلوضع علامة مباشرةً على مخازن مؤقتة للإخراج لا يلزم عرضها. يُفضّل استخدام هذا الخيار بدلاً منC.BUFFER_FLAG_DECODE_ONLYالذي سيتم إيقافه نهائيًا. - أضِف
Decoder.setOutputStartTimeUsوSimpleDecoder.isAtLeastOutputStartTimeUsللسماح لبرامج الترميز بإسقاط عيّنات الترميز فقط قبل وقت البدء. ويجب استخدام هذا الإعداد بدلاً منBuffer.isDecodeOnlyالذي سيتم إيقافه نهائيًا. - إصلاح الخطأ الذي يمنع نشر أداة فك ترميز MIDI إلى مستودع Maven تمت إعادة تسمية العنصر إلى
media3-exoplayer-midi(#734).
- إضافة Leanback:
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
ArithmeticExceptionفي رمز Leanback عند إيقاف إحدى الواجهات (#617).
- تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
- أدوات الاختبار:
- إتاحة استخدام
TestExoPlayerBuilderوFakeClockمع اختبارات واجهة المستخدم في Espresso واختبارات واجهة المستخدم في Compose يحلّ هذا الإصلاح الخطأ الذي يؤدي إلى تقدّم التشغيل بشكل غير حتمي أثناء التفاعل مع طرق عرض Espresso أو Compose.
- إتاحة استخدام
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)وTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)استخدِمComposition.Builder.setHdrMode(int)ومرِّرCompositionإلىTransformer.start(Composition, String)بدلاً من ذلك. - أزِل الطريقة المتوقّفة نهائيًا
DownloadNotificationHelper.buildProgressNotificationواستخدِم طريقة غير متوقّفة نهائيًا تأخذ المَعلمةnotMetRequirementsبدلاً منها.
- إزالة
الإصدار 1.2.0-rc01
1 تشرين الثاني (نوفمبر) 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-beta01
19 أكتوبر 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-alpha02
29 سبتمبر 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.2.0-alpha01
17 أغسطس 2023
استخدِم الإصدار الثابت 1.2.0.
الإصدار 1.1.0
الإصدار 1.1.1
16 أغسطس 2023
- المكتبة المشتركة:
- إزالة تبعية
multidexالتي تمت إضافتها عن طريق الخطأ من جميع الوحدات(#499)
- إزالة تبعية
- ExoPlayer:
- تم إصلاح المشكلة في
PlaybackStatsListenerحيث يتم إنشاءPlaybackStatsغير صحيح بعد محو قائمة التشغيل. - إضافة حقول إضافية إلى تسجيل بيانات Common Media Client Data (CMCD): تنسيق البث (sf) ونوع البث (st) والإصدار (v) وأعلى معدّل نقل بيانات (tb) ومدة العنصر (d) وسرعة معالجة البيانات المقاسة (mtp) ونوع العنصر (ot) (#8699).
- تم إصلاح المشكلة في
- الصوت:
- تم إصلاح الخطأ الذي لم يتم فيه الانتقال من
Player.getState()إلىSTATE_ENDEDعند تشغيل ملفات قصيرة جدًا (#538).
- تم إصلاح الخطأ الذي لم يتم فيه الانتقال من
- تفريغ الصوت:
- إضافة صفحات Ogg ID Header وComment Header إلى بداية دفق البتات لتشغيل Opus المحمّل وفقًا لمعيار RFC 7845
- الفيديو:
- H.265/HEVC: تم إصلاح مشكلة تحليل معلومات الصورة المرجعية القصيرة والطويلة الأمد في SPS.
- النص:
- CEA-608: تغيير منطق اقتطاع الإشارات لكي يأخذ في الاعتبار النص المرئي فقط في السابق، كان يتم تضمين المسافة البادئة وإزاحة علامة التبويب عند حصر طول الإشارة إلى 32 حرفًا (وهو ما كان صحيحًا من الناحية الفنية وفقًا للمواصفات) (#11019).
- إضافة "إعلانات الوسائط التفاعلية":
- تمت ترقية إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.30.3.
- الجلسة:
- أضِف تخطيطًا مخصّصًا إلى حالة وحدة التحكّم وقدِّم دالة getter للوصول إليه. عندما يتغيّر التنسيق المخصّص، يتم استدعاء
MediaController.Listener.onCustomLayoutChanged. يمكن للتطبيقات التي تريد إرسال تنسيقات مخصّصة مختلفة إلى وحدات تحكّم مختلفة في Media3 إجراء ذلك فيMediaSession.Callback.onConnectباستخدامAcceptedResultBuilderللتأكّد من أنّ التنسيق المخصّص متاح لوحدة التحكّم عند اكتمال عملية الربط. - تم إصلاح الحالات التي أرسل فيها
MediaLibraryServiceLegacyStubرسالة خطأ إلىResultلا تتوافق مع هذا الإجراء، ما أدّى إلى ظهورUnsupportedOperationException(#78). - تم إصلاح طريقة إنشاء
PlayerWrapperVolumeProviderCompatمن خلال تحديد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()بـ enable لتفعيل تسجيل المفاتيح المخصّصة.
- يكون تسجيل بيانات CMCD غير مفعّل تلقائيًا، استخدِم
- إضافة إجراء إضافي إلى ملف البيان الخاص بالتطبيق التجريبي الرئيسي لتسهيل بدء التطبيق التجريبي باستخدام ملف
*.exolist.jsonمخصّص (#439) - أضِف
ExoPlayer.setVideoEffects()لاستخدامEffectأثناء تشغيل الفيديو. - عدِّل
SampleQueueلتخزينsourceIdكـlongبدلاً منint. يؤدي ذلك إلى تغيير تواقيع الطريقتين العلنيتينSampleQueue.sourceIdوSampleQueue.peekSourceId. - أضِف مَعلمات إلى طُرق
LoadControlshouldStartPlaybackوonTracksSelectedالتي تسمح بربط هذه الطرقMediaPeriodذات الصلة. - غيِّر توقيع
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)من خلال إضافة مَعلمة مخطط زمني تحتوي على الفترات التي يتم فيها استخدام معرّفات UID كمفاتيح في الخريطة. هذا الإجراء مطلوب لتجنُّب مشاكل التزامن مع أحداث البث المباشر المتعددة الفترات. - إيقاف
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)وBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)يمكن بدلاً من ذلك استدعاء صيغة الطرق بدونmediaTimeOffsetUs. يُرجى العِلم أنّه حتى بالنسبة إلى المتغيرات المتوقّفة نهائيًا، لم يعُد يتم إضافة الإزاحة إلىstartTimeUsوendTimeUsلعناصرMediaLoadDataالتي يتم إرسالها بواسطة أداة الإرسال. - أعِد تسمية
ExoTrackSelection.blacklistإلىexcludeTrackوisBlacklistedإلىisTrackExcluded. - إصلاح السلوك غير المتسق بين
ExoPlayer.setMediaItem(s)وaddMediaItem(s)عند استدعائهما في قائمة تشغيل فارغة
- يجب السماح لـ ExoPlayer بالتحكّم في طرق مستوى صوت الجهاز فقط في حال الموافقة الصريحة على ذلك. استخدِم
- المحوّل:
- إزالة
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)استخدِمExoPlayerAssetLoader.Factory(MediaSource.Factory)وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)بدلاً من ذلك. - إزالة
Transformer.startTransformation(MediaItem, ParcelFileDescriptor) - تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف عملية التحويل (ما يؤدي إلى انتهاء مهلة برنامج دمج الصوت والفيديو) إذا تم إرسال إشارة إلى نهاية بث الفيديو في الوقت الذي كان فيه إطار إدخال بانتظار المعالجة.
- يمكنك طلب برامج الترميز من خلال
MediaCodecListبدلاً من استخدام أدواتfindDecoder/EncoderForFormat، وذلك لتوسيع نطاق التوافق. - إزالة إعدادات إطارات B في
DefaultEncoderFactoryلأنّها لا تعمل على بعض الأجهزة
- إزالة
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeالذي يكون غير مفعَّل تلقائيًا. عند تفعيل هذا الخيار، سيؤدي النقر علىDefaultTrackSelectorإلى بدء عملية اختيار مقطع صوتي جديد عند تغيير إمكانات العارض.
- أضِف
- أدوات الاستخراج:
- الصوت:
- تم إصلاح الخطأ الذي يؤدي إلى تعذُّر تشغيل بعض الفيديوهات عند تفعيل ميزة "النفق" وتفعيل
AudioProcessors، مثلاً عند قص الفيديو بدون فواصل (#10847). - تغليف إطارات Opus في حِزم Ogg في عمليات التشغيل المباشر (التفريغ)
- استقراء الموقع الجغرافي الحالي أثناء النوم باستخدام ميزة جدولة نقل البيانات
- أضِف
Renderer.release()وAudioSink.release()لإصدار الموارد في نهاية عمر اللاعب. - الاستماع إلى التغييرات في إمكانات الصوت في
DefaultAudioSinkأضِف المَعلمة المطلوبةcontextفي الدالة الإنشائية الخاصة بـDefaultAudioSink، والتي سيتم من خلالها تسجيلDefaultAudioSinkكمعالج للأحداث فيAudioCapabilitiesReceiverوتعديل السمةaudioCapabilitiesعند إعلامها بتغيير في الإمكانات. - نشر تغييرات إمكانات الصوت من خلال حدث جديد
onAudioCapabilitiesChangedفي واجهةAudioSink.Listener، وواجهة جديدةRendererCapabilities.Listenerتؤدي إلى تشغيل أحداثonRendererCapabilitiesChanged. - إضافة
ChannelMixingAudioProcessorلتطبيق التوسيع/المزج على قنوات الصوت. - أضِف قيمة عدد صحيح جديدة
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEإلىDecoderDiscardReasonsلتجاهل برنامج ترميز الصوت عندما يكون وضع التجاوز ممكنًا بعد تغيير إمكانات الصوت. - إضافة إمكانية التشغيل المباشر لتنسيقات DTS Express وDTS:X (#335)
- تم إصلاح الخطأ الذي يؤدي إلى تعذُّر تشغيل بعض الفيديوهات عند تفعيل ميزة "النفق" وتفعيل
- الفيديو:
- اجعل
MediaCodecVideoRendererيعرضVideoSizeبعرض وارتفاع 0 عند إيقاف أداة العرض. يتم استدعاءPlayer.Listener.onVideoSizeChangedوفقًا لذلك عند حدوث تغيير فيPlayer.getVideoSize(). بعد تطبيق هذا التغيير، سيصبح عرض وارتفاع حجم الفيديو في ExoPlayer معMediaCodecVideoRendererهو 0 عندما لا يتيحPlayer.getCurrentTracksعرض الفيديو، أو عندما لا يتم تحديد حجم مسار الفيديو المتوافق بعد.
- اجعل
- DRM:
- تقليل مستوى رؤية عدة طرق مخصّصة للاستخدام الداخلي فقط في
DefaultDrmSessionوالتي لا يُتوقّع استدعاؤها من خارج حزمة DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- تقليل مستوى رؤية عدة طرق مخصّصة للاستخدام الداخلي فقط في
- Muxer:
- أضِف مكتبة جديدة لدمج الصوت والفيديو يمكن استخدامها لإنشاء ملف حاوية MP4.
- إضافة "إعلانات الوسائط التفاعلية":
- فعِّل أحداث البث المباشر المتعدّدة الفترات بتنسيق DASH من أجل ميزة "إدراج الإعلانات الديناميكي". يُرجى العِلم أنّ الإصدار الحالي لا يتيح بعد التنقّل في أحداث البث المباشر (#10912).
- تم إصلاح الخطأ الذي يؤدي إلى إدراج مجموعة إعلانية جديدة في البث المباشر لأنّ موضع المحتوى المحسوب في المخططات الزمنية المتتالية يختلف قليلاً.
- الجلسة:
- أضِف طريقة مساعدة
MediaSession.getControllerForCurrentRequestللحصول على معلومات حول وحدة التحكّم التي تستدعي حاليًا طريقةPlayer. - أضِف
androidx.media3.session.MediaButtonReceiverللسماح للتطبيقات بتنفيذ ميزة استئناف التشغيل باستخدام أحداث زر الوسائط التي يتم إرسالها، على سبيل المثال، من سماعة رأس متصلة بالبلوتوث (#167). - إضافة تنفيذ تلقائي إلى
MediaSession.Callback.onAddMediaItemsللسماح بتمريرMediaItemsالمطلوبة إلىPlayerإذا كانت تتضمّنLocalConfiguration(مثل URI) (#282). - إضافة زرَّي الأوامر "الانتقال إلى المحتوى السابق" و "الانتقال إلى المحتوى التالي" إلى العرض المضغوط لإشعارات الوسائط تلقائيًا على الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم (#410)
- إضافة تنفيذ تلقائي إلى
MediaSession.Callback.onAddMediaItemsللسماح بتمريرMediaItemsالمطلوبة إلىPlayerإذا كانت تتضمّنLocalConfiguration(مثل URI) (#282). - إضافة زرَّي الأوامر "الانتقال إلى المحتوى السابق" و "الانتقال إلى المحتوى التالي" إلى العرض المضغوط لإشعارات الوسائط تلقائيًا على الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم (#410)
- أضِف طريقة مساعدة
- UI:
- أضِف طريقتَي Util
shouldShowPlayButtonوhandlePlayPauseButtonActionلكتابة عناصر مخصّصة في واجهة المستخدم تتضمّن زر تشغيل/إيقاف مؤقت.
- أضِف طريقتَي Util
- إضافة RTSP:
- إضافة DASH:
- إزالة إزاحة الوقت للوسائط من
MediaLoadData.startTimeMsوMediaLoadData.endTimeMsلجداول بيانات بث DASH المتعددة الفترات - تم إصلاح الخطأ الذي كان يتسبّب في ظهور
IndexOutOfBoundsException(#10838) عند إعادة إعداد مصدر وسائط Dash مباشر متعدد الفترات.
- إزالة إزاحة الوقت للوسائط من
- إضافة HLS:
- أضِف
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)لضبط مهلة مؤقتة لمؤشر التحميل كي ينتظر إلى أن يتم تهيئةTimestampAdjuster. إذا لم يكتمل الإعداد قبل انتهاء المهلة، سيتم عرض الخطأPlaybackExceptionلتجنُّب توقّف التشغيل بشكل دائم. تم ضبط المهلة على صفر تلقائيًا (#323).
- أضِف
- أدوات الاختبار:
- تحقَّق من عدم حساسية مخطّط URI لحالة الأحرف في
DataSourceContractTest.
- تحقَّق من عدم حساسية مخطّط URI لحالة الأحرف في
- إزالة الرموز المتوقّفة نهائيًا:
- أزِل دوال إنشاء
DefaultAudioSinkواستخدِمDefaultAudioSink.Builderبدلاً منها. - أزِل
HlsMasterPlaylistواستخدِمHlsMultivariantPlaylistبدلاً منه. - إزالة
Player.stop(boolean)استخدِمPlayer.stop()وPlayer.clearMediaItems()(إذا كانت قيمةresetهيtrue) بدلاً من ذلك. - أزلنا اثنين من أدوات إنشاء
SimpleCacheالمتوقّفة نهائيًا، واستخدمنا أداة إنشاء غير متوقّفة نهائيًا تأخذDatabaseProviderبدلاً من ذلك لتحسين الأداء. - أزِل أداة إنشاء
DefaultBandwidthMeter، واستخدِمDefaultBandwidthMeter.Builderبدلاً منها. - أزِل دوال إنشاء
DefaultDrmSessionManager، واستخدِمDefaultDrmSessionManager.Builderبدلاً منها. - إزالة اثنين من أدوات إنشاء
HttpDataSource.InvalidResponseCodeExceptionالمتوقّفة نهائيًا، واستخدام أداة إنشاء غير متوقّفة نهائيًا تقبل حقولاً إضافية(causeوresponseBody) لتحسين تسجيل الأخطاء - إزالة
DownloadHelper.forProgressiveوDownloadHelper.forHlsوDownloadHelper.forDashوDownloadHelper.forSmoothStreamingواستخدامDownloadHelper.forMediaItemبدلاً منها - أزِل الدالة الإنشائية
DownloadServiceالمتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة نهائيًا تتضمّن خيار توفير المَعلمةchannelDescriptionResourceId. - أزِل ثوابت السلسلة التي تم إيقافها نهائيًا لمجموعات الأحرف (
ASCII_NAMEوUTF8_NAMEوISO88591_NAMEوUTF16_NAMEوUTF16LE_NAME)، واستخدِم مجموعات أحرف Kotlin من الحزمةkotlin.textأوjava.nio.charset.StandardCharsetsأوcom.google.common.base.Charsetsبدلاً من ذلك. - أزِل الدالة الإنشائية
WorkManagerSchedulerالمتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة نهائيًا تتضمّن خيار تقديم المَعلمةContextبدلاً من ذلك. - أزِل الطرق المتوقّفة نهائيًا
createVideoSampleFormatوcreateAudioSampleFormatوcreateContainerFormatوcreateSampleFormatالتي كانت تُستخدَم لإنشاء مثيل للفئةFormat. بدلاً من ذلك، استخدِمFormat.Builderلإنشاء مثيلات منFormat. - أزِل الطرق المتوقّفة نهائيًا، مثل
copyWithMaxInputSizeوcopyWithSubsampleOffsetUsوcopyWithLabelوcopyWithManifestFormatInfoوcopyWithGaplessInfoوcopyWithFrameRateوcopyWithDrmInitDataوcopyWithMetadataوcopyWithBitrateوcopyWithVideoSize، واستخدِمFormat.buildUpon()وطرق 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).
- أضِف
- أدوات الاستخراج:
- إصلاح تحليل حزمة SPS بتنسيق H.265 في ملفات MPEG-TS من خلال إعادة استخدام منطق التحليل المستخدَم حاليًا في أدوات استخراج RTSP وMP4 (#303)
- النص:
- SSA: إضافة إمكانية استخدام ملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب البايت (#319).
- الجلسة:
- تم إصلاح المشكلة المتمثلة في عدم تعديل
MediaControllerللأوامر المتاحة عند الاتصال بجهازMediaSessionCompatقديم يحدّث إجراءاته. - تم إصلاح الخطأ الذي كان يمنع
MediaLibraryServiceمن عرض قيمة فارغة لطلب من واجهة مستخدم النظام إلىCallback.onGetLibraryRootمعparams.isRecent == trueعلى الإصدار 30 من واجهة برمجة التطبيقات (#355). - إصلاح تسرب الذاكرة في
MediaSessionServiceأوMediaLibraryService(#346) - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
IllegalStateExceptionعند دمجTimelineوتعديل الموضع فيMediaSessionضمنMediaController.
- تم إصلاح المشكلة المتمثلة في عدم تعديل
الإصدار 1.0.1
18 أبريل 2023
تم طرح androidx.media3:media3-*:1.0.1. يتضمّن الإصدار 1.0.1 هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.6 من ExoPlayer.
- المكتبة الأساسية:
- إعادة ضبط الإعداد التلقائي للبث المباشر المستهدف عند البحث عن الموضع التلقائي (#11051)
- تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف التشغيل بسبب عدم توفّر عيّنات في وسائط معيّنة.
- الجلسة:
- تم إصلاح الخطأ الذي يؤدي إلى حدوث استثناء في
MediaController(#290) عند نشر عناصر متطابقة متعددة في قائمة الانتظار بواسطة إصدار قديم منMediaSessionCompat. - إضافة عملية إعادة توجيه
MediaSession.broadcastCustomCommandالناقصة إلىMediaControllerCompat.Callback.onSessionEventالقديمة (#293) - تم إصلاح الخلل الذي كان يؤدي إلى عدم تعديل الأوامر المتاحة عند استدعاء
MediaSession.setPlayer. - تم إصلاح المشكلة التي يتم فيها تجاهل مثيلات
TrackSelectionOverrideالمرسَلة منMediaControllerإذا كانت تشير إلى مجموعة تتضمّنFormat.metadata(#296). - تم إصلاح المشكلة التي تتطلّب توفّر
Player.COMMAND_GET_CURRENT_MEDIA_ITEMللوصول إلى البيانات الوصفية من خلالMediaSessionCompatالقديم. - تم إصلاح المشكلة التي تتسبّب في حدوث أعطال عند استخدام مثيلات
MediaSessionفي سلسلة محادثات في الخلفية ضمنMediaSessionService(#318). - تم إصلاح المشكلة التي يتم فيها تعريف أداة استقبال أزرار الوسائط من خلال المكتبة بدون أن يكون التطبيق قد قصد ذلك (#314).
- تم إصلاح الخطأ الذي يؤدي إلى حدوث استثناء في
- DASH:
- إصلاح مشكلة معالجة المخططات الزمنية للمقاطع الفارغة (#11014)
- RTSP:
- إعادة المحاولة باستخدام TCP إذا تعذّر إعداد RTSP باستخدام UDP وظهر الخطأ 461 في RTSP UnsupportedTransport (#11069).
الإصدار 1.0.0
22 مارس 2023
تم طرح androidx.media3:media3-*:1.0.0. يتضمّن الإصدار 1.0.0 هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.5 من ExoPlayer.
لم يتم إجراء أي تغييرات منذ الإصدار 1.0.0-rc02.
الإصدار 1.0.0-rc02
2 مارس 2023
تم طرح androidx.media3:media3-*:1.0.0-rc02. يتضمّن الإصدار 1.0.0-rc02
هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.4 من ExoPlayer.
- المكتبة الأساسية:
- عمليات التنزيل:
- يمكن ضبط الحد الأقصى للفرق بين وقت بدء مقطعين ليتم دمجهما في
SegmentDownloaderوالفئات الفرعية (#248).
- يمكن ضبط الحد الأقصى للفرق بين وقت بدء مقطعين ليتم دمجهما في
- الصوت:
- الفيديو:
- ربط تنسيق HEVC HDR10 بـ
HEVCProfileMain10HDR10بدلاً منHEVCProfileMain10 - تمت إضافة حلّ بديل لمشكلة في جهاز "Chromecast مع Google TV" وجهاز Lenovo M10 FHD Plus تؤدي إلى تصنيف بث AVC بمعدل 60 إطارًا في الثانية على أنّه غير متوافق (#10898).
- تم إصلاح مشاكل الأداء المتعلّقة بإصدار اللقطات عند تشغيل الوسائط بمعدّل لقطات أعلى بكثير من معدّل إعادة تحميل الشاشة.
- ربط تنسيق HEVC HDR10 بـ
- البث:
- تم إصلاح مشكلة
STATE_IDLEالمؤقتة عند الانتقال بين عناصر الوسائط (#245).
- تم إصلاح مشكلة
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- الجلسة:
- تم إصلاح الخطأ الذي يتسبّب في عدم تعديل زر التشغيل/الإيقاف المؤقت في الإشعار وفقًا لحالة المشغّل (#192).
- إضافة "إعلانات الوسائط التفاعلية":
- تم إصلاح خطأ كان يمنع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
LOADEDالأول (وهو الحدث الوحيد في حالة عدم عرض إعلانات).
- تم إصلاح خطأ كان يمنع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
الإصدار 1.0.0-rc01
16 فبراير 2023
تم طرح androidx.media3:media3-*:1.0.0-rc01. يتضمّن الإصدار 1.0.0-rc01
هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.3 من ExoPlayer.
- المكتبة الأساسية:
- عدِّل منطق ترتيب برنامج فك الترميز في أداة العرض للحفاظ على الإعدادات المفضّلة لـ
MediaCodecSelector، حتى إذا أبلغ برنامج فك الترميز بأنّه قد لا يتمكّن من تشغيل الوسائط بأداء جيد. على سبيل المثال، باستخدام أداة الاختيار التلقائية، سيتم تفضيل أداة فك ترميز الأجهزة التي تتوافق مع الوظائف فقط على أداة فك ترميز البرامج التي تتوافق مع التنسيق بالكامل (#10604). - أضِف
ExoPlayer.Builder.setPlaybackLooperالذي يضبط سلسلة تشغيل حالية مسبقًا لمثيل ExoPlayer جديد. - السماح بإزالة أدوات مساعدة "مدير التنزيل" (#10776)
- أضِف مَعلمة إلى
BasePlayer.seekToللإشارة أيضًا إلى الأمر المستخدَم للبحث. - استخدام المظهر عند تحميل عناصر قابلة للرسم على الإصدار 21 من واجهة برمجة التطبيقات أو الإصدارات الأحدث (#220)
- إضافة
ConcatenatingMediaSource2تتيح دمج عناصر وسائط متعددة في نافذة واحدة (#247)
- عدِّل منطق ترتيب برنامج فك الترميز في أداة العرض للحفاظ على الإعدادات المفضّلة لـ
- أدوات الاستخراج:
- يجب طرح الخطأ
ParserExceptionبدلاً منNullPointerExceptionإذا كان جدول العيّنات (stbl) لا يتضمّن وصفًا مطلوبًا للعيّنات (stsd) عند تحليل وحدات trak. - تخطّي العيّنات بشكل صحيح عند الانتقال مباشرةً إلى إطار مزامنة في fMP4 (#10941)
- يجب طرح الخطأ
- الصوت:
- استخدِم معدّل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم ذاكرة التخزين المؤقت لـ
AudioTrackفي عمليات التشغيل المباشر (تقنية مرور الإشارة).
- استخدِم معدّل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم ذاكرة التخزين المؤقت لـ
- النص:
- إصلاح المشكلة التي تحدث عند تمرير فهرس غير صالح (سالب) إلى
TextRendererفي حال عدم احتواء ملف الترجمة والشرح على أي إشاراتSubtitle.getEventTime - SubRip: إضافة إمكانية استخدام ملفات UTF-16 إذا بدأت بعلامة ترتيب البايتات.
- إصلاح المشكلة التي تحدث عند تمرير فهرس غير صالح (سالب) إلى
- البيانات الوصفية:
- تحليل قيم متعدّدة مفصولة بقيم فارغة من إطارات ID3، على النحو المسموح به في ID3 الإصدار 2.4
- أضِف
MediaMetadata.mediaTypeللإشارة إلى نوع المحتوى أو نوع المجلد الموصوفَين بالبيانات الوصفية. - أضِف
MediaMetadata.isBrowsableكبديل عنMediaMetadata.folderType. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- DASH:
- إضافة تحليل كامل لمجموعات تعديل الصور، بما في ذلك عدد المربّعات (#3752)
- UI:
- أصلِح السمة المتوقّفة نهائيًا
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)لضمان نقل التغييرات في مستوى العرض إلى أداة معالجة الأحداث المسجّلة (#229). - تم إصلاح ترتيب عناصر التحكّم في مشغّل الوسائط في وسط الشاشة في
PlayerViewعند استخدام تخطيط من اليمين إلى اليسار (#227).
- أصلِح السمة المتوقّفة نهائيًا
- الجلسة:
- أضِف فئة مجرّدة
SimpleBasePlayerللمساعدة في تنفيذ واجهةPlayerللمشغّلات المخصّصة. - إضافة طريقة مساعدة لتحويل الرمز المميّز لجلسة النظام الأساسي إلى Media3
SessionToken(#171) - استخدِم
onMediaMetadataChangedلتفعيل تحديثات لجلسة وسائط المنصة (#219). - أضِف جلسة الوسائط كمعلَمة للدالة
getMediaButtons()من الدالةDefaultMediaNotificationProviderواستخدِم قوائم غير قابلة للتغيير لتوضيح المعنى (#216). - أضِف أداة معالجة معاودة الاتصال
onSetMediaItemsلتوفير وسائل لتعديل/ضبطMediaItemالقائمة، وموضع الفهرس الأول والموضع حسب الجلسة قبل الضبط على "المشغّل" (#156). - تجنُّب رصد النقر المزدوج لأحداث زر الوسائط غير المرتبطة بالبلوتوث (#233)
- جعل طريقة
QueueTimelineأكثر فعالية في حال كانت حالة الجلسة القديمة غير واضحة (#241).
- أضِف فئة مجرّدة
- البيانات الوصفية:
- تحليل قيم متعدّدة مفصولة بقيم فارغة من إطارات ID3، على النحو المسموح به في ID3 الإصدار 2.4
- أضِف
MediaMetadata.mediaTypeللإشارة إلى نوع المحتوى أو نوع المجلد الموصوفَين بالبيانات الوصفية. - أضِف
MediaMetadata.isBrowsableكبديل عنMediaMetadata.folderType. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- إضافة البث:
- رفع إصدار حزمة تطوير البرامج (SDK) لخدمة Cast إلى 21.2.0
- إضافة "إعلانات الوسائط التفاعلية":
- أزِل أداة معالجة أحداث اللاعبين من
ImaServerSideAdInsertionMediaSourceفي سلسلة تعليمات التطبيق لتجنُّب مشاكل سلاسل التعليمات. - أضِف السمة
focusSkipButtonWhenAvailableإلىImaServerSideAdInsertionMediaSource.AdsLoader.Builderلطلب تركيز زر التخطّي على أجهزة التلفزيون واضبطها على "صحيح" تلقائيًا. - أضِف طريقة
focusSkipButton()إلىImaServerSideAdInsertionMediaSource.AdsLoaderلطلب التركيز على زر التخطّي بشكل آلي. - تمت ترقية إصدار "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" إلى 3.29.0.
- أزِل أداة معالجة أحداث اللاعبين من
- التطبيق التجريبي:
- طلب إذن إرسال الإشعارات بشأن إشعارات التنزيل في وقت التشغيل (#10884)
الإصدار 1.0.0-beta03
22 نوفمبر 2022
تم طرح androidx.media3:media3-*:1.0.0-beta03. يتضمّن الإصدار 1.0.0-beta03 هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.2 من ExoPlayer.
- المكتبة الأساسية:
- أضِف
ExoPlayer.isTunnelingEnabledللتحقّق مما إذا كان التوجيه مفعّلاً للمقاطع الصوتية المحدّدة حاليًا (#2518). - إضافة
WrappingMediaSourceلتبسيط عملية تضمينMediaSourceواحدة (#7279) - تجاهُل المخزن المؤقت الخلفي قبل أن يتوقف التشغيل بسبب عدم توفّر مساحة كافية في الذاكرة
- أغلِق الحظر "doSomeWork" في أداة التتبُّع عند تفعيل خيار "تخفيف الحِمل".
- إصلاح مشكلة تتبُّع الجلسات عند البحث السريع في
PlaybackStatsListener(#180). - إرسال معاودة الاتصال
onMediaItemTransitionالمفقودة عند طلبseekToNextأوseekToPreviousفي قائمة تشغيل تتضمّن عنصرًا واحدًا (#10667) - أضِف
Player.getSurfaceSizeالذي يعرض حجم المساحة التي يتم عرض الفيديو عليها. - تم إصلاح الخطأ الذي كان يتسبّب في حدوث
IllegalStateException(#10758) عند إزالة المستمعين أثناء إصدار المشغّل.
- أضِف
- الإصدار:
- فرض الحد الأدنى
compileSdkVersionلتجنُّب أخطاء التجميع (#10684) - تجنَّب نشر الحزمة عند تضمينها في إصدار آخر من Gradle.
- فرض الحد الأدنى
- اختيار المقطع الصوتي:
- اختَر مقاطع صوتية أخرى بدلاً من Dolby Vision إذا كان جهاز العرض لا يتوافق معها. (#8944)
- عمليات التنزيل:
- الفيديو:
- جرِّب برنامج ترميز بديل لتقنية Dolby Vision إذا كانت الشاشة لا تتوافق معها. (#9794).
- الصوت:
- استخدِم
SingleThreadExecutorلإيقافAudioTrackمثيلاً لتجنُّب أخطاء OutOfMemory عند إيقاف عدة مشغّلات في الوقت نفسه (#10057). - تضيف هذه السمة
AudioOffloadListener.onExperimentalOffloadedPlaybackلحالة تخفيف الحِمل في AudioTrack. (#134). - اجعل
AudioTrackBufferSizeProviderواجهة عامة. - أضِف
ExoPlayer.setPreferredAudioDeviceلضبط جهاز إخراج الصوت المفضّل (#135). - تمّت إعادة تسمية
androidx.media3.exoplayer.audio.AudioProcessorإلىandroidx.media3.common.audio.AudioProcessor. - ربط الصوت بـ 8 قنوات و12 قناة بأقنعة القنوات 7.1 و7.1.4 على التوالي في جميع إصدارات Android (#10701)
- استخدِم
- البيانات الوصفية:
- يمكن الآن ضبط
MetadataRendererلعرض البيانات الوصفية فور توفّرها. أنشئ مثيلاً باستخدامMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)لتحديد ما إذا كان عارض البيانات سيُخرج البيانات الوصفية مبكرًا أو متزامنًا مع موضع المشغّل.
- يمكن الآن ضبط
- DRM:
- حلّ مشكلة في تنفيذ ClearKey على Android 13 تؤدي إلى عرض عنوان URL غير فارغ ولكن غير صالح للترخيص
- إصلاح الخطأ
setMediaDrmSession failed: session not openedعند التبديل بين أنظمة إدارة الحقوق الرقمية في قائمة تشغيل (مثل Widevine إلى ClearKey)
- النص:
- CEA-608: التأكّد من التعامل مع أوامر تبديل الخدمة في الحقل 2 بشكل صحيح (#10666)
- DASH:
- تحليل
EventStream.presentationTimeOffsetمن ملفات البيانات (#10460)
- تحليل
- UI:
- استخدام الإعدادات الحالية التي تم تجاهلها في المشغّل كإعدادات مُسبقة في
TrackSelectionDialogBuilder(#10429)
- استخدام الإعدادات الحالية التي تم تجاهلها في المشغّل كإعدادات مُسبقة في
- الجلسة:
- احرص على تنفيذ الأوامر دائمًا بالترتيب الصحيح حتى إذا كان بعضها يتطلّب حلّاً غير متزامن (#85).
- أضِف
DefaultMediaNotificationProvider.Builderلإنشاء مثيلاتDefaultMediaNotificationProvider. يمكن لأداة الإنشاء ضبط معرّف الإشعار ومعرّف قناة الإشعار واسم قناة الإشعار الذي يستخدمه مقدّم الخدمة. أضِف أيضًا الطريقةDefaultMediaNotificationProvider.setSmallIcon(int)لضبط الأيقونة الصغيرة للإشعارات. (#104) - التأكّد من عدم حذف الأوامر التي تم إرسالها قبل
MediaController.release()(#99) - يمكن لـ
SimpleBitmapLoaderتحميل صورة نقطية من معرّفات الموارد المنتظمة (URI) الخاصة بـfile://(#108). - إصلاح تأكيد يمنع
MediaControllerمن البحث عن إعلان خلال فترة (#122) - عند انتهاء التشغيل، يتم إيقاف
MediaSessionServiceمن المقدّمة ويظهر إشعار لإعادة تشغيل آخر عنصر وسائط تم تشغيله (#112). - لا تبدأ خدمة تعمل في المقدّمة باستخدام انتظار تنفيذ معلّق للإيقاف المؤقت (#167).
- إخفاء "الشارة" المرتبطة بالإشعار الذي أنشأه
DefaultNotificationProviderيدويًا على الإصدارَين 26 و27 من واجهة برمجة التطبيقات (يتم إخفاء الشارة تلقائيًا على الإصدار 28 والإصدارات الأحدث) (#131) - تم إصلاح الخطأ الذي كان يؤدي إلى حدوث IllegalStateExceptions عند إنشاء رابط ثانٍ بين أداة ربط من MediaSession قديمة وMediaController في Media3 (#49).
- RTSP:
- IMA:
- إضافة مهلة لتحميل معلومات الإعلان للتعامل مع الحالات التي تتعذّر فيها على "حزمة تطوير البرامج للإعلانات التفاعلية" تحميل إعلان (#10510)
- منع تخطّي "الإعلانات أثناء التشغيل" عند الانتقال إلى نهاية المحتوى (#10685)
- احتساب مدة النافذة بشكل صحيح للبث المباشر الذي يتضمّن إعلانات يتم إدراجها من جهة الخادم، مثل "إعلانات الوسائط التفاعلية" (IMA) الديناميكية (DAI) (#10764)
- إضافة FFmpeg:
- إضافة العلامات المطلوبة حديثًا لربط مكتبات FFmpeg بالإصدار 23.1.7779620 من NDK والإصدارات الأحدث (#9933)
- إضافة AV1:
- تحديث إصدار CMake لتجنُّب حالات عدم التوافق مع أحدث إصدارات "استوديو Android" (#9933)
- إضافة البث:
- نفِّذ
getDeviceInfo()لتتمكّن من تحديدCastPlayerعند التحكّم في التشغيل باستخدامMediaController(#142).
- نفِّذ
- المحوّل:
- أضِفنا موقّت مراقبة برنامج دمج الصوت والفيديو لرصد الحالات التي يستغرق فيها إنشاء عيّنة إخراج وقتًا طويلاً.
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Transformer.Builder.setOutputMimeType(String)تمت إزالة هذه الميزة. سيكون نوع MIME دائمًا MP4 عند استخدام أداة دمج الصوت والفيديو التلقائية.
- إزالة
الإصدار 1.0.0-beta02
21 تموز (يوليو) 2022
تم طرح androidx.media3:media3-*:1.0.0-beta02. يتضمّن الإصدار 1.0.0-beta02 هذه التعديلات.
يتوافق هذا الإصدار مع الإصدار 2.18.1 من ExoPlayer.
- المكتبة الأساسية:
- تأكَّد من أنّ تغيير
ShuffleOrderباستخدامExoPlayer.setShuffleOrderيؤدي إلى إجراء مكالمة إلىPlayer.Listener#onTimelineChangedباستخدامreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889). - بالنسبة إلى الوسائط المتدفّقة، أدرِج المسارات المحدّدة فقط في الموضع المخزّن مؤقتًا (#10361).
- السماح باستخدام أداة تسجيل مخصّصة لجميع نواتج سجلّ ExoPlayer (#9752)
- إصلاح مشكلة عدم عمل
setDataSourceFactoryفيDefaultMediaSourceFactoryفي بعض الحالات (#116)
- تأكَّد من أنّ تغيير
- أدوات الاستخراج:
- DASH:
- تحليل عنوان URL لترخيص ClearKey من ملفات البيانات (#10246)
- UI:
- تأكَّد من أنّ TalkBack يعلن عن خيار السرعة النشط حاليًا في قائمة عناصر التحكّم في التشغيل (#10298).
- RTSP:
- إضافة معالجة حِزم VP8 المجزّأة (#110)
- إضافة Leanback:
- الاستماع إلى تغييرات
playWhenReadyفيLeanbackAdapter(10420)
- الاستماع إلى تغييرات
- البث:
الإصدار 1.0.0-beta01
16 يونيو 2022
تم طرح androidx.media3:media3-*:1.0.0-beta01. يتضمّن الإصدار 1.0.0-beta01
هذه التعديلات.
يتوافق ذلك مع الإصدار 2.18.0 من ExoPlayer.
- المكتبة الأساسية:
- فعِّل إمكانية جمع بيانات التشخيص الخاصة بنظام Android الأساسي من خلال
MediaMetricsManager. سيعيد ExoPlayer توجيه أحداث التشغيل وبيانات الأداء إلى النظام الأساسي، ما يساعد في توفير معلومات حول أداء النظام وتصحيح الأخطاء على الجهاز. ويمكن أن تجمع Google هذه البيانات أيضًا إذا فعّل المستخدم خيار مشاركة بيانات الاستخدام وبيانات التشخيص. يمكن للتطبيقات إيقاف المساهمة في بيانات تشخيص النظام الأساسي لتطبيق ExoPlayer باستخدامExoPlayer.Builder.setUsePlatformDiagnostics(false). - تم إصلاح الخطأ الذي يؤدي إلى إعادة ضبط مسارات الترجمة بشكل متكرر جدًا عند استخدام
MergingMediaSource، على سبيل المثال عند تحميل ملفات الترجمة بشكل جانبي وتغيير ملف الترجمة المحدّد أثناء التشغيل (#10248). - إيقاف رصد نوع شبكة 5G-NSA على الإصدارين 29 و30 من واجهة برمجة التطبيقات ستفترض عمليات التشغيل هذه توفّر شبكة الجيل الرابع.
- يمنع هذا الخيار تمرير
nullإلىMediaSource.Factory.setDrmSessionManagerProviderوMediaSource.Factory.setLoadErrorHandlingPolicy. يمكن تمرير مثيلاتDefaultDrmSessionManagerProviderوDefaultLoadErrorHandlingPolicyبشكل صريح إذا لزم الأمر. - أضِف
MediaItem.RequestMetadataلتمثيل البيانات الوصفية اللازمة لتشغيل الوسائط عندما لا تكون قيمةLocalConfigurationمعروفة. أزِل أيضًاMediaMetadata.mediaUrlلأنّه أصبح مضمّنًا فيRequestMetadata. - أضِف
Player.Command.COMMAND_SET_MEDIA_ITEMللسماح للاعبين بتحديد عنصر واحد.
- فعِّل إمكانية جمع بيانات التشخيص الخاصة بنظام Android الأساسي من خلال
- اختيار المقطع الصوتي:
- تسوية الفئة
TrackSelectionOverridesإلىTrackSelectionParameters، وترقيةTrackSelectionOverrideإلى فئة ذات مستوى أعلى - أعِد تسمية
TracksInfoإلىTracksوTracksInfo.TrackGroupInfoإلىTracks.Group. تمت أيضًا إعادة تسميةPlayer.getCurrentTracksInfoوPlayer.Listener.onTracksInfoChangedإلىPlayer.getCurrentTracksوPlayer.Listener.onTracksChanged. ويشمل ذلك "إلغاء الإيقاف النهائي" لاسم الطريقةPlayer.Listener.onTracksChanged، ولكن مع أنواع مختلفة من المَعلمات. - غيِّر
DefaultTrackSelector.buildUponParametersوDefaultTrackSelector.Parameters.buildUponلعرضDefaultTrackSelector.Parameters.Builderبدلاً منDefaultTrackSelector.ParametersBuilderالمتوقّف نهائيًا. - أضِف
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesالذي يكون مفعَّلاً تلقائيًا. عند تفعيل هذا الخيار، سيفضّلDefaultTrackSelectorمقاطع صوتية لا يتجاوز عدد قنواتها إمكانات إخراج الجهاز. على الأجهزة المحمولة، سيتم استخدام تنسيقات الصوت الأحادي أو الاستريو بدلاً من تنسيقات الصوت المتعدد القنوات، ما لم يكن من الممكن تطبيق تأثيرات صوتية مكانية على تنسيق الصوت المتعدد القنوات (الإصدار 12L من نظام التشغيل Android أو الإصدارات الأحدث) أو إذا كان تنسيق صوت محيطي من Dolby.DefaultTrackSelectorبالإضافة إلى ذلك، على الأجهزة التي تتوافق مع ميزة "تحديد الموقع المكاني للصوت"، ستراقبDefaultTrackSelectorأي تغييرات في خصائص Spatializer وستؤدي إلى اختيار مقطع صوتي جديد عند حدوث هذه التغييرات. يتم استبعاد الأجهزة التي تستخدمtelevisionوضع واجهة المستخدم من هذه القيود، وسيتم تفضيل التنسيق الذي يتضمّن أكبر عدد من القنوات. لتفعيل هذه الميزة، يجب إنشاء مثيلDefaultTrackSelectorباستخدامContext.
- تسوية الفئة
- الفيديو:
- تمّت إعادة تسمية
DummySurfaceإلىPlaceholderSurface. - إضافة دعم لترميز AV1 في
MediaCodecVideoRenderer.getCodecMaxInputSize
- تمّت إعادة تسمية
- الصوت:
- استخدام LG AC3 audio decoder advertising non-standard نوع MIME
- غيِّر نوع القيمة التي تم إرجاعها الخاص بـ
AudioAttributes.getAudioAttributesV21()منandroid.media.AudioAttributesإلى فئة برنامج تضمينAudioAttributesV21جديدة، وذلك لتجنُّب بطء عملية التحقّق من وقت تشغيل Android (ART) على الإصدارات الأقدم من 21 لواجهة برمجة التطبيقات. - يمكنك طلب البحث من المنصة (الإصدار 29 من واجهة برمجة التطبيقات أو الإصدارات الأحدث) أو افتراض عدد قنوات ترميز الصوت لتمرير الصوت عندما لا يتم ضبط عدد قنوات تنسيق الصوت، وهو ما يحدث عند إعداد بروتوكول HLS بدون تقسيم إلى أجزاء (10204).
- اضبط
AudioTrackباستخدام قناع القناةAudioFormat.CHANNEL_OUT_7POINT1POINT4إذا كان برنامج الترميز يخرج صوت PCM بـ 12 قناة (#10322.
- DRM
- يجب التأكّد من تعديل جلسة إدارة الحقوق الرقمية بشكل صحيح دائمًا عند البحث مباشرةً بعد تغيير التنسيق (10274).
- النص:
- غيِّر
Player.getCurrentCues()لعرضCueGroupبدلاً منList<Cue>. - SSA: إضافة دعم
OutlineColourلضبط النمط عندBorderStyle == 3(أي أنّOutlineColourيضبط خلفية الإشارة) (#8435). - CEA-708: يتم تحليل البيانات إلى عدة حِزم خدمة وتجاهل الحِزم غير المرتبطة برقم الخدمة المحدّد حاليًا.
- إزالة
RawCcExtractor، الذي كان يُستخدم فقط للتعامل مع تنسيق ترجمة وشرح داخلي خاص بـ Google
- غيِّر
- أدوات الاستخراج:
- UI:
- حلّ مشكلة عدم إرسال الأحداث إلى
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بشكل صريح إذا كان ذلك مطلوبًا.
- Smooth Streaming:
- يمنع هذا الخيار تمرير
nullإلىSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactoryبشكل صريح إذا لزم الأمر.
- يمنع هذا الخيار تمرير
- RTSP:
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لبرنامج الترميز H263 (#63)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لملفات MPEG4 (#35)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لترميز HEVC (#36)
- إضافة قارئ RTP لترميز AMR في الوقت الحالي، لا تتوفّر سوى حزم بيانات AMR غير متداخلة أحادية القناة. لا تتوفّر حمولة AMR RTP المركّبة. (#46)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لبرنامج الترميز VP8 (#47)
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لملفات WAV (#56)
- إصلاح عنوان المصادقة الأساسية لبروتوكول RTSP (#9544).
- إيقاف التحقّق من حقول SDP الإلزامية لأنّ ExoPlayer لا يحتاج إليها (#10049)
- Throw checked exception when parsing RTSP timing (#10165).
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) لبرنامج الترميز VP9 (#47)
- إضافة قارئ RTP لتنسيق OPUS (#53)
- مصادر البيانات:
- تمّت إعادة تسمية
DummyDataSourceإلىPlaceholderDataSource. - حلّ بديل للتعامل مع مقاطعة OkHttp
- تمّت إعادة تسمية
- الجلسة:
- استبدِل
MediaSession.MediaItemFillerبـMediaSession.Callback.onAddMediaItemsللسماح بحلّ الطلبات بشكل غير متزامن. - تتيح هذه السمة طرق
setMediaItems(s)عند اتصالMediaControllerبجلسة وسائط قديمة. - إزالة
MediaController.setMediaUriوMediaSession.Callback.onSetMediaUriيمكن تحقيق الوظيفة نفسها باستخدامMediaController.setMediaItemوMediaSession.Callback.onAddMediaItems. - إعادة توجيه مكالمات
MediaControllerالسابقة لتشغيل الوسائط علىMediaSession.Callback.onAddMediaItemsبدلاً منonSetMediaUri - أضِف
MediaNotification.ProviderوDefaultMediaNotificationProviderلتوفير تخصيص للإشعار. - أضِف
BitmapLoaderوSimpleBitmapLoaderلتنزيل صور الأعمال الفنية. - أضِف
MediaSession.setCustomLayout()لتوفير التوافق مع الإصدارات القديمة مع الجلسة القديمة. - أضِف
MediaSession.setSessionExtras()لتوفير ميزات مماثلة لتلك المتوفّرة في الجلسة القديمة. - أعِد تسمية
MediaSession.MediaSessionCallbackإلىMediaSession.Callback، وMediaLibrarySession.MediaLibrarySessionCallbackإلىMediaLibrarySession.Callback، وMediaSession.Builder.setSessionCallbackإلىsetCallback. - إصلاح خطأ NPE في
MediaControllerImplLegacy(#59). - تعديل معلومات موضع الجلسة على المخطط الزمني change(#51).
- إصلاح خطأ NPE في
MediaControllerImplBaseبعد تحرير وحدة التحكّم (#74)
- استبدِل
- تشغيل الإعلان / IMA:
- تقليل معدّل طلب الإعلانات من كل 100 ملي ثانية إلى كل 200 ملي ثانية، وذلك بما يتوافق مع توصيات مجلس تقييم الوسائط (MRC)
- إضافة FFmpeg:
- يجب تعديل إصدار CMake إلى
3.21.0+لتجنُّب خطأ في CMake يؤدي إلى تعذُّر مزامنة Gradle في "استوديو Android" (#9933).
- يجب تعديل إصدار CMake إلى
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)يمكنك استخدامPlayer.Listener.onTracksChanged(Tracks)كبديل. - إزالة
Player.getCurrentTrackGroupsوPlayer.getCurrentTrackSelectionsيمكنك استخدامPlayer.getCurrentTracksكبديل. يمكنك أيضًا مواصلة استخدامExoPlayer.getCurrentTrackGroupsوExoPlayer.getCurrentTrackSelections، مع العلم أنّ هاتين الطريقتين ستظلان متوقّفتَين نهائيًا. - إزالة الثوابت
DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTوDEFAULT_TRACK_SELECTOR_PARAMETERSيُرجى استخدامgetDefaultTrackSelectorParameters(Context)بدلاً منها عند الإمكان، وDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTفي الحالات الأخرى. - إزالة أداة الإنشاء
DefaultTrackSelector(ExoTrackSelection.Factory)يمكنك استخدامDefaultTrackSelector(Context, ExoTrackSelection.Factory)كبديل. - إزالة
Transformer.Builder.setContextيجب تمريرContextإلى الدالة الإنشائيةTransformer.Builderبدلاً من ذلك.
- إزالة
الإصدار 1.0.0-alpha03
14 مارس 2022
تم طرح androidx.media3:media3-*:1.0.0-alpha03. يتضمّن الإصدار 1.0.0-alpha03 هذه التعديلات.
يتوافق ذلك مع الإصدار 2.17.1 من ExoPlayer.
- الصوت:
- إصلاح الخطأ الذي يحدث عند التحقّق من إمكانات الصوت بتنسيق Dolby Atmos (E-AC3-JOC) في HLS
- أدوات الاستخراج:
- FMP4: تم إصلاح المشكلة التي كانت تؤدي إلى عرض البيانات الوصفية لعينات emsg بترتيب غير صحيح في عمليات البث التي تحتوي على كل من عناصر v0 وv1 emsg (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.
- Core Library:
- أضِف طريقة محمية
DefaultRenderersFactory.getCodecAdapterFactory()حتى تتمكّن الفئات الفرعية منDefaultRenderersFactoryالتي تتجاوزbuildVideoRenderers()أوbuildAudioRenderers()من الوصول إلى مصنع محوّل الترميز وتمريره إلى مثيلاتMediaCodecRendererالتي تنشئها. - يجب نقل حقول عنوان ICY
nameوgenreإلىMediaMetadata.stationوMediaMetadata.genreعلى التوالي لكي تصل إلى التطبيق عبرPlayer.Listener.onMediaMetadataChanged()(#9677). - أزِل المفاتيح الفارغة من
DefaultHttpDataSource#getResponseHeaders. - التوقف مؤقتًا وإعادة المحاولة عند تعذُّر إنشاء مثيل
MediaCodecيساعد هذا الخيار في حلّ مشكلة تحدث على بعض الأجهزة عند التبديل من برنامج ترميز آمن إلى برنامج ترميز آخر (#8696). - أضِف
MediaCodecAdapter.getMetrics()للسماح للمستخدمين بالحصول على بيانات المقاييس منMediaCodec. (#9766). - تم إصلاح مشكلة حلّ تبعية Maven (#8353).
- إيقاف تعديل السرعة تلقائيًا في البث المباشر الذي لا يتضمّن ميزات زمن الانتقال المنخفض ولا إعدادًا يطلبه المستخدم لتحديد السرعة (#9329)
- تمّت إعادة تسمية
DecoderCounters#inputBufferCountإلىqueuedInputBufferCount. - جعل
SimpleExoPlayer.renderersخاصة يمكن الوصول إلى أدوات العرض من خلالExoPlayer.getRenderer. - تم تعديل بعض القيم الثابتة في
AnalyticsListener.EventFlagsلتتطابق مع القيم فيPlayer.EventFlags. - قسِّم
AnalyticsCollectorإلى واجهة وتنفيذ تلقائي للسماح لبرنامج R8 بإزالة الواجهة إذا لم يكن التطبيق بحاجة إليها.
- أضِف طريقة محمية
- اختيار المقطع الصوتي:
- إتاحة استخدام علامات دور الفيديو المفضَّل في اختيار المقاطع الصوتية (#9402)
- تعديل منطق اختيار مقاطع الفيديو ليأخذ في الاعتبار أنواع MIME المفضّلة وعلامات الأدوار عند اختيار مقاطع فيديو متعددة للتكيّف (#9519)
- تعديل منطق اختيار مسار الفيديو والصوت لاختيار التنسيقات فقط لعمليات الاختيار التكيّفي التي تتضمّن مستوى الدعم نفسه لبرنامج الترميز والأجهزة (#9565)
- تعديل منطق اختيار مسار الفيديو لتفضيل برامج الترميز الأكثر فعالية في حال توفّر برامج ترميز متعددة متوافقة مع برامج فك الترميز الأساسية المسرَّعة على الجهاز (#4835)
- يجب إعطاء الأولوية لإعدادات المحتوى الصوتي المفضّلة (على سبيل المثال، مسار الصوت "الافتراضي" أو مسار مطابق للغة الإعدادات المحلية للنظام) على قيود اختيار المسار الفني (على سبيل المثال، نوع MIME المفضّل أو الحد الأقصى لعدد القنوات).
- تم إصلاح مشكلة اختيار المسار التي لم يؤدِّ فيها تجاهل إحدى مجموعات المسارات إلى إيقاف مجموعات المسارات الأخرى من النوع نفسه (#9675).
- تم إصلاح مشكلة اختيار المسار حيث لا يتم تطبيق مزيج من عمليات إلغاء المسار غير الفارغة والفارغة بشكل صحيح (#9649).
- يجب عدم تكرار
TrackGroupفيTrackGroupArray. يمكن دائمًا تمييزTrackGroupعن طريق ضبطidفي المنشئTrackGroup. يحلّ هذا الإصدار مشكلة تعذُّر تشغيل المحتوى بعد إيقاف التطبيق مؤقتًا في الخلفية مع تفعيل ميزة "تجاوز المسار النشط" (#9718). - تعديل المنطق في
AdaptiveTrackSelectionللسماح بزيادة الجودة في حال توفّر معدل نقل بيانات كافٍ على الشبكة حتى إذا كان التشغيل قريبًا جدًا من حد البث المباشر (#9784)
- الفيديو:
- إصلاح منطق الرجوع إلى برنامج فك الترميز الاحتياطي في Dolby Vision لاستخدام برنامج فك ترميز متوافق مع H264/H265 عند الحاجة
- الصوت:
- إصلاح منطق الرجوع إلى أداة فك الترميز الاحتياطية في Dolby Atmos (E-AC3-JOC) لاستخدام أداة فك ترميز E-AC3 متوافقة عند الحاجة
- تغيير واجهات برمجة التطبيقات
AudioCapabilitiesلتتطلّب تمريرAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESبشكل صريح بدلاً منnull - السماح بتخصيص عملية احتساب حجم ذاكرة التخزين المؤقت
AudioTrackمن خلال إدخالAudioTrackBufferSizeProviderإلىDefaultAudioSink(#8891) - أعِد محاولة إنشاء
AudioTrackإذا كان حجم ذاكرة التخزين المؤقت المطلوب أكبر من 1 ميغابايت. (#9712).
- أدوات الاستخراج:
- النص:
- DRM:
- ستتم إزالة
playbackLooperمنDrmSessionManager.(pre)acquireSession. عندما يستخدم تطبيقDrmSessionManagerفيMediaSourceمخصّص، يجب تمريرplaybackLooperإلىDrmSessionManager.setPlayerبدلاً من ذلك.
- ستتم إزالة
- تشغيل الإعلان / IMA:
- إضافة إمكانية استخدام ميزة "إدراج الإعلان الديناميكي" (DAI) في IMA (#8213)
- أضِف طريقة إلى
AdPlaybackStateللسماح بإعادة ضبط مجموعة إعلانية حتى يمكن تشغيلها مرة أخرى (#9615). - فرض سرعة تشغيل 1.0 أثناء تشغيل الإعلان (#9018)
- تم إصلاح المشكلة التي كانت تؤدي إلى إعادة ضبط التشغيل على الفور عند تعذُّر تحميل مجموعة إعلانية (#9929).
- UI:
- DASH:
- أضِف السمات الأساسية والتكميلية التي تم تحليلها إلى
Representation(#9579). - إتاحة دور
forced-subtitleفي المسار (#9727) - إيقاف تفسير دور المسار
mainعلى أنّهC.SELECTION_FLAG_DEFAULT - إصلاح منطق استبعاد عنوان URL الأساسي للبيانات الوصفية التي لا تحدّد مساحة اسم DVB (#9856)
- إتاحة عناوين URL النسبية
MPD.Location(#9939)
- أضِف السمات الأساسية والتكميلية التي تم تحليلها إلى
- HLS:
- املأ
Format.labelبشكل صحيح لبث HLS الصوتي فقط (#9608). - استخدام الإعداد التلقائي "التحضير بدون تقسيم" لتحسين وقت بدء التشغيل إذا كانت عروضك تتضمّن مسارات ترجمة وشرح غير معرَّفة في قائمة التشغيل الرئيسية، عليك إضافتها إلى قائمة التشغيل الرئيسية لتصبح متاحة للتشغيل، أو إيقاف الإعداد بدون تقسيم إلى أجزاء باستخدام
HlsMediaSource.Factory.setAllowChunklessPreparation(false). - إتاحة البحث الدقيق عن الإطارات الرئيسية في HLS (#2882)
- املأ
- RTSP:
- المحوّل:
- زيادة الحد الأدنى المطلوب من إصدار واجهة برمجة التطبيقات إلى 21
- يُستخدَم
TransformationExceptionالآن لوصف الأخطاء التي تحدث أثناء عملية تحويل. - أضِف
TransformationRequestلتحديد خيارات التحويل. - السماح بتسجيل مستمعين متعدّدين
- إصلاح مشكلة تعذُّر إيقاف Transformer عندما تتم قراءة جزء من ناتج الترميز والتشفير
- إصلاح خطأ محتمل في NPE في
Transformer.getProgressعند طرح استثناء عند تحرير أداة الدمج. - أضِف تطبيقًا تجريبيًا لتطبيق عمليات التحويل.
- إضافة MediaSession:
- بشكلٍ تلقائي، يمحو
MediaSessionConnectorالآن قائمة التشغيل عند إيقافها. يمكن للتطبيقات التي تريد الاحتفاظ بقائمة التشغيل استدعاءsetClearMediaItemsOnStop(false)على الموصّل.
- بشكلٍ تلقائي، يمحو
- إضافة البث:
- إضافة FFmpeg:
- جعل
build_ffmpeg.shيعتمد على أدوات LLVM الثنائية بدلاً من أدوات GNU (#9933)
- جعل
- التوافق مع Android 12:
- رقّي إضافة Cast لتعتمد على
com.google.android.gms:play-services-cast-framework:20.1.0. الإصدارات الأقدم منplay-services-cast-frameworkغير متوافقة مع التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android، وستتعطّل مع ظهور الخطأIllegalArgumentExceptionعند إنشاءPendingIntent(#9528).
- رقّي إضافة Cast لتعتمد على
- إزالة الرموز المتوقّفة نهائيًا:
- إزالة
Player.EventListenerيمكنك استخدامPlayer.Listenerكبديل. - إزالة
MediaSourceFactory#setDrmSessionManagerوMediaSourceFactory#setDrmHttpDataSourceFactoryوMediaSourceFactory#setDrmUserAgentاستخدِمMediaSourceFactory#setDrmSessionManagerProviderبدلاً من ذلك. - إزالة
MediaSourceFactory#setStreamKeysاستخدِمMediaItem.Builder#setStreamKeysبدلاً من ذلك. - إزالة
MediaSourceFactory#createMediaSource(Uri)استخدِمMediaSourceFactory#createMediaSource(MediaItem)بدلاً من ذلك. - إزالة
setTagمنDashMediaSourceوHlsMediaSourceوSsMediaSourceيمكنك استخدامMediaItem.Builder#setTagكبديل. - إزالة
DashMediaSource#setLivePresentationDelayMs(long, boolean)استخدِمMediaItem.Builder#setLiveConfigurationوMediaItem.LiveConfiguration.Builder#setTargetOffsetMsلتجاوز ملف البيان، أوDashMediaSource#setFallbackTargetLiveOffsetMsلتقديم قيمة احتياطية. - إزالة
(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadلم يعُد بإمكانك إيقاف ميزة فرض استخدام سلاسل المحادثات. - إزالة
ActionFileوActionFileUpgradeUtilاستخدِم الإصدار 2.16.1 من ExoPlayer أو إصدارًا أقدم لاستخدامActionFileUpgradeUtilلدمج ملفات الإجراءات القديمة فيDefaultDownloadIndex. - إزالة
ProgressiveMediaSource#setExtractorsFactoryاستخدِم الدالة الإنشائيةProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)بدلاً من ذلك. - إزالة
ProgressiveMediaSource.Factory#setTagوProgressiveMediaSource.Factory#setCustomCacheKeyاستخدِمMediaItem.Builder#setTagوMediaItem.Builder#setCustomCacheKeyبدلاً من ذلك. - إزالة الدالتَين الإنشائيتَين
DefaultRenderersFactory(Context, @ExtensionRendererMode int)وDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)استخدِم الدالة الإنشائيةDefaultRenderersFactory(Context)وDefaultRenderersFactory#setExtensionRendererModeوDefaultRenderersFactory#setAllowedVideoJoiningTimeMsبدلاً من ذلك. - أزِل جميع أدوات إنشاء
CronetDataSourceالعامة. استخدِمCronetDataSource.Factoryبدلاً من ذلك.
- إزالة
- غيِّر
IntDefsالتالي إلى@Target(TYPE_USE)فقط. قد يؤدي ذلك إلى تعذُّر تجميع الاستخدامات في Kotlin، ويمكن حلّ هذه المشكلة من خلال نقل التعليق التوضيحي إلى نوع التعليق التوضيحي (Int).@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type-
@FlacExtractor.Flags(في حزمةcom.google.android.exoplayer2.ext.flac) -
@FlacExtractor.Flags(في حزمةcom.google.android.exoplayer2.extractor.flac) @FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
الإصدار 1.0.0-alpha01
27 أكتوبر 2021
تم طرح androidx.media3:media3-*:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.
الميزات الجديدة
Media3 هي الوجهة الجديدة لمكتبات دعم الوسائط، بما في ذلك ExoPlayer. تحتوي الإصدارات الأولى من الإصدارات التجريبية على عمليات تنفيذ مبكرة وفعّالة للمكتبات من أجل تنفيذ حالات استخدام الوسائط، بما في ذلك:
- ExoPlayer هو مشغّل وسائط على مستوى التطبيق لنظام Android، ويمكن تخصيصه وتوسيع نطاقه بسهولة.
- وظائف جلسة الوسائط لعرض عمليات التشغيل والتحكّم فيها يستخدم
وحدة الجلسة الجديدة واجهة
Playerنفسها التي يستخدمها ExoPlayer. - مكوّنات واجهة المستخدم لإنشاء واجهات مستخدم لتشغيل الوسائط
- وحدات تتضمّن وظائف في مكتبات أخرى لاستخدامها مع ExoPlayer، مثل إدراج الإعلانات من خلال حزمة تطوير البرامج للإعلانات التفاعلية من Google (IMA SDK).
لمزيد من المعلومات، يُرجى الاطّلاع على مشروع Media3 على GitHub.
كانت تتم استضافة ExoPlayer سابقًا في مشروع ExoPlayer GitHub منفصل. في Media3، اسم الحزمة هو
androidx.media3.exoplayer. ونخطّط لمواصلة صيانة مشروع ExoPlayer على GitHub وإصداره لفترة من الوقت لمنح التطبيقات الوقت الكافي للانتقال إلى Media3.
تتضمّن Media3 بدائل لجميع وحدات ExoPlayer، باستثناء الإضافات القديمة
media2 وmediasession، والتي تم استبدالها بالوحدة الجديدة
media3-session. يتيح ذلك الدمج المباشر بين مشغّلات الوسائط وجلسات الوسائط بدون الحاجة إلى استخدام فئة محوّل/موصل.