الوسائط 3
المستندات المرجعية بلغة Java لنظام التشغيل AndroidX
المستندات المرجعية بلغة AndroidX Kotlin
آخر تعديل | الإصدار المستقر | إصدار مرشح | الإصدار التجريبي | الإصدار الأولي |
---|---|---|---|---|
15 تشرين الثاني (نوفمبر) 2023 | 1.2.0 | - | - | - |
تعريف التبعيات
لإضافة تبعية على Media3، يجب إضافة مستودع Google Maven إلى مشروعك. يمكنك الاطّلاع على مستودع Maven الذي يضم أدوات Google للحصول على مزيد من المعلومات.
أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle
لتطبيقك أو وحدتك:
رائع
dependencies { def media3_version = "1.2.0" // 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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$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" // 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 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.2.0" // 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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$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") // 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 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.2.0
الإصدار 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). - أضِف حقولاً إضافية إلى تسجيل Common Media Client Data (CMCD): طلب العنصر التالي (
nor
) وطلب النطاق التالي (nrr
) (#8699). - يمكنك إضافة وظيفة لنقل بيانات Common Media Client Data (CMCD) باستخدام مَعلمات طلب البحث (#553).
- إصلاح
ConcurrentModificationException
فيExperimentalBandwidthMeter
(#612). - إضافة مَعلمة
MediaPeriodId
إلىCompositeMediaSource.getMediaTimeForChildMediaTime
- إتاحة
ClippingMediaSource
(ومصادر أخرى مع إزاحة وقت الفترة/الفترة) فيConcatenatingMediaSource2
(#11226) - غيِّر
BaseRenderer.onStreamChanged()
لتلقّي وسيطةMediaPeriodId
أيضًا.
- المحوِّل:
- تحليل بيانات تدوير EXIF لإدخالات الصور.
- أزِل نوع التعليق التوضيحي
TransformationRequest.HdrMode
والثوابت المرتبطة به. استخدِمComposition.HdrMode
والثوابت المرتبطة بها بدلاً من ذلك - بسِّط
OverlaySettings
لإصلاح مشاكل عرض الإعلانات بالتناوب. - تم تغيير المعلمتَين
frameRate
وdurationUs
منSampleConsumer.queueInputBitmap
إلىTimestampIterator
.
- اختيار المقطع الصوتي:
- أضِف
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
بشكل صريح للسماح بالتعديل غير السلس أو عدم السماح به. وسيظل الإعداد التلقائي على سلوكه الحالي وهوtrue
.
- أضِف
- أدوات استخراج البيانات:
- MPEG-TS: تأكد من عرض الإطار الأخير بتمرير آخر وحدة وصول لمجموعة البث إلى نموذج قائمة الانتظار (#7909).
- يجب إصلاح الخطأ الإملائي عند تحديد
rotationDegrees
. تم تغييرprojectionPosePitch
إلىprojectionPoseRoll
(#461). - إزالة افتراض أنّه يمكن فحص مثيلات
Extractor
مباشرةً باستخدامinstanceof
إذا أردت الوصول في وقت التشغيل إلى تفاصيل تنفيذExtractor
، يجب الاتصال أولاً بـExtractor.getUnderlyingInstance
. - إضافة
BmpExtractor
- إضافة
WebpExtractor
- إضافة
HeifExtractor
- يمكنك إضافة دعم
QuickTime الكلاسيكي
إلى
Mp4Extractor
.
- الصوت:
- دعم تنسيق PCM الكبير بتنسيق 24/32 بت بتنسيق MP4 وMatroska، وتحليل ترميز PCM بتنسيق
lpcm
بتنسيق MP4 - إضافة دعم لاستخراج صوت Vorbis بتنسيق MP4
- أضِف السمة
AudioSink.getFormatOffloadSupport(Format)
التي تسترد مستوى دعم الحمولة الذي يمكن أن توفره الحوض للتنسيق من خلال السمةDefaultAudioOffloadSupportProvider
. وتعرض السمةAudioOffloadSupport
الجديدة التي تحتوي علىisFormatSupported
وisGaplessSupported
وisSpeedChangeSupported
. - أضِف
AudioSink.setOffloadMode()
الذي يتم من خلاله ضبط إعدادات إلغاء التحميل في حوض الصوت. الإعداد التلقائي هوAudioSink.OFFLOAD_MODE_DISABLED
. - يمكن تفعيل ميزة تفريغ الشحن من خلال "
setAudioOffloadPreference
" فيTrackSelectionParameters
. إذا كان الإعداد المفضّل المحدَّد هو التفعيل، وكان الجهاز يتيح إزالة حمولة التنسيق، وكان اختيار المقطع الصوتي هو مقطع صوتي واحد، سيتم تفعيل نقل الصوت. - وفي حال ضبط السمة
audioOffloadModePreference
علىAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
، لن يختارDefaultTrackSelector
سوى مقطع صوتي، وفقط إذا كان تنسيق ذلك المقطع الصوتي متاحًا في عملية نقل البيانات. إذا لم يكن هناك أي مقطع صوتي متوافق مع عملية الإزالة، لن يتم اختيار أي مسار. - إيقاف دعم التشغيل بلا فواصل للإزالة عند استخدام المستوى 33 من واجهة برمجة التطبيقات قبل استخدام المستوى 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()
أعلى من API 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
للتوافق مع الإصدار 14 من نظام التشغيل Android. عند استخدام هذه الخدمة، يحتاج التطبيق أيضًا إلى إضافةdataSync
باسمforegroundServiceType
في ملف البيان وإضافة إذنFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- يُرجى تعريف نوع خدمة "مزامنة البيانات" التي تعمل في المقدّمة في
- إضافة HLS:
- يُرجى إعادة تحميل قائمة التشغيل المباشرة وفق بروتوكول HLS بفاصل زمني تم احتسابه من وقت بدء آخر عملية تحميل بدلاً من آخر وقت اكتمل فيه التحميل (#663).
- إضافة DASH:
- السماح بأرقام متعددة لمعرّف DASH نفسه في عنوان URL لنموذج الشريحة.
- إضافة دعم تجريبي لتحليل الترجمة أثناء استخراجها يوفّر ذلك
دعمًا أفضل لدمج الترجمة المتداخلة، بما في ذلك
حل مشكلة الوميض عند الانتقال بين مقاطع الترجمة. يمكنك
تفعيل هذا باستخدام
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288).
- إضافة RTSP:
- يجب إصلاح حالة سباق قد تؤدي إلى
IndexOutOfBoundsException
عند الرجوع إلى بروتوكول TCP، أو تعليق التشغيل في بعض الحالات. - التأكّد من الحالة في إعداد بروتوكول RTSP عند عرض حالة التحميل
RtspMediaPeriod
(#577) - تجاهل طرق طلب Rtsp المخصصة في العنوان العام للرد على "الخيارات" (#613).
- استخدِم قيمة مهلة استجابة إعداد RTSP خلال الفاصل الزمني لإرسال طلبات خيارات RTSP النشطة (#662).
- يجب إصلاح حالة سباق قد تؤدي إلى
- إضافات برامج فك الترميز (FFmpeg وVP9 وAV1 وMIDI وغير ذلك):
- أطلق وحدة فك ترميز MIDI، التي توفّر دعمًا لتشغيل ملفات MIDI العادية باستخدام مكتبة Jsyn لتجميع الصوت.
- أضِف
DecoderOutputBuffer.shouldBeSkipped
لوضع علامة مباشرةً على الموارد الاحتياطية للمخرجات التي لا تحتاج إلى تقديمها. ويتم تفضيل هذا الإجراء علىC.BUFFER_FLAG_DECODE_ONLY
الذي سيتم إيقافه نهائيًا. - أضِف
Decoder.setOutputStartTimeUs
وSimpleDecoder.isAtLeastOutputStartTimeUs
للسماح لبرامج فك الترميز بتجاهل عيّنات فك الترميز فقط قبل وقت البدء. يجب تفضيل هذا الإجراء علىBuffer.isDecodeOnly
الذي سيتم إيقافه. - إصلاح الأخطاء المتعلقة بنشر أداة فك ترميز MIDI على مستودع Maven تمت إعادة تسمية الأداة إلى
media3-exoplayer-midi
(#734).
- إضافة Leanback:
- إصلاح الخطأ الذي قد يؤدي فيه إيقاف السطح إلى ظهور
ArithmeticException
في رمز Leanback (#617).
- إصلاح الخطأ الذي قد يؤدي فيه إيقاف السطح إلى ظهور
- أدوات الاختبار:
- يمكنك جعل
TestExoPlayerBuilder
وFakeClock
متوافقَين مع اختبارات واجهة مستخدم Espresso واختبارات Compose 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 ID وصفحات عنوان التعليق إلى مصدر البيانات Bitstream لتشغيل 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
. - إتاحة تضمين بيانات برامج الوسائط الشائعة (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 تساوي 0 عند إيقاف العارض. ويتم استدعاءPlayer.Listener.onVideoSizeChanged
وفقًا لذلك عند تغييرPlayer.getVideoSize()
. مع هذا التغيير، سيصبح عرض وارتفاع حجم فيديو ExoPlayer بـMediaCodecVideoRenderer
صفر عندما لا يتوافقPlayer.getCurrentTracks
مع الفيديو، أو لم يتم بعد تحديد حجم مسار الفيديو المتوافق.
- يجب ضبط
- إدارة الحقوق الرقمية:
- تقليل مستوى ظهور عدة طرق للاستخدام الداخلي فقط على
DefaultDrmSession
والتي لا يُتوقّع أن يتم طلبها من خارج حزمة DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- تقليل مستوى ظهور عدة طرق للاستخدام الداخلي فقط على
- الشخص:
- أضِف مكتبة muxer جديدة يمكن استخدامها لإنشاء ملف حاوية 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)
- النص:
- SSA: أضِف دعمًا لملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب بايت (#319).
- الجلسة:
- أصلِح المشكلة التي لا يعدّل فيها
MediaController
أوامره المتاحة عند الاتصال بجهازMediaSessionCompat
قديم يعدّل إجراءاته. - إصلاح الخطأ الذي منع
MediaLibraryService
من عرض قيمة فارغة لاستدعاء من واجهة مستخدم النظام إلىCallback.onGetLibraryRoot
باستخدامparams.isRecent == true
على واجهة برمجة التطبيقات 30 (#355). - إصلاح تسرّب الذاكرة في
MediaSessionService
أوMediaLibraryService
(#346) - إصلاح الخطأ الذي قد يؤدي فيه الجمع بين
Timeline
وتعديل الموضع فيMediaSession
إلى ظهورIllegalStateException
للسمةMediaController
- أصلِح المشكلة التي لا يعدّل فيها
الإصدار 1.0.1
18 نيسان (أبريل) 2023
تم إصدار "androidx.media3:media3-*:1.0.1
".
يحتوي الإصدار 1.0.1 على هذه الالتزامات.
يتوافق هذا الإصدار مع إصدار 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 SpamTransport (#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:
- يمكنك احصاء الخطأ EXISTArgumentException الذي يتم طرحه في تحليل 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) عند تحليل ذرات trak. - يمكنك تخطي النماذج بشكل صحيح عند التقديم مباشرةً إلى إطار المزامنة في fMP4 (#10941).
- اعرض
- الصوت:
- استخدم معدل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم المخزن المؤقت
لـ
AudioTrack
في عمليات التشغيل المباشر (العبور).
- استخدم معدل نقل البيانات بتنسيق الصوت المضغوط لحساب الحد الأدنى لحجم المخزن المؤقت
لـ
- النص:
- يجب حل مشكلة
TextRenderer
في تمرير فهرس (سلبي) غير صالح إلىSubtitle.getEventTime
إذا لم يتضمّن ملف الترجمة أي إشارات. - SubRip: يمكنك إضافة دعم لملفات UTF-16 إذا كانت تبدأ بعلامة ترتيب بايت.
- يجب حل مشكلة
- بيانات التعريف:
- تحليل قيم متعددة مفصولة بدون إطارات من إطارات ID3، على النحو المسموح به في الإصدار 2.4 من ID3.
- أضف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموضح في بيانات التعريف. - يمكنك إضافة
MediaMetadata.isBrowsable
كبديل لـMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- DASH:
- يمكنك إضافة تحليل كامل لمجموعات تكييف الصورة، بما في ذلك أعداد المربّعات (#3752).
- واجهة المستخدم:
- الجلسة:
- أضف
SimpleBasePlayer
المجرّد للمساعدة في تنفيذ واجهةPlayer
للّاعبات المخصّصة. - إضافة طريقة مساعد لتحويل الرمز المميز لجلسة النظام الأساسي إلى Media3
SessionToken
(#171). - استخدِم
onMediaMetadataChanged
لتشغيل تحديثات جلسة وسائط النظام الأساسي (#219). - أضِف جلسة الوسائط كوسيطة في
getMediaButtons()
منDefaultMediaNotificationProvider
واستخدِم القوائم غير القابلة للتغيير من أجل الوضوح (#216). - أضِف أداة معالجة معاودة الاتصال في
onSetMediaItems
لتوفير وسائل لتعديل/ضبط قائمةMediaItem
، وفهرس البدء والموضع حسب الجلسة قبل الضبط على المشغّل (#156). - تجنُّب رصد النقر مرّتين لأحداث زر الوسائط التي لا تستند إلى بلوتوث (#233).
- جعل
QueueTimeline
أكثر قوة في حال كانت حالة الجلسة القديمة المظلّلة (#241).
- أضف
- بيانات التعريف:
- تحليل قيم متعددة مفصولة بدون إطارات من إطارات ID3، على النحو المسموح به في الإصدار 2.4 من ID3.
- أضف
MediaMetadata.mediaType
للإشارة إلى نوع المحتوى أو نوع المجلد الموضح في بيانات التعريف. - يمكنك إضافة
MediaMetadata.isBrowsable
كبديل لـMediaMetadata.folderType
. سيتم إيقاف نوع المجلد نهائيًا في الإصدار التالي.
- إضافة البث:
- نقل الإصدار 21.2.0 من حزمة تطوير البرامج (SDK) للبث
- إضافة إعلانات الوسائط التفاعلية:
- أزِل مستمع المشغّل إلى
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). - تجاهل المخزن المؤقت قبل أن يتعطل التشغيل بسبب عدم كفاية الذاكرة المتاحة.
- يمكنك إغلاق كتلة Tracing "doSomeWork" عند تفعيل عملية إلغاء التحميل.
- إصلاح مشكلة تتبع الجلسات باستخدام التقديمات السريعة في
PlaybackStatsListener
(#180). - يجب إرسال استدعاء
onMediaItemTransition
غير متوفر عند الاتصال بـseekToNext
أوseekToPrevious
في قائمة تشغيل مؤلفة من عنصر واحد (#10667). - أضف علامة
Player.getSurfaceSize
التي تعرض حجم السطح الذي يتم عرض الفيديو عليه. - إصلاح الخطأ الذي تؤدّي فيه إزالة أدوات معالجة الحدث أثناء إصدار المشغّل إلى ظهور
IllegalStateException
(#10758)
- أضف
- الإصدار:
- فرض الحد الأدنى من
compileSdkVersion
لتجنب أخطاء التحويل البرمجي (#10684). - تجنَّب استخدام حظر النشر عند تضمينه في إصدار آخر من الدرجة الكبيرة.
- فرض الحد الأدنى من
- اختيار المقطع الصوتي:
- تفضيل مقاطع صوتية أخرى على تقنية Dolby Vision إذا كانت الشاشة لا تتيح استخدامها (#8944).
- عمليات التنزيل:
- الفيديو:
- يمكنك تجربة برنامج فك ترميز بديل لـ Dolby Vision إذا كانت الشاشة لا تتيح ذلك. (#9794).
- الصوت:
- استخدِم
SingleThreadExecutor
لإصدارAudioTrack
مثيلات لتجنُّب حدوث أخطاء OutOfMemory عند إصدار عدة مشغّلات في وقت واحد (رقم 10057). - لإضافة
AudioOffloadListener.onExperimentalOffloadedPlayback
لحالة إزالة حمولة المقطع الصوتي (#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)
لتحديد ما إذا كان العارض سيُخرج البيانات الوصفية مبكرًا أو متزامنًا مع موضع المشغّل.
- يمكن الآن ضبط
- إدارة الحقوق الرقمية:
- التغلب على خطأ في تنفيذ نظام Android 13 ClearKey الذي يؤدي إلى عرض عنوان URL للترخيص غير فارغ ولكنه غير صالح.
- إصلاح الخطأ
setMediaDrmSession failed: session not opened
عند التبديل بين أنظمة إدارة الحقوق الرقمية في قائمة تشغيل (على سبيل المثال، من نطاقا لهم (على سبيل المثال من أجل استخدام أداةClearKey)
- النص:
- CEA-608: تأكَّد من معالجة أوامر تبديل الخدمة في الحقل 2 بشكل صحيح (#10666).
- DASH:
- تحليل
EventStream.presentationTimeOffset
من البيانات (#10460).
- تحليل
- واجهة المستخدم:
- استخدام عمليات الإلغاء الحالية للمشغّل كإعداد مسبق في
TrackSelectionDialogBuilder
(#10429).
- استخدام عمليات الإلغاء الحالية للمشغّل كإعداد مسبق في
- الجلسة:
- تأكَّد من تنفيذ الأوامر دائمًا بالترتيب الصحيح حتى إذا كانت بعضها تتطلب درجة دقة غير متزامنة (#85).
- أضِف
DefaultMediaNotificationProvider.Builder
لإنشاءDefaultMediaNotificationProvider
مثيل. يمكن لأداة الإنشاء ضبط معرّف الإشعار ومعرّف قناة الإشعارات واسم قناة الإشعارات التي يستخدمها مقدّم الخدمة. ويمكنك أيضًا إضافة الطريقةDefaultMediaNotificationProvider.setSmallIcon(int)
لضبط رمز الإشعارات الصغير. (#104). - تأكَّد من عدم تجاهل الأوامر المُرسَلة قبل
MediaController.release()
(#99). - بإمكان
SimpleBitmapLoader
تحميل الصورة النقطية من معرّفات الموارد المنتظمة (URI)file://
(#108). - إصلاح التأكيد الذي يمنع
MediaController
من تقديم إعلان خلال فترة زمنية (#122). - عند انتهاء التشغيل، يتم إيقاف
MediaSessionService
من المقدمة ويظهر إشعار بإعادة تشغيل آخر عنصر من الوسائط التي تم تشغيلها (#112). - عدم بدء خدمة تعمل في المقدّمة بهدف إيقاف مؤقت (#167)
- إخفاء "الشارة" يدويًا المرتبطة بالإشعار الذي تم إنشاؤه من خلال
"
DefaultNotificationProvider
" على واجهة برمجة التطبيقات 26 وواجهة برمجة التطبيقات 27 (يتم إخفاء الشارة تلقائيًا في واجهة برمجة التطبيقات 28 والإصدارات الأحدث) (#131). - إصلاح الخطأ الذي يتسبب في حدوث اتصال صنف ثان لـ MediaSession 3 MediaSession قديم إلى NetzDGStateExceptions (#49).
- بروتوكول RTSP:
- IMA:
- إضافة مهلة لتحميل معلومات الإعلان للتعامل مع الحالات التي تواجه فيها أداة تطوير البرامج لإعلانات الوسائط التفاعلية صعوبات في تحميل إعلان (#10510).
- منع تخطّي الإعلانات أثناء التشغيل عند الانتقال إلى نهاية المحتوى (#10685)
- احتسب بشكل صحيح مدة الفترة الزمنية لأحداث البث المباشر التي تتضمّن إعلانات مضمّنة من جهة الخادم، على سبيل المثال IMA DAI (#10764).
- الإضافة FFmpeg:
- أضِف العلامات المطلوبة حديثًا لربط مكتبات FFmpeg بالإصدار 23.1.7779620 أو إصدار أحدث (#9933).
- إضافة AV1:
- يجب تحديث إصدار CMake لتجنُّب حالات عدم التوافق مع أحدث إصدارات استوديو Android (#9933).
- إضافة البث:
- نفِّذ
getDeviceInfo()
لتتمكن من تحديدCastPlayer
عند التحكم في التشغيل باستخدامMediaController
(#142).
- نفِّذ
- المحوِّل:
- أضِف موقّت مراقب النظام لرصد ما إذا كان إنشاء نموذج ناتج بطيء جدًا.
- أزِل الرموز التي تم إيقافها نهائيًا:
- إزالة
Transformer.Builder.setOutputMimeType(String)
لقد تمت إزالة هذه الميزة. سيكون نوع MIME دائمًا MP4 عند استخدام أداة الاختيار التلقائية.
- إزالة
الإصدار 1.0.0-beta02
21 تموز (يوليو) 2022
تم إصدار "androidx.media3:media3-*:1.0.0-beta02
".
يتضمّن الإصدار 1.0.0-beta02 هذه الالتزامات.
ويتوافق هذا الإصدار مع إصدار 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. وستفترض عمليات التشغيل هذه أنها شبكة 4G.
- عدم السماح بمرور
null
إلىMediaSource.Factory.setDrmSessionManagerProvider
وMediaSource.Factory.setLoadErrorHandlingPolicy
. ويمكن تمرير مثيلاتDefaultDrmSessionManagerProvider
وDefaultLoadErrorHandlingPolicy
بشكل صريح إذا لزم الأمر. - أضِف
MediaItem.RequestMetadata
لتمثيل البيانات الوصفية اللازمة لتشغيل الوسائط عندما يكونLocalConfiguration
غير معروف بالضبط. يمكنك أيضًا إزالةMediaMetadata.mediaUrl
لأنّها أصبحت مضمّنة الآن فيRequestMetadata
. - أضِف
Player.Command.COMMAND_SET_MEDIA_ITEM
للسماح للّاعبين بضبط عنصر واحد.
- إتاحة بيانات تشخيص نظام Android الأساسي عبر
- اختيار المقطع الصوتي:
- يمكنك دمج صف
TrackSelectionOverrides
فيTrackSelectionParameters
، وترقيةTrackSelectionOverride
إلى صف عالي المستوى. - إعادة تسمية
TracksInfo
إلىTracks
وTracksInfo.TrackGroupInfo
إلىTracks.Group
.Player.getCurrentTracksInfo
وPlayer.Listener.onTracksInfoChanged
أيضًا إلىPlayer.getCurrentTracks
وPlayer.Listener.onTracksChanged
. يشمل ذلك "إلغاء الإيقاف النهائي" لاسم الطريقةPlayer.Listener.onTracksChanged
، ولكن مع أنواع مختلفة من المَعلمات. - يمكنك تغيير
DefaultTrackSelector.buildUponParameters
وDefaultTrackSelector.Parameters.buildUpon
لعرضDefaultTrackSelector.Parameters.Builder
بدلاً منDefaultTrackSelector.ParametersBuilder
المتوقّفة نهائيًا. - إضافة
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
الذي يتم تفعيله تلقائيًا. عند تفعيل هذا الخيار، سيتم تفضيلDefaultTrackSelector
المقاطع الصوتية التي لا يتجاوز عدد قنواتها إمكانات إخراج الجهاز. أمّا على الأجهزة المحمولة باليد، فيُفضّلDefaultTrackSelector
الاستيريو/أحاديًا على تنسيقات الصوت المتعدّدة القنوات، إلا إذا كان من الممكن أن يكون التنسيق المتعدد القنوات (الإصدار 12L والإصدارات الأحدث من نظام التشغيل Android) أو بتنسيق الصوت المحيطي Dolby. بالإضافة إلى ذلك، على الأجهزة التي تتيح ميزة "تحديد مكان الصوت"، سيراقبDefaultTrackSelector
التغييرات في سمات الموقع الجغرافي وسيتم بدء اختيار مقطع صوتي جديد بناءً عليها. لا يتم تطبيق هذه القيود على الأجهزة التي تحتوي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:
- تحليل عدد القنوات من عناصر DTS
AudioChannelConfiguration
يؤدي هذا إلى إعادة تفعيل مرور الصوت لعمليات بث DTS (#10159). - عدم السماح بمرور
null
إلىDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. ويمكن تمرير أمثلةDefaultCompositeSequenceableLoaderFactory
بشكل صريح إذا لزم الأمر.
- تحليل عدد القنوات من عناصر DTS
- بروتوكول HLS:
- يمكنك الرجوع إلى طريقة الإعداد المقطعي إذا كانت سمة قائمة التشغيل CODECS لا تحتوي على برنامج ترميز الصوت (#10065).
- عدم السماح بتمرير
null
إلىHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
وHlsMediaSource.Factory.setPlaylistParserFactory
وHlsMediaSource.Factory.setPlaylistTrackerFactory
. يمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
أوDefaultHlsPlaylistParserFactory
أو مرجع إلىDefaultHlsPlaylistTracker.FACTORY
بشكل صريح إذا كان هناك حاجة إلى ذلك.
- البث السلس:
- عدم السماح بمرور
null
إلىSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. ويمكن تمرير مثيلاتDefaultCompositeSequenceableLoaderFactory
صراحةً إذا لزم الأمر.
- عدم السماح بمرور
- بروتوكول RTSP:
- أضِف قارئ بروتوكول النقل في الوقت الفعلي (RTP) إلى H263. (#63).
- أضِف قارئ بروتوكول RTP في ملف MPEG4 (#35).
- أضِف قارئ بروتوكول النقل في الوقت الفعلي (RTP) إلى HEVC (#36).
- إضافة قارئ بروتوكول النقل في الوقت الفعلي (RTP) إلى AMR لا تتوفَّر حاليًا سوى أحداث البث المباشر الأحادي القنوات وغير المتداخلة. إنّ حمولة البيانات المركّبة من AMR غير متوافقة. (#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 الذي يؤدي إلى تعذُّر مزامنة مكتبة 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: حلّ المشكلة التي قد تؤدي إلى ظهور البيانات الوصفية لعيّنة الرسائل الإلكترونية بترتيب غير صحيح لأحداث البث التي تتضمّن رمزَي emsg v0 وv1 (#9996).
- النص:
- أصلِح تفاعل
SingleSampleMediaSource.Factory.setTrackId
وMediaItem.SubtitleConfiguration.Builder.setId
لمنح الأولوية للحقلSubtitleConfiguration
والرجوع إلى القيمةFactory
في حال عدم ضبطها (#10016).
- أصلِح تفاعل
- تشغيل الإعلان:
- إصلاح حالات الانخفاض في الصوت بين فترات الإعلانات في أحداث البث المباشر وفق بروتوكول HTTP (HLS)
الإصدار 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
تعتمد على أدوات bin LLVM بدلاً من GNU (#9933).
- جعل
- التوافق مع Android 12:
- عليك ترقية إضافة Cast للاعتماد على
com.google.android.gms:play-services-cast-framework:20.1.0
. إنّ الإصدارات الأسبق منplay-services-cast-framework
غير متوافقة مع التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android، وسيتعطّل مع الخطأIllegalArgumentException
عند إنشاءPendingIntent
s (#9528).
- عليك ترقية إضافة Cast للاعتماد على
- أزِل الرموز التي تم إيقافها نهائيًا:
- إزالة
Player.EventListener
يمكنك استخدامPlayer.Listener
كبديل. - يمكنك إزالة "
MediaSourceFactory#setDrmSessionManager
" و"MediaSourceFactory#setDrmHttpDataSourceFactory
" و"MediaSourceFactory#setDrmUserAgent
". يمكنك استخدامMediaSourceFactory#setDrmSessionManagerProvider
كبديل. - إزالة
MediaSourceFactory#setStreamKeys
يمكنك استخدامMediaItem.Builder#setStreamKeys
كبديل. - إزالة
MediaSourceFactory#createMediaSource(Uri)
يمكنك استخدامMediaSourceFactory#createMediaSource(MediaItem)
كبديل. - يمكنك إزالة
setTag
منDashMediaSource
وHlsMediaSource
وSsMediaSource
. يمكنك استخدامMediaItem.Builder#setTag
كبديل. - إزالة
DashMediaSource#setLivePresentationDelayMs(long, boolean)
يمكنك استخدامMediaItem.Builder#setLiveConfiguration
وMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
لإلغاء البيان أوDashMediaSource#setFallbackTargetLiveOffsetMs
لتقديم قيمة احتياطية. - إزالة
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
لم يعُد إيقاف تنفيذ سلسلة المحادثات ممكنًا. - يُرجى إزالة
ActionFile
وActionFileUpgradeUtil
. استخدم ExoPlayer 2.16.1 أو قبل استخدامActionFileUpgradeUtil
لدمج ملفات الإجراءات القديمة فيDefaultDownloadIndex
. - إزالة
ProgressiveMediaSource#setExtractorsFactory
استخدِم دالةProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
بدلاً من ذلك. - يُرجى إزالة
ProgressiveMediaSource.Factory#setTag
وProgressiveMediaSource.Factory#setCustomCacheKey
. يمكنك استخدامMediaItem.Builder#setTag
وMediaItem.Builder#setCustomCacheKey
بدلاً من ذلك. - عليك إزالة دوال
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
وDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. استخدِم الدالة الإنشائيةDefaultRenderersFactory(Context)
وDefaultRenderersFactory#setExtensionRendererMode
وDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
بدلاً منها. - عليك إزالة جميع تصاميم
CronetDataSource
العامة. يمكنك استخدامCronetDataSource.Factory
كبديل.
- إزالة
- يمكنك تغيير
IntDefs
التالية إلى@Target(TYPE_USE)
فقط. وقد يؤدي ذلك إلى تعطّل مجموعة الاستخدامات في Kotlin، والتي يمكن حلّها من خلال نقل التعليق التوضيحي لإضافة تعليقات توضيحية إلى النوع (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(في حزمةcom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
الإصدار 1.0.0-alpha01
27 تشرين الأول (أكتوبر) 2021
تم إصدار "androidx.media3:media3-*:1.0.0-alpha01
".
يحتوي الإصدار 1.0.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
Media3 هي الصفحة الرئيسية الجديدة لمكتبات دعم الوسائط، بما في ذلك ExoPlayer. ويحتوي الإصدار الأولي الأول على عمليات تنفيذ مبكرة ووظيفية للمكتبات لتنفيذ حالات استخدام الوسائط، بما في ذلك:
- ExoPlayer، وهي مشغّل وسائط على مستوى التطبيقات لنظام Android يسهُل تخصيصه وتوسيع نطاقه.
- وظائف جلسة الوسائط لعرض عمليات التشغيل والتحكم فيها تستخدم وحدة الجلسة الجديدة هذه واجهة
Player
نفسها مثل ExoPlayer. - مكونات واجهة المستخدم لإنشاء واجهات مستخدم لتشغيل الوسائط
- وظائف التفاف الوحدات في المكتبات الأخرى للاستخدام مع ExoPlayer، على سبيل المثال، إدراج الإعلان من خلال حزمة تطوير البرامج لإعلانات الوسائط التفاعلية
لمزيد من المعلومات، يمكنك الاطّلاع على مشروع Media3 GitHub.
سبق أن تمت استضافة ExoPlayer في مشروع ExoPlayer GitHub منفصل. اسم الحزمة في Media3 هو androidx.media3.exoplayer
. ونخطط لمواصلة صيانة مشروع ExoPlayer GitHub
وإصداره لفترة من الوقت لمنح التطبيقات وقتًا لنقل البيانات إلى
Media3. تحتوي منصة Media3 على بدائل لجميع وحدات ExoPlayer، باستثناء إضافات الوسائط2 وmediasession القديمة التي سيتم استبدالها بوحدة media3-session
الجديدة. يوفر هذا تكاملاً مباشرًا بين المشغلات
وجلسات الوسائط دون الحاجة إلى استخدام فئة محول/موصل.