الوسائط 3
التعديل الأخير | الإصدار المستقر | إصدار مرشح | الإصدار التجريبي | إصدار ألفا |
---|---|---|---|---|
12 نيسان (أبريل) 2024 | 1.3.1 | - | - | 1.4.0-alpha01 |
إعلان التبعيات
لإضافة تبعية على Media3، يجب إضافة مستودع Maven إلى مشروعك. لمزيد من المعلومات، يمكنك الاطّلاع على مستودع Maven من Google.
أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle
لتطبيقك أو الوحدة الخاصة بك:
رائع
dependencies { def media3_version = "1.3.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 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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.3.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 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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
لمزيد من المعلومات حول التبعيات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يمكنك استخدام أداة تتبع مشاكل Media3 للعثور على إجابات عن أسئلتك والمشاكل المعروفة وطلبات الميزات ولإبلاغ عن مشاكل جديدة.
الإصدار 1.4.0
الإصدار 1.4.0-alpha01
17 نيسان (أبريل) 2024
تم طرح "androidx.media3:media3-*:1.4.0-alpha01
".
يحتوي الإصدار 1.4.0-alpha01 على هذه الالتزامات.
- 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
.
- أضِف السمة
- المحوِّل:
- أضِف
audioConversionProcess
وvideoConversionProcess
إلىExportResult
للإشارة إلى كيفية إنشاء المسار المعني في ملف الإخراج. - عمليات التحقّق من مستوى H.264 من خلال تحسين ميزة "الاسترخاء"
- توفير إمكانية التغيير بين وسائط إدخال SDR ونطاق عالي الديناميكية (HDR) في تسلسل
- إضافة إمكانية استخدام التأثيرات الصوتية على مستوى المقطوعة الموسيقية
- توفير إمكانية تحويل ترميز صور HDR فائقة إلى فيديوهات بنطاق HDR
- حل المشكلة التي تؤدي إلى عدم عرض
DefaultAudioMixer
الكمية الصحيحة من وحدات البايت بعد إعادة الضبط وإعادة استخدامه.
- أضِف
- الفيديو:
- حل المشكلة التي تؤدي إلى وصول
Listener.onRenderedFirstFrame()
قبل أوانها عند تبديل مساحات العرض في منتصف التشغيل.
- حل المشكلة التي تؤدي إلى وصول
- مصدر البيانات:
- نفِّذ دعم
android.resource://package/id
لمعرّفات الموارد المنتظمة (URI) للموارد الأولية، حيث يختلفpackage
عن حزمة التطبيق الحالي. لم يتم توثيق ذلك سابقًا للعمل، ولكنه طريقة أكثر فعالية للوصول إلى الموارد في حزمة أخرى بدلاً من الاسم. - تحقَّق فورًا من أنّ
url
ليست قيمة خالية في الدوال البرمجية لـDataSpec
. تمت إضافة تعليق توضيحي لهذه المعلمة بالفعل على أنها غير فارغة.
- نفِّذ دعم
- الأثر:
- إتاحة تغييرات متعددة في السرعة ضمن السمة
EditedMediaItem
أوComposition
نفسها في السمةSpeedChangeEffect
- إمكانية استخدام إخراج HLG وPQ من إدخال الصورة النقطية بدقة HDR فائقة
- إضافة دعم EGL_GL_COLORSPACE_BT2020_HLG_EXT، الذي يحسن إخراج سطح المكتب في ExoPlayer.setVideoEffect وDebuger's Transformer SurfaceView.
- يُرجى تعديل تنفيذ مصفوفة العناصر المركّبة لتكون متوافقة مع المستندات من خلال قلب قيمتَي x وy المطبّقتَين في
setOverlayFrameAnchor()
. في حال استخدامOverlaySettings.Builder.setOverlayFrameAnchor()
، اقلب قيمتَي x وy من خلال ضربهما في-1
.
- إتاحة تغييرات متعددة في السرعة ضمن السمة
- الجلسة:
- يمكنك تغيير القيمة التلقائية لـ
CommandButton.enabled
إلىtrue
والتأكّد من إمكانية بقاء القيمة خاطئة لوحدات التحكّم بالبيانات حتى في حال توفّر الأمر المرتبط بها. - أضِف ثوابت الرموز لـ
CommandButton
التي يجب استخدامها بدلاً من موارد الرموز المخصّصة. - يمكنك إضافة
MediaSessionService.isPlaybackOngoing()
للسماح للتطبيقات بالاستعلام عما إذا كان يجب إيقاف الخدمة فيonTaskRemoved()
(#1219). - أضِف
MediaSessionService.pauseAllPlayersAndStopSelf()
التي تسمح بسهولة بإيقاف تشغيل جميع الجلسات مؤقتًا واستدعِstopSelf
لإنهاء دورة حياةMediaSessionService
. - يمكنك إلغاء السمة
MediaSessionService.onTaskRemoved(Intent)
لتوفير تنفيذ تلقائي آمن يحافظ على تشغيل الخدمة في المقدّمة في حال استمرار التشغيل أو إيقاف الخدمة.
- يمكنك تغيير القيمة التلقائية لـ
- عمليات التنزيل:
- عليك التأكّد من عدم تسريب مثيلات
Renderer
التي لم يتم إطلاقها بعد فيDownloadHelper
، ما قد يؤدي في النهاية إلى تعطُّل التطبيق معIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224).
- عليك التأكّد من عدم تسريب مثيلات
- أدوات الاختبار:
- نفِّذ
onInit()
وonRelease()
فيFakeRenderer
. - يمكنك تغيير طرق
TestPlayerRunHelper.runUntil/playUntil
لتعذُّر إتمام الأخطاء غير الفادحة (مثل تلك التي يتم الإبلاغ عنها إلىAnalyticsListener.onVideoCodecError
). استخدِم سلسلة الطريقةTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
الجديدة لإيقاف هذا السلوك.
- نفِّذ
- التطبيق التجريبي:
- استخدِم "
DefaultPreloadManager
" في التطبيق التجريبي القصير.
- استخدِم "
- أزِل الرموز المتوقّفة نهائيًا:
- إزالة
CronetDataSourceFactory
استخدِمCronetDataSource.Factory
بدلاً من ذلك. - عليك إزالة بعض دوال إنشاء
DataSpec
. يمكنك استخدامDataSpec.Builder
كبديل.
- إزالة
الإصدار 1.3.0
الإصدار 1.3.1
11 نيسان (أبريل) 2024
تم طرح "androidx.media3:media3-*:1.3.1
".
يتضمّن الإصدار 1.3.1 هذه الالتزامات.
- المكتبة المشتركة:
- أضِف السمة
Format.labels
للسماح بالتصنيفات المترجَمة أو تصنيفات بديلة أخرى.
- أضِف السمة
- ExoPlayer:
- عليك حلّ المشكلة التي تمنع
PreloadMediaPeriod
من الاحتفاظ بمجموعات البث عند تحميله مسبقًا مجددًا. - طبِّق علامة
TrackSelectionResult
المقابلة الصحيحة على فترة التشغيل عند إعادة اختيار المقطع الصوتي. - لا يتم بدء أجهزة العرض التي تم تفعيلها مبكرًا إلا بعد التقدم في فترة التشغيل عند الانتقال بين عناصر الوسائط (#1017).
- أضِف نوع الرجوع غير المتوفّر من أجل توفير قاعدة
-keepclasseswithmembers
لـDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- عليك حلّ المشكلة التي تمنع
- المحوِّل:
- يمكنك إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
MediaMuxer
مع الطوابع الزمنية السلبية للعرض التقديمي قبل المستوى 30 لواجهة برمجة التطبيقات.
- يمكنك إضافة حل بديل للاستثناء الذي تم طرحه بسبب عدم توافق
- اختيار المقطع الصوتي:
DefaultTrackSelector
: تفضيل مقاطع الفيديو التي يكون فيها عدد اللقطات في الثانية "معقولًا" (>=10 لقطات في الثانية) عن المقاطع التي يكون فيها عدد اللقطات في الثانية أقل أو غير محدَّد يضمن ذلك أن يختار المشغّل مسار الفيديو "الحقيقي" في ملفات MP4 المستخلصة من صور الحركة والتي يمكن أن تحتوي على مسارين HEVC حيث تكون دقة أحدهما أعلى مع عدد قليل جدًا من اللقطات (#1051).
- أدوات استخراج البيانات:
- إصلاح المشكلة التي لم يتم تخطي المساحة المتروكة فيها عند قراءة مقاطع ذات أحجام فردية من ملفات WAV (#1117)
- MP3: يجب تعبئة
Format.averageBitrate
من إطارات البيانات الوصفية، مثلXING
وVBRI
. - MPEG-TS: إلغاء التغيير الذي كان يهدف إلى ضمان عرض الإطار الأخير من خلال تمرير آخر وحدة وصول للبث إلى نموذج قائمة الانتظار (#7909). ويرجع ذلك إلى التغيير الذي يتسبب في حدوث مشاكل جديدة في مجموعات البث HLS في إطار I-frame فقط، (#1150) ومجموعات البث H.262 HLS (#1126).
- الصوت:
- يمكنك السماح باسترداد العارض من خلال إيقاف التفريغ في حال تعذّر تهيئة المقطع الصوتي في وضع الإزالة.
- الفيديو:
- إضافة حل لمشكلة الجهاز في أجهزة Galaxy Tab S7 FE وChromecast مع Google TV وLenovo M10 FHD Plus، والتي تؤدي إلى وضع علامة على عمليات بث بتنسيق 60 لقطة في الثانية بمعيار H265 على أنّها غير متوافقة
- أضِف حلاً بديلاً يضمن عرض الإطار الأول دائمًا أثناء إجراء النفق حتى إذا لم ينفِّذ الجهاز ذلك تلقائيًا كما هو مطلوب من واجهة برمجة التطبيقات (#1169). (#966).
- يجب حل المشكلة التي تؤدي فيها معالجة معلومات ألوان النطاق العالي الديناميكية إلى حدوث خطأ في برنامج الترميز ومنع تبديل التنسيقات التكيُّفية لمسارات فيديو النطاق العادي الديناميكية (SDR) (#1158).
- النص:
- WebVTT: يتم منع الإشارات المتتالية المباشرة من إنشاء مثيلات
CuesWithTiming
إضافية كاذبة منWebvttParser.parse
(#1177).
- WebVTT: يتم منع الإشارات المتتالية المباشرة من إنشاء مثيلات
- إدارة الحقوق الرقمية:
- حلّ مشكلة
NoSuchMethodError
التي يمكن عرضها من خلال إطار عملMediaDrm
بدلاً منResourceBusyException
أوNotProvisionedException
على بعض الأجهزة التي تعمل بالإصدار 14 من نظام التشغيل Android (#1145)
- حلّ مشكلة
- الأثر:
- تحسين ربط ألوان PQ إلى SDR من خلال تحويل مساحات الألوان
- الجلسة:
- واجهة المستخدم:
- الإجراء الاحتياطي لتضمين اسم لغة المقطع الصوتي إذا لم يتمكن
Locale
من تحديد الاسم المعروض (#988).
- الإجراء الاحتياطي لتضمين اسم لغة المقطع الصوتي إذا لم يتمكن
- إضافة DASH:
- تعبئة جميع عناصر
Label
من البيان فيFormat.labels
(#1054).
- تعبئة جميع عناصر
- إضافة RTSP:
- يمكنك تخطّي قيم معلومات الجلسات الفارغة (علامات i) في تحليل بروتوكول وصف الجلسة (SDP) (#1087).
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وMIDI وغير ذلك):
- أوقِف إضافة MIDI تلقائيًا كتبعية محلية لأنّها تتطلّب إعداد مستودع Maven إضافي. يمكن للمستخدمين الذين يحتاجون إلى هذه الوحدة من تبعية محلية إعادة تفعيلها.
الإصدار 1.3.0
6 مارس 2024
تم طرح "androidx.media3:media3-*:1.3.0
".
يتضمّن الإصدار 1.3.0 هذه الالتزامات.
- المكتبة المشتركة:
- نفِّذ دعم
android.resource://package/[type/]name
لمعرّفات الموارد المنتظمة (URI) للموارد الأولية حيث يختلف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). - أصلِح التعبير العادي المستخدَم للتحقّق من صحة أسماء مفاتيح عملاء الوسائط الشائعة (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
في CBR). في السابق، استخدمنا جدول التقديم/الترجيع من عنوان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 المصغّرة يتم اقتصاص الصور على شكل مربّعات ويتم توفير الصور المصغّرة الفردية
في
- إدارة الحقوق الرقمية:
- شغِّل نماذج "محو بيانات العملاء المحتملين" غير المشفّرة في محتوى إدارة الحقوق الرقمية فورًا
بشكل تلقائي، حتى إذا لم تكن مفاتيح النماذج المشفّرة اللاحقة جاهزة بعد. قد يؤدي ذلك إلى حدوث توقُّف في منتصف التشغيل إذا كانت المفاتيح لا تزال غير جاهزة
عندما يصل موضع التشغيل إلى العينات المشفّرة (ولكن في السابق لم يكن من الممكن أن تبدأ عملية التشغيل عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
أوDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- شغِّل نماذج "محو بيانات العملاء المحتملين" غير المشفّرة في محتوى إدارة الحقوق الرقمية فورًا
بشكل تلقائي، حتى إذا لم تكن مفاتيح النماذج المشفّرة اللاحقة جاهزة بعد. قد يؤدي ذلك إلى حدوث توقُّف في منتصف التشغيل إذا كانت المفاتيح لا تزال غير جاهزة
عندما يصل موضع التشغيل إلى العينات المشفّرة (ولكن في السابق لم يكن من الممكن أن تبدأ عملية التشغيل عند هذه النقطة). يمكن إيقاف هذا السلوك باستخدام
- إضافة إعلانات الوسائط التفاعلية:
- حلّ مشكلة عدم إمكانية تشغيل إعلانات 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:
- يجب حل المشكلة التي تؤدي فيها عمليات التقديم اليدوي إلى خارج نطاق
LiveConfiguration.min/maxOffset
مع مواصلة ضبط الإزاحة علىmin/maxOffset
. - حلّ مشكلة عدم صحة تنسيقات قنوات OPUS وVORBIS في القنوات الثلاث و5 و6 و7 و8 قنوات (#8396)
- يجب حلّ المشكلة التي تمنع اختيارات المقاطع الصوتية من بدء بث مباشر من موضعه التلقائي (#9347) بشكل غير صحيح.
- يمكنك إصلاح المشكلة التي كانت تؤدي فيها الحالات الجديدة لـ
CmcdData.Factory
إلى تلقّي قيم سلبية لـbufferedDurationUs
من مصادر المقاطع، ما أدى إلى ظهور الخطأIllegalArgumentException
(#888).
- يجب حل المشكلة التي تؤدي فيها عمليات التقديم اليدوي إلى خارج نطاق
- المحوِّل:
- التغلب على مشكلة متعلقة ببرنامج الترميز في وقت التهيئة بسبب ضبط معدل تشغيل مرتفع.
- أدوات استخراج البيانات:
- يمكنك وضع علامة
ROLE_FLAG_ALTERNATE
على مسارات HEVC الثانوية (غير القابلة للتشغيل) في الصور الحيّة بتنسيق JPEG كي لا يتم اختيارها لتشغيلها تلقائيًا بسبب ارتفاع درجة دقتها. - إصلاح الأخطاء في رصد الإطارات الرئيسية لمجموعات بث TS H264 (#864)
- إصلاح تقدير مدة أحداث بث TS التي تزيد مدتها عن 47721 ثانية (#855)
- يمكنك وضع علامة
- الصوت:
- يمكنك إصلاح معالجة EOS لـ
SilenceSkippingAudioProcessor
عند طلبها عدة مرات (#712).
- يمكنك إصلاح معالجة EOS لـ
- الفيديو:
- يمكنك إضافة حل لمشكلة الجهاز في أجهزة Galaxy Tab S7 FE وChromecast مع Google TV وLenovo M10 FHD Plus، والتي تؤدي إلى وضع علامة على عمليات بث AVC بسرعة 60 لقطة في الثانية (#693).
- البيانات الوصفية:
- إصلاح الخطأ الذي كانت تتم فيه تعبئة
MediaMetadata
فقط من تعليقات Vorbis التي تستخدم مفاتيح الأحرف الكبيرة (#876) - يمكنك اكتشاف
OutOfMemoryError
عند تحليل إطارات ID3 كبيرة جدًا، ما يعني إمكانية استمرار التشغيل بدون معلومات العلامة بدلاً من تعذُّر التشغيل تمامًا.
- إصلاح الخطأ الذي كانت تتم فيه تعبئة
- إدارة الحقوق الرقمية:
- يمكنك توسيع الحل البديل لعنوان URL كاذب لترخيص GreenKey
https://default.url
إلى واجهة برمجة التطبيقات 33 والإصدارات الأحدث (في السابق، لم يكن الحل البديل مطبَّقًا إلا على واجهة برمجة التطبيقات 33 بالضبط) (#837). - يمكنك حل مشكلة
ERROR_DRM_SESSION_NOT_OPENED
عند التبديل من المحتوى المشفر إلى المحتوى الواضح بدون تثبيت سطح مثبَّت على المشغّل. وجاء الخطأ نتيجة استخدام برنامج فك ترميز آمن بشكل غير صحيح لتشغيل المحتوى الواضح.
- يمكنك توسيع الحل البديل لعنوان URL كاذب لترخيص GreenKey
- الجلسة:
- ضع المفاتيح والقيم المخصصة في
MediaMetadataCompat
إلىMediaMetadata.extras
وMediaMetadata.extras
إلىMediaMetadataCompat
(#756، #802). - إصلاح عملية بث
notifyChildrenChanged
لوحدات التحكّم القديمة (#644). - إصلاح الخطأ الذي أدى إلى حدوث عطل على بعض الأجهزة يؤدي ضبط وقت سلبي لموقّت
setWhen
غير مفعّل للإشعار إلى حدوث عطل على بعض الأجهزة (#903). - إصلاح
IllegalStateException
عند عدم اكتمال ربط وحدة التحكّم بإشعارات الوسائط عند طلب التحديث الأول للإشعار (#917).
- ضع المفاتيح والقيم المخصصة في
- واجهة المستخدم:
- إضافة 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)
- أضِف حقولاً إضافية إلى تسجيل بيانات عملاء الوسائط الشائعة (CMCD): تجمُّع
المخزن المؤقت (
bs
)، والموعد النهائي (dl
)، ومعدّل التشغيل (pr
) وبدء التشغيل (su
) (#8699). - إضافة عمق البت لللوما وعمق البت للّونين إلى
ColorInfo
(#491). - أضِف حقولاً إضافية إلى تسجيل بيانات عميل الوسائط الشائعة (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)
- إصلاح الخطأ الذي تؤدي فيه عمليات التحقق من الإمكانات إلى E-AC3-JOC إلى ظهور الخطأ
IllegalArgumentException
(#677)
- أضف دعمًا لـ 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)
التي تسمح للتطبيقات بتجاهل المعالجة التلقائية لأحداث زر الوسائط.
- ضبط سلوك خدمة الإشعارات التي تعمل في المقدّمة على
- واجهة المستخدم:
- أضِف تنفيذ
Player.Listener
لأجهزة Wear OS التي تعالج إيقاف التشغيل بسببPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
من خلال إطلاق مربّع حوار نظام للسماح للمستخدم بتوصيل إخراج صوت مناسب (مثل سماعات الرأس التي تعمل بالبلوتوث). يستأنف المستمع التشغيل تلقائيًا في حال توصيل جهاز مناسب خلال مهلة قابلة للضبط (القيمة التلقائية هي 5 دقائق).
- أضِف تنفيذ
- عمليات التنزيل:
- يُرجى تعريف نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" في
DownloadService
من أجل التوافق مع Android 14. عند استخدام هذه الخدمة، يحتاج التطبيق أيضًا إلى إضافةdataSync
باسمforegroundServiceType
في ملف البيان وإضافة إذنFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- يُرجى تعريف نوع الخدمة التي تعمل في المقدّمة "مزامنة البيانات" في
- إضافة HLS:
- يُرجى إعادة تحميل قائمة التشغيل المباشرة وفق بروتوكول HTTP (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 UI. يؤدي هذا إلى إصلاح الخطأ الذي يتقدم فيه التشغيل بشكل غير محدد أثناء تفاعلات عرض 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
كاذبة بعد محو قائمة التشغيل - أضِف حقولاً إضافية إلى تسجيل بيانات عميل الوسائط الشائعة (CMCD): تنسيق البث (sf) ونوع البث (st) والإصدار (v) ومعدّل نقل البيانات الأعلى (tb) ومدة العنصر (d) وسرعة معالجة البيانات (mtp) ونوع العنصر (ot) (#8699).
- حلّ المشكلة في
- الصوت:
- إصلاح الخطأ الذي لم يتم فيه الانتقال من دور
Player.getState()
إلىSTATE_ENDED
عند تشغيل ملفات قصيرة جدًا (#538)
- إصلاح الخطأ الذي لم يتم فيه الانتقال من دور
- نقل الصوت:
- يمكنك إضافة عنوان معرّف Ogg وصفحة عنوان التعليق إلى مصدر بيانات البت لتشغيل Opus بدون نقل بما يتوافق مع RFC 7845.
- الفيديو:
- H.265/HEVC: إصلاح تحليل معلومات الصورة المرجعية القصيرة والطويلة المدى الخاصة بـ SPS.
- النص:
- CEA-608: غيّر منطق اقتطاع الإشارات لمراعاة النص المرئي فقط. كان يتم تضمين إزاحة المسافة البادئة وعلامة التبويب في السابق عند تقييد طول الرمز بـ 32 حرفًا (وهو ما كان صحيحًا من الناحية الفنية وفقًا للمواصفات) (#11019).
- إضافة إعلانات الوسائط التفاعلية:
- ارتدِ إصدار حزمة تطوير البرامج لإعلانات الوسائط التفاعلية إلى 3.30.3.
- الجلسة:
- أضف تنسيقًا مخصصًا إلى حالة وحدة التحكم ووفر
عبارة للوصول إليها. عندما يتغيّر التنسيق المخصّص،
يتم استدعاء "
MediaController.Listener.onCustomLayoutChanged
". يمكن للتطبيقات التي تريد إرسال تنسيقات مخصّصة مختلفة إلى وحدة تحكّم مختلفة في Media3 تنفيذ ذلك فيMediaSession.Callback.onConnect
من خلال استخدامAcceptedResultBuilder
للتأكّد من توفّر التنسيق المخصّص لوحدة التحكّم عند اكتمال الاتصال. - إصلاح الحالات التي أرسل فيها
MediaLibraryServiceLegacyStub
خطأً إلىResult
لا يدعم ذلك، ما أدى إلى إنشاءUnsupportedOperationException
(#78). - إصلاح الطريقة التي ينشئ بها
PlayerWrapper
عنصرVolumeProviderCompat
عن طريق تحديدvolumeControlType
من خلال كلا الطلبَين القديمَين (COMMAND_ADJUST_DEVICE_VOLUME
وCOMMAND_SET_DEVICE_VOLUME
) والطلبات الجديدة (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
وCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- أضف تنسيقًا مخصصًا إلى حالة وحدة التحكم ووفر
عبارة للوصول إليها. عندما يتغيّر التنسيق المخصّص،
يتم استدعاء "
الإصدار 1.1.0
5 تموز (يوليو) 2023
- المكتبة المشتركة:
- أضِف سببًا لإيقاف مسار الصوت غير الملائم، وشغِّله عندما يكون جاهزًا لتغيير سبب المنع لوقت طويل جدًا. (#15)
- إضافة أوامر إلى المشغّل:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- إضافة طرق التحميل الزائد إلى المشغّل للسماح للمستخدمين بتحديد علامات مستوى الصوت:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- يمكنك إضافة
Builder
للسمةDeviceInfo
وإيقاف الدالة الإنشائية الحالية. - أضِف
DeviceInfo.routingControllerId
لتحديد رقم تعريف وحدة التحكّم في التوجيه لعمليات التشغيل عن بُعد. - أضف
Player.replaceMediaItem(s)
كاختصار لإضافة العناصر في الموضع نفسه وإزالتها (#8046).
- ExoPlayer:
- يجب السماح لـ ExoPlayer بالتحكّم في طرق التحكّم بمستوى صوت الجهاز فقط إذا تم تفعيل الميزة بشكل صريح. يمكنك استخدام
ExoPlayer.Builder.setDeviceVolumeControlEnabled
للوصول إلى:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
وsetDeviceVolume(int, int)
increaseDeviceVolume(int)
وincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
وdecreaseDeviceVolume(int, int)
- أضِف السمة
FilteringMediaSource
التي تسمح بفلترة أنواع المسارات المتاحة منMediaSource
. - إتاحة تضمين Common Media Client Data (CMCD) في
الطلبات الصادرة لتنسيقات البث التكيُّفي DASH وHLS وSmoothStreaming. تم دمج الحقول التالية،
br
وbl
وcid
وrtp
وsid
(#8699). بنية واجهة برمجة التطبيقات وطرق واجهة برمجة التطبيقات:- يكون تسجيل CMCD غير مفعَّل تلقائيًا، ويمكنك استخدام
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
لتفعيله. - يتم تفعيل كل المفاتيح تلقائيًا، ويمكنك إلغاء
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
لفلترة المفاتيح التي يتم تسجيلها. - يمكنك إلغاء "
CmcdConfiguration.RequestConfig.getCustomData()
" لتفعيل تسجيل المفتاح المخصّص.
- يكون تسجيل CMCD غير مفعَّل تلقائيًا، ويمكنك استخدام
- أضِف إجراءً إضافيًا إلى بيان العرض التوضيحي الرئيسي لتسهيل بدء تشغيل التطبيق التجريبي باستخدام ملف
*.exolist.json
مخصّص (#439). - أضِف
ExoPlayer.setVideoEffects()
لاستخدامEffect
أثناء تشغيل الفيديو. - يجب تعديل السمة
SampleQueue
لتخزينsourceId
كـlong
بدلاً منint
. يؤدي هذا إلى تغيير توقيعات الطرق العامةSampleQueue.sourceId
وSampleQueue.peekSourceId
. - أضِف معلَمات إلى طريقتَي
LoadControl
shouldStartPlayback
وonTracksSelected
اللتين تسمحان بربط هذه الطرق بالطريقةMediaPeriod
ذات الصلة. - يمكنك تغيير توقيع
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
عن طريق إضافة معلَمة مخطط زمني تحتوي على النقاط التي تتضمّن المعرّفات الفريدة المستخدَمة كمفاتيح في الخريطة. هذا الإجراء مطلوب لتجنّب مشاكل التزامن في أحداث البث المباشر المتعددة الفترات. - أوقِف
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
وBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. ويمكن تسمية صيغة الطرق التي لا تحتوي علىmediaTimeOffsetUs
بدلاً من ذلك. يُرجى ملاحظة أنّه حتى بالنسبة إلى الصيغ المتوقّفة نهائيًا، لم تعُد تتم إضافة الإزاحة إلىstartTimeUs
وendTimeUs
من عناصرMediaLoadData
التي يرسلها المُرسل. - أعد تسمية
ExoTrackSelection.blacklist
إلىexcludeTrack
وisBlacklisted
إلىisTrackExcluded
. - حلّ مشكلة السلوك غير المتسق بين
ExoPlayer.setMediaItem(s)
وaddMediaItem(s)
عند طلبها من قائمة تشغيل فارغة
- يجب السماح لـ ExoPlayer بالتحكّم في طرق التحكّم بمستوى صوت الجهاز فقط إذا تم تفعيل الميزة بشكل صريح. يمكنك استخدام
- المحوِّل:
- إزالة
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
استخدِمExoPlayerAssetLoader.Factory(MediaSource.Factory)
وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
بدلاً من ذلك. - إزالة
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
- إصلاح الخطأ الذي قد يتعطّل فيه التحويل (ما يؤدي إلى انتهاء مهلة المزج) إذا تمت الإشارة إلى نهاية بث الفيديو في الوقت الذي كان فيه إطار الإدخال في انتظار المعالجة
- اطلب برامج الترميز من خلال
MediaCodecList
بدلاً من استخدام أدواتfindDecoder/EncoderForFormat
لتوسيع نطاق الدعم. - يمكنك إزالة إعدادات الإطار B في
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
صفر عندما يكونPlayer.getCurrentTracks
غير متوافق مع الفيديو، أو لم يتم بعد تحديد حجم مسار الفيديو المتوافق.
- اجعل
- إدارة الحقوق الرقمية:
- تقليل مستوى ظهور عدة طرق للاستخدام الداخلي فقط على
DefaultDrmSession
والتي لا يُتوقع أن يتم طلبها من خارج حزمة DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- تقليل مستوى ظهور عدة طرق للاستخدام الداخلي فقط على
- ماجستير:
- إضافة مكتبة أداة مزج جديدة يمكن استخدامها لإنشاء ملف حاوية MP4.
- إضافة إعلانات الوسائط التفاعلية:
- تفعيل أحداث البث المباشر بتنسيق DASH المباشرة بعدة فترات زمنية لميزة DAI يُرجى العِلم أنّ طريقة التنفيذ الحالية لا تتيح بعد التقديم/الترجيع في أحداث البث المباشر (#10912).
- إصلاح الخطأ المتمثل في إدراج مجموعة إعلانية جديدة في أحداث البث المباشر لأنّ موضع المحتوى الذي تم احتسابه في المخططات الزمنية المتتالية يختلف قليلاً
- الجلسة:
- أضِف طريقة المساعدة
MediaSession.getControllerForCurrentRequest
للحصول على معلومات عن وحدة التحكّم التي تطلب طريقةPlayer
حاليًا. - يمكنك إضافة
androidx.media3.session.MediaButtonReceiver
للسماح للتطبيقات بتنفيذ استئناف التشغيل من خلال أحداث زر الوسائط التي تم إرسالها من خلال سماعة رأس بلوتوث مثلاً (#167). - أضِف طريقة التنفيذ التلقائية إلى
MediaSession.Callback.onAddMediaItems
للسماح بتمريرMediaItems
المطلوب إلىPlayer
في حال توفّرLocalConfiguration
(على سبيل المثال، معرّف الموارد المنتظم (URI)) (#282). - أضِف زرَّي الأوامر "تقديم/ترجيع إلى السابق" و "تقديم/ترجيع إلى التالي" في عرض إشعارات الوسائط المكثّف تلقائيًا في نظام التشغيل Android 12 والإصدارات الأقدم (#410).
- أضِف طريقة التنفيذ التلقائية إلى
MediaSession.Callback.onAddMediaItems
للسماح بتمريرMediaItems
المطلوب إلىPlayer
في حال توفّرLocalConfiguration
(على سبيل المثال، معرّف الموارد المنتظم (URI)) (#282). - أضِف زرَّي الأوامر "تقديم/ترجيع إلى السابق" و "تقديم/ترجيع إلى التالي" في عرض إشعارات الوسائط المكثّف تلقائيًا في نظام التشغيل Android 12 والإصدارات الأقدم (#410).
- أضِف طريقة المساعدة
- واجهة المستخدم:
- يمكنك إضافة طريقتَي الاستخدام
shouldShowPlayButton
وhandlePlayPauseButtonAction
لكتابة عناصر واجهة المستخدم المخصّصة باستخدام زر التشغيل/الإيقاف المؤقت.
- يمكنك إضافة طريقتَي الاستخدام
- إضافة RTSP:
- إضافة DASH:
- إزالة معادلة وقت الوسائط من
MediaLoadData.startTimeMs
وMediaLoadData.endTimeMs
لأحداث بث DASH متعددة الفترات - إصلاح الخطأ الذي أدّى إلى إعادة تحضير مصدر وسائط مباشرةً متعدد النقاط
إلى ظهور الخطأ
IndexOutOfBoundsException
(#10838).
- إزالة معادلة وقت الوسائط من
- إضافة HLS:
- إضافة
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
لضبط مهلة لسلسلة محادثات التحميل يتم إكمالها حتى يتم ضبطTimestampAdjuster
. في حال لم تكتمل عملية الإعداد قبل انتهاء المهلة، يتم عرض علامةPlaybackException
لتجنُّب التوقف اللا نهائي في عملية التشغيل. ويتم ضبط المهلة على صفر تلقائيًا (#323).
- إضافة
- أدوات الاختبار:
- تحقَّق من حساسية حالة مخطط معرّف الموارد المنتظم (URI) في
DataSourceContractTest
.
- تحقَّق من حساسية حالة مخطط معرّف الموارد المنتظم (URI) في
- أزِل الرموز المتوقّفة نهائيًا:
- عليك إزالة دوال إنشاء
DefaultAudioSink
، واستخدامDefaultAudioSink.Builder
بدلاً من ذلك. - يمكنك إزالة
HlsMasterPlaylist
واستخدامHlsMultivariantPlaylist
بدلاً من ذلك. - إزالة
Player.stop(boolean)
استخدِمPlayer.stop()
وPlayer.clearMediaItems()
(إذا كانت قيمةreset
هيtrue
) بدلاً منها. - يُرجى إزالة دالتَي إنشاء
SimpleCache
تم إيقافهما نهائيًا، واستخدام دالة إنشاء غير متوقّفة تستخدمDatabaseProvider
بدلاً من ذلك للحصول على أداء أفضل. - أزِل الدالة الإنشائية
DefaultBandwidthMeter
واستخدِمDefaultBandwidthMeter.Builder
بدلاً منها. - عليك إزالة دوال إنشاء
DefaultDrmSessionManager
، واستخدامDefaultDrmSessionManager.Builder
بدلاً من ذلك. - يُرجى إزالة دالتَي إنشاء
HttpDataSource.InvalidResponseCodeException
تم إيقافهما نهائيًا، واستخدام دالة إنشائية غير متوقّفة نهائيًا تقبل حقولاً إضافية(cause
،responseBody
) لتحسين تسجيل الأخطاء. - يمكنك إزالة
DownloadHelper.forProgressive
وDownloadHelper.forHls
وDownloadHelper.forDash
وDownloadHelper.forSmoothStreaming
واستخدامDownloadHelper.forMediaItem
بدلاً من ذلك. - أزِل دالة إنشاء
DownloadService
المتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة نهائيًا تتضمّن خيار توفير معلَمةchannelDescriptionResourceId
. - يُرجى إزالة ثوابت السلسلة المتوقّفة نهائيًا لمجموعات الأحرف (
ASCII_NAME
وUTF8_NAME
وISO88591_NAME
وUTF16_NAME
وUTF16LE_NAME
)، واستخدام مجموعات أحرف Kotlin من الحزمةkotlin.text
أوjava.nio.charset.StandardCharsets
أوcom.google.common.base.Charsets
بدلاً من ذلك. - أزِل دالة إنشاء
WorkManagerScheduler
المتوقّفة نهائيًا، واستخدِم دالة إنشائية غير متوقّفة توفّر خيار توفير معلَمةContext
بدلاً من ذلك. - أزِل الطرق المتوقّفة
createVideoSampleFormat
وcreateAudioSampleFormat
وcreateContainerFormat
وcreateSampleFormat
التي كانت مستخدَمة لإنشاء مثيل للفئةFormat
. بدلاً من ذلك، يمكنك استخدامFormat.Builder
لإنشاء نُسخ افتراضية منFormat
. - يُرجى إزالة الطرق المتوقّفة نهائيًا
copyWithMaxInputSize
وcopyWithSubsampleOffsetUs
وcopyWithLabel
وcopyWithManifestFormatInfo
وcopyWithGaplessInfo
وcopyWithFrameRate
وcopyWithDrmInitData
وcopyWithMetadata
وcopyWithBitrate
وcopyWithVideoSize
واستخدامFormat.buildUpon()
وطريقة الضبط بدلاً من ذلك. - يمكنك إزالة السمة
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 هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.7.
يتضمّن هذا الإصدار التغييرات التالية منذ إصدار 1.0.1:
- المكتبة الأساسية:
- يمكنك إضافة
Buffer.isLastSample()
للدلالة على ما إذا كانBuffer
يحتوي على علامةC.BUFFER_FLAG_LAST_SAMPLE
. - حلّ مشكلة عدم عرض الإطار الأخير في حال إزالة النموذج الأخير الذي يتضمّن إطارات من قائمة الانتظار بدون قراءة نموذج "نهاية البث" (#11079).
- يمكنك إضافة
- أدوات استخراج البيانات:
- أصلِح تحليل H.265 SPS في ملفات MPEG-TS من خلال إعادة استخدام منطق التحليل الذي سبق أن استخدمه أدوات استخراج RTSP وMP4 (#303).
- النص:
- البحث الآمن: يمكنك إضافة الدعم لملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب بايت (#319).
- الجلسة:
- حلّ المشكلة التي تؤدي إلى عدم تعديل
MediaController
للأوامر المتاحة عند اتصاله بجهازMediaSessionCompat
قديم يعدّل إجراءاته - إصلاح الخلل الذي منع
MediaLibraryService
من عرض قيمة فارغة لاستدعاء من واجهة مستخدم النظام إلىCallback.onGetLibraryRoot
باستخدامparams.isRecent == true
على واجهة برمجة التطبيقات 30 (#355). - إصلاح تسرُّب الذاكرة
MediaSessionService
أوMediaLibraryService
(#346) - إصلاح الخطأ الذي قد يؤدي فيه الجمع بين
Timeline
وتعديل الموضع فيMediaSession
إلى عرض علامةMediaController
للسمةIllegalStateException
- حلّ المشكلة التي تؤدي إلى عدم تعديل
الإصدار 1.0.1
18 نيسان (أبريل) 2023
تم طرح "androidx.media3:media3-*:1.0.1
".
يتضمّن الإصدار 1.0.1 هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.6.
- المكتبة الأساسية:
- إعادة ضبط خيار إلغاء البث المباشر المستهدَف عند الانتقال إلى الموضع التلقائي (#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 مع ظهور خطأ RTSP خطأ 461 غير supportedTransport (#11069).
الإصدار 1.0.0
22 آذار (مارس) 2023
تم طرح "androidx.media3:media3-*:1.0.0
".
يتضمّن الإصدار 1.0.0 هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.5.
لم يتم إجراء أي تغييرات منذ 1.0.0-rc02.
الإصدار 1.0.0-rc02
2 آذار (مارس) 2023
تم طرح "androidx.media3:media3-*:1.0.0-rc02
".
يحتوي الإصدار 1.0.0-rc02 على هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.4.
- المكتبة الأساسية:
- عمليات التنزيل:
- حدِّد الفرق القصوى في وقت بدء قطاعين قابلين للتهيئة في
SegmentDownloader
والفئات الفرعية (#248).
- حدِّد الفرق القصوى في وقت بدء قطاعين قابلين للتهيئة في
- الصوت:
- الفيديو:
- عليك ربط تنسيق HEVC HDR10 بالقيمة
HEVCProfileMain10HDR10
بدلاً منHEVCProfileMain10
. - يُرجى إضافة حل لمشكلة الجهاز في جهاز "Chromecast مع Google TV" وLenovo M10 FHD Plus، وهي مشكلة تؤدي إلى وضع علامة على عمليات بث AVC بسرعة 60 لقطة في الثانية بأنّها غير متوافقة (#10898).
- يمكنك إصلاح مشاكل أداء إصدار الإطارات عند تشغيل وسائط بعدد لقطات في الثانية أعلى بكثير من معدّل تحديث الشاشة.
- عليك ربط تنسيق HEVC HDR10 بالقيمة
- طاقم العمل:
- إصلاح
STATE_IDLE
المؤقت عند الانتقال بين عناصر الوسائط (#245).
- إصلاح
- بروتوكول RTSP:
- احصَل على كائن UnusedArgumentException الذي يتم طرحه أثناء تحليل RTSP غير صالح ووصف رسائل الاستجابة (#10971).
- الجلسة:
- إصلاح الخلل الذي يؤدي إلى عدم تعديل زر التشغيل/الإيقاف المؤقت للإشعار بحالة المشغّل (#192)
- إضافة إعلانات الوسائط التفاعلية:
- يجب إصلاح الخطأ الذي منع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
LOADED
الأول (وفي حال عدم تلقّي إعلانات فقط).
- يجب إصلاح الخطأ الذي منع بدء بث DAI بدون أي إعلانات
لأنّه لم يتم تلقّي حدث
الإصدار 1.0.0-rc01
16 شباط (فبراير) 2023
تم طرح "androidx.media3:media3-*:1.0.0-rc01
".
يحتوي الإصدار 1.0.0-rc01 على هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.3.
- المكتبة الأساسية:
- عليك تعديل منطق ترتيب برنامج فك الترميز في برنامج العرض للالتزام بالإعدادات المفضّلة
في
MediaCodecSelector
، حتى إذا أفاد أحد برامج فك الترميز أنّه قد لا يتمكّن من تشغيل الوسائط بشكل فعّال. على سبيل المثال، باستخدام أداة الاختيار التلقائية، يُفضّل استخدام برنامج فك ترميز الأجهزة الذي يتوفر له دعم وظيفي فقط بدلاً من برنامج فك ترميز البرامج الذي يتوافق بشكل كامل مع التنسيق (#10604). - أضِف
ExoPlayer.Builder.setPlaybackLooper
التي تعين سلسلة تعليمات تشغيل سابقة لمثيل ExoPlayer جديد. - السماح بمحو أدوات مساعدة إدارة التنزيل (#10776).
- إضافة مَعلمة إلى
BasePlayer.seekTo
للإشارة أيضًا إلى الأمر المستخدَم في التقديم/الترجيع - استخدِم المظهر عند تحميل الرسومات على واجهة برمجة التطبيقات الإصدار 21 والإصدارات الأحدث (#220).
- أضِف علامة
ConcatenatingMediaSource2
تتيح دمج عناصر وسائط متعددة في نافذة واحدة (#247).
- عليك تعديل منطق ترتيب برنامج فك الترميز في برنامج العرض للالتزام بالإعدادات المفضّلة
في
- أدوات استخراج البيانات:
- اعرض
ParserException
بدلاً منNullPointerException
إذا كان جدول العينة (stbl) لا يحتوي على وصف نموذجي مطلوب (stsd) عند تحليل ذرات المسار. - يمكنك تخطي النماذج بشكل صحيح عند التقديم/الترجيع مباشرةً إلى إطار المزامنة في fMP4 (#10941).
- اعرض
- الصوت:
- استخدِم معدل نقل البيانات لتنسيق الصوت المضغوط لاحتساب الحد الأدنى لحجم المخزن المؤقت
في
AudioTrack
في عمليات التشغيل المباشر (تمرير).
- استخدِم معدل نقل البيانات لتنسيق الصوت المضغوط لاحتساب الحد الأدنى لحجم المخزن المؤقت
في
- النص:
- يجب إصلاح
TextRenderer
تمرير فهرس غير صالح (سلبي) إلىSubtitle.getEventTime
إذا كان ملف الترجمة لا يحتوي على أي أدلة. - SubRip: يمكنك إضافة الدعم لملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب بايت.
- يجب إصلاح
- البيانات الوصفية:
- تحليل قيم متعددة مفصولة بدون مسافات من إطارات ID3، على النحو الذي يسمح به الإصدار 2.4 من ID3.
- أضف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموضح في بيانات التعريف. - يمكنك إضافة
MediaMetadata.isBrowsable
كبديل لـMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- DASH:
- إضافة تحليل كامل لمجموعات تكييف الصورة، بما في ذلك أعداد المربّعات (#3752).
- واجهة المستخدم:
- الجلسة:
- أضِف ملخّص
SimpleBasePlayer
للمساعدة في تنفيذ واجهةPlayer
للاعبين المخصّصين. - إضافة طريقة مساعد لتحويل الرمز المميز لجلسة النظام الأساسي إلى Media3
SessionToken
(#171). - استخدِم
onMediaMetadataChanged
لتشغيل تحديثات جلسة وسائط النظام الأساسي (#219). - أضِف جلسة تشغيل الوسائط كوسيطة في
getMediaButtons()
منDefaultMediaNotificationProvider
واستخدِم القوائم غير القابلة للتغيير من أجل الوضوح (#216). - يمكنك إضافة أداة معالجة معاودة الاتصال في
onSetMediaItems
لتوفير وسائل لتعديل/ضبط قائمةMediaItem
، مع بدء الفهرس والموضع حسب الجلسة قبل الإعداد على المشغّل (#156). - تجنَّب رصد عمليات النقر مرّتين لأحداث زر الوسائط غير المزوَّدة بالبلوتوث (#233).
- جعل
QueueTimeline
أكثر فعالية في حال استخدام حالة جلسة قديمة غامضة (#241)
- أضِف ملخّص
- البيانات الوصفية:
- تحليل قيم متعددة مفصولة بدون مسافات من إطارات ID3، على النحو الذي يسمح به الإصدار 2.4 من ID3.
- أضف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموضح في بيانات التعريف. - يمكنك إضافة
MediaMetadata.isBrowsable
كبديل لـMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- إضافة البث:
- انتقال إصدار حزمة تطوير البرامج (SDK) للإرسال إلى 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 هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.2.
- المكتبة الأساسية:
- أضف
ExoPlayer.isTunnelingEnabled
للتحقق مما إذا كان الاتصال النفقي مفعَّلاً للمسارات المحددة حاليًا (#2518). - أضف
WrappingMediaSource
لتبسيط التفافMediaSource
واحد (#7279). - تجاهل المخزن المؤقت العكسي قبل أن يتعطل التشغيل بسبب عدم كفاية الذاكرة المتاحة.
- يمكنك إغلاق كتلة التتبُّع "doSomeWork" عند تفعيل عملية الإزاحة.
- إصلاح مشكلة تتبع الجلسات من خلال عمليات التقديم السريع في
PlaybackStatsListener
(#180). - يجب إرسال معاودة الاتصال بـ "
onMediaItemTransition
" عند الاتصال بالرقمseekToNext
أو "seekToPrevious
" في قائمة تشغيل تتضمّن عنصرًا واحدًا (#10667). - أضِف علامة
Player.getSurfaceSize
التي تعرض حجم السطح الذي يُعرَض الفيديو عليه. - إصلاح الخطأ حيث يمكن أن تؤدي إزالة أدوات المستمعين أثناء إصدار المشغّل إلى عرض
IllegalStateException
(#10758)
- أضف
- الإصدار:
- فرض الحد الأدنى من
compileSdkVersion
لتجنب أخطاء التحويل البرمجي (#10684). - تجنَّب نشر الحظر عند تضمينه في إصدار آخر من Grale.
- فرض الحد الأدنى من
- اختيار المقطع الصوتي:
- تفضيل المسارات الأخرى على تقنية Dolby Vision إذا كانت الشاشة لا تتيح ذلك (#8944).
- عمليات التنزيل:
- الفيديو:
- جرِّب برنامج فك ترميز بديل لـ Dolby Vision إذا كانت الشاشة لا تتيحه. (#9794).
- الصوت:
- استخدِم
SingleThreadExecutor
لإصدارAudioTrack
مثيلات لتجنُّب حدوث أخطاء بسبب نفاد الذاكرة عند إصدار عدة مشغّلات في وقت واحد (#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)
لتحديد ما إذا كان العارض سينتج البيانات الوصفية في وقت مبكر أو متزامنًا مع موضع المشغّل.
- يمكن الآن ضبط
- إدارة الحقوق الرقمية:
- التغلب على خطأ في تنفيذ أداة ClickKey على Android 13 يؤدي إلى عرض عنوان URL غير فارغ للترخيص ولكنه غير صالح.
- إصلاح الخطأ
setMediaDrmSession failed: session not opened
عند التبديل بين مخططات إدارة الحقوق الرقمية في قائمة تشغيل (مثل Widevine إلىClearKey)
- النص:
- CEA-608: التأكّد من معالجة أوامر تبديل الخدمة في الحقل 2 بشكل صحيح (#10666)
- DASH:
- تحليل
EventStream.presentationTimeOffset
من البيانات (#10460).
- تحليل
- واجهة المستخدم:
- استخدِم عمليات الإلغاء الحالية للمشغّل كإعداد مسبق في
TrackSelectionDialogBuilder
(#10429).
- استخدِم عمليات الإلغاء الحالية للمشغّل كإعداد مسبق في
- الجلسة:
- يُرجى التأكُّد من تنفيذ الأوامر دائمًا بالترتيب الصحيح حتى إذا كان بعضها يتطلب دقة غير متزامنة (#85).
- أضِف
DefaultMediaNotificationProvider.Builder
لإنشاءDefaultMediaNotificationProvider
مثيل. يمكن لأداة الإنشاء ضبط معرّف الإشعار ومعرّف قناة الإشعارات واسم قناة الإشعارات التي يستخدمها مقدّم الخدمة. ويمكنك أيضًا إضافة الطريقةDefaultMediaNotificationProvider.setSmallIcon(int)
لضبط رمز الإشعارات الصغير. (#104) - تأكَّد من عدم إسقاط الأوامر التي تم إرسالها قبل
MediaController.release()
(#99). SimpleBitmapLoader
يمكنه تحميل الصورة النقطية منfile://
URIs (#108).- إصلاح التأكيد الذي يمنع
MediaController
من البحث عن الإعلان خلال فترة معيّنة (#122) - عند انتهاء التشغيل، يتم إيقاف
MediaSessionService
من المقدمة ويظهر إشعار بإعادة تشغيل آخر عنصر وسائط تم تشغيله (#112). - عدم بدء خدمة تعمل في المقدّمة بهدف إيقاف مؤقت مؤقتًا (#167)
- إخفاء "الشارة" يدويًا المرتبطة بالإشعار الذي تم إنشاؤه من خلال
DefaultNotificationProvider
على واجهة برمجة التطبيقات 26 و27 لواجهة برمجة التطبيقات (يتم إخفاء الشارة تلقائيًا على الإصدار 28 من واجهة برمجة التطبيقات والإصدارات الأحدث) (#131). - إصلاح الخطأ الذي يؤدي إلى تسبب اتصال الصنف الثاني من MediaSession قديم إلى Media3 MediaController في عدم تحديد نوع الخطأ legalStateExceptions (#49)
- بروتوكول RTSP:
- إعلانات الوسائط التفاعلية:
- أضف مهلة لتحميل معلومات الإعلان لمعالجة الحالات التي تتعثر فيها أداة تطوير البرامج لإعلانات الوسائط التفاعلية في تحميل أحد الإعلانات (#10510).
- منع تخطّي الإعلانات أثناء التشغيل عند الانتقال إلى نهاية المحتوى (#10685)
- احسب مدة المهلة بشكل صحيح لأحداث البث المباشر التي تتضمن إعلانات مُدرَجة من جهة الخادم، على سبيل المثال، إعلان IMA DAI (#10764).
- إضافة FFmpeg:
- أضِف العلامات المطلوبة حديثًا لربط مكتبات FFmpeg مع NDK 23.1.7779620 أو الإصدارات الأحدث (#9933).
- إضافة AV1:
- يجب تحديث إصدار CMake لتجنّب حالات عدم التوافق مع أحدث إصدارات Android Studio (#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 هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار ExoPlayer 2.18.1.
- المكتبة الأساسية:
- عليك التأكّد من أنّ تغيير
ShuffleOrder
باستخدامExoPlayer.setShuffleOrder
يؤدي إلى طلب الإجراءPlayer.Listener#onTimelineChanged
باستخدامreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - بالنسبة إلى الوسائط المتتالية، يجب تضمين المقاطع الصوتية المحددة فقط في موضع التخزين المؤقت (#10361).
- السماح بتسجيل مخصص لجميع مُخرجات سجلات ExoPlayer (#9752).
- إصلاح تنفيذ
setDataSourceFactory
فيDefaultMediaSourceFactory
، والذي كان لا يعمل في بعض الحالات (#116).
- عليك التأكّد من أنّ تغيير
- أدوات استخراج البيانات:
- DASH:
- تحليل عنوان URL لترخيص ClickKey من البيانات (#10246).
- واجهة المستخدم:
- تأكَّد من أنّ ميزة TalkBack تعلن عن خيار السرعة النشِطة حاليًا في قائمة عناصر التحكّم في التشغيل (#10298).
- بروتوكول RTSP:
- إضافة معالجة الحزمة المجزأة VP8 (#110).
- إضافة Leanback:
- يمكنك الاستماع إلى تغييرات
playWhenReady
فيLeanbackAdapter
(10420).
- يمكنك الاستماع إلى تغييرات
- طاقم العمل:
الإصدار 1.0.0-beta01
16 حزيران (يونيو) 2022
تم طرح "androidx.media3:media3-*:1.0.0-beta01
".
يتضمّن الإصدار 1.0.0-beta01 هذه الالتزامات.
يتوافق ذلك مع إصدار ExoPlayer 2.18.0.
- المكتبة الأساسية:
- فعِّل بيانات تشخيص نظام 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
المقاطع الصوتية التي لا يتجاوز عدد قنواتها إمكانات إخراج الجهاز. على الأجهزة المحمولة باليد، يفضّل "DefaultTrackSelector
" الاستيريو/الأحادي على تنسيقات الصوت المتعدّدة القنوات، إلا إذا كان التنسيق متعدد القنوات محدّدًا مكانيًا (الإصدار 12L من نظام التشغيل Android والإصدارات الأحدث) أو هو تنسيق صوت محيطي بتقنية Dolby. بالإضافة إلى ذلك، على الأجهزة التي تتيح تحديد مكانية الصوت، سيراقبDefaultTrackSelector
التغييرات التي تطرأ على خصائص المكانات المكانية وسيتم من خلالها اختيار مقطع صوتي جديد من خلال هذه الخصائص. يتم استبعاد الأجهزة التي تتضمّنtelevision
وضع واجهة المستخدم من هذه القيود، ويفضّل استخدام التنسيق الأعلى عدد القنوات. لتفعيل هذه الميزة، يجب إنشاء مثيلDefaultTrackSelector
باستخدامContext
.
- تنظيم صف
- الفيديو:
- إعادة تسمية "
DummySurface
" إلى "PlaceholderSurface
". - إضافة دعم AV1 إلى
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- إعادة تسمية "
- الصوت:
- استخدام برنامج فك ترميز الصوت من LG AC3 للإعلان عن نوع MIME غير عادي
- يجب تغيير نوع إرجاع
AudioAttributes.getAudioAttributesV21()
منandroid.media.AudioAttributes
إلى فئة برنامج تضمينAudioAttributesV21
جديدة لمنع عملية التحقق البطيئة ART على واجهة برمجة التطبيقات < 21. - اطلب البحث في النظام الأساسي (واجهة برمجة التطبيقات 29+ ) أو افترض أنّ عدد قنوات ترميز الصوت للتمرير الصوتي عند عدم ضبط تنسيق عدد القنوات الصوتية، ما يحدث عند إعداد HLS بدون مقاطع (10204).
- اضبط
AudioTrack
باستخدام قناع القناةAudioFormat.CHANNEL_OUT_7POINT1POINT4
إذا كان برنامج فك الترميز يُخرج صوت PCM بـ 12 قناة (#10322.
- إدارة الحقوق الرقمية
- تأكَّد دائمًا من تحديث جلسة إدارة الحقوق الرقمية بشكل صحيح عند التقديم/الترجيع فورًا بعد تغيير التنسيق (10274).
- النص:
- غيِّر
Player.getCurrentCues()
لعرضCueGroup
بدلاً منList<Cue>
. - SSA: إتاحة إعداد النمط
OutlineColour
عند استخدامBorderStyle == 3
(أي أنّOutlineColour
يضبط خلفية الإشارة) (#8435). - CEA-708: تحليل البيانات في مجموعات خدمات متعدّدة وتجاهل الأجزاء غير المرتبطة برقم الخدمة المحدّد حاليًا
- يمكنك إزالة السمة
RawCcExtractor
التي كانت تُستخدم فقط للتعامل مع تنسيق الترجمة الداخلية في Google.
- غيِّر
- أدوات استخراج البيانات:
- واجهة المستخدم:
- إصلاح تسليم الأحداث إلى
OnClickListener
التي تم ضبطها فيPlayerView
في حال كانتuseController=false
(#9605). يجب أيضًا إصلاح تسليم الأحداث إلىOnLongClickListener
لجميع إعدادات الملفات الشخصية. - إصلاح المعالجة غير الصحيحة لسلسلة من أحداث اللمس التي تخرج من حدود
PlayerView
قبلACTION_UP
كنقرة (#9861). - أصلح مشكلة إمكانية الوصول
PlayerView
التي قد يؤدي النقر عليها إلى تبديل التشغيل بدلاً من إخفاء عناصر التحكم (#8627). - أعِد كتابة
TrackSelectionView
وTrackSelectionDialogBuilder
للعمل باستخدام واجهةPlayer
بدلاً منExoPlayer
. ويسمح ذلك باستخدام طرق العرض مع عمليات تنفيذPlayer
الأخرى، ويزيل الاعتماد من وحدة واجهة المستخدم إلى وحدة ExoPlayer. هذا تغيير مقطع. - عدم إظهار مسارات النصوص المفروضة في أداة اختيار المسارات
PlayerView
، والإبقاء على تحديد مسار نص مفروض مناسب في حال تحديد "بدون" (#9432)
- إصلاح تسليم الأحداث إلى
- DASH:
- تحليل عدد القنوات من عناصر
AudioChannelConfiguration
لبروتوكول DTS يؤدي هذا إلى إعادة تفعيل عبور الصوت لمجموعات البث DTS(#10159). - عدم السماح بمرور
null
إلىDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. ويمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
بشكل صريح إذا لزم الأمر.
- تحليل عدد القنوات من عناصر
- بروتوكول HLS:
- يمكنك الرجوع إلى طريقة تحضير المقاطع الصوتية إذا كانت السمة CODECS لقائمة التشغيل لا تتضمن برنامج ترميز الصوت (#10065).
- عدم السماح بمرور
null
إلىHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
وHlsMediaSource.Factory.setPlaylistParserFactory
وHlsMediaSource.Factory.setPlaylistTrackerFactory
ويمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
أوDefaultHlsPlaylistParserFactory
أو مرجع إلىDefaultHlsPlaylistTracker.FACTORY
بشكل صريح إذا كان ذلك مطلوبًا.
- البث السلس:
- عدم السماح بمرور
null
إلىSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. ويمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
صراحةً إذا لزم الأمر.
- عدم السماح بمرور
- بروتوكول RTSP:
- إضافة قارئ بروتوكول RTP لنظام H263 (#63)
- إضافة قارئ بروتوكول RTP لنظام MPEG4 (#35)
- أضِف قارئ RTP لـ HEVC (#36).
- إضافة قارئ RTP في AMR في الوقت الحالي، لا يُسمَح حاليًا سوى بمشاهدة فيديوهات AMR ذات القنوات الأحادية وغير المتداخلة. لا يمكن استخدام حمولة البيانات المركبة من AMR RTP. (#46)
- إضافة قارئ بروتوكول RTP لنظام VP8 (#47).
- أضِف قارئ RTP لـ WAV (#56).
- إصلاح عنوان تفويض RTSP الأساسي (#9544).
- توقَّف عن التحقّق من حقول بروتوكول وصف الجلسة (SDP) الإلزامية لأنّ ExoPlayer لا تحتاج إليها (#10049).
- عرض الاستثناء المحدد عند تحليل توقيت RTSP (#10165).
- أضِف قارئ RTP لـ VP9 (#47).
- أضِف قارئ RTP في OPUS (#53).
- مصادر البيانات:
- إعادة تسمية "
DummyDataSource
" إلى "PlaceholderDataSource
". - حل مشكلة معالجة مقاطعة OkHttp.
- إعادة تسمية "
- الجلسة:
- استبدِل
MediaSession.MediaItemFiller
بـMediaSession.Callback.onAddMediaItems
للسماح بحلّ الطلبات غير المتزامنة. - إتاحة طُرق
setMediaItems(s)
عند ربطMediaController
بجلسة وسائط قديمة - إزالة
MediaController.setMediaUri
وMediaSession.Callback.onSetMediaUri
يمكن تحقيق الوظيفة نفسها باستخدامMediaController.setMediaItem
وMediaSession.Callback.onAddMediaItems
. - يمكنك إعادة توجيه مكالمات
MediaController
القديمة لتشغيل الوسائط إلىMediaSession.Callback.onAddMediaItems
بدلاً منonSetMediaUri
. - أضِف
MediaNotification.Provider
وDefaultMediaNotificationProvider
لتخصيص الإشعار. - أضِف
BitmapLoader
وSimpleBitmapLoader
لتنزيل صور الأعمال الفنية. - أضِف
MediaSession.setCustomLayout()
لتوفير التوافق مع الأنظمة القديمة مع الجلسة القديمة. - أضِف
MediaSession.setSessionExtras()
لتوفير التكافؤ في الميزات مع الجلسة القديمة. - إعادة تسمية
MediaSession.MediaSessionCallback
إلىMediaSession.Callback
، وMediaLibrarySession.MediaLibrarySessionCallback
إلىMediaLibrarySession.Callback
، وMediaSession.Builder.setSessionCallback
إلىsetCallback
. - إصلاح NPE في
MediaControllerImplLegacy
(#59). - تعديل معلومات موضع الجلسة بشأن تغيير المخطط الزمني(#51).
- إصلاح NPE في
MediaControllerImplBase
بعد إصدار وحدة التحكّم (#74).
- استبدِل
- تشغيل الإعلان / إعلانات الوسائط التفاعلية:
- خفض معدّل استطلاع الإعلانات من كل 100 ملي ثانية إلى كل 200 ملي ثانية، للتوافق مع اقتراحات مجلس تقييم الوسائط (MRC)
- إضافة FFmpeg:
- يجب تحديث إصدار CMake إلى
3.21.0+
لتجنُّب خطأ CMake الذي يؤدي إلى تعذُّر مزامنة Gradle في AndroidStudio (#9933).
- يجب تحديث إصدار CMake إلى
- أزِل الرموز المتوقّفة نهائيًا:
- إزالة
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
استخدِمPlayer.Listener.onTracksChanged(Tracks)
بدلاً من ذلك. - إزالة
Player.getCurrentTrackGroups
وPlayer.getCurrentTrackSelections
استخدِمPlayer.getCurrentTracks
بدلاً من ذلك. يمكنك أيضًا مواصلة استخدامExoPlayer.getCurrentTrackGroups
وExoPlayer.getCurrentTrackSelections
، ولكن سيتم إيقاف هاتَين الطريقتَين. - أزِل الثوابتَين
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
وDEFAULT_TRACK_SELECTOR_PARAMETERS
. استخدِمgetDefaultTrackSelectorParameters(Context)
بدلاً من ذلك عند الإمكان، واستخدِمDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
بدلاً من ذلك. - إزالة الدالة الإنشائية
DefaultTrackSelector(ExoTrackSelection.Factory)
يمكنك استخدامDefaultTrackSelector(Context, ExoTrackSelection.Factory)
كبديل. - إزالة
Transformer.Builder.setContext
يجب تمريرContext
إلى الدالة الإنشائيةTransformer.Builder
بدلاً من ذلك.
- إزالة
الإصدار 1.0.0-alpha03
14 آذار (مارس) 2022
تم طرح "androidx.media3:media3-*:1.0.0-alpha03
".
يحتوي الإصدار 1.0.0-alpha03 على هذه الالتزامات.
يتوافق ذلك مع إصدار ExoPlayer 2.17.1.
- الصوت:
- إصلاح أخطاء التحقّق من إمكانات الصوت في Dolby Atmos (E-AC3-JOC) في HLS
- أدوات استخراج البيانات:
- FMP4: حلّ المشكلة التي تؤدي إلى عرض بيانات وصفية لعينة الرسائل الإلكترونية بترتيب غير صحيح لمجموعات البث التي تحتوي على كل من ملفَّي الرسالة v0 وv1 (#9996)
- النص:
- يجب إصلاح تفاعل
SingleSampleMediaSource.Factory.setTrackId
وMediaItem.SubtitleConfiguration.Builder.setId
لمنح الأولوية للحقلSubtitleConfiguration
والرجوع إلى القيمةFactory
في حال عدم ضبطها (#10016).
- يجب إصلاح تفاعل
- تشغيل الإعلان:
- حلّ مشكلة نقص المحتوى الصوتي بين فترات عرض الإعلانات في أحداث البث المباشر وفق بروتوكول HTTP (HLS) التي يتمّ إنشاؤها باستخدام ميزة SSAI
الإصدار 1.0.0-alpha02
2 مارس 2022
تم طرح "androidx.media3:media3-*:1.0.0-alpha02
".
يحتوي الإصدار 1.0.0-alpha02 على هذه الالتزامات.
يتوافق ذلك مع إصدار ExoPlayer 2.17.0.
- المكتبة الأساسية:
- أضف الطريقة المحمية
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).
- أدوات استخراج البيانات:
- النص:
- إدارة الحقوق الرقمية:
- إزالة
playbackLooper
منDrmSessionManager.(pre)acquireSession
عند استخدامDrmSessionManager
من خلال تطبيق فيMediaSource
مخصّص، يجب ضبطplaybackLooper
إلىDrmSessionManager.setPlayer
بدلاً من ذلك.
- إزالة
- تشغيل الإعلان / إعلانات الوسائط التفاعلية:
- إضافة دعم إلى إدراج إعلان ديناميكي لإعلانات الوسائط التفاعلية (DAI) (#8213).
- أضف طريقة إلى
AdPlaybackState
للسماح بإعادة تعيين مجموعة إعلانية حتى يمكن تشغيلها مرة أخرى (#9615). - فرض سرعة التشغيل 1.0 أثناء تشغيل الإعلان (#9018).
- إصلاح المشكلة التي أدّت إلى إعادة ضبط تشغيل فوري للمجموعة الإعلانية التي يتعذّر تحميلها (#9929)
- واجهة المستخدم:
- DASH:
- أضف الخصائص الأساسية والتكميلية التحليلية إلى
Representation
(#9579). - إتاحة دور قناة الإصدار
forced-subtitle
(#9727). - إيقاف تفسير دور قناة الإصدار
main
على أنّهC.SELECTION_FLAG_DEFAULT
. - إصلاح منطق استبعاد عنوان URL الأساسي في البيانات التي لا تذكر مساحة اسم DVB (#9856)
- إتاحة عناوين URL النسبية لـ
MPD.Location
(#9939).
- أضف الخصائص الأساسية والتكميلية التحليلية إلى
- بروتوكول HLS:
- تعبئة
Format.label
بشكل صحيح لأحداث البث المباشر وفق بروتوكول HTTP (HLS) (#9608) - ننصحك باستخدام عملية إعداد بدون أجزاء بشكل تلقائي لتحسين وقت بدء التشغيل. إذا تضمّنت نُسخك مقاطع ترجمة وشرح مختلطة ولم يتم تضمينها في قائمة التشغيل الرئيسية، عليك إضافتها إلى قائمة التشغيل الرئيسية لتكون متاحة للتشغيل، أو يمكنك إيقاف عملية الإعداد بدون مقاطع باستخدام
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - إتاحة وضع التقديم/الترجيع بدقة في الإطار الرئيسي في HLS (#2882)
- تعبئة
- بروتوكول RTSP:
- المحوِّل:
- عليك زيادة الإصدار الأدنى المطلوب من واجهة برمجة التطبيقات إلى 21.
- تُستخدم السمة
TransformationException
الآن لوصف الأخطاء التي تحدث أثناء عملية تحويل. - أضِف
TransformationRequest
لتحديد خيارات التحويل. - السماح بتسجيل مستمعين متعددين
- إصلاح توقُّف المحول عند قراءة إخراج برنامج الترميز جزئيًا
- يجب إصلاح NPE المحتمل في
Transformer.getProgress
عند إطلاق طرق الاختيار. - أضِف تطبيقًا تجريبيًا لتطبيق التحويلات.
- إضافة MediaSession:
- بشكل تلقائي، يمحو تطبيق
MediaSessionConnector
قائمة التشغيل عند الإيقاف. يمكن للتطبيقات التي تريد الاحتفاظ بقائمة التشغيل الاتصال بالرمزsetClearMediaItemsOnStop(false)
على الموصِّل.
- بشكل تلقائي، يمحو تطبيق
- إضافة البث:
- إضافة FFmpeg:
- اجعل
build_ffmpeg.sh
يعتمد على أدوات استخدام صندوق LLVM بدلاً من أداة GNU (#9933).
- اجعل
- التوافق مع Android 12:
- عليك ترقية إضافة Google Cast للاعتماد على
com.google.android.gms:play-services-cast-framework:20.1.0
. إنّ الإصدارات السابقة منplay-services-cast-framework
غير متوافقة مع التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android، وستتعطّل معIllegalArgumentException
عند إنشاء أجهزةPendingIntent
(#9528).
- عليك ترقية إضافة Google Cast للاعتماد على
- أزِل الرموز المتوقّفة نهائيًا:
- إزالة
Player.EventListener
يمكنك استخدامPlayer.Listener
كبديل. - يمكنك إزالة "
MediaSourceFactory#setDrmSessionManager
" و"MediaSourceFactory#setDrmHttpDataSourceFactory
" و"MediaSourceFactory#setDrmUserAgent
". استخدِمMediaSourceFactory#setDrmSessionManagerProvider
بدلاً من ذلك. - إزالة
MediaSourceFactory#setStreamKeys
استخدِمMediaItem.Builder#setStreamKeys
بدلاً من ذلك. - إزالة
MediaSourceFactory#createMediaSource(Uri)
استخدِمMediaSourceFactory#createMediaSource(MediaItem)
بدلاً من ذلك. - إزالة
setTag
منDashMediaSource
وHlsMediaSource
وSsMediaSource
. يمكنك استخدامMediaItem.Builder#setTag
كبديل. - إزالة
DashMediaSource#setLivePresentationDelayMs(long, boolean)
استخدِمMediaItem.Builder#setLiveConfiguration
وMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
لإلغاء البيان، أوDashMediaSource#setFallbackTargetLiveOffsetMs
لتوفير قيمة احتياطية. - إزالة
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
لم يعُد من الممكن إيقاف تنفيذ سلسلة المحادثات هذه. - يُرجى إزالة
ActionFile
وActionFileUpgradeUtil
. استخدام ExoPlayer 2.16.1 أو قبل استخدامActionFileUpgradeUtil
لدمج ملفات الإجراءات القديمة فيDefaultDownloadIndex
. - إزالة
ProgressiveMediaSource#setExtractorsFactory
استخدِم الدالة الإنشائيةProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
بدلاً من ذلك. - يمكنك إزالة
ProgressiveMediaSource.Factory#setTag
وProgressiveMediaSource.Factory#setCustomCacheKey
. استخدِمMediaItem.Builder#setTag
وMediaItem.Builder#setCustomCacheKey
بدلاً من ذلك. - عليك إزالة دوال إنشاء
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
وDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. يمكنك استخدام الدالة الإنشائيةDefaultRenderersFactory(Context)
وDefaultRenderersFactory#setExtensionRendererMode
وDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
بدلاً منها. - عليك إزالة جميع دوال إنشاء
CronetDataSource
العامة. استخدِمCronetDataSource.Factory
بدلاً من ذلك.
- إزالة
- يمكنك تغيير
IntDefs
التالية إلى@Target(TYPE_USE)
فقط. وقد يؤدي ذلك إلى إيقاف تجميع الاستخدامات في Kotlin، والتي يمكن إصلاحها من خلال نقل التعليق التوضيحي لإضافة تعليق توضيحي إلى النوع (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
الإصدار 1.0.0-alpha01
27 تشرين الأول (أكتوبر) 2021
تم طرح "androidx.media3:media3-*:1.0.0-alpha01
".
يحتوي الإصدار 1.0.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
Media3 هو المكان الجديد لمكتبات دعم الوسائط، بما في ذلك ExoPlayer. ويحتوي الإصدار الأولي الأول على عمليات تنفيذ مبكرة ووظيفية للمكتبات لتنفيذ حالات استخدام الوسائط، بما في ذلك:
- ExoPlayer، وهو مشغّل وسائط على مستوى التطبيق لنظام التشغيل Android يسهُل تخصيصه وتوسيع نطاقه.
- وظائف جلسة الوسائط لعرض عمليات التشغيل والتحكم فيها. تستخدم وحدة الجلسة الجديدة هذه واجهة
Player
نفسها التي يستخدمها ExoPlayer. - مكونات واجهة المستخدم لإنشاء واجهات مستخدم لتشغيل الوسائط.
- وظائف الوحدات في المكتبات الأخرى للاستخدام مع ExoPlayer، مثل إدراج الإعلانات من خلال أداة تطوير البرامج لإعلانات الوسائط التفاعلية.
لمزيد من المعلومات، يُرجى الاطّلاع على مشروع Media3 GitHub.
تمت استضافة ExoPlayer سابقًا في
مشروع ExoPlayer GitHub منفصل. اسم الحزمة في Media3 هو androidx.media3.exoplayer
. ونخطط لمواصلة صيانة وإصدار مشروع ExoPlayer GitHub لفترة من الوقت لمنح التطبيقات الوقت الكافي للنقل إلى Media3. يتوفّر لـ Media3 بدائل لجميع وحدات ExoPlayer، باستثناء إضافات media2 القديمة وmediasession القديمة التي تم استبدالها بوحدة media3-session
الجديدة. يوفر هذا تكاملاً مباشرًا بين المشغلات وجلسات
الوسائط دون الحاجة إلى استخدام فئة المحول/الموصل.