Media3
| جدیدترین بهروزرسانی | نسخه پایدار | نامزد انتشار | انتشار نسخه بتا | نسخه آلفا |
|---|---|---|---|---|
| ۱۱ نوامبر ۲۰۲۶ | ۱.۱۱.۱ | - | 1.12.0-beta01 | - |
اعلام وابستگیها
برای افزودن وابستگی به Media3، باید مخزن Google Maven را به پروژهتان اضافه کنید. برای اطلاعات بیشتر، مخزن Maven در Google را بخوانید.
وابستگیهای لازم برای مصنوعات موردنیازتان را در فایل build.gradle برای برنامه یا واحدتان اضافه کنید:
شیک
dependencies { def media3_version = "1.11.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
کاتلین
dependencies { val media3_version = "1.11.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
برای اطلاعات بیشتر درباره وابستگیها، افزودن وابستگیهای ساخت را ببینید.
بازخورد
بازخوردتان به بهبود Jetpack کمک میکند. میتوانید از ردیاب مشکل Media3 برای یافتن پاسخ سؤالات، مشکلات شناختهشده، و درخواستهای ویژگی، و همچنین برای ثبت مشکلات جدید استفاده کنید.
نسخه ۱.۱۲.۰
نسخه ۱.۱۲.۰-بتا۰۱
۱۱ نوامبر ۲۰۲۶
نسخه 1.12.0-beta01 شامل ثبتهای زیر است.
- کتابخانه مشترک:
- Reduce
C.DEFAULT_BUFFER_SEGMENT_SIZEfrom65536to65520so each buffer allocation (including itsbyte[]object header) fits in whole OS pages in ART's large object space, reducing sample buffer memory usage by ~6% on 4 KiB-page devices and ~20% on 16 KiB-page devices. androidx.media3.common.util.NullableTypeرا با JSpecifyorg.jspecify.annotations.Nullableجایگزین کنید.-
androidx.media3.common.util.UnknownNullرا بردارید و بهجای آن از حاشیهنویسیهای JSpecify nullness استفاده کنید. زیرکلاسهای Kotlin ازRunnableFutureTaskبا نوع نتیجه تهیپذیر (مثلVoid?) باید شناسه نوع تهیپذیر (مثلاًRunnableFutureTask<Void?, Exception>) را مشخص کنند. AdViewProvider.getAdVideoView()را اضافه کنید تا محفظه ویدیوViewرا ارائه دهید که میتواند درطول بازپخش آگهی تغییر اندازه دهد.- نگاشت رشته کدک
mlpaRFC 6381 بهMimeTypes.AUDIO_TRUEHDدرMimeTypes.getMediaMimeType، رفع مشکل قطعههای صوتی Dolby TrueHD درهمگذاریشده مفقود درطول آمادهسازی بدون تکه HLS (#3485). -
AdPlaybackState.withAdDurationsUsرا برای کپی کردن آرایه ارسالشده وAdPlaybackState.fromAdPlaybackStateرا برای کپی کردن همه فیلدهای آرایه گروههای آگهی اصلاح کنید تا دیگر نتوان نمونهای را ازطریق آرایههای حفظشده یا همرسانیشده اصلاح کرد. - رفع
IllegalStateException(«به پخشکننده در رشته اشتباهی دسترسی پیدا شده است.») هنگامی کهPlayer.listenیاPlayer.listenToاز رشتهای بهجز رشته برنامه پخشکننده لغو میشود (برای مثال، درطول جداسازی آزمایش میانای کاربر Compose) (#3005).
- Reduce
- ExoPlayer:
- مشکلی برطرف شد که در آن، رندرکنندهای که زودتر از موعد برای دوره رسانه آتی فعال شده بود میتوانست رندر کردن را قبلاز انتقال بازپخش به آن دوره شروع کند.
- زیرکلاسهای Kotlin از
CompositeMediaSourceکه از شناسههای منبع فرزند تهیپذیر (مانندVoid?) استفاده میکنند باید یک آرگومان نوع تهیپذیر (برای مثال،CompositeMediaSource<Void?>) را مشخص کنند. - در
AdsMediaSourceتأیید کنید کهAdPlaybackState.removedAdGroupCountدر بهروزرسانیهایAdPlaybackStateکاهش نمییابد. - رفع مشکلی که در آن انتقال بین دورههای رسانهای که از پردازگرهای مختلف استفاده میکنند میتوانست پردازگر ورودی را قبلاز اینکه پردازگر خروجی پرداز زدن را تمام کند (برای مثال، با ایجاد
IllegalStateException(«چندین ساعت رسانه پردازگر فعال شد»))، وقتیFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONفعال است، زودتر از موعد فعال کند. - رفع مشکلی که در آن انتقال به آگهی با سرعت بازپخش سفارشی
میتوانست باعث تأخیر در پیشرفت همه پردازنده گرافیکیها به دوره آگهی شود، وقتی
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONفعال بود. - برطرف کردن مشکلات مربوط به پیشگرم کردن پردازنده گرافیکی درطول انتقال دوره رسانه و انتخاب مجدد قطعه.
- Add
MediaPeriod.supportsStreamPrerollFlags()(defaulting tofalse) so that customMediaPeriodimplementations can opt in to reporting initial discontinuities usingSampleStream.getFlags(), falling back toMediaPeriod.readDiscontinuity()when not supported andFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONis enabled. - مشکلی برطرف شد که در آن رد کردن آگهیای که آگهی دیگری در همان گروه آگهی بهدنبال آن بود، بهجای
DISCONTINUITY_REASON_SKIPباDISCONTINUITY_REASON_AUTO_TRANSITIONگزارش میشد، یا وقتیAdsMediaSourceاز آمادهسازی منبع محتوای تنبل استفاده میکرد، اصلاً گزارش نمیشد.
- ترانسفورماتور:
- افزودن CodecDB (
androidx.media3.transformer.codecdb) که پیکربندیهای کدبند ویدیو (کدک، تنظیمات کدبند، و نرخ بیت) را برای دستگاه فعلی براساس دادههای کیفیت کدبند اندازهگیریشده توصیه میکند.
- افزودن CodecDB (
- استخراجکنندهها:
- ADTS: رفع مشکل
AdtsExtractorکه قالب صوتی را از کلمه همگامسازی نادرست در بار داده اولین قاب جزئی مشتق میکرد، که میتوانست باعث شود بازپخش جاریسازیهای AAC زنده که در میان قاب ملحق شدهاند ناموفق باشد یا متوقف شود (#3464). - رفع
ArrayIndexOutOfBoundsExceptionدرFragmentedMp4Extractorوقتی که قطعه حاوی جعبهtrunبدون نمونه باشد (#۳۴۷۱). - ADTS: برای جلوگیری از برونداد دادههای ID3 در جاریسازی بهعنوان قطعه
application/id3،FLAG_DISABLE_ID3_METADATAرا بهAdtsExtractorاضافه کنید. - MP4: برطرف کردن مشکل بازپخش بدون وقفه قطعههای AAC که ترکیبکننده آنها (مثل FFmpeg)
آخرین ورودی
sttsرا کوتاه میکند تا لایه کدبند را حذف کند، که باعث میشود لایه بهعنوان ۰ از فهرست ویرایشelstمشتق شود و انتهای آخرین فریم پخش شود (#۳۴۸۹). - Fix large upfront peek buffer allocations and
OutOfMemoryErrorwhen sniffing corrupt or non-media files that start withID3(#3502).
- ADTS: رفع مشکل
- بازرس:
- مشکلی که در آن لغو کردن آینده برگرداندهشده توسط
MetadataRetriever.retrieveDurationUs()مانع از انتشارMediaSourceاساسی توسطclose()میشد برطرف شد (#3468). MediaExtractorCompatرا اصلاح کنید تاMediaFormat.KEY_FRAME_RATEرا بهعنوان عدد صحیح برگرداند، که با پلاتفرمMediaExtractorمطابقت داشته باشد.
- مشکلی که در آن لغو کردن آینده برگرداندهشده توسط
- صدا:
- مشکلی را برطرف کنید که در آن سکوت ردشده میانگیریشده در
AudioSink.getCurrentPositionUs(boolean)گنجانده شده بود و بااستفاده ازAudioSink.Listener.onSilenceSkipped()قبلاز اینکه بازپخش به منطقه ردشده برسد گزارش شده بود (#۳۴۷۲). - هنگام پخش صدای PCM چندکاناله فضاییشده که از قالب فشردهشده رمزگشایی شده است، منشأ کدک را بااستفاده از
AudioTrack.Builder.setCodecProvenanceدر API 37+ تنظیم کنید. - رفع مشکل رد شدن تلاشهای مجدد برای مقداردهی اولیه
AudioTrackوقتی ۱ ثانیه از صدا حداقل بهاندازه اندازه میانگیر اولیه است، که باعث میشد DTS-HD passthrough در دستگاههایی با حافظه صوتی محدود ناموفق باشد (#3487).
- مشکلی را برطرف کنید که در آن سکوت ردشده میانگیریشده در
- ویدیو:
- اجازه دادن به بازگشت به رمزگشای H.265/HEVC برای سازگاری با نسخه قدیمی جاریسازیهای Dolby Vision Profile 7، و دیگر بازنگشتن به رمزگشای AV1 برای جاریسازیهای Profile 10 که لایه پایه آنها محدوده کامل را با مشخصههای انتقال نامشخص نشان میدهد (#3486).
- رفع مشکل انتخاب رمزگشا در
MediaCodecUtilبرای جلوگیری از انتخاب رمزگشاهای اصلی که از نمایه قالب پشتیبانی عملکردی نمیکنند (مانند رمزگشای Dolby Vision برای نمایهای متفاوت) وقتی هیچ رمزگشایی بهطور کامل از قالب پشتیبانی نمیکند (#۳۴۸۶).
- نوشتار:
- استفاده از حافظه را در
DvbParserبا رندر کردن مستقیم مناطق زیرنویس در بیتمپهای اندازه منطقه بهجای حفظ بیتمپ موقت تمامصفحه کاهش دهید.
- استفاده از حافظه را در
- جلوه:
- Muxers:
- قطعه
Formatرا هنگام افزودن قطعه بهMp4MuxerیاFragmentedMp4Muxerاعتبارسنجی کنید، بهجای اینکه بعداً هنگام نوشتن نمونهها یا بستن muxer با شکست مواجه شوید. - Make repeated calls to
Muxer.close()a no-op in all libraryMuxerimplementations, and treat the muxer as closed even ifclose()throws. فراخوانی هر روش دیگری پسازclose()اکنونIllegalStateExceptionرا برمیگرداند.
- قطعه
- افزونه IMA:
- از میانای
ResizablePlayerمربوط به IMA SDK پشتیبانی کنید تا آگهیهای تعاملی بتوانند اندازه و موقعیت نمای پخشکننده ویدیو را در محفظه آگهی تغییر دهند، وImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)را اضافه کنید (ImaAdsLoader.requestAds(DataSpec, Object, ViewGroup)منسوخ میشود).
- از میانای
- جلسه:
- میاناهای برنامهسازی کاربردی اولویتهای دکمه رسانه را تثبیت کنید.
- با عدم نگهداری دادههای فشردهشده آثار هنری در
CacheBitmapLoader، میزان استفاده از حافظه را کاهش دهید. - از تماسهای
MediaSession.setQueue(null)زائد در بهروزرسانیهای خط زمان وقتی صف جلسه پلاتفرم ازقبلnullاست (برای مثال، وقتیPlayer.COMMAND_GET_TIMELINEدردسترس نیست) اجتناب کنید. - رفع مشکلی که در آن
MediaSessionServiceبه پیادهسازی سرویس اجازه نمیداد با تلاش نکردن برای ایجاد جلسه جدید، بهدرستی بازیابی شود (#۳۴۹۰). - وقتی بهروزرسانی فراداده قدیمی
MediaSessionCompatفراداده یا مدت زمان مورد صف فعال را بدون تغییر صف اصلاح میکند، بهجایPlayer.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED،Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATEرا گزارش کنید. - رفع مشکل نبودن کار هنری برای جلسههای قدیمی که
nullMETADATA_KEY_DISPLAY_ICON(یا URI کار هنری) را درکنارMETADATA_KEY_ALBUM_ARTمعتبر تنظیم میکنند: اکنون هنگام تبدیل فراداده قدیمی، مقادیر کار هنری تهی نادیده گرفته میشود.
- میانای کاربر:
- افزودن جایگاه
subtitlesComposable بهContentFrameوPlayer، با پشتیبانی پیشفرض درmedia3-ui-compose-material3برای رندر کردن نقشه بیتی و نشانههای زیرنویس نوشتاری افقی. -
SubtitleView.setTextDirectionHeuristicاضافه شد تا امکان سفارشیسازی کردن اکتشافی جهت نوشتار مورداستفاده برای شکست نوشتار زیرنویس دوطرفه فراهم شود (#۳۴۵۴). - Animate all control slots in
Playerinmedia3-ui-compose-material3, including custom ones, and remove thevisibleparameter fromPlayerDefaults.TopControls,CenterControlsandBottomControls. این یک تغییر مخرب در میانای برنامهسازی کاربردی ناپایدار است. - با قرار دادن
exo_content_frameدرexo_content_frame_container، ازAdViewProvider.getAdVideoView()درPlayerViewپشتیبانی کنید. - کاهش مصرف حافظه در
SubtitleViewبا آزاد کردن نقشههای بیتی زیرنویس ذخیرهشده در حافظه نهان و چیدمانهای نوشتار هنگام پاک شدن نشانهها، و رفع مشکلی که در آن نوشتار زیرنویس قدیمی ممکن بود زمانی که نشانه عرض کافی برای چیدمان نداشت، قابلمشاهده باقی بماند.
- افزودن جایگاه
- افزونه HLS:
- رفع مشکلاتی که در آن بار کردن مجدد تکه رسانه HLS ناموفق یا لغوشده میتوانست نمونههای میانگیریشده جزئی را بدون دور انداختن یا پیوند زدن حفظ کند، یا موقعیت بار کردن را به موقعیت جستجوی قدیمی بازنشانی کند (#۳۳۶۲).
- رفع مشکل
IllegalStateExceptionهنگام جستجو برای شروع بخش میانگیریشده پساز تعویض قطعه تطبیقی. - Fix several playback issues when switching pathways with HLS Content Steering (#3465).
- افزونه DASH:
- رفع مشکل زیرنویسهای CEA-608 تکراری یا درهمریخته وقتی جاریسازی دارای چندین قطعه زیرنویس ناشنوایان جاسازیشده است (شماره ۸۸۷).
- افزونه Cast:
- مشکلی که در آن درخواستهای بارگیری
RemoteCastPlayerتوسط گیرندههای Android TV رها میشد برطرف شد (#۳۴۶۲). - وابستگی
com.google.android.gms:play-services-cast-frameworkرا به23.0.0بهروز کنید. CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)را اضافه کنید تا پیکربندی کنید که آیا دستگاههای Cast در تعویضکننده خروجی سیستم ظاهر شوند یا نه بدون اینکه لازم باشدMediaTransferReceiverدرAndroidManifest.xmlاعلام شود، و تعویضکننده خروجی سیستم را بهطور پیشفرض برای برنامههایی که API 37 و بالاتر را در دستگاههای دارای API 37 و بالاتر هدف قرار میدهند فعال کنید.- پشتیبانی از فیلدهای ازپیش تعریفشده Cast
MediaMetadataدرDefaultMediaItemConverterبا نگاشت فیلدها بدون ویژگی اختصاصیMediaItem.mediaMetadataبه و ازMediaItem.mediaMetadata.extras، و حفظ موارد اضافی سفارشی درMediaInfo.customData. - Stop throwing exceptions in
DefaultMediaItemConverterwhen a playback URI is missing or conversion fails, preserving the media ID and metadata in theCastPlayertimeline for Cast queue items without a playback URI. SessionAvailabilityListener.onCastSessionAvailable(boolean)را اضافه کنید تا نشان دهد که آیا جلسه «ارسال محتوا» دردسترس بااستفاده از قصد پیوستن شروع شده است یا نه، و هنگام پیوستن به جلسه «ارسال محتوا» بااستفاده از «قصد پیوستن» درCastPlayer، وضعیت بازپخش ازراهدور را بهجای بازنویسی با وضعیت پخشکننده محلی حفظ کنید.- Populate
MediaInfoand timeline durations fromMediaMetadata.durationMsfor non-live items inDefaultMediaItemConverterandRemoteCastPlayer, and retain receiver-resolved durations and livestream status across queue seeks.
- مشکلی که در آن درخواستهای بارگیری
- برنامه نمایشی:
- اجازه دادن به مرتبسازی مجدد موارد فهرست پخش با کشیدن در برنامه نمایشی جلسه.
- برداشتن نمادهای منسوخشده:
- برداشتن
androidx.media3.transformer.TextureAssetLoader. درعوض ازandroidx.media3.transformer.RawAssetLoaderاستفاده کنید. - سازندههای عمومی
DefaultDecoderFactoryرا بردارید. درعوض ازDefaultDecoderFactory.Builderاستفاده کنید. - برداشتن
DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MS. درعوض ازDefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MSاستفاده کنید. DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean)را بردارید. درعوض ازVideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATIONاستفاده کنید.- برداشتن
EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)وEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean). درعوض ازEditedMediaItemSequence.Builder(Set)استفاده کنید. - برداشتن
EditedMediaItemSequence.forceAudioTrack. درعوض ازtrackTypes.contains(C.TRACK_TYPE_AUDIO)استفاده کنید. - برداشتن
EditedMediaItemSequence.forceVideoTrack. درعوض ازtrackTypes.contains(C.TRACK_TYPE_VIDEO)استفاده کنید. - برداشتن
ExportResult.durationMsوExportResult.Builder.setDurationMs. درعوض ازExportResult.approximateDurationMsوExportResult.Builder.setApproximateDurationMsاستفاده کنید. - برداشتن
SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_US. درعوض، رفتار سکوت را بااستفاده ازsilenceRetentionRatioمشخص کنید. - برداشتن
Timeline.getPeriodPosition(Window, Period, int, long, long). درعوض ازTimeline.getPeriodPositionUs(Window, Period, int, long, long)استفاده کنید.
- برداشتن
نسخه 1.12.0-alpha02
۲۶ اکتبر ۲۰۲۶
نسخه 1.12.0-alpha02 حاوی ثبتهای زیر است.
- تأثیر بر «خدمات Play»:
- معرفی یک ماژول جدید
media3-effect-play-servicesکه جلوههای رسانهای «خدمات Google Play» را ارائه میدهد، ازجملهEnhancementSessionDecoratorبرای بهبود ویدیو وStudioSoundAudioProcessorبرای جداسازی منبع صوتی.
- معرفی یک ماژول جدید
نسخه 1.12.0-alpha01
۲۱ اکتبر ۲۰۲۶
نسخه 1.12.0-alpha01 حاوی ثبتهای زیر است.
- کتابخانه مشترک:
C.COLOR_SPACE_DISPLAY_P3را اضافه کنید و از فضای رنگ Display P3 در نگاشتهای رنگ ISOMediaFormatUtilوColorInfoپشتیبانی کنید.- افزودن یک
Flagsمرکزی برای مدیریت پرچمهای ویژگی آزمایشی و عرضه گامبهگام (Flags.setCanaryModeEnabled). انتقال بسیاری از روشهای@ExperimentalApiموجود برای استفاده از میانای برنامهسازی کاربردی پرچمهای جدید. -
MediaMetadata.playlistId،MediaMetadata.Builder.setPlaylistId(String)،MediaMetadata.categories، وMediaMetadata.Builder.setCategories(List<String>)را اضافه کنید. androidx.media3.common.util.NonNullApiرا با JSpecifyorg.jspecify.annotations.NullMarkedجایگزین کنید.
- ExoPlayer:
- رفع مشکلی که در آن بازپخش چنددورهای DASH وقتی اولین بخش دوره بعدی بار نمیشود گیر میکند (#۳۳۹۶).
- گزارش
wasCanceled = trueدرAnalyticsListener.onLoadErrorوMediaSourceEventListener.onLoadErrorوقتی تلاشهای مجدد بارگیری تمام شده است. - پشتیبانی از ثبت چندین نمونه
VideoFrameMetadataListenerبااستفاده ازExoPlayer.addVideoFrameMetadataListenerوExoPlayer.removeVideoFrameMetadataListener، منسوخ کردنExoPlayer.setVideoFrameMetadataListenerوExoPlayer.clearVideoFrameMetadataListener. - با تقسیم و جبران
AdPlaybackStateبرای هر دوره، پشتیبانی از آگهیها را در محتوای چنددورهای (مثلاً DASH) اضافه کنید. - رفع شرایط رقابتی در
PreCacheHelperکه در آن لغو درخواست آمادهسازی درحال انجام همچنان میتوانست بارگیریهای پسزمینه را شروع کند. setLoadOnlySelectedTracks(true)را درProgressiveMediaSourceوDefaultMediaSourceFactoryمحدود کنید تا فقط قطعههای ویدیو و تصویر انتخابنشده را فیلتر کند. قطعههای صوتی و نوشتاری همیشه بار میشوند تا امکان تعویض یکپارچه قطعه بدون میانگیری مجدد فراهم شود.setLoadOnlySelectedTracks(true)را بهطور پیشفرض درProgressiveMediaSourceوDefaultMediaSourceFactoryفعال کنید. این کار باعث صرفهجویی در حافظه میشود و به محاسبات تخصیص میانگیرDefaultLoadControlاجازه میدهد تا زمانی که همه قطعهها انتخاب نشدهاند، دقیقتر کار کنند. توجه داشته باشید که اگر قطعههای تصویری یا ویدیویی انتخابنشده بهتازگی در اواسط بازپخش فعال شده باشند، این کار ممکن است باعث میانگیری اضافی شود.- رفع مشکلی که در آن
Player.getCurrentPosition()میتوانست مقادیر قدیمی را برگرداند (فقط چند بار در ثانیه بهروزرسانی میشد) وقتی زمانبندی پویا فعال بود (#۳۲۸۶). - رفع مشکلی که در آن کاهش یا بازنشانی غیرمنتظره در موقعیت سر بازپخش
AudioTrackممکن بود بهاشتباه بهعنوان سرریز عدد صحیح درنظر گرفته شود و باعث توقف بازپخش در بافرینگ شود (#3407). - برداشتن آزمایشی
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - از فعالسازی مجدد غیرضروری پردازنده و اشکالات هنگام بازگشت از آگهیهای بینابینی یا آگهیها به محتوای بریدهشده در پایان جلوگیری کنید (#۳۳۷۱).
- رفع مشکلی که در آن خطای پردازنده در مورد آتی فهرست پخش میتوانست
بازپخش فعلی را زودتر از موعد قطع کند وقتی
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONفعال است. - رفع
NullPointerExceptionکه ممکن است درصورت انتقال پردازنده گرافیکی توسطExoPlayerبه دوره رسانه آمادهنشده هنگام فعال بودنFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONرخ دهد. - رفع مشکلی که باعث میشد فریمهای ویدیو بهطور غیرمنتظره درطول زمانبندی پویا هنگام فعال بودن
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSرد شوند یا ازقلم بیفتند. - رفع
ArrayIndexOutOfBoundsExceptionدر شنوندگان تجزیهوتحلیل هنگام توقف بازپخش درطول آگهی در جاریسازی زنده (#3423). - رفع مشکلی که در آن
PreloadMediaSourceمیتوانست بهطور غیرمنتظره رویداد پیشبارکردن را پست کند، درحالیکهpreload()هرگز فراخوانی نشده است (#۳۴۰۸). - رفع مشکلی که در آن
Format.subsampleOffsetUsبرای قطعههای فراداده نادیده گرفته میشد و باعث ایجاد مُهرهای زمان بازپخش نادرست در فرمانهای اتصال SCTE-35 رمزگشاییشده میشد (#3413). - رفع نشت حافظه در
PreloadMediaSourceوDefaultPreloadManagerوقتیpreload()چندین بار در یک منبع فراخوانی میشود (#۳۴۴۵). - رفع
NullPointerExceptionهنگام انتشارAdsMediaSourceدرحالیکه بازآوری خط زمان محتوا معلق است (#3442). - رفع مشکلی که در آن بازپخش رسانه پیشرونده میتوانست به موقعیت اشتباهی بپرد، وقتی بارگیری پساز جستجو (یا هنگام شروع بازپخش در موقعیت غیرصفر) ناموفق بود و دوباره امتحان میشد (#3440).
- افزودن راهحل برای Xiaomi TV Stick 4K (MiTV-AYFR0) H.264 decoder freezing on seamless resolution changes (#3457).
- رفع
NullPointerExceptionدرSteeringManifestTrackerوقتی که ردیاب قبلاز اجرای تکمیل بارگذاری پستشده یا فراخوانی خطا متوقف میشود (#۳۴۴۳). - پشتیبانی از بازپخش فراداده زمانبندیشده HAGC (ST 2094-50) از قطعههای فراداده جعبهای
mebxدر فایلهای MP4. - مشکلی را برطرف کنید که در آن دورههای رسانهای با آمادهسازی کند در فهرست پخش ممکن است رد شوند.
- CompositionPlayer:
- پشتیبانی از پیکربندی نرخ فریم تجمیع فریم ویدیو بااستفاده از
Composition.Builder.setVideoFrameAggregationParametersبرای گردشهای کار بازپخش. - با انتخاب قاب دارای نزدیکترین مُهر زمان درطول تجمیع قاب، افت قاب در ترکیببندیهای چندتوالی را که بهدلیل کوانتیزاسیون مُهر زمان یا عدم تطابق گرد کردن ایجاد میشود برطرف کنید. این ویژگی فقط از API 29 فعال میشود، زیرا نیاز به نگهداری یک قاب اضافی در پرواز برای هر توالی ویدیو دارد.
- پشتیبانی از پیکربندی نرخ فریم تجمیع فریم ویدیو بااستفاده از
- ترانسفورماتور:
- پشتیبانی از پیکربندی نرخ فریم تجمیع فریم ویدیو بااستفاده از
Composition.Builder.setVideoFrameAggregationParametersبرای گردشهای کاری صادر کردن. - با انتخاب قاب دارای نزدیکترین مُهر زمان درطول تجمیع قاب، افت قاب در ترکیببندیهای چندتوالی را که بهدلیل کوانتیزاسیون مُهر زمان یا عدم تطابق گرد کردن ایجاد میشود برطرف کنید. این ویژگی فقط از API 29 فعال میشود، زیرا نیاز به نگهداری یک قاب اضافی در پرواز برای هر توالی ویدیو دارد.
- هنگام استفاده از
AudioProcessors، بهTransformer#setAudioMimeType(AUDIO_RAW)احترام بگذارید. پیشاز این اصلاح، درخواستMimeTypes.AUDIO_RAWو اعمالAudioProcessorمنجر به خروجی فشرده میشد.
- پشتیبانی از پیکربندی نرخ فریم تجمیع فریم ویدیو بااستفاده از
- انتخاب قطعه:
- رفع مشکلی که در آن قطعه SDR بهاشتباه بر قطعه Dolby Vision پشتیبانیشده در برخی دستگاهها ترجیح داده میشد (#۳۱۳۵).
- استخراجکنندهها:
- Mp4Extractor: تجزیه جعبه
dOpsبرای Opus در MP4 که در آنPreSkip،InputSampleRate، وOutputGainاز big-endian به little-endian تبدیل نمیشدند، و باعث میشدند که وقتی فهرست ویرایشی وجود ندارد، اولین حدود ۲۹۹ میلیثانیه از صدا حذف شود، اصلاح شد (#۳۴۳۱). Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES،Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265،FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES، وFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265را بردارید چون تجزیه وابستگی نمونه درون GOP برای H.264 و H.265 بهطور پیشفرض فعال است.- Mp4Extractor: رفع مشکل تجزیه فراداده مکان از جعبههای
xyzحاوی مختصات ارتفاع برای پر کردنMp4LocationData. - افزودن
ExtractorUtil.getFramesPerEncodedSampleبرای محاسبه تعداد قابهای صوتی در هر نمونه برای قالبهای صوتی کدگذاریشده (#3367). FLAG_READ_XMP_METADATAرا بهMp4Extractorاضافه کنید تا فراداده XMP را از جعبههای UUID سطح بالا استخراج کنید.- Fix corrupted AC-3, DTS and LPCM audio when playing DVD-style MPEG-PS
content, by stripping the
private_stream_1sub-stream header from each PES packet inPsExtractorbefore the payload is passed to the audio reader (#3327). - رفع خرابی در
FragmentedMp4Extractorوقتی جعبهtfdtنسخه ۱baseMediaDecodeTimeمنفی را کدبندی میکند (#۳۴۱۲). - MPEG-TS: Support parsing H.264 and H.265 frame packing arrangement SEI
messages to populate
Format.stereoMode(#3419). - تجزیه دادههای پیکربندی Dolby Vision Profile 20 و رد کردن نمایههای Dolby Vision پشتیبانینشده بهجای بازپخش بهعنوان HEVC استاندارد با رنگهای نادرست (#3427).
- MP3: Revert LAME/Xing encoder delay & padding metadata adjustment
because it's incompatible with many
MediaCodecMP3 decoders (#3425). - Matroska: رفع
NullPointerExceptionهنگام تجزیه عناصرChapterAtomتودرتو (#3438). - Ogg: رفع اشکالی که در آن بستهای که اندازه آن مضربی از ۲۵۵ بایت است و در مرز صفحه بهپایان میرسد با بسته بعدی ادغام میشود.
- MP4: تجزیه کردن قطعههای فراداده زمانبندیشده جعبهای
mebxدرMp4ExtractorوFragmentedMp4Extractor. قطعههای دارای کلیدit35بهعنوانMimeTypes.APPLICATION_ITUT_T35(فعال کردن بازپخش HAGC) نمایش داده میشوند. سایر قطعههایmebxنادیده گرفته میشوند، مگراینکهFLAG_EMIT_RAW_MEBX_DATAتنظیم شده باشد که دراینصورت همه قطعههایmebxبهصورتMimeTypes.APPLICATION_MEBXخام منتشر میشوند. - Ogg: پشتیبانی از استخراج Opus end-padding برای بازپخش بدون وقفه (#۲۵۷۶)، و اصلاح مُهرهای زمان نمونه پساز جستجو برای صفحهای که با بسته ادامهدار شروع میشود.
- Ogg: رفع خطاهای رمزگشایی و پرشهای مُهر زمان حدود ۱ ثانیهای در جریانهای زنجیرهای Ogg Opus با نادیده گرفتن بستههای سرصفحه نظر و شناسه Opus در میان جریان.
- Mp4Extractor: تجزیه جعبه
- بازرس:
- پشتیبانی از بازیابی فراداده XMP از فایلهای MP4 بااستفاده از
MetadataRetriever. - پشتیبانی از استخراج قطعههای فراداده زمانبندیشده جعبهای
mebxدرMediaExtractorCompatبهعنوانMimeTypes.APPLICATION_MEBX.
- پشتیبانی از بازیابی فراداده XMP از فایلهای MP4 بااستفاده از
- قاب بازرس:
- برش رنگهای BT.2020 با گاموت گسترده در تصویر پایه SDR هنگام
استخراج فریمهای Ultra HDR با
FrameExtractorبرطرف شد. رنگهای خارج از گستره اکنون بهجای اینکه محدود شوند، بهآرامی در گستره sRGB فشرده میشوند.
- برش رنگهای BT.2020 با گاموت گسترده در تصویر پایه SDR هنگام
استخراج فریمهای Ultra HDR با
- صدا:
- افزودن راهحل برای دستگاههایی که
android.media.AudioDeviceCallbackرا در رشته اشتباه فراخوانی میکنند (#3386). - رفع مشکل گیر کردن احتمالی بازپخش پساز انتقال قطعه با بارگذاری فشرده.
- رفع مشکلی در Amazon Fire TV sticks که در آن صدای AC-3 ممکن بود درطول انتقال دوره ثابت بماند (#۳۴۴۸).
- پشتیبانی از برش دادن لایه کدبند پایان جاریسازی برای پخش بدون وقفه Ogg و WebM/Matroska Opus (#۲۵۷۶).
- رفع مشکل تأخیر بدون وقفه در بارگذاری پویا و بهروزرسانیهای لایهگذاری درطول انتقال قطعه بهطوریکه بهجای قطعه درحال پخش، روی قطعه ورودی اعمال شوند.
- برش دادن لایه پایانی کدبند در جاریسازیهای تکی و جاریسازی نهایی در فهرست پخش علاوهبر انتقالهای بدون وقفه در میان فهرست پخش (#۲۵۷۶).
- از کپیهای غیرضروری میانگیر صوتی در
TrimmingAudioProcessorپساز تکمیل شدن برش تأخیر کدبند شروع جاریسازی و زمانی که نیازی به برش حاشیه پایان جاریسازی نیست اجتناب کنید.
- افزودن راهحل برای دستگاههایی که
- ویدیو:
- گزارش فریمهای ویدیو دیرهنگام با مُهرهای زمان انتشار یکسان را اصلاح کنید تا بهجای رد شدن، بهعنوان رهاشده گزارش شوند.
- نوشتار:
MediaItem.SubtitleConfiguration.timeOffsetUsرا اضافه کنید تا مُهرهای زمان زیرنویسهای جانبی نسبت به رسانه جابهجا شوند. میتوان افست را درطول بازپخش باPlayer.replaceMediaItem(int, MediaItem)بدون قطع کردن بازپخش تغییر داد (#1976).- SubRip: افزودن پشتیبانی برای تزریق
CharsetDetectorبهDefaultSubtitleParserFactoryبرای تشخیص کدبندی نویسه زیرنویسهای SubRip مستقل بدون علامت ترتیب بایت (#2247).
- جلوه:
SoundSeparationAudioProcessorرا برای جداسازی منبع صدا بااستفاده از واحد StudioSound GMSCore پیادهسازی کنید.
- Muxers:
- نوشتن جعبه
dOpsبرای Opus درMp4MuxerوFragmentedMp4Muxerکه در آنPreSkip،InputSampleRate، وOutputGainبهجای بایتبزرگ در بایتکوچک نوشته شده بودند (#3431) اصلاح شد. - پشتیبانی از نوشتن ارتفاع GPS در
Mp4LocationDataبااستفاده ازMp4Muxer. Muxer.Factory.create(ParcelFileDescriptor)را اضافه کنید تا ادغام کردن مستقیماً درParcelFileDescriptorمجاز شود.- برای ارائه مُهر زمان رمزگشایی رسانه، کادر
tfdt(Track Fragment Base Media Decode Time) را بهطور پیشفرض در کادرهایtrafفایلهای MP4 تکهتکهشده بنویسید. - پشتیبانی از نوشتن جعبههای محفظه E-AC-3 و E-AC-3 JOC (Dolby Atmos)
dec3درMp4Muxer. - پشتیبانی از قالب WebM به
MediaMuxerCompatاضافه شد. - Write
mfra(Movie Fragment Random Access) box at the end of fragmented MP4 files to allow seeking inFragmentedMp4ExtractorusingFLAG_READ_MFRA_FOR_SEEK_MAP. - رفع خرابی در
Mp4WriterوFragmentedMp4Writerهنگام نوشتن نمونه EOS قبلاز اینکه نمونههای دیگر نوشته شوند. - Fix container compliance when muxing Dolby content into MP4 or
Fragmented MP4 files by advertising the
dby1compatible brand in the container header (#3369). - پشتیبانی از قطعههای صوتی PCM ممیز شناور ۳۲ بیتی در
Mp4MuxerوFragmentedMp4Muxer(#۳۳۸۹). - رد کردن نمایههای Dolby Vision پشتیبانینشده در
Mp4MuxerوFragmentedMp4Muxerهنگام افزودن قطعه. - پشتیبانی از قطعههای صوتی PCM عدد صحیح ۲۴ بیتی و ۳۲ بیتی در
Mp4MuxerوFragmentedMp4Muxer.
- نوشتن جعبه
- افزونه IMA:
- رویدادهای توقف موقت و ازسرگیری پخشکننده را به IMA SDK در
ImaServerSideAdInsertionMediaSourceبازارسال کنید.
- رویدادهای توقف موقت و ازسرگیری پخشکننده را به IMA SDK در
- جلسه:
MediaConstants.EXTRAS_KEY_PLAYLIST_ID،MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE،MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI، وMediaConstants.EXTRAS_KEY_CATEGORIESرا اضافه کنید تا فهرست پخش و فراداده مورد از فراداده و توضیحات قدیمی پر شود، وMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEوMediaConstants.EXTRAS_KEY_TTL_SECONDSرا برای پیشنهادLibraryParams.extrasاضافه کنید.- رفع خرابی
SecurityExceptionهنگام ایجاد یا انتشارMediaSessionدر دستگاههایی که محدودیتهای سختگیرانهPendingIntentرا اعمال میکنند. - مشکلی که باعث میشد
MediaSession.getControllerForCurrentRequest()درطول درخواستهای پخش در Android 12 (میانای برنامهسازی کاربردی ۳۱ و ۳۲) وقتیMediaSessionServiceهنوز در پیشزمینه نبود،nullرا برگرداند برطرف شد. - رفع ازکارافتادن
IllegalArgumentExceptionوقتیMediaControllerبه جلسه قدیمیای متصل میشود که حداکثر میزان صدای منفی را گزارش میکند. - مشکلی برطرف شد که در آن، فراخوانی
MediaController.setMediaItemیاsetMediaItemsو بهدنبال آنplay()درMediaSessionCompatقدیمی موقتاً متوقفشده میتوانست بهجایonPlayFrom*، یک فراخوان برگشتیonPrepareFrom*پشتیبانینشده ارسال کند، یاonPlay()را بدون راهاندازی مجدد فایل رسانهای درخواستشده ارسال کند. - رفع
NullPointerExceptionدرMediaBrowserقدیمی هنگام دریافت پاسخ فرمان سفارشی (#۳۴۳۲). - رفع خرابی
IllegalArgumentExceptionهنگام دریافت فراداده قدیمی با کلیدهای تکراری درBundleزیرین آن. - Coalesce outgoing
MediaControllerCompat.TransportControlscalls made within the sameLooperiteration when controlling a legacyMediaSessionCompat(for example, callingsetMediaItem,prepare, andplaytogether now dispatches a singleonPlayFrom*callback).
- میانای کاربر:
- رفع مشکل موقعیت علائم نگارشی زیرنویس راست به چپ و حفظ محدوده گستره هنگام فعال بودن شکست نوشتار دوجهته (#3454، #3455).
- کلاسهای
TrackSelectionStateوTrackSelectionParametersStateو توابع یادآوری وضعیت Composable مربوطه را به واحدmedia3-ui-composeاضافه کنید. PresentationState.videoAspectRatioرا معرفی کنید وModifier.resizeWithContentScaleرا بهجایsourceSizeDp: Size?بهaspectRatio: Float?تبدیل کنید.- کلاس
CuesStateو ComposablerememberCuesStateرا بهmedia3-ui-composeماژول اضافه کنید تا به نشانههای فعلی پخشکننده گوش دهید. - اگر
ProgressSliderبراساسExoPlayerیاCompositionPlayerاست، پشتیبانی از حالت پیمایش سریع را به آن اضافه کنید. - پشتیبانی
showArtworkرا بهPresentationStateاضافه کنید و از آن برای زمانبندی پرداختartworkComposable اختیاری ارائهشده درContentFrameوPlayerاستفاده کنید.ArtworkComposable را اضافه کنید تا بهعنوان مقدار پیشفرض برای جایگاهartworkاستفاده شود. - افزودن فیلدهای جدید به
PlayPauseButtonState(showBuffering،showRetry،showReplay) و استفاده از آنها درPlayPauseButtonبرای ارائه نمادهای بیشتر و نشانگر میانگیری. - کلاس
PlaybackStateرا برای امکانپذیر کردن مشاهده وضعیت بازپخش سفارشی اضافه کنید، وBufferingIndicatorرا بهعنوان مؤلفه مستقل از دکمه معرفی کنید. - مشکلی را برطرف کنید که در آن
PlayerViewوPlayerControlViewنشانگرهای آگهی را در مرزهای دوره برای جایبانهای پسپخش زنده در جاریسازیهای زنده چنددورهای نشان میدادند. - جایگاههای قابلترکیب
Player،ContentFrame،PlayerDefaultsوMiniControllerدیگر پخشکننده یا رؤیتپذیری کنترلها را بهعنوان پارامتر دریافت نمیکنند. بهجای آن، آنها را از محدوده فراخوانی ضبط کنید (برای مثال،topControlsاکنون@Composable BoxScope.() -> Unitاست). این یک تغییر مخرب در یک میانای برنامهسازی کاربردی ناپایدار است. - پارامتر
alignmentرا بهContentFrame،PlayerوModifier.resizeWithContentScaleاضافه کنید تا محتوای مقیاسبندیشده را در محفظه آن قرار دهید و محتوایContentFrameرا به حدود آن برش دهید تا ویدیویی که باContentScale.Cropمقیاسبندی شده است دیگر خارج از آن ترسیم نشود. - افزودن پشتیبانی میانای کاربر جاریسازی زنده به
ProgressSlider،ProgressStateWithTickCountوProgressStateWithTickIntervalبا نمایان کردنisLiveوliveOffsetMs. افزودنLiveButtonComposable بهmedia3-ui-compose-material3(#۲۲۱۳).
- افزونه Ktor:
- رفع مشکلی که باعث میشد
KtorDataSourceقطعی اتصال در میانجاری را بهجای ایجادHttpDataSourceExceptionبهعنوان پایان ورودی درنظر بگیرد (#۳۴۶۰).
- رفع مشکلی که باعث میشد
- افزونه HLS:
- Parse
VIDEO-RANGE(PQandHLG) onEXT-X-STREAM-INFandEXT-X-I-FRAME-STREAM-INFintoFormat.colorInfo(#3441). - رفع
NullPointerExceptionهنگام تجزیه بخشهای مقداردهی اولیه MPEG-TSEXT-X-MAPکه حاوی نمونههای رسانه PES هستند (#۳۴۵۶). - رفع اشکال رگرسیون که در آن
Format.idوFormat.metadataبرای قطعههای HLS آشکارشدهnullبودند (#3402). - آگهیهای فهرست دارایی را به
X-PLAYOUT-LIMITبرش دهید و از آگهیهایی که کاملاً فراتر از حد مجاز هستند صرفنظر کنید، و وقتی میانآگهیX-RESUME-OFFSETرا حذف میکند و مدت آن نامشخص است، حتی اگرX-PLAYOUT-LIMITتنظیم شده باشد، انحراف ازسرگیری محتوا را بهطور پیشفرض روی ۰ قرار دهید. - مشکلی را برطرف کنید که در آن حل کردن یک
X-ASSET-LISTبینابینی، مشارکتهای آفست ازسرگیری محتوای سایر بینابینیها را در همان گروه آگهی رونویسی میکرد.
- Parse
- افزونه DASH:
- پشتیبانی از تجزیه رویدادهای «درج MPD جایگزین» (
urn:mpeg:dash:event:alternativeMPD:insert:2025) و «جایگزینی» (urn:mpeg:dash:event:alternativeMPD:replace:2025) درDashManifestParserو نمایش آنها بهعنوان نمونههایAlternativeMpdEventدرPeriod.alternativeMpdEvents. این تغییری ناسازگار برای برنامههایی است که زیرکلاسDashManifestParserهستند:DashManifestParser.buildPeriodاکنون پارامترList<AlternativeMpdEvent>اضافی میگیرد و سربارگذاری قبلی برداشته شده است. برنامههایی کهDashManifestParser.parseEventStream(XmlPullParser)را لغو میکنند باید بهجای آنDashManifestParser.parseEventStream(XmlPullParser, String)را لغو کنند، زیرا مورد اول منسوخ شده است و در نسخه پخش آتی خصوصی خواهد شد. - تجزیه اطلاعات رنگ CICP (
ColourPrimaries،TransferCharacteristics،MatrixCoefficients، وVideoFullRangeFlag) از توصیفکنندههایEssentialPropertyوSupplementalPropertyبهFormat.colorInfo(#3426). - پشتیبانی از فهرستهای جداشده با فاصله سفید از مقادیر
@idدر حالت ترفند (http://dashif.org/guidelines/trickmode) توصیفگر@valueمشخصهها (#3315). - پشتیبانی از تجزیه
<ProducerReferenceTime>درDashManifestParser، نمایش آن درAdaptationSet.producerReferenceTimes، و استفاده از آن برای پر کردنTimeline.Window.presentationStartTimeMsوTimeline.Window.windowStartTimeMsبرای جاریسازیهای VOD. - افزودن پشتیبانی از DASH Content Steering (#۱۶۸۹).
- رفع
NullPointerExceptionکه ممکن است هنگام تجزیه مانیفست DASH با مشخصه مفقود در عنصر<UTCTiming>رخ دهد (#۳۴۳۶).
- پشتیبانی از تجزیه رویدادهای «درج MPD جایگزین» (
- افزونه RTSP:
- رفع خرابی
IllegalStateExceptionکه هنگام پردازش پاسخهای تأخیری شبکه پساز بسته شدن کلاینت RTSP رخ میداد. - رفع مشکلی که در آن پیمایش سریع میتوانست بهاشتباه سازوکار بازگشت پروتکل TCP را راهاندازی کند.
- رفع خرابی
IllegalStateExceptionکه ممکن است هنگام پردازش پاسخهای شبکه با تأخیر رخ دهد، پساز اینکه کارخواه RTSP وضعیت را درطول انتخاب مجدد قطعه، قطع جلسه، یا تغییر مسیر URI بازنشانی میکند. - مشکلی که در آن جستجوی مجدد قبلاز بازراهاندازی بازپخش میتوانست باعث ازکارافتادن
IllegalStateExceptionشود برطرف شد. - رفع مشکلی که در آن جستجو به عقب درحالیکه جستجوی دیگری درانتظار بود میتوانست باعث قطع صدا و توقف بازپخش ویدیو شود.
- رفع مشکلی که در آن واحدهای دسترسی قاب کلیدی H.264 و H.265 که با یک بسته تجمیعی یا غیر IDR پایان مییافتند بهعنوان قاب کلیدی پرچمگذاری نمیشدند و باعث میشدند بازپخش در حالت میانگیری گیر کند (#3434).
- رفع خرابی
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزونه Opus: رفع خرابی JNI هنگام رمزگشایی دادههای نامعتبر Opus.
- افزونه Opus: رفع مشکل نادیده گرفته شدن لایه دورریز وقتی پیشپرش و لایه دورریز در یک بسته قرار میگیرند (#۲۵۷۶).
- افزونه Cast:
- Introduce
SessionAvailabilityListener.SessionUnavailableReasonto represent the reason for session unavailability, and provide an overloaded method forSessionAvailabilityListener.onCastSessionUnavailableto expose it. - رفع مشکلی که باعث میشد بازپخش پساز توقف جلسه «ارسال محتوا» بهطور غیرمنتظرهای بهصورت محلی ازسر گرفته شود.
- وقتی عملیات
RemoteMediaClient(مثل پخش، مکث، تغییر سرعت، حالت تکرار، میزان صدا، بیصدا کردن، یا انتخاب قطعه) درRemoteCastPlayerناموفق است، خطایی ثبت کنید (#۳۳۷۳). - رفع
ArrayIndexOutOfBoundsExceptionدرRemoteCastPlayerوقتی صف گیرنده Cast تغییر میکند یا کوچک میشود درحالیکه عملیات جستجو درانتظار است (#۳۳۷۲). - مشکل مربوط به گیرنده Cast پیشفرض که در آن خط زمان فقط فایلهای رسانهای را که بلافاصله اطراف مورد فعال بودند بهجای کل فهرست پخش پر میکرد برطرف شد (#۳۱۲۹).
- هنگام اصلاح فهرست پخش (
setMediaItems،addMediaItems،moveMediaItems،removeMediaItems) یا جستجو درRemoteCastPlayer، خط زمان و موقعیت بازپخش را فوراً بهروز کنید و عملیات فهرست پخش متوالی را در صف قرار دهید تا بهطور قابلاعتماد به ترتیب اجرا شوند (#2639، #3272). - مشکلی که باعث میشد فراخوانی
addMediaItemsدر صف خالی درRemoteCastPlayerنتواند موارد رسانهای را در گیرنده Cast بار کند برطرف شد (#۲۴۰۲). - رفع مشکل در
RemoteCastPlayerکه در آن رسیدن به پایان صف گیرنده Cast باعث پاک شدن خط زمان بهجای حفظ فهرست پخش میشد. - مشکلی که باعث میشد
playWhenReady،repeatMode، وplaybackParametersهنگام تنظیم رویRemoteCastPlayerقبلاز بار کردن موارد رسانهای (برای مثال، درطول انتقال بازپخش محلی به راه دور درCastPlayer) منتقل یا اعمال نشوند برطرف شد (#۸۸۹).
- Introduce
- برنامه نمایشی:
- پشتیبانی از فایلهای رسانهای محافظتشده با مدیریت حقوق دیجیتال و یک جاریسازی نمونه HLS اضافی به کاتالوگ برنامه نمایشی جلسه اضافه کنید.
RemoteCastPlayerرا باCastTrackSelectorدر برنامه نمایشی جلسه پیکربندی کنید تا انتخاب زیرنویس و قطعه صوتی هنگام ارسال محتوا فعال شود.
- برداشتن نمادهای منسوخشده:
- برداشتن
DashUtil.buildDataSpec(Representation, RangedUri, int)وDashUtil.buildDataSpec(Representation, String, RangedUri, int). درعوض ازDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>)استفاده کنید.
- برداشتن
- ساخت:
- Gradle
minSdkرا به ۲۴ افزایش دهید.
- Gradle
نسخه ۱.۱۱.۰
۱.۱۱.۱
۱۰ سپتامبر ۲۰۲۶
- ExoPlayer:
- پرچم را برای فعال/ غیرفعال کردن فراداده HAGC برای رسانه پیشرونده از
MediaSource.FactoryبهExtractorsFactoryمنتقل کنید. روش قبلیsetExperimentalEnableHagcPlaybackبرداشته شده و باExtractorsFactory.setParseHagcMetadataجایگزین شده است. این بهروزرسانی همچنین مشکلی را برطرف میکند که در آن غیرفعال کردن برای محفظههای Matroska/WebM کار نمیکرد. - رفع توقف بازپخش ناشی از پیشگرم کردن پردازنده ثانویه غیرانتقالی.
- رفع مشکل پیشگرمایش که در آن
Surfaceباید به رندرکننده اصلی برگردانده شود وقتی جستجو هر دو رندرکننده را بازنشانی و غیرفعال میکند. - رفع مشکل
ArrayIndexOutOfBoundsExceptionوقتی بازآوری خط زمان زنده، موقعیت پیشفرض را از آگهی درجشده در سمت سرور که درحال پخش است عبور میدهد (#3348). - رفع مشکل حالت پیمایش که در آن فریمهای ویدیو قدیمی ممکن بود بهطور خلاصه
هنگام جستجو با
ScrubbingModeParameters.allowSkippingMediaCodecFlushفعال نمایش داده شوند.
- پرچم را برای فعال/ غیرفعال کردن فراداده HAGC برای رسانه پیشرونده از
- استخراجکنندهها:
- Matroska: رفع مشکلی که در آن، «قطعههای» قرارگرفته بعداز خوشهها منجر به خط زمان قابلجستجو نمیشد (#۳۳۷۷).
- صدا:
- محاسبه اندازه میانگیر در
SilenceSkippingAudioProcessorاصلاح شد تا حداقل مدت سکوت بهطور نادرست توسط اندازه قاب کاهش مقیاس پیدا نکند (#3271). - رفع مشکل مدیریت PCM ۸ بیتی در
PcmAudioUtilبرای اینکه نمونهها بهعنوان بدون علامت درنظر گرفته شوند، همانطور که توسط Android تعریف شده است (#۳۲۷۱). - مشکل تخلیه بار که در آن بازپخش ممکن بود درطول پیشویدیو یا انتقال بدون وقفه بهدلیل محدود بودن اندازه میانگیر سختافزار متوقف شود برطرف شد.
- رفع اشکال در
DefaultAudioSinkکه در آن تعداد انتشار کاهش نمییابد وقتی رشته بازپخش دیگر فعال نیست (#3338).
- محاسبه اندازه میانگیر در
- جلسه:
- افزونه HLS:
- افزونه DASH:
- رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعههای تصویری با
presentationTimeOffset(#3334).
- رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعههای تصویری با
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- Opus: رفع خرابی حافظه وقتی چندین نمونه
OpusDecoderبهطور همزمان مقداردهی اولیه میشوند. - MPEG-H: رفع نشت حافظه، کوتاه شدن نویسههای غیرASCII، و
خرابی بومی احتمالی در شرایط حافظه کم هنگام ارسال فرمانها
به
MpeghUiManager(#3365).
- Opus: رفع خرابی حافظه وقتی چندین نمونه
نسخه ۱.۱۱.۰
۵ اوت ۲۰۲۶
- کتابخانه مشترک:
Format.channelMaskرا برای نمایش صریح ماسک کانال صوتی اضافه کنید، و یک سربارگذاریUtil.getAudioTrackChannelConfig(Format)جدید برای حل ایمن آن.- Kotlin را از نسخه 2.0.20 به 2.2.0 ارتقا دهید.
- ExoPlayer:
- رفع اشکال همزمانی وابسته به زمانبندی که میتوانست باعث
IllegalStateExceptionیاIndexOutOfBoundsExceptionدر ExoPlayer شود. - Relax ad group count checks in
AdsMediaSourceto allow the ad group count to decrease when an ad group is fully processed (hasUnplayedAds()isfalse), accommodating dynamic ad group resizing during reset workflows. -
getFlags()وFLAG_STRICT_DURATIONرا بهSampleStreamاضافه کنید تا به جاریسازیها اجازه دهید پرچمها را گزارش کنند و پردازنده گرافیکی را بهروز کنید تا این پرچمها را بهطور پویا بررسی کند. - Fall back to the frame rate estimator in
MediaCodecVideoRendererand to the codec output format inMediaCodecAudioRendererto calculate the codec operating rate when the stream formats do not provide a valid value, and avoid unnecessary codec resets. - برداشتن برش محتوا برای آگهیهای درجشده در سمت کارخواه در پخشکننده اصلی. درعوض،
AdsMediaSourceمنطق برش را مدیریت میکند. منابع آگهیهای درجشده سفارشی سمت کارخواه باید بهروزرسانی شوند تا برش محتوا را بهطور داخلی پیادهسازی کنند. - قطعههای دارای نمایه یا سطح کدک خوشساخت اما ناشناخته را بهجای
supported=YES، بهعنوانsupported=NO_EXCEEDS_CAPABILITIESعلامتگذاری کنید (قطعههای دارای اطلاعات نمایه یا سطح ناقص یا بدساخت به این صورت علامتگذاری میشوند). این کار تضمین میکند که این قطعهها (که احتمالاً توسط دستگاه پشتیبانی نمیشوند) درصورت وجود جایگزینهای بهتر پشتیبانیشده، انتخاب نشوند. DefaultPreloadManager.SimpleRankingDataComparatorرا اضافه کنید که یکRankingDataComparatorاست که رتبههای فایلهای رسانهای را براساس فاصلهشان تا نمایه فایل رسانهای درحال پخش فعلی مقایسه میکند. برنامهها میتوانند روشcompare(Integer, Integer)آن را لغو کنند اگر منطق مقایسه دقیقتری موردنیاز باشد.SimpleRankingDataComparatorسفارشی را میتوان ازطریق سازنده جدیدDefaultPreloadManager.Builderتزریق کرد.- کاهش خطر کمبود حافظه
DefaultLoadControl.prioritizeTimeOverSizeThresholdsبا بازگشت به محدودیتهای اندازه بایت میانگیر درصورت کم بودن حافظه توده موجود. - تراز کردن مدیریت تصاویر ثابت وقتی
MediaItem.imageDurationUsتنظیم نشده است: تصاویر ثابت JPEG و HEIC اکنون با مدت پیشفرض بسیار کوتاهی «پخش میشوند» (همانطور که تصاویر PNG و تصاویر دیگر قبلاً رفتار میکردند). MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)را بهBandwidthMeterترازMediaSourceاضافه کنید. روش منسوخشده با پیادهسازی سفارشی همچنان بهطور پیشفرض فراخوانده میشود، توصیه میشود روش جدید را پیادهسازی کنید و ازBandwidthMeter.getTransferListener()استفاده کنید تا با روش قدیمی برابری داشته باشد.- در
DefaultBandwidthMeter، پشتیبانی ازInitialBitrateSupplierسفارشی را اضافه کنید. این به برنامهها اجازه میدهد منطق خود را برای تعیین تخمین نرخ بیت اولیه ارائه دهند، که در ایجادDefaultBandwidthMeterو در تغییرات نوع شبکه استفاده خواهد شد. تأمینکننده را میتوان ازطریقDefaultBandwidthMeter.Builder.setInitialBitrateSupplier()تنظیم کرد. - زمانبندی پویا را بهطور پیشفرض فعال کنید.
ExoPlayerحلقه کار بازپخش بهجای اجرا در فواصل ثابت، بهصورت پویا اجرا خواهد شد. - بازنشانی غیرضروری را که ممکن است هنگام پیوستن قطعهها با نمونههای پیشویدیو به بازپخش فعال رخ دهد بردارید.
- در
DefaultBandwidthMeter،getInitialBitrateCountryGroupAssignmentرا بهینهسازی کنید تا تخصیصهای گروه کشور را بهجای آرایه در یک عدد صحیح ۳۲ بیتی برگرداند، اندازه کد را کاهش دهد، و از تخصیصها جلوگیری کند. - رفع خرابیهای مقداردهی اولیه
AudioTrackدر برخیاز دستگاهها با اطمینان از اینکه منطق تکرار مجدد همیشه حداقل اندازه میانگیر ۱ ثانیه را امتحان میکند اگر تکرارهای مجدد دیگر (با نصف کردن اندازه میانگیر) ناموفق باشند (#3207). - رفع مشکل کدک در برخیاز دستگاهها که در آن کدک همه نمونهها را درصورت پاک شدن قبلی قبلاز دریافت میانگیرهای ورودی میبلعید.
ExoPlayer.Builder.enablePerStreamMediaProgression()آزمایشی را اضافه کنید تا امکان پردازش رسانه پیشرفته بهصورت هر جاریسازی فراهم شود. این کار تأخیر راهاندازی بین موارد فهرست پخش را کاهش میدهد و از «گیر کردن» بازپخش با محتوای بسیار کوتاه جلوگیری میکند (#۳۱۲۲).- Fix race condition related to audio session id usage where the initial
audio session id auto-generated by
ExoPlayerwould be used instead of the value set bysetAudioSessionId(#3241). - افزودن پشتیبانی آزمایشی از بازپخش فراداده زمانبندیشده HAGC (ST 2094-50) برای
رسانه پیشرونده (مثلاً MP4، Matroska). پخشکننده بهطور خودکار قطعههای فراداده HAGC را با قطعه ویدیویی مربوطه ادغام میکند و فراداده را بهصورت خارج از باند به رمزگشا در دستگاههای دارای API 37+ ارائه میدهد. این رفتار
را میتوان ازطریق
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)غیرفعال کرد. - Add
Format.selectionPriorityrepresenting the relative preference of theFormatin track selection (#3236). - رفع مشکل احتمالی حالت پیمایش که در آن پیمایش ممکن بود هنگام جستجوی «پایان جاریسازی» متوقف شود.
- رفع اشکال همزمانی وابسته به زمانبندی که میتوانست باعث
- CompositionPlayer:
- رفع مشکلی که باعث میشد نمونههای
TrackSelectorمنتشر نشوند.
- رفع مشکلی که باعث میشد نمونههای
- ترانسفورماتور:
- مشکلی را که ممکن است باعث گزارش بیشازحد
ExportResult.fileSizeBytesشود برطرف کنید.
- مشکلی را که ممکن است باعث گزارش بیشازحد
- انتخاب قطعه:
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORرا نمایش دهید وAdaptiveTrackSelection.Factory.setTrackFormatComparatorرا اضافه کنید تا سفارش قالب سفارشی و اولویت انتخاب ABR فراتر از سفارش فقط نرخ بیت مجاز شود.- رفع مشکل همزمانی وابسته به زمان که در آن بهروزرسانیهای متوالی سریع برای ردیابی پارامترهای انتخاب میتوانست منجر به ازدست رفتن یا بازنویسی برخی بهروزرسانیها شود.
- استخراجکنندهها:
- MP4، MP3، و FLAC: افزودن
FLAG_DISABLE_ARTWORK_METADATAبرای مجاز کردن دور انداختن تصاویر پیوستشده و فراداده جلدنگاره درطول تجزیه ظرف برای کاهش مصرف حافظه زمان اجرا (#2077). این ویژگی را میتوان بهطور متمرکز ازطریقDefaultExtractorsFactory.setDisableArtworkMetadataنیز فعال کرد. - MP4: افزودن پشتیبانی برای استخراج قطعههای فراداده زمانبندیشده ITU-T T.35 (
it35). - MP4: افزودن پشتیبانی برای استخراج فراداده فصل (هر دو قالب Nero و QuickTime). اگر هر دو موجود باشند، فصلهای QuickTime ترجیح داده میشوند. اطلاعات استخراجشده فصل بهصورت ورودیهای
ChapterدرMetadataقطعه نمایش داده میشود که امکان پیمایش بومی فصل را در فایلهای MP4، M4A، و M4B (مانند کتابهای صوتی و پادکستها) فراهم میکند (#۲۸۰۳). - WAV، Matroska، و MP4: افزودن پشتیبانی از صدای PCM ممیز شناور ۶۴ بیتی (#۳۰۹۰).
- Matroska: از فرادادههای بیتاستریم کدک برای پر کردن دقیق
ColorInfoاستفاده کنید. - MP4: افزودن پشتیبانی برای جستجو در فایلهای MP4 تکهتکهشده بااستفاده از چارگوش
mfraوقتی چارگوشsidxوجود ندارد. برای فعال کردن این مورد،FLAG_READ_MFRA_FOR_SEEK_MAPرا بهFragmentedMp4Extractorارائه دهید، که اکنون بهطور پیشفرض درDefaultExtractorsFactoryانجام میشود (#3088). - نادیده گرفتن دادههای
av1Cبا نسخه پشتیبانینشده. - MP4: پشتیبانی از PCM ممیز شناور big-endian در جعبههای
fpcmاضافه شد. - Matroska: Parse chapter info to
Chapterentries in a track'sMetadata. - MPEG-TS: بهبود استخراج جاریسازیهای DTS-HD و DTS Express با ترکیب کردن «زیرجاریسازی هسته و افزونه» در یک نمونه واحد، رفع مشکلات بازپخش که قبلاً این دو بهعنوان نمونههای جداگانه خروجی داده میشدند (#۳۱۴۷).
- MP4: Prevent infinite loops and out-of-bounds reads when parsing empty
ilstmetadata tag items (#3191). - MPEG-TS: مطمئن شوید که آخرین فریم برای جاریسازیهایی که آخرین بسته PES آنها طول مشخصی دارد پرداز شده است (#3206).
- MP3: گزارش نرخ بیت برای فایلهای دارای سرصفحه Xing و VBRI اصلاح شد.
- Matroska: Handle tracks defined in the last cluster (#3250).
- Matroska: افزودن پشتیبانی از ALAC (#3268).
- MP4: Allow variable length
sgpdboxes in fragmented MP4 files (#3243). - AVI: رفع مشکلی که در آن پخش فایلهای بدون پرچم قاب کلیدی در قطعههای صوتی باعث ازدست رفتن صدا و
OutOfMemoryErrorمیشد. - MP3: از مدتهای آگاه از بیوقفه از سرایندهای Xing/Info استفاده کنید (#۳۱۸۳).
- MP3: تنظیم تأخیر کدبند LAME/Xing و فراداده لایی برای مطابقت با برش PCM رمزگشاییشده (#3200).
- MP4، MP3، و FLAC: افزودن
- صدا:
- Add a 100ms grace period in ExoPlayer's audio renderers when transitioning from ready to not-ready state, to debounce transient underruns and avoid unexpected buffering states during active playout (#3210).
- منطق اندازه میانگیر PCM پیشفرض در
DefaultAudioTrackBufferSizeProviderرا تغییر دهید تا از میانگیر ثابت ۵۰۰ میلیثانیهای استفاده کند و وابستگی آن به دستگاه کمتر شود. MediaCodecAudioRendererرا بهروز کنید تا channelMask فضایی را از رمزگشای پلاتفرم استخراج کند و بهDefaultAudioSinkاجازه دهد بهجای استنباط ماسک از تعداد کانال، از این ماسک صریح استفاده کند.- پارامترهای
AudioSink.configureرا به کلاس داده تبدیل کنید. لغوهای سفارشیForwardingAudioSink.configureباید به امضای روش جدید منتقل شود. - پشتیبانی از حفظ زیروبمی صدا هنگام کشش زمانی جاریسازی صوتی با
EditedMediaItem.Builder#setSpeed(SpeedParameters)اضافه شد. - Enhance
ToFloatPcmAudioProcessorto support converting 8-bit PCM, 16-bit big-endian PCM, and 64-bit floating point PCM to 32-bit floating point PCM (#3090). - مقدار برگشتی
DecoderAudioRenderer.getChannelMappingرا بهImmutableIntArrayتغییر دهید. - رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صوتی بدون وقفه در حالت انتقال بار فشرده گیر میکند.
- Forward
Timelineand period UID toAudioSink.configureandAudioProcessor.StreamMetadatato provide playlist context to the audio processors (#418). AudioProcessor.StreamMetadata.positionOffsetUsصحیح را تنظیم کنید تا پردازش صوتی مبتنی بر زمان مجاز شود (#۴۱۸).- پشتیبانی از PCM ممیز شناور ۳۲ بیتی و ۶۴ بیتی با ترتیب بایتهای بااهمیتتر در ابتدا اضافه شد.
- برداشتن مسیر بازگشت EAC3-JOC به EAC3 برای بازپخش در دستگاههای Google Pixel، زیرا رمزگشاهای استاندارد EAC3 آنها نمیتوانند جریانهای EAC3-JOC را رمزگشایی کنند (#۳۲۵۷).
- ویدیو:
- Fix video joining logic to count dropped buffers during joining as skipped instead of dropped.
- تصمیمگیری فوری برای رندر کردن هنگام تنظیم سطح جدید برای جلوگیری از افت فریم در دستگاههایی که از سطوح جایبان پشتیبانی نمیکنند.
- برآورد نرخ فریم در
MediaCodecVideoRendererرا با درنظر گرفتن فریمهای حذفشده یا ردشده اصلاح کنید تا دقیقتر شود. - اجازه دادن به پیکربندی آستانه مورداستفاده برای زمانبندی زودهنگام قابها. مقدار پیشفرض ۵۰ میلیثانیه است اما میتوان این مقدار را ازطریق
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()سفارشیسازی کرد. - رفع اشکال در
VideoFrameReleaseHelperکه در آن تغییرات نمایشگر میتوانست باعث راهاندازی فراخوانیهای برگشتیChoreographerزائد و بیدار شدن بیشازحد واحد پردازش مرکزی در رشته اصلی شود.
- نوشتار:
- فراداده:
- افزودن فیلد
MediaMetadata.discSubtitleو تجزیه آن از دادههای ID3v2.4TSSTو VorbisDISCSUBTITLE. - تجزیه شماره و تعداد دیسک از قاب ID3
TPOS.
- افزودن فیلد
- جلوه:
- پاک کردن وضعیت بازترسیم در
FinalShaderProgramWrapperهنگام تخلیه برای جلوگیری از توقف پخشکننده هنگام جستجو.
- پاک کردن وضعیت بازترسیم در
- Muxers:
- افزودن پشتیبانی از ارجاعهای قطعه (چارگوش
tref) درMp4Muxerازطریق میانای برنامهسازی کاربردیaddTrackReferenceجدید. این امر امکان برقراری روابط بین قطعهها را فراهم میکند، مانند پیوند دادن یک قطعه فراداده به قطعه ویدیویی که آن را توصیف میکند. OggMuxerرا اضافه کنید تا امکان ادغام کردن جریانهای رسانهایOPUSیاVORBISدر قالب فایلoggفراهم شود.-
WavMuxerرا برای تولید فایل WAV اضافه میکند (از PCM عدد صحیح و ممیز شناور پشتیبانی میکند). setAttemptStreamableOutputEnabledرا بهInAppMp4Muxer.Factoryاضافه کنید تا نوشتن فایلهای کوچکتر غیرقابلجاریسازی بدون فضای رزروشده مجاز شود.- پشتیبانی از صدای IAMF در
Mp4MuxerوFragmentedMp4Muxerاضافه شد.
- افزودن پشتیبانی از ارجاعهای قطعه (چارگوش
- افزونه IMA:
-
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotرا اضافه کنید تا امکان ارائه جایگاه آگهی برای استفاده در آگهیهای توقف موقت فراهم شود. - رفع اشکالی که در آن آگهیهای VAST ردشدنی پیدرپی دکمه رد شدن را بلافاصله در آگهی دوم نشان میدهند (#3165).
-
- جلسه:
- رفع بنبستهای احتمالی و ازکارافتادنهای
IllegalStateExceptionدرMediaNotificationManagerهنگام استفاده از جلسه با پخشکننده لوپر رشته پسزمینه. - الزامات رشتهبندی سختگیرانهتری برای روشهای
MediaSessionاعمال کنید. روشهای Void اکنون بهطور خودکار اجرا را به رشته لوپر برنامه پست میکنند و دسترسیدهندههای وضعیت (گیرندهها) بهطور صریحIllegalStateExceptionرا درصورت فراخوانی از رشتهای غیراز لوپر برنامه ارسال میکنند. - رفع خرابی ادغام خط زمان خارج از محدوده (
IllegalStateExceptionدرMediaUtils.mergePlayerInfo) با ردیابی سازگاری وضعیت بهازای هر کنترلکننده در سمت جلسه. androidx.media3.session.MediaSessionManagerرا برای پشتیبانی از پُرسمان جلسههای رسانه فعال و برگرداندن نمونههای Media3SessionTokenاضافه کنید.- تغییر رفتار پیشفرض
MediaSession.Callback.onConnectاگر روش لغو نشده باشد تا فقط دسترسی خواندن به کنترلکنندههای غیرقابلاعتماد ارائه شود. - افزودن پشتیبانی برای لغو نام بسته هنگام ایجاد
MediaSessionازطریق میانای برنامهسازی کاربردی جدیدMediaSession.Builder#setPackageNameOverride. فراخواننده باید اجازهandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERرا داشته باشد تا نام بسته جلسه را لغو کند. -
MediaSession.Callback.onConnectAsync()را اضافه کنید. روش جدید امکان پردازش ناهمگام تلاش برای اتصال کنترلکننده را فراهم میکند. برنامهها میتوانندFutureفوری را باFutures.immediateFuture(ConnectionResult)برگردانند تا به رفتار قبلی دست یابند. توصیه میشود به روش جدید مهاجرت کنید زیراCallback.onConnectنامزد منسوخ شدن است. - مشکلی که باعث میشد مرور AVRCP بلوتوث
MediaLibraryServiceرا در میانای برنامهسازی کاربردی ۳۶ و ۳۷ تشخیص ندهد برطرف شد. - رفع مشکل کاهش مقیاس دوبرابری آثار هنری در
MediaSessionوقتی اندازه تصویر به حد پلاتفرم نزدیک است، که باعث رفع تاری در اعلانها میشود (#3134). - رفع خرابی
ForegroundServiceStartNotAllowedExceptionدرMediaNotificationManagerوقتیکه فراخوان برگشت بارگیری بیتمپ کار هنری ناهمگام تلاش میکند سرویس پیشزمینهای را درحالیکه برنامه در پسزمینه است شروع کند (#۳۲۷۰). - رفع مشکلی که در آن اشیاء
PositionInfoدریافتی توسطMediaControllerفاقد شناسه کاربریTimelineاصلی خود بودند. اکنون جلسه بهطور قابلاعتمادی این شناسههای UID را درطول بهروزرسانیهای وضعیت ترجمه و منتشر میکند. - با گرفتن
ForegroundServiceStartNotAllowedExceptionدرMediaSessionService.stopSelfSafely()(#3310)، خرابی را برطرف کنید. - Fix unexpected
onMediaItemTransition()callback onMediaControllerwhen seeking inside the same media item (#3248).
- رفع بنبستهای احتمالی و ازکارافتادنهای
- میانای کاربر:
- رفع مشکل رندر شدن قاب اول در اندازه اشتباه وقتی
ContentFrameدر اواسط بازپخش بازترکیب میشود (#۳۲۳۸). - کلاس
CurrentMediaItemStateوrememberCurrentMediaItemStateComposable مربوطه را به مدولmedia3-ui-composeاضافه کنید. This state holder is used indemo-composeto display various metadata information about the currently playingMediaItem. - کلاس
PlaylistStateوrememberPlaylistStateمربوطه را به واحدmedia3-ui-composeاضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش اطلاعات فراداده مختلف دربارهMediaItemsتنظیمشده در «پخشکننده» استفاده میشود. - افزودن میانای برنامهسازی کاربردی حرکت سریع/ حرکت آهسته به
PlaybackSpeedState. از این عملکرد درdemo-composeبرای نمایش جلو بردن سریع با فشار طولانی استفاده کنید. MiniControllercomposable را به واحدmedia3-ui-compose-material3اضافه کنید. این ویژگی یک امکان فشرده برای کنترلPlayerفراهم میکند و درعینحال عنوان، هنرمند، اثر هنری، و پیشرفت فایل رسانهای فعلی را نمایش میدهد.- کلاس
ErrorStateوrememberErrorStateمربوطه را به واحدmedia3-ui-composeاضافه کنید. ErrorTextComposable را بهmedia3-ui-compose-material3اضافه کنید و آن را بهعنوان رونهاد پیشفرض درPlayerتنظیم کنید. - انتشار شیء
PlayerDefaultsبا composables برایTopControls،CenterControls،BottomControls، وErrorOverlay. FocusRequesterرا بهPlayerComposable و جایگاههای محتوای آن اضافه کنید.PlayerPool(common-ktx) وrememberPooledPlayer(ui-compose) را منتشر کنید تا از پیشبارگیریMediaItemsدر محیطهای میانای کاربر پنجره لغزان پشتیبانی شود. این عملکرد را درdemo-composeباShortFormPlayerScreenجدیدی نمایش دهید.- رفع اشکال توقف شاتر در
PlayerViewو ComposePresentationStateکه باعث ازکارافتادن در خطوط زمانیای میشد که از جستجوی UID دوره پشتیبانی نمیکنند (#۳۲۶۴).
- رفع مشکل رندر شدن قاب اول در اندازه اشتباه وقتی
- بارگیریها:
- حل کردن متغیرهای HLS در فهرست پخش رسانه هنگام واکشی برای بارگیری (#۳۲۵۸).
- افزونه Ktor:
- افزونه HLS:
- افزودن پشتیبانی از «هدایت محتوای HLS» و «کلونسازی مسیر» (#1689).
setWithAssetListResetرا بهHlsInterstitialsAdsLoaderاضافه کنید تا به برنامهها اجازه دهید بینآگهیهای فهرست دارایی کاملاً پردازششده را به حالت غیرقابلدسترس برای وضوح مجدد درخواستی بازنشانی کنند.- مشخصه
SCOREازEXT-X-STREAM-INFوEXT-X-I-FRAME-STREAM-INFرا تجزیه کنید و آن را درFormat.selectionPriority(#3236) وارد کنید. - رفع اشکالی که در آن بازآوریهای زمانبندیشده فهرست پخش HLS ادامه مییابد حتی اگر فهرست پخش دیگر اصلی یا فعال نباشد (#۳۲۵۴).
- Fix calculation of content resume offset when resolving interstitial asset lists (#3322).
- Fix unexpected audio track timestamp discontinuity when resuming low latency live playback after a playlist request failure (#3311).
- رفع اشکال در
HlsMediaPeriod.getStreamKeys()که در آن قطعه ID3 در بازپرداختهای صوتی بهعنوان زیرنویس درنظر گرفته میشود (#3333).
- افزونه DASH:
- زیرنویس ناشنوایان CEA را براساس زبان به
TrackGroupهای مختلف تقسیم کنید (#3113). - Add support for parsing multiple
Locationelements from the manifest (MPD) and performing location fallback inDashMediaSourcewhen manifest loads fail. - رفع ازکارافتادگی (
IndexOutOfBoundsException) هنگام باز کردن مانیفستها با عنصر<SegmentTimeline/>خالی (#3326).
- زیرنویس ناشنوایان CEA را براساس زبان به
- افزونه RTSP:
- رفع توقف یا خرابی موقت بازپخش درطول آمادهسازی بازپخش RTSP که بهدلیل خطاهای اتصال درگاه UDP ایجاد میشود.
- افزونه Cast:
- کلاس جدید
CastParamsرا اضافه کنید تا پیکربندی Cast با فراخوانیCast.initialize(CastParams)مجاز شود. - گزینه جدید
CastParams.getShowSystemOutputSwitcherOnCastIconClick()را اضافه کنید که درصورت دردسترس بودن، بهجای انتخابگر دستگاه «پخش» درونبرنامه، استفاده از «تعویضکننده خروجی SystemUI» را راهاندازی میکند. -
MediaRouteButtonStateوrememberMediaRouteButtonStateبرای پشتیبانی از مشاهده وضعیت نمایان بودن انتخابگر مسیر رسانه اضافه شد و پارامترstateبهMediaRouteButtonاضافه شد (#۳۱۷۲). - رفع اشکالی که در آن
RemoteCastPlayerمیتوانست پساز انتخاب قطعه برای همیشه در وضعیت پوشاندن قطعه گیر کند و باعث شود بهروزرسانیهای بعدی قطعه از گیرنده Cast نادیده گرفته شود (#3237). - رفع اشکالی که در آن
DefaultMediaItemConverterهنگام تلاش برای پیوستن به جلسه پخشی که از فرستنده غیرMedia3 شروع شده است،NullPointerExceptionرا ایجاد میکند. - جلوگیری از انتقال
MediaItemsتوسطCastPlayerکه هنگام تغییر پخشکننده فعال قابلپخش نیستند (#۳۱۹۹). - رفع اشکال مربوط به جاریسازیهای زنده پیکربندینشده (
liveConfiguration == UNSET) که بهعنوانSTREAM_TYPE_BUFFEREDدر صف قرار میگرفتند (#3318).
- کلاس جدید
- ابزارهای آزمایشی:
DataSourceContractTestرا گسترش دهید تا شامل پشتیبانی از درخواستهایPOSTبا سرایندها و بدنهها شود، چند منبعPOSTبهHttpDataSourceTestEnvاضافه کنید، و ادعاهایی برای روش، سرایندها، و بدنه HTTP موردانتظار درWebServerDispatcherاضافه کنید.- Tighten assertions in
DataSourceContractTestfor lengths returned fromDataSource.open(). منابعی که ممکن است بهC.LENGTH_UNSETمنجر شوند باید این موضوع را بااستفاده ازTestResource.Builder.setMayResolveToUnknownLength(boolean)نشان دهند. setPlaybackLooperرا بهTestExoPlayerBuilderاضافه کنید.
- برداشتن نمادهای منسوخشده:
- برداشتن
androidx.media3.exoplayer.MetadataRetriever. درعوض ازandroidx.media3.inspector.MetadataRetrieverاستفاده کنید. - برداشتن
androidx.media3.exoplayer.MediaExtractorCompat. درعوض ازandroidx.media3.inspector.MediaExtractorCompatاستفاده کنید. - برداشتن
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. ازHeifExtractorبرای استخراج فراداده عکس حرکتی از فایلهای HEIC استفاده کنید. - برداشتن
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. درعوض ازandroidx.media3.extractor.metadata.MotionPhotoMetadataاستفاده کنید. - برداشتن
androidx.media3.extractor.DummyTrackOutput. درعوض ازandroidx.media3.extractor.DiscardingTrackOutputاستفاده کنید. - برداشتن
androidx.media3.extractor.DummyExtractorOutput. درعوض ازandroidx.media3.extractor.NoOpExtractorOutputاستفاده کنید. - برداشتن
androidx.media3.common.C.generateAudioSessionIdV21. درعوض ازandroidx.media3.common.util.Util.generateAudioSessionIdاستفاده کنید.
- برداشتن
- ساختن
- دستورالعملهای
README.mdبرای وابسته بودن به Media3 بهصورت محلی بهروزرسانی شد تا از Gradle Composite Builds (includeBuild) استفاده شود. اسکریپتcore_settings.gradleبرداشته شده است و دیگر از ویژگیهایandroidxMediaModulePrefixوandroidxMediaEnableMidiModuleاستفاده نمیشود.
- دستورالعملهای
1.11.0-rc01
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
1.11.0-beta01
۷ ژوئیه ۲۰۲۶
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
1.11.0-alpha01
۲۴ ژوئن ۲۰۲۶
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
نسخه ۱.۱۰.۰
۱.۱۰.۱
۱۲ مه ۲۰۲۶
- کتابخانه مشترک:
- رفع مشکل مدیریت
onAudioSessionIdChangedدرSimpleBasePlayerوForwardingSimpleBasePlayer.
- رفع مشکل مدیریت
- ExoPlayer:
- رفع شرایط رقابتی مربوط به تولید شناسه جلسه صوتی که میتوانست
منجر به
IllegalStateExceptionبا حالت تونلزنی شود. (#3099). - رفع خرابیهای احتمالی برنامه هنگام بازیابی از خطاهای رمزگشا با پیشگرم کردن پردازنده گرافیکی.
- رفع مشکلی که در آن مصنوعات ویدیویی بهدلیل ارائه دادههای مقداردهی اولیه هنگام استفاده از کدک Dolby Vision مبتنی بر AV1 ایجاد میشد (#3153).
- رفع شرایط رقابتی مربوط به تولید شناسه جلسه صوتی که میتوانست
منجر به
- انتخاب قطعه:
- منطق انتخاب قطعه در
VideoTrackInfoبرای حل کردن انواع MIME بازگشتی اصلاح شد و اولویتهای امتیاز کدک و HDR به اولویتهای کیفیت منتقل شد (#۳۱۳۵).
- منطق انتخاب قطعه در
- استخراجکنندهها:
- MP3: Ignore Xing data length if it is longer than the known stream length (#3117).
- رفع
ArrayIndexOutOfBoundsExceptionدرMp4ExtractorوقتیFLAG_OMIT_TRACK_SAMPLE_TABLEتنظیم شده است و قطعه فاقد چارگوش نمونه همگامسازی (stss) است.
- صدا:
- رفع اشکالی که در آن اگر چند پردازنده صوتی به پخشکننده اضافه شود، ممکن است رویدادهای صوتی بهاشتباه هدایت شوند.
- ویدیو:
- Adjust logic for codec reuse at frame rate changes on API below 30 to avoid codec resets where they are not beneficial (#3120).
- غیرفعال کردن راهحل همگامسازی اجباری در
queueSecureInputBufferبرای API 31+. این راهحل یک گلوگاه مصنوعی بود که رمزگشایی را مجبور میکرد بهصورت سریالی اجرا شود و از مخدوش شدن ویدیو بهدلیل مشکل چارچوب موجود قبلاز API 31 جلوگیری میکرد.
- تصویر:
- رفع مشکل در حالت پیمایش سریع که در آن بهروزرسانیهای تصویر فقط زمانی اعمال میشد که کاربر «پیمایش سریع را متوقف میکرد» (#2815).
- جلسه:
- رفع اشکالی که در آن
ForegroundServiceStartNotAllowedExceptionدر مرزهای رشته منتشر نمیشد، درصورتیکه رشته برنامه رشته اصلی نباشد (#۲۴۹۹). - رفع اشکال مربوط به دردسترس نبودن
COMMAND_SEEK_TO_MEDIA_ITEMدرMediaControllerهنگام اتصال به جلسه فقط پلاتفرم که از جستجو برای موارد دیگر پشتیبانی میکند اما از اصلاح فهرست پخش پشتیبانی نمیکند. - Fix issue where
MediaControllercan't set media items on platform media sessions that don't allowPREPARE_FROMactions. - رفع اشکالی که در آن فرایند خود با
Controller.isTrusted()در API 27 یا قبلاز آن هنگام اتصال ازطریق کنترلکنندههای پلاتفرم علامتگذاری نشده بود.
- رفع اشکالی که در آن
- افزونه HLS:
- رفع اشکالی که در آن اگر انتخاب قطعه زیرمجموعهای از قطعههای دردسترس باشد،
ArrayIndexOutOfBoundsExceptionدرطول بازگشت به حالت قبلی جاریسازی ایجاد میشود (#۳۱۶۱). - رفع مشکلی که در آن بخش مقداردهی اولیه در بهروزرسانیهای فهرست پخش رسانه منتقل نمیشد، اگر برچسب
#EXT-X-MAPدر بهروزرسانیهای بعدی تکرار نمیشد (#۳۱۰۵).
- رفع اشکالی که در آن اگر انتخاب قطعه زیرمجموعهای از قطعههای دردسترس باشد،
- افزونه DASH:
- رفع خرابی در
SampleQueueهنگام جستجو در بخشی که درحالحاضر درحال لغو شدن است.
- رفع خرابی در
۱.۱۰.۰
۲۶ مارس ۲۰۲۶
- کتابخانه مشترک:
Player.mute()وPlayer.unmute()را ازUnstableApiبه نسخه پایدار ارتقا دهید.Format.pcmEncodingوC.PcmEncodingرا ازUnstableApiبه نسخه پایدار ارتقا دهید.Format.primaryTrackGroupIdرا برای شناسایی گروه اصلی نمونههای جاسازیشدهFormatاضافه کنید (#۲۹۴).
- ExoPlayer:
- قابلیتهای کلیپسازی را به
AdsMediaSourceاضافه کنید. - افزودن پشتیبانی از زمانبندی پویا در
MediaCodecVideoRendererبرای همترازی بهتر کار زمانبندی و چرخههای بیداری CPU با زمانی که فریمهای ویدیو میتوانند پردازش شوند. میتوانید این ویژگی را بااستفاده ازexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()درDefaultRenderersFactoryفعال کنید. - اجازه دادن به تنظیم
DataSource.Factoryسفارشی درDefaultPreloadManager.Builder. - Allow
ExoPlayerto be mocked without Robolectric by moving some default constants toExoPlayer.Builder. Mocking this complex interface is not generally encouraged - only when the usage is minimal/simple/incidental (#2985).- این کار مستلزم انتقال
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSازExoPlayerبهExoPlayer.Builder(بدون منسوخ شدن) بود.
- این کار مستلزم انتقال
- رفع اشکالی که در آن
ProgressiveMediaSourceاطلاعات قدیمی خط زمان را به پخشکننده منتقل میکند و دورههای صفبندیشده بهطور غیرمنتظرهای حذف میشوند (#3016). - رفع مشکلی که باعث میشد ExoPlayer هنگام درخواست بازپخش درطول تماس تلفنی، تمرکز صوتی تأخیری را درخواست نکند.
- رفع اشکالی که در آن انتقال از محتوای درخواستی به محتوای زنده ممکن است باعث میانگیری مجدد در پایان محتوای درخواستی شود (#3052).
- افزودن پشتیبانی از Dolby Vision Profile 10 (#۲۸۳۰).
- رفع اشکالی که در آن آگهی پیشپخش مقداردهینشده باعث ایجاد
ArrayIndexOutOfBoundsException(#3125) میشد.
- قابلیتهای کلیپسازی را به
- CompositionPlayer:
- افزودن پشتیبانی برای
EditedMediaItem.removeVideo.
- افزودن پشتیبانی برای
- ترانسفورماتور:
EditedMediaItem.Builder.setFrameRate()اکنون میتواند حداکثر نرخ فریم خروجی را برای ویدیو تنظیم کند، که بهویژه هنگام افزایش سرعت رسانه باsetSpeed()مفید است.
- انتخاب قطعه:
- امضای
DefaultTrackSelector.selectAllTracksرا تغییر دهید تا آرایه برونداد را بهعنوان پارامتر دربرگیرد، ازپیش تکمیلشده با لغوهای قطعه. - رفع مشکل انتخاب شدن قطعههای فراداده جاسازیشده بدون توجه به اینکه قطعه اصلی مربوطه انتخاب شده است یا نه (#۲۹۴).
- گزینههای تثبیت
TrackSelectionParametersبرایpreferredVideoLanguages،preferredVideoLabels،preferredAudioLabels،preferredTextLabels، وselectTextByDefault.
- امضای
- استخراجکنندهها:
- MP4: پشتیبانی از فایلهایی با چارگوشهای بزرگ
uuidقبلاز چارگوشهای دیگر مانندmoov(#3046). - MP4: پشتیبانی از قطعههای Versatile Video Coding (VVC) در محتواهای MP4 اضافه شد.
- MP4: پشتیبانی از فایلهایی با چارگوشهای بزرگ
- بازرس:
- تغییر ناگهانی:
FrameExtractorرا بردارید. کاربران اکنون باید به ماژول جدید:media3-inspector-frameوابسته باشند و واردات را بهandroidx.media3.inspector.frame.FrameExtractorبهروز کنند. - واحد جدیدی برای استخراج و پردازش فریمهای ویدیو رمزگشاییشده معرفی کنید.
- تغییر ناگهانی:
- صدا:
- کتابخانه رمزگشایی زیربنایی برای افزونه رمزگشای IAMF از
libiamfبهiamf_toolsتغییر کرد. - رمزگشایی IAMF از خروجی دوگوشی ازطریق رمزگشا (هنگام استفاده از افزونه رمزگشای IAMF) یا ازطریق «فضاساز Android» پشتیبانی میکند.
- پشتیبانی از
AC4Profile22و دیگر نمایههای قدیمی را بهدرستی بردارید هنگام ارزیابی پشتیبانی از رمزگشای AC-4 در سناریوهای Automotive (#2609). - منطق تکرار مقداردهی اولیه
AudioOutputرا درDefaultAudioSink(#2905) بهبود دهید. - تلاش برای مطابقت دادن چیدمان خروجی بلندگوها (یا «فضاساز» درصورت وجود) هنگام رمزگشایی IAMF، هم با افزونه IAMF و هم با رمزگشاهای کدک رسانه، که توسط فیلدها و منطق جدید در AudioCapabilities و AudioCapabilitiesReceiver پشتیبانی میشود.
- رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صوتی بدون وقفه در حالت انتقال بار فشرده گیر میکند.
- کتابخانه رمزگشایی زیربنایی برای افزونه رمزگشای IAMF از
- نوشتار:
- VobSub: Use
STARTandSTOPSPU control commands to derive cue duration instead of always defaulting to 5 seconds (#2935).
- VobSub: Use
- فراداده:
- افزایش تعداد پیشفرض پردازنده فراداده به چهار برای پوشش دادن همه قطعههای فراداده بالقوه منتشرشده توسط انواع و نسخههای HLS (#۳۰۴۳).
- جلوه:
LottieOverlayرا به ماژول:media3-effect-lottieجدیدی منتقل کنید (که شامل تغییر نام آن ازandroidx.media3.effect.LottieOverlayبهandroidx.media3.effect.lottie.LottieOverlayنیز میشود).
- جلوه Lottie:
- Introduce a new
:media3-effect-lottiemodule which provides functionality for applying lottie effects to video frames.
- Introduce a new
- افزونه IMA:
- نسخه IMA SDK را به ۳.۳۹.۰ بهروز کنید تا به جدیدترین Ad media info API دسترسی داشته باشید.
- رفع اشکالی که در آن نوع MIME آگهی با نوع MIME ارائهشده در رویداد IMA LOADED مطابقت نداشت. اکنون این اصلاح، نوع MIME آگهی را بااستفاده از اطلاعات رسانه آگهی ارائهشده توسط IMA نگاشت میکند.
setEnableCustomTabsرا بهImaAdsLoaderوImaServerSideAdInsertionMediaSourceاضافه کنید تا کاربران بتوانند کنترل کنند که آیا نشانیهای وب کلیک آگهی بااستفاده از «برگههای سفارشی» راهاندازی شوند یا نه.ImaAdTagUriBuilderرا اضافه کنید، کلاسی که روشی جایگزین برای ساختنadTagUriارائه میدهد. این بایگانی حاوی میانای برنامهسازی کاربردیsetPreferredLinearOrientationاست. این یک میانای برنامهسازی کاربردی در آزمایش آلفا است که به شما امکان میدهد جهت دلخواه خود را برای آگهیهای خطی تنظیم کنید. اگر میخواهید به گروه آزمایش آلفا بپیوندید، لطفاً با شریک حسابتان تماس بگیرید.
- جلسه:
- رفع اشکالی که در آن آرایههای بزرگ در
MediaMetadata.artworkDataمیتوانند باعث ازکارافتادن برنامه شوند. - از نوع int برای متغیر مستقل
@Player.Commandدر میانایActionFactoryاستفاده کنید (#۲۹۳۳). - Make
MediaSessionServiceandMediaLibraryServiceaLifecycleService, allowing to attach lifecycle-aware operations to the service's lifecycle (#187). - پشتیبانی از فرمانهای تغییر میزان صدای دستگاه از
MediaControllerوMediaBrowserبرای بازپخشهای محلی متوقف شود. برنامهها نباید میزان صدای محلی دستگاه را تغییر دهند و درصورت نیاز میتوانند از میاناهای برنامهسازی کاربردیAudioManagerبرای این منظور استفاده کنند. - نمونههای
Intentقدیمی را که سرویس را بهعنوان سرویس پیشزمینهای شروع کردهاند شناسایی کنید. این کار از ایجادForegroundServiceDidNotStartInTimeExceptionتوسط سیستم جلوگیری میکند. این یک تغییر مخرب در میانای برنامهسازی کاربردی ناپایدار برای برنامههایی است کهMediaNotification.Providerسفارشی را پیادهسازی میکنند، زیرا روش الزامی جدیدی وجود دارد. - سازندههایی برای نمونههای
PendingIntentاضافه کنید تا با ابزارکهای صفحه اصلی استفاده شوند (#2933). - افزودن روشهای ایستا برای ایجاد نمونههای
Intentبرای ابزارههای صفحه اصلی مبتنی بر Compose (#۲۹۳۳). - رفع اشکالی که در آن انتقال فایل رسانهای به کنترلکنندهها گزارش نمیشد وقتی بازپخش از نمایه فایل رسانهای معینی به نمایه دیگری با همان فایل رسانهای بهدلیل ناپیوستگی «AUTO» و «SEEK» منتقل میشد (#۲۹۹۷).
- رفع مشکل مربوط به تأثیر منفی راهکار جایگزین قرار دادن دکمه میانای کاربر سیستم بر سایر سطوح میانای کاربر مانند Android Auto یا سازندگانی که به راهکار جایگزین نیاز ندارند (#3041).
- رفع مشکل عدم همگامسازی دسترسی به اشتراکها (#3056).
- رفع اشکال SysUI در میانای برنامهسازی کاربردی ۲۹ که در آن آثار هنری جلسه رسانه در اندازهای خاص میتواند باعث ازکار افتادن SysUI شود و دستگاه را مجبور به بازراهاندازی کند (#3118).
- Fix notification artwork icon scaling on Android Q (#3084).
- رفع اشکالی که در آن آرایههای بزرگ در
- میانای کاربر:
-
PlaybackSpeedControlComposable را بهmedia3-ui-composeاضافه کنید تا سرعت بازپخش را نمایش دهید و اصلاح کنید. PlaybackSpeedToggleButtonComposable را بهmedia3-ui-compose-material3اضافه کنید تا سرعت بازپخش را کنترل کنید.- Add
ProgressSliderComposable tomedia3-ui-compose-material3for displaying player progress and performing seeks using dragging and tapping (#2288). - از میانگیر بزرگ خارج از صفحه در PlayerControlView پویانمایی اجتناب کنید.
PlayerComposable را بهmedia3-ui-compose-material3اضافه کنید کهContentFrameرا با کنترلهای سفارشیسازیشدنی ترازشده با بالا، مرکز، و پایین ترکیب میکند.- پنهان کردن موقعیت بازپخش از سرویس دسترسپذیری برای جلوگیری از
بهروزرسانی مداوم اعلان وقتی
PlayerControlViewنمایان است.
-
- افزونه HLS:
- پشتیبانی از X-PLAYOUT-LIMIT با میانآگهیهای HLS (#۲۴۸۴).
- پشتیبانی از مشخصه
QUERYPARAMبا#EXT-X-DEFINE(#1854). - Optimize HLS playlist parsing by caching regular expression matchers (#3008).
- Expose ID3 (EMSG) metadata track in audio renditions (#3043).
- اگر جاریسازیهای اضافی از مکانهای مختلف دردسترس است، درصورت مواجه شدن با خطاهای بارگیری، اجازه دهید مکان به حالت قبلی برگردد (#۱۹۸۸).
- اصلاح رفتار X-SNAP برای میانآگهیهای HLS برای محاسبه صحیح موقعیت شروع و ازسرگیری (#۳۰۱۳).
- افزونه DASH:
- افزونه RTSP:
- رگرسیون در جاریسازی H.264 و H.265 که نمونههای یک واحد دسترسی را که چندین بسته RTP را دربرمیگرفت بهطور نادرست تجزیه میکرد برطرف شد. این امر منجر به مصنوعات بصری و خرابی در ویدیو شد (#۳۱۲۱).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزودن پشتیبانی از مدیر میانای کاربر MPEG-H به افزونه رمزگشای MPEG-H (#۳۰۶۶).
- افزونه Cast:
- افزودن روش
RemoteCastPlayer.Builder#setTrackSelectorکه پیادهسازی انتخاب قطعه را برای بازپخشهای «پخش محتوا» فعال میکند.
- افزودن روش
- برداشتن نمادهای منسوخشده:
- برداشتن
ExperimentalFrameExtractor. درعوض ازandroidx.media3.inspector.frame.FrameExtractorاستفاده کنید. - برداشتن
ChannelMixingMatrix.create(). درعوض ازChannelMixingMatrix.createForConstantGain()استفاده کنید. - برداشتن
androidx.media3.extractor.metadata.flac.VorbisComment. درعوض ازandroidx.media3.extractor.metadata.vorbis.VorbisCommentاستفاده کنید. - برداشتن
MediaSource.prepareSource(MediaSourceCaller, TransferListener). درعوض ازMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)استفاده کنید.
- برداشتن
1.10.0-rc03
۲۵ مارس ۲۰۲۶
از نسخه پایدار ۱.۱۰.۰ استفاده کنید.
1.10.0-rc02
۱۶ مارس ۲۰۲۶
از نسخه پایدار ۱.۱۰.۰ استفاده کنید.
1.10.0-rc01
۱۰ مارس ۲۰۲۶
از نسخه پایدار ۱.۱۰.۰ استفاده کنید.
1.10.0-beta01
۲۵ فوریه ۲۰۲۶
از نسخه پایدار ۱.۱۰.۰ استفاده کنید.
1.10.0-alpha01
۶ فوریه ۲۰۲۶
از نسخه پایدار ۱.۱۰.۰ استفاده کنید.
نسخه ۱.۹.۰
1.9.4
۱۶ مه ۲۰۲۶
نسخه ۱.۹.۴ حاوی ثبتهای زیر است.
- جلوه:
- هنگام انتقال از بافت بدون سطح،
GL_DRAW_BUFFERوGL_READ_BUFFERرا بهطور صریح تنظیم کنید.
- هنگام انتقال از بافت بدون سطح،
1.9.3
۱۶ مارس ۲۰۲۶
نسخه ۱.۹.۳ حاوی ثبتهای زیر است.
- صدا:
- رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صوتی بدون وقفه در حالت انتقال بار فشرده گیر میکند.
1.9.2
۶ فوریه ۲۰۲۶
نسخه ۱.۹.۲ شامل ثبتهای زیر است.
- ExoPlayer:
- رفع اشکالی که در آن
ProgressiveMediaSourceاطلاعات خط زمان قدیمی را به پخشکننده منتقل میکند و دورههای صفبندیشده بهطور غیرمنتظرهای حذف میشوند (#3016).
- رفع اشکالی که در آن
- جلسه:
- رفع مشکل مربوط به تأثیر منفی راهکار جایگزین قرار دادن دکمه میانای کاربر سیستم بر سایر سطوح میانای کاربر مانند Android Auto یا سازندگانی که به راهکار جایگزین نیاز ندارند (#3041).
- افزونه Cast:
- اشکال مربوط به خراب بودن انتقال از Cast به بازپخش محلی برطرف شد.
1.9.1
۲۶ ژانویه ۲۰۲۶
نسخه ۱.۹.۱ حاوی این ثبتها است.
- کتابخانه مشترک:
- پشتیبانی از رشتههای تاریخ-زمان با فقط ساعت در اختلاف منطقه زمانی (#۲۹۲۹).
- ExoPlayer:
- به زمانبندی پویا اجازه دهید تا فاصله
doSomeWorkرا فقط پساز شروع صدا کند کند تا از همگامسازی روانتر صدا/تصویر در شروع بازپخش پشتیبانی شود. - رفع اشکال در
DefaultLoadErrorHandlingPolicyکه در آنFileNotFoundExceptionو انواع استثناهای مشابه چندین بار دوباره امتحان میشدند. - رفع اشکال زمانبندی پویا که در آن زمان محاسبهشده برای
doSomeWorkبعدی بهاشتباه با زمان سپریشده از تکرار فعلیdoSomeWorkکاهش مییافت. امیدواریم با رسیدگی به این موضوع، زمان بیکاری واحد پردازش مرکزی افزایش یابد و در مصرف برق صرفهجویی شود. - رفع مشکل عدم موفقیت در برخیاز بازپخشهای فایلهای Dolby Vision هنگام تلاش برای استفاده از کدک AVC یا HEVC جایگزین.
- رفع اشکالی که در آن بار کردن پساز پایان بازپخش ادامه مییافت، وقتیکه موردی که درحال پخش بود از فهرست پخش برداشته میشد (#2873).
- از نشت نمونههای
MediaItemهنگام استفاده مکرر ازExoPlayer.replaceMediaItemروی یک مورد (#۲۹۹۳) جلوگیری کنید. - جلوگیری از خطاهای احتمالی «برنامه پاسخ نمیدهد» ناشی از انتشار اضطراری قفل بیداری (#۲۹۷۹).
- به زمانبندی پویا اجازه دهید تا فاصله
- استخراجکنندهها:
- MP3: Parse LAME ReplayGain data (#2840).
- صدا:
- پشتیبانی از
AC4Profile22و دیگر نمایههای قدیمی را بهدرستی بردارید هنگام ارزیابی پشتیبانی از رمزگشای AC-4 در سناریوهای Automotive (#2609).
- پشتیبانی از
- ویدیو:
- Discard video codecs on devices below API 30 when the content frame rate changes to avoid stuttering playback (#2941).
- نوشتار:
- VobSub: رفع مشکل برخیاز زیرنویسهای مفقودشده با مدیریت صحیح SPUهایی که یا فقط حاوی یک توالی کنترل هستند یا اطلاعات مهمی دارند که در چندین توالی کنترل تقسیم شده است (#۲۹۳۵).
- افزونه IMA:
- رفع اشکال: مشکلی که در آن نوع MIME آگهی با نوع MIME ارائهشده در رویداد IMA LOADED مطابقت نداشت اصلاح شد. اکنون این اصلاح، نوع MIME آگهی را بااستفاده از نمایه دسته آگهی و جایگاه آگهی نگاشت میکند.
- قبلاز دسترسی به نتیجه
getAdsManager()وAdEvent.getAd()، بررسی مقدار تهی را اضافه کنید.
- جلسه:
- رفع اشکالی که در آن توقف
MediaControllerمتصل به جلسه پلاتفرم باعث ازکار افتادن برنامه میشد، اگر توقف درطول بازپخش آگهی اتفاق میافتاد (#۲۹۴۸). - Add additional verifications on
extrasBundleinstances in various classes to guard against malformedBundleinstances sent from other processes. - رفع مشکل عدم وجود فرمانهای
COMMAND_SEEK_NEXTیاCOMMAND_SEEK_BACKکه میتواند باعث ایجاد وقفه در اعلان رسانه سیستم شود (#۲۹۷۶). - Move bitmap scaling for notification icon off the main thread (#2829).
- Fix bug where author, writer and composer were not used as a fallback
when converting from legacy
MediaMetadataCompatandMediaDescriptionCompat(#3018).
- رفع اشکالی که در آن توقف
- بارگیریها:
- رفع حلقههای بینهایت احتمالی هنگام رسیدگی به
PriorityTooLowExceptionتوسطSegmentDownloader(برای DASH، HLS، و SmoothStreaming). لغوهای سفارشیSegmentDownloaderبااستفاده از روش محافظتشدهexecuteباید تکلیف خود را درSupplierارائه دهند تا بتوان آن را بازآفرینی کرد (#۲۹۳۱).
- رفع حلقههای بینهایت احتمالی هنگام رسیدگی به
- افزونه HLS:
- سند JSON فهرست دارایی خام را به
Listener.onAssetListLoadCompletedcallback ارسال کنید. این یک تغییر اساسی در یک API ناپایدار است که برنامههایی را که این callback را پیادهسازی میکنند ملزم میکند تا یک آرگومان اضافی از نوعJSONObjectاضافه کنند (#2950).
- سند JSON فهرست دارایی خام را به
- افزونه RTSP:
- مدیریت صحیح بستههای RTP با مُهرهای زمان که بهصورت چرخهای تکرار میشوند (#2930).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- رفع
NullPointerExceptionاحتمالی که ممکن است هنگام جستجو قبلاز پردازش اولین فریم ویدیو رخ دهد (#2965).
- رفع
- افزونه Cast:
- رفع اشکالی که مانع از بهروزرسانی صحیح خط زمان
RemoteCastPlayerهنگام جایگزینی فهرست پخش میشود.
- رفع اشکالی که مانع از بهروزرسانی صحیح خط زمان
۱.۹.۰
۱۷ دسامبر ۲۰۲۵
- کتابخانه مشترک:
- بهروزرسانی
minSdkبه23مطابق با سایر کتابخانههای AndroidX. PlayerTransferStateرا اضافه کنید که انتقال وضعیت بازپخش را در نمونههایPlayerتسهیل میکند.- روشهای
void mute()وvoid unmute()را به Player اضافه کنید که میزان صدای Player را قبل و بعداز تنظیم آن روی صفر حفظ و درنتیجه بازیابی میکند. - کلاسهای کاربردی
WakeLockManager،WifiLockManager،AudioFocusManager،AudioBecomingNoisyManagerوStuckPlayerDetectorکه قبلاً توسطExoPlayerبهطور داخلی استفاده میشدند منتشر شدند تا امکان استفاده مجدد برای پخشکنندههای دیگر فراهم شود (#۱۸۹۳). - رفع مشکل مدیریت شنونده
ForwardingPlayerوقتی پخشکننده نماینده زیربنایی از برابری مرجع برای مقایسه نمونههای شنونده استفاده میکند (#2675). - یک تابع افزونه تعلیق
Player.listenToدر کتابخانهmedia3-common-ktxاضافه کنید کهPlayer.Eventsخاصی را که باید روی آن اقدام شود مشخص میکند. - رفع خرابی در
BasePlayer.getBufferedPercentageناشی از سرریز عدد صحیح وقتی موقعیت میانگیرشده گزارششده بهطور غیرقابلباوری بسیار بزرگتر از مدت گزارششده است (#۲۷۵۰). - رفع مشکل تشخیص خودکار نوع قطعه
TrackGroupبا نادیده نگرفتن نوع MIME نمونه سفارشی و استفاده از نوع قطعه احتمالاً اشتباه از نوع MIME محفظه (#۲۸۶۰).
- بهروزرسانی
- ExoPlayer:
- تشخیص پخشکننده گیرکرده را اضافه کنید که اگر پخشکننده گیر کرده باشد، خطای پخشکننده
StuckPlayerExceptionرا راهاندازی میکند. این اتفاق در موارد زیر رخ میدهد، که درصورت نیاز، هر زماناتمام پیشفرض را میتوان درExoPlayer.Builderپیکربندی کرد:- پساز ۱۰ دقیقه
STATE_BUFFERINGهنگام تلاش برای پخش و بدون پیشرفت میانگیری. - پساز ۱۰ ثانیه
STATE_READYدرحین تلاش برای پخش و بدون پیشرفت بازپخش. - پساز ۱ دقیقه
STATE_READYفراتر از مدت اعلامشده بدون رسیدن به پایان مورد. - پساز ۱۰ دقیقه با دلیل توقف بازپخش هنگام تلاش برای پخش.
- پساز ۱۰ دقیقه
- Enable wake lock handling by default to fix issues with buffering during
background playback. این معادل تنظیم
ExoPlayer.Builder.setWakeModeرویC.WAKE_MODE_LOCALاست. - منطق گوش دادن را اضافه کنید تا وقتی تغییری به
Contextکه در ابتدا بهExoPlayer.Builderارسال شده است گزارش میشود، شناسه دستگاه مجازی بهطور خودکار بهروز شود. ExoPlayer.setVirtualDeviceIdرا اضافه کنید تا دستگاه مجازی را بهطور دستی بهروز کنید شناسه بهدستآمده ازContextبهExoPlayer.Builderمنتقل شد.- مطمئن شوید که پردازنده گرافیکی دادههای مورد بعدی فهرست پخش را بیشاز ۱۰ ثانیه قبلاز پایان مورد فعلی مصرف نمیکند.
-
setSeekBackIncrementMs،setSeekForwardIncrementMs، وsetMaxSeekToPreviousPositionMsرا بهExoPlayerاضافه کنید تا این تنظیمات پساز ساخت بهروز شود (#۲۷۳۶). - افزودن عملکرد پیشنهانسازی در
DefaultPreloadManager. اکنون برنامهها میتوانندDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)یاDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)را ازطریقTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)برگردانند تا نشان دهند که فایل رسانهای باید پیشنهانسازی شود. - از عملکرد پیشنهانسازی
DefaultPreloadManagerدر برنامه نمایشی کوتاه استفاده کنید. - تنظیمکنندههای
DefaultLoadControl.Builderرا برای بازپخش محلی اضافه کنید و مقادیر پیشفرضDefaultLoadControlرا تنظیم کنید تا با طیف گستردهای از فایلهای محلی بهخوبی کار کند. - رفع اشکالی که در آن تنظیم فهرست پخش خالی میتواند پخشکننده را در
STATE_READYیاSTATE_BUFFERINGرها کند. - بهبود میاناهای برنامهسازی کاربردی مدیر پیشبارگیری:
addMediaItems(List<MediaItem>, List<T>)وaddMediaSources(List<MediaSource>, List<T>)را اضافه کنید که موارد رسانهای یا منابع رسانهای را بهصورت دستهای اضافه میکنند و بهطور خودکارinvalidate()را پساز آن فراخوانی میکنند.removeMediaItems((List<MediaItem>)وremoveMediaSources(List<MediaSource>)را اضافه کنید که فایلهای رسانهای یا منابع رسانهای را بهصورت دستهای برمیدارند و مطمئن شوید که مدیر پیشبارگیری پساز برداشتن، پیشبارگیری هیچکدام از آنها را شروع یا ادامه نمیدهد.- به
DefaultPreloadManager.setCurrentPlayingIndex(int)اجازه دهید خودش را بهطور خودکار باطل کند. برنامهها دیگر نیازی به فراخوانی صریحinvalidate()پساز بهروزرسانی نمایه پخش فعلی ندارند.
- قابلیت رد شدن از بازنشانی قاب کلیدی برای جستجوهای روبهجلو در همان گروه تصاویر در حالت پیمایش سریع اضافه شد.
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)را اضافه کنید تا برنامهها بتوانند مقدار بایتهای میانگیر هدف را برای پخشکنندهای باplayerNameمشخصشده تنظیم کنند. اکنونDefaultLoadControlمیتواند تصمیمات هر پخشکننده را بهطور جداگانه براساس بایتهای اختصاصیافته و بایتهای میانگیر هدف اتخاذ کند.SkipInfoرا بهAdPlaybackState.AdGroupاضافه کنید تا اطلاعات رد کردن را برای هر آگهی در گروه آگهی حمل کند.- رفع اشکالی که در آن فراخوانی
removeMediaItems(List)درطول پخش پسویدیو باعث ازکارافتادن میشد (#۲۷۴۶). - رفع برخی لکنتها در بازپخش فهرست پخش که در آن قابها بهاشتباه همیشه بهعنوان آخرین نمونه تنظیم و رندر میشدند.
- Enable retry path if player fails to generate audio session ID (#2382, #2678).
- پشتیبانی برای کنترل کل بایتهای میانگیر برای منابع در
DefaultPreloadManagerاضافه کنید تا از رشد خودسرانه کل بایتهای میانگیر برای پیشبارگیری جلوگیری شود. برای استفاده از منطق کنترل پیشفرض، برنامهها میتوانند بایتهای میانگیر هدف را برای پیشبارگیری ازطریقDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)برایplayerNameازPlayerId.Preload.name(«پیشبارگیری») تنظیم کنند وDefaultLoadControlایجادشده را ازطریقDefaultPreloadManager.Builder.setLoadControl(LoadControl)تزریق کنند. - افزودن
cloneAndSet(int, int)بهShuffleOrderبا پیادهسازی پیشفرض (#2834). - افزودن افست ازسرگیری محتوا هنگام رد شدن از پخش آگهی پساز تنظیم جستجو یا انتقال خودکار (#۲۴۸۴).
- افزودن میانای برنامهسازی کاربردی برای تنظیم و مشاهده پارامترهای کدک برای قطعههای صوتی و تصویری.
این ویژگی برای پردازنده گرافیکی مبتنی بر
MediaCodecپیادهسازی شده است و به میانای برنامهسازی کاربردی ۲۹ یا بالاتر نیاز دارد.- برای اعمال پارامترها، از
ExoPlayer.setAudioCodecParameters()وExoPlayer.setVideoCodecParameters()استفاده کنید. - از
ExoPlayer.addAudioCodecParametersChangeListener()وExoPlayer.addVideoCodecParametersChangeListener()برای گوش دادن به تغییرات استفاده کنید. مشاهده کلیدهای مختص ارائهدهنده به میانای برنامهسازی کاربردی نسخه ۳۱ یا بالاتر نیاز دارد.
- برای اعمال پارامترها، از
- رفع
IllegalStateExceptionناشی از تنظیم منبع رسانه خالی پساز جستجوی موقعیت غیرصفر و سپس آمادهسازی پخشکننده با منبع رسانه غیرخالی. - اشکال مربوط به جستجو در فایلهای رسانهای دیگر درحالت پاکسازی که میتوانست باعث
IllegalStateExceptionشود برطرف شد. - رفع
NullPointerExceptionاحتمالی درDefaultPlaybackSessionManager(#۲۸۸۵). - بهبود عملکرد جستجو را برای ویدیوهای واجدشرایط فعال کنید.
- استفاده از رمزگشایی ناهمگام در MediaCodec در API 36+ که در آن مشکلات وقفه زمانی با این API پلاتفرم برطرف شده است، دوباره فعال شد (#1641).
- مقدار پیشفرض
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsبه ۱۵ میلیثانیه تغییر میکند و حذف کارآمدتر فریمهای ویدیو قبلاز رمزگشایی برای ویدیوهای واجدشرایط فعال میشود. - حداکثر حد حافظه را به محاسبه خودکار حافظه در
DefaultLoadControlاضافه کنید. This should only take effect if an excessive number of tracks get selected (#2860). - رفع اشکالی که در آن، اگر در حالت فهرست پخش یا تکرار پخش میشد، جستجو در حالت پاکسازی نزدیک به پایان میتوانست باعث جستجو برای مورد رسانهای بعدی شود.
- تشخیص پخشکننده گیرکرده را اضافه کنید که اگر پخشکننده گیر کرده باشد، خطای پخشکننده
- CompositionPlayer:
CompositionPlayerرا تحت حاشیهنویسی جدید@ExperimentalApiمنتشر کنید تا نشان دهید برای آزمایش دردسترس است، اما هنوز درحال توسعه است. برخیاز میاناهای برنامهسازی کاربردی احتمالاً در نسخههای پخش آتی بهطور قابلتوجهی تغییر خواهند کرد و مشکلات و محدودیتهای شناختهشدهای در برخیاز موارد استفاده وجود دارد (برخیاز آنها مستند نشدهاند).- افزودن پشتیبانی برای
COMMAND_SET_AUDIO_ATTRIBUTESو مدیریت تمرکز صوتی درCompositionPlayer. - افزودن پشتیبانی برای تغییر سرعت در توالیهای ثانویه در
CompositionPlayer. - افزودن پشتیبانی برای
EditedMediaItem.removeVideo.
- ترانسفورماتور:
- استفاده از
InAppMp4Muxerبهعنوان ترکیبکننده پیشفرض. -
EditedMediaItem.Builder#setSpeed()را اضافه کنید وEffects#createExperimentalSpeedChangingEffects()را منسوخ کنید. forceAudioTrackوforceVideoTrackرا باtrackTypesدرEditedMediaItemSequenceجایگزین کنید.
- استفاده از
- انتخاب قطعه:
TrackSelectionParameters.selectTextByDefaultرا اضافه کنید تا انتخاب هر قطعه نوشتاری را بدون مشخص کردن اولویتهای خاصتر دیگر ترجیح دهید.-
preferredVideoLabels،preferredAudioLabelsوpreferredTextLabelsرا درTrackSelectionParametersاضافه کنید تا اولویت قطعههایی با برچسب خاص را مشخص کنید، برای مثال قطعههایی که از برچسبهای HLS NAME خوانده میشوند (#۱۶۶۶).
- استخراجکنندهها:
- FLAC: تشخیص سرصفحه را سختگیرانهتر کنید تا احتمال پیدا کردن سرصفحههای جعلی در دادههای FLAC کدگذاریشده کاهش یابد، که منجر به خطاهای کدگشایی میشود (#۵۵۸).
- MP3: اجازه دادن به وجود فاصله بین (و قبلاز) برچسبهای ID3 در ابتدای فایلهای MP3 (#811، #5718).
- MP3: افزایش حد بوکشیدن به ۱۲۸ کیلوبایت برای مطابقت با حد جستجوی موجود برای بایت همگامسازی (#۲۷۱۳).
- MP3:
FLAG_ENABLE_INDEX_SEEKINGرا تغییر دهید تا ترجیحاً اطلاعات را از سرصفحههای فراداده (مانند Xing و VBRI) درصورت دردسترس بودن جستجو کند و اگر اطلاعات جستجوی دیگری وجود نداشت، به جستجوی مبتنی بر نمایه برگردد. این کار عملکرد فایلهای دارای فراداده جستجو را بهبود میبخشد (#2839). - MP3: Change
Mp3Extractorto default to a constant bitrate (CBR) assumption when no seeking metadata (e.g., Xing, VBRI) is found, even whenFLAG_ENABLE_INDEX_SEEKINGis set. این امر براساس سابقه مشخصات MP3 است که در آن CBR استاندارد بود و VBR به سرصفحههای صریح نیاز دارد. This improves immediate seekability for files without metadata at the cost of potential accuracy for VBR files lacking headers. اکنون اگر فرض CBR قابلجستجو نباشد (مثلاً برای جاریسازیهای با طول نامشخص)، از جستجوی نمایه بهعنوان جایگزین استفاده میشود (#۲۸۴۸). - MP4: Disambiguate between
audio/mpeg(MP3),audio/mpeg-L1andaudio/mpeg-L2MIME types by peeking the layer value of the first sample before emitting a track format from the extractor (#2683). - MP4: Improve sniffing efficiency of very large files by assuming a
stblbox larger than 1MB implies the file must be non-fragmented (#2650). - MP4: Add support for
©mvn(movement name) and©mvi(movement index) metadata, these are now emitted asTextInformationFrameobjects inFormat.metadatawith IDs ofMVNMandMVINrespectively (#2754). - MP4: نادیده گرفتن قطعههای فاقد کادر
stsd(بهجای عدم تجزیه کل فایل). - Matroska: افزودن پشتیبانی برای تشخیص DTS-HD (#۶۲۲۵).
- رفع مشکلی در
MatroskaExtractorکه در آن جستجو برای فایلهای دارای چند قطعه ممکن بود نادرست باشد. اکنون نقاط نشانه بهدرستی با قطعههای مربوطه مرتبط شدهاند که منجر به جستجوی دقیقتر میشود. - MPEG-TS: رفع
IllegalArgumentExceptionازReorderingBufferQueueناشی از بستههای PES بدون مُهر زمان (#2764). - افزودن پشتیبانی برای استخراج «عکسهای حرکتی» HEIC.
HeifExtractorاکنون میتواند فایلهای HEIC حاوی قطعههای صوتی و تصویری جاسازیشده را تجزیه کند.
- بازرس:
- ماژول جدید
:media3-inspectorرا معرفی کردیم تا بهعنوان خانه اختصاصی ابزارهای بازرسی رسانه عمل کند. این واحد اکنون دارای یکandroidx.media3.inspector.MetadataRetrieverجدید است که یک میانای برنامهسازی کاربردی یکپارچه برای استخراج فراداده و قاب ارائه میدهد.androidx.media3.exoplayer.MetadataRetrieverموجود اکنون بهنفع این نسخه جدید منسوخ شده است. androidx.media3.inspector.FrameExtractor، میانای برنامهسازی کاربردی عمومی جدیدی برای استخراج قاب، معرفی شد. این کلاسAutoCloseableروشی برای استخراج فریمها با پشتیبانی از ویدیو HDR، جلوههای ویدیویی، و انتخاب رمزگشای سفارشی ارائه میدهد. باید ازطریقBuilderآن برایMediaItemخاصی ایجاد شود.- FrameExtractor: برای استخراج قاب ریزعکس نماینده از فایل رسانه بدون نیاز به مُهر زمان خاص،
getThumbnail()را اضافه کنید. androidx.media3.inspector.MediaExtractorCompatرا اضافه کنید، جایگزینی برایandroid.media.MediaExtractorپلاتفرم که راهی برای استخراج نمونههای رسانهای خام و کدگذاریشده از یک فایل رسانهای فراهم میکند.androidx.media3.exoplayer.MediaExtractorCompatموجود اکنون بهنفع این کلاس جدید منسوخ شده است.
- ماژول جدید
- صدا:
- نمونههای
AudioProcessorرا از جستجو مطلع کنید. - اجازه تزریق میانای جدید
AudioOutputProviderبهDefaultAudioSink.Builderبرای پشتیبانی از مسیرهای خروجی صوتی سفارشی. پیشفرضAudioTrackAudioOutputProviderاست. - Handle seeks in
GainProcessor. - استفاده از قابلیتهای سطح و نمایه رمزگشای AC-4 در ارزیابی پشتیبانی از قالب قطعه (#۲۵۸۰).
- از تأخیرهای احتمالی ناشی از رسیدگی به فراخوانهای برگشتی تغییر مسیریابی در ابتدای بازپخش (#2646) جلوگیری کنید.
- Allow codec reuse for EAC3, EAC3-JOC and AC-4 formats (#1346).
- پشتیبانی از نمونههای PCM شناور در
Sonicاضافه شد. - پشتیبانی از نمونههای PCM ۱۶ بیتی در
ToFloatPcmAudioProcessorاضافه شد.
- نمونههای
- ویدیو:
- غیرفعال کردن استفاده مجدد از کدک برای محتوای Dolby-Vision با نمایههای مختلف.
- فعال کردن مجدد راهحل برای نقاط عملکردی که بهاشتباه برای کدکهای امن گزارش شدهاند (#2856).
- نوشتار:
- رفع مشکل تجزیه زیرنویسهای CEA-6/708 در محتوای Dolby Vision (#2775).
- تصویر:
- رفع مشکل ScrubbingMode که در آن پخشکننده هنگام پیمایش سریع قطعه تصویر کوچک DASH گیر میکند (#۲۸۱۵).
- مدیریت حقوق دیجیتال:
- نوع پاسخ روشهای
MediaDrmCallbackرا ازbyte[]به نوع جدیدMediaDrmCallback.Responseتغییر دهید تا امکان برگرداندن اطلاعات اختیاری اضافی فراهم شود. این یک تغییر منبع شکننده است، اما شکستگیها را میتوان بهراحتی با پیچیدن مقدار بازگشتی قبلیbyte[]باnew Responseقبلاز بازگشت حل کرد. - اطلاعات درخواست کلید مانند نشانی وب و تأخیر را به
AnalyticsListener.onDrmKeysLoaded(#1001) اضافه کنید. - دادههای درخواست تدارک را از پارامتر نشانی وب به بدنه POST منتقل کنید.
- نوع پاسخ روشهای
- جلوه:
Presentation.copyWithUnsetSideRoundedToرا اضافه کنید تا طرف خروجی تنظیمنشده را گرد کنید وقتیPresentationبا یک طول طرف ایجاد میشود.
- Muxers:
- افزودن
MediaMuxerCompat، جایگزینی برای چارچوبMediaMuxer. - برای مجاز کردن ایجاد «عکس حرکتی»،
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()را اضافه کنید. WebmMuxerرا اضافه کنید تا امکان ادغام کردن جاریسازیهای رسانهOPUS،VORBIS،VP8، وVP9در قالب فایلwebmفراهم شود.
- افزودن
- افزونه IMA:
- برداشتن قوانین proguard سفارشی، تا برنامهها بتوانند درعوض از قوانین منتشرشده در بایگانی IMA Android استفاده کنند.
-
ImaServerSideAdInsertionUriBuilder.setNetworkCode، میانای برنامهسازی کاربردی جدیدی برای تنظیم کد شبکه Google Ad Manager برای IMA SDK، اضافه شد تا شناسههای آگهیها را طبق تنظیمات Google Ad Manager مدیریت کند. کدهای شبکه اختیاری هستند اما برای درخواستهای جاریسازی «خدمات کامل» توصیه میشوند. برای پیدا کردن کد شبکه، این مقاله را ببینید. - Bump IMA dependency to 3.37.0 which requires enabling core library desugaring. این ویژگی باید توسط برنامههای وابسته نیز فعال شود. یادداشتهای پیکربندی IMA را ببینید. * Support IMA DAI custom UI options in SSAI URI builder. گزینههای میانای کاربر سفارشی برای درج آگهی سمت سرور شامل پشتیبانی از پرداز «قابلردشدن» و «درباره این آگهی» است. این ویژگی درحالحاضر برای ناشران منتخب در فهرست مجاز دردسترس است. این تغییر همچنین نسخه IMA SDK را به ۳.۳۸.۰ ارتقا میدهد (یادداشتهای انتشار) تا به میانای برنامهسازی کاربردی گزینههای میانای کاربر سفارشی دسترسی پیدا کند.
- رفع مشکلی که در آن خطای آمادهسازی محتوا برای محتوای بعداز آگهی بهاشتباه بهعنوان خطای بازپخش آگهی گزارش میشد (#۲۶۵۶).
- جلسه:
- پارامتر جدیدی به
MediaSession.Callback.onPlaybackResumptionاضافه کنید تا نشان دهد تماس فقط برای جمعآوری اطلاعات است یا برای شروع بازپخش (#۱۷۶۴). MediaSession.ControllerInfo.isTrustedرا بهروز کنید تا کنترلکنندههای برنامه خود را نیز بهعنوان مورداعتماد اعلام کند (#۲۵۴۲).MediaSessionService.triggerNotificationUpdateرا اضافه کنید تا بهروزرسانی اعلان را بهصورت دستی راهاندازی کنید (#۱۸۳۳).ProgressListenerرا به روشهای فرمان سفارشی اضافه کنید.- مقدار پیشفرض برای
MediaLibrarySession.Builder.setLibraryErrorReplicationModeرا به غیر مهلک تغییر دهید. - پارامتر
Contextرا بهMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#۲۶۲۵) اضافه کنید. - شناسه کنترل میزان صدا را بهجای واکشی ازطریق binder، از پلاتفرم
PlaybackInfoبخوانید. این کار تضمین میکند که نوع بازپخش و شناسه کنترل میزان صدا بهصورت اتمی خوانده میشوند و با یکدیگر مطابقت دارند. - رفع اشکال مربوط به فیلتر شدن رویدادهای کلید
ACTION_UPقبلاز ارسال آنها به callback برای رسیدگی سفارشی. این امر باعث برابری با آنچه media1 انجام داد و پلاتفرم انجام میدهد (#2637) میشود. - رفع اشکالی که در آن
getCurrentTimeline()توسطPlayerWrapperفراخوانی میشد، حتی زمانی که فرمان دردسترس نبود (#۲۶۶۵). - رفع اشکالی که در آن پیامی در صف پیام لوپر اصلی باقی میماند و باعث نشت حافظه پساز پایان سرویس میشد (#۲۶۹۲).
- هنگام اتصال به برنامه جلسه قدیمی با
MediaBrowser، فرمانهای سفارشی فقط درصورتی به جلسه ارسال میشوند که کنش سفارشی بهعنوان کنش سفارشی درPlaybackStateCompatجلسه قدیمی تبلیغ شود. همه کنشهای سفارشی دیگر به سرویس ارسال میشود. onAudioSessionIdChangedپیادهسازی شد تا وقتی شناسه جلسه صوتی توسط جلسه تنظیم میشود، به کنترلکنندههای رسانه اطلاع داده شود (#۲۴۴).- رفع اشکالی که باعث میشد
KEYCODE_HEADSETHOOKپخشکننده را پساز دریافت رویداد کلید رسانهIntentدرonStartCommand()راهاندازی نکند. این مشکل با مدیریت KEYCODE_HEADSETHOOK درست مثلKEYCODE_MEDIA_PLAY_PAUSEبرطرف شده است (#2816). - اشکالی که در آن اندازه Surface بین جلسه و کنترلکننده منتقل نمیشد و درنتیجه جلوههای ویدیویی در جلسه نمایشی اعمال نمیشد برطرف شد. اگر از کنترلکننده استفاده میکنید، این ممکن است یک تغییر
مخرب باشد اگر پخشکننده شما نتواند تماس
setVideoSurfaceHolderرا مدیریت کند. - انتشار مقادیر فراداده غیر
StringCharSequenceمانند رشتههای دارای سبک span (#۲۸۵۳) اصلاح شد. CommandButton.executeActionرا اضافه کنید تا کنترلکنندهها بتوانند راحتتر کنش موردنظر را راهاندازی کنند. همچنین اجازه میدهد پارامترهایی برای برخیاز فرمانهای پخشکننده و جلسه مشخص شود تا کنش راهانداز تعریف شود.- سازگاری با نسخه قدیمی را برای نمونههای
CommandButtonکه ازPlayer.CommandیاSessionCommandغیرسفارشی برای تعریف کنش خود استفاده میکنند اضافه کنید. این موارد اکنون بهدرستی در جلسههای رسانه پلاتفرم نشان داده میشوند، برای مثال برای «رابط کاربری سیستم» یا Android Auto. - رفع مشکلی که در آن هنگام اتصال
MediaControllerبه جلسه رسانه پلاتفرم، همانBitmapچندین بار فشرده میشود.
- پارامتر جدیدی به
- میانای کاربر:
- کلاس
ProgressStateWithTickIntervalوrememberProgressStateWithTickIntervalComposable مربوطه را بهmedia3-ui-composeماژول اضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش موقعیت و مدت فعلی بهصورت نوشتاری استفاده میشود. MuteButtonStateرا بهui-composeاضافه کنید که بیصدا کردن میزان صدایPlayerرا مدیریت میکند. این نگهدارنده حالت درdemo-composeبرای نمایش دکمه مبدل بیصدا/ باصدا کردن استفاده میشود.- کلاسهای
ProgressStateWithTickCountوrememberProgressStateWithTickCountComposable مربوطه را به مدولmedia3-ui-composeاضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش پیشرفت بهصورت نوار پیشرفت افقی فقط خواندنی استفاده میشود. - افزودن
ContentFrameComposable بهmedia3-ui-composeکه مدیریتPlayerSurfaceرا با تغییر اندازه نسبت ابعادی و پوشاندن با شاتر ترکیب میکند. - Work around a known API 34 platform bug causing stretched/cropped videos
when using
SurfaceViewinside a ComposeAndroidViewand hence affectingContentFrameandPlayerSurfaceComposables withSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - یک واحد
media3-ui-compose-material3جدید ایجاد کنید و «ترکیبشدنیهای» با زمینه Material3 (PlayPauseButton، NextButton، PreviousButton، SeekBackButton، SeekForwardButton، RepeatButton، ShuffleButton، MuteButton) را به آن اضافه کنید. - افزودن
TimeTextقابلترکیب بهmedia3-ui-compose-material3برای نمایش پیشرفت پخشکننده بهصورت متنی. میتوان آن را برای نمایش موقعیت فعلی، مدت، یا زمان باقیمانده پیکربندی کرد. - پشتیبانی از قرار دادن دکمه مسیر رسانه در
PlayerViewرا اضافه کنید. - از
BidiFormatterبرای نمایش صحیح علائم نگارشی در زیرنویسهای متنی راستبهچپ (RTL) استفاده کنید (#11214).
- کلاس
- افزونه HLS:
- مشخصههای رد کردن آگهی میانویدیویی HLS را تجزیه کنید.
- ویژگیهای کنترل رد شدن نقشه از فهرست پخش HLS و سند فهرست دارایی را به
AdPlaybackStateبرای دسترسی عمومی نگاشت کنید. - رفع اشکالی که در آن زمان شروع فهرست پخش هنگام برداشته شدن برچسب EXT-X-PROGRAM-START-DATE که زمان شروع را تعریف میکند از فهرست پخش (#2760) حذف میشد.
- Use binary search to find the segment index of a given position in the playlist (#2826).
HlsInterstitialsAdsLoader.skipCurrentAd()وskipCurrentAdGroup()و روشهای مربوطه را برای رد شدن از آگهیها و گروههای آگهی براساس نمایه اضافه کنید.-
HlsInterstitialsAdsLoader.Listener.onAdStartedرا برای گزارش شروع دوره آگهی اضافه کنید (#۲۸۵۹). - پذیرفتن فاصله بهعنوان جداکننده تاریخ/زمان در رشتههای تاریخ-زمان ISO 8601.
- Properly handle fetching the next chunk for an
HlsMediaPlaylistwith no segments (#2821). - از موقعیت شروع پیشفرض برای پیشپخشها با جاریسازیهای زنده استفاده کنید.
- افزونه DASH:
- رفع
UnsupportedOperationExceptionهنگام پخش جاریسازیهای DASH با مانیفست URI غیرسلسلهمراتبیdata:(#۲۶۸۸). -
LiveConfigurationرا به مقداری کهMediaItemازDashMediaSourceهنگام انتشار ارائه کرده است و زمانی که فایل رسانهای توسط کاربر بهروزرسانی میشود (#۲۶۰۶) بازنشانی کنید. - از خرابیهای ناشی از بهروزرسانیهای نامعتبر مانیفست که بهعنوان خطاهای پخشکننده گزارش نشدهاند جلوگیری کنید (#۲۸۰۵).
- رفع
- افزونه RTSP:
- رسیدگی به خطای بستههای RTP مفقودشده هنگام پردازش واحدهای NAL تکهتکهشده برای H264 و H265 (#۲۶۱۳).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزونه AV1: رمزگشای نرمافزاری AV1 اکنون از کتابخانه با عملکرد بالای
dav1dاستفاده میکند و جایگزین پیادهسازی قبلیlibgav1شده است تا سرعت رمزگشایی بهبود یابد. - افزونه FFmpeg: رفع مشکلی که مانع از پخش برخیاز فایلهای FLAC میشد با اطمینان از اینکه بلوک
STREAMINFOبهدرستی تجزیه شده و به رمزگشا ارسال میشود (#۲۸۸۷).
- افزونه AV1: رمزگشای نرمافزاری AV1 اکنون از کتابخانه با عملکرد بالای
- افزونه Cast:
CastPlayer.Builderرا اضافه کنید کهCastPlayerرا قادر میسازد هم بازپخش محلی و هم بازپخش «ارسال محتوا» را انجام دهد. برای حفظ رفتار قدیمیCastPlayerکه فقط از بازپخش Cast پشتیبانی میکند، میتوانید ازRemoteCastPlayerاستفاده کنید. سازندههایCastPlayerازقبل موجود رفتار قدیمی خود را حفظ میکنند، اما منسوخ شدهاند و بهجای آنها باید از سازندههایCastPlayerیاRemoteCastPlayerاستفاده شود.- Stop enforcing a non-null mime type in
DefaultMediaItemConverter. - از
MediaItem.mediaMetadata.mediaTypeبرای استنباط Cast MEDIA_TYPE برای استفاده درDefaultCastOptionsProvider#toMediaQueueItem(درصورت دردسترس بودن) استفاده کنید. - انتقال از راه دور به محلی را در
DefaultCastOptionsProviderفعال کنید. - پشتیبانی از Cast را در نسخه نمایشی «جلسه» اضافه کنید.
- افزودن پشتیبانی برای نمایش دکمه مسیر رسانه در «میانای کاربر Composable».
- پشتیبانی برای نمایش دکمه مسیر رسانه در منو نوار اقدام را اضافه کنید.
- پشتیبانی برای نمایش دکمه مسیر رسانه بهعنوان میانای کاربر «نمای» اضافه کنید.
- ابزارهای آزمایش:
- Add maximum time diff for the auto-advancing behavior of
FakeClock. بهطور پیشفرض روی ۱ ثانیه تنظیم شده است، اما ازطریقFakeClock.Builderقابلپیکربندی است. - حداکثر تفاوت زمانی بین پیامها را برای
RobolectricUtil.runMainLooperUntil(وrunLooperUntil) اضافه کنید. بهطور پیشفرض ۱ ثانیه است، اما ازطریق سربارهای جدید این روشها قابلپیکربندی است. CapturingRenderersFactoryرا ازtest-utilsبهtest-utils-robolectricمنتقل کنید.
- Add maximum time diff for the auto-advancing behavior of
- برداشتن نمادهای منسوخشده:
- Remove deprecated
DefaultPreloadManagerconstructor. درعوض ازDefaultPreloadManager.Builderاستفاده کنید. - سازندههای
EditedMediaItemSequenceمنسوخشده برداشته شد. درعوض ازEditedMediaItemSequence.Builderاستفاده کنید. - برداشتن
BitmapFactoryImageDecoder.BitmapDecoder. درعوض ازExternallyLoadedImageDecoderاستفاده کنید. - برداشتن
ShadowMediaCodecConfig.forAllSupportedMimeTypes()منسوخشده. درعوض ازShadowMediaCodecConfig.withAllDefaultSupportedCodecs()استفاده کنید. - برداشتن منسوخشده
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(). درعوض ازShadowMediaCodecConfig.withNoDefaultSupportedCodecs()استفاده کنید.
- Remove deprecated
1.9.0-rc01
۱ دسامبر ۲۰۲۵
از نسخه پایدار ۱.۹.۰ استفاده کنید.
1.9.0-beta01
۲۰ نوامبر ۲۰۲۵
از نسخه پایدار ۱.۹.۰ استفاده کنید.
1.9.0-alpha01
۲۲ اکتبر ۲۰۲۵
از نسخه پایدار ۱.۹.۰ استفاده کنید.
نسخه ۱.۸.۰
۱.۸.۱
۲۱ مه ۲۰۲۶
نسخه ۱.۸.۱ حاوی ثبتهای زیر است.
- جلوه:
- هنگام انتقال از بافت بدون سطح،
GL_DRAW_BUFFERوGL_READ_BUFFERرا بهطور صریح تنظیم کنید.
- هنگام انتقال از بافت بدون سطح،
نسخه ۱.۸.۰
۳۰ ژوئیه ۲۰۲۵
نسخه ۱.۸.۰ حاوی این ثبتها است.
- کتابخانه مشترک:
- پشتیبانی از جایگزینی پخشکننده در
ForwardingSimpleBasePlayerرا اضافه کنید.
- پشتیبانی از جایگزینی پخشکننده در
- ExoPlayer:
- افزودن گیرنده برای حالت پخش درهم به میانای
ExoPlayer(#۲۵۲۲). - More clearly throw an exception if
DefaultAudioSinkis accessed from multiple threads. اگر این اتفاق بهدلیل فراخوانیRendererCapabilities.getFormatSupportخارج از پخشکننده رخ دهد، مطمئن شوید که این روش را در همان رشتهای که رشته بازپخش ExoPlayer است فراخوانی کنید یا از نمونهای متفاوت از نمونهای که برای بازپخش استفاده میشود استفاده کنید (#1191). - رفع اشکالی که در آن قالبهای صوتی غیر استریو در تلویزیونها ممکن است توسط
DefaultTrackSelectorبهعنوان پشتیبانینشده علامتگذاری شوند. - مطمئن شوید که آخرین قاب هنگام استفاده از پرچم
DECODE_ONLYMediaCodec (که بهطور پیشفرض در حالت پاکسازی فعال است) بهدرستی پرداز شده است. - پشتیبانی از استفاده از شناسه دستگاه مجازی از
Contextمنتقلشده بهExoPlayer.Builderرا اضافه کنید. - زمانبندی پویا بهطور پیشفرض در حالت پاکسازی فعال میشود.
- هنگام جستجو تا انتهای یک مورد، از بارگیری مجدد غیرضروری منبع خودداری کنید.
- بهطور پیشفرض از
MediaCodec.BUFFER_FLAG_DECODE_ONLYدر حالت پاکسازی استفاده کنید. - وقتی
PreloadMediaSourceتوسطExoPlayerبا رشته بازپخش متفاوت از رشته پیشبارگیری (#۲۴۹۵) پخش میشود،IllegalStateExceptionرا پرتاب کنید. - افزودن
cloneAndMoveبهShuffleModeبا پیادهسازی پیشفرض (#۲۲۲۶). - رفتار پیشفرض
Renderer.getMinDurationToProgressUsرا تغییر دهید تا اگر نیازی به فراخوانیrenderنیست، مقدار بزرگتری برگرداند. - رفع اشکالی که در آن زمانبندی داخلی آخرین فریم را هنگام جستجو تا پایان درحالت مکث بهتأخیر میانداخت. درحالحاضر، رفع اشکال فقط درصورتی اعمال میشود که
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledفعال باشد. - روش
ExoPlayer.setScrubbingModeEnabled(boolean)را اضافه کنید. این کار پخشکننده را برای جستجوهای مکرر (مثلاً وقتی کاربر نوار لغزنده را جابهجا میکند) بهینهسازی میکند. رفتار حالت پیمایش را میتوان باsetScrubbingModeParameters(..)درExoPlayerوExoPlayer.Builderسفارشیسازی کرد. - Allow customizing fractional seek tolerance in scrubbing mode.
- افزایش نرخ عملکرد کدک در حالت پاکسازی.
- رفع اشکالی که در آن خطاهای آمادهسازی در محتوای
AdsMediaSourceممکن است هرگز گزارش نشود (#2337). - رفع نشت حافظه در
MergingMediaSource، برای مثال هنگام بارگیری جانبی زیرنویسها (#2338). - به
CmcdConfiguration.Factoryاجازه داده شدnullرا برگرداند تا ثبت گزارش CMCD برای فایلهای رسانهای خاص غیرفعال شود (#۲۳۸۶). - افزایش اندازه میانگیر تصویر پیشفرض از ۱۲۸ کیلوبایت (اشتباه کپی-جایگذاری از قطعههای نوشتاری) به ۲۶ مگابایت، که برای تصاویر Ultra HDR با وضوح ۵۰ مگاپیکسل کافی است (#۲۴۱۷).
PreCacheHelperرا اضافه کنید که به برنامهها اجازه میدهد یک رسانه را با موقعیت شروع و مدت مشخص پیشنهانسازی کنند.- افزودن پشتیبانی از پیشبارگیری از موقعیت مشخصشده در
DefaultPreloadManager.
- افزودن گیرنده برای حالت پخش درهم به میانای
- ترانسفورماتور:
CodecDbLiteرا اضافه کنید که بهینهسازیهای مختص مجموعه تراشه را برای تنظیمات کدبندی ویدیو فعال میکند.- برای فعال کردن بهینهسازی تنظیمات CodecDB Lite، پرچم
setEnableCodecDbLiteرا بهDefaultEncoderFactoryاضافه کنید. بهطور پیشفرض، این پرچم روی false تنظیم شده است. - پر کردن فاصله اولیه (اضافهشده ازطریق
addGap()) با صدای بیصدا اکنون مستلزم تنظیم صریحexperimentalSetForceAudioTrack(true)درEditedMediaItemSequence.Builderاست. اگر فاصله در وسط توالی باشد، این پرچم لازم نیست. - انتقال میانای
Muxerازmedia3-transformerبهmedia3-muxer. - تنظیم
MediaItem.Builder().setImageDuration(long)را برای وارد کردن فایل رسانهای بهعنوان تصویر اجباری کنید. - افزودن
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)که شامل فهرست ویرایش MP4 هنگام برش دادن است تا به پخشکنندهها دستور دهد نمونههای بین قاب کلیدی قبلاز نقطه شروع برش و نقطه شروع برش را نادیده بگیرند. - برنامه Composition Demo را بهروز کنید تا از Kotlin و Jetpack Compose استفاده کند، و یک
VideoCompositorSettingsسفارشی اضافه کنید تا توالیها را در چیدمان ۲×۲ یا «تصویر در تصویر» مرتب کند.
- استخراجکنندهها:
- تجزیه فراداده از فایلهای MP4 تکهتکهشده (#۲۰۸۴).
- JPEG: پشتیبانی از عکسهای حرکتی که بخش Exif در ابتدا ندارند (#۲۵۵۲).
- افزودن پشتیبانی برای جستجو در MP4 تکهتکهشده با چندین اتم
sidx. این رفتار را میتوان بااستفاده از پرچمFLAG_MERGE_FRAGMENTED_SIDXدرFragmentedMp4Extractor(#9373) فعال کرد. - نادیده گرفتن جدولهای جستجوی خالی در فایلهای FLAC (ازجمله آنهایی که فقط حاوی نقطههای جستجوی جایبان هستند)، و بازگشت به جستجوی دودویی درصورت مشخص بودن مدت فایل (#۲۳۲۷).
- رفع تجزیه واحدهای H.265 SEI برای رد شدن کامل از انواع SEI ناشناخته (#2456).
WavExtractorرا بهروز کنید تا هنگام تجزیه کردن فایل نوعWAVE_FORMAT_EXTENSIBLE، از دادههای SubFormat افزونه سرصفحه برای قالب صوتی استفاده کند.- MP4: افزودن پشتیبانی از جعبههای
ipcmوfpcmکه قطعههای صوتی PCM خام را تعریف میکنند (از PCM نقطه شناور ۶۴ بیتی پشتیبانی نمیشود). - MP4: بخش چرخش ماتریسهای تبدیل
tkhdرا که هم ویدیو را میچرخانند و هم منعکس میکنند، مدیریت کنید. این کار تضمین میکند که ویدیوهای منعکسشده گرفتهشده با دوربین جلویی iPhone بهدرستی نمایش داده شوند، اما بهطور نادرست در محور y منعکس شوند (#۲۰۱۲). - MP3: Use duration and data size from unseekable Xing, VBRI and similar
variable bitrate metadata when falling back to constant bitrate seeking
due to
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- صدا:
- رفع اشکالی که در آن
AnalyticsListener.onAudioPositionAdvancingفراخوانی نمیشود وقتی بازپخش صدا خیلی نزدیک به پایان رسانه شروع میشود. - افزودن پشتیبانی از همه قالبهای نمونه PCM خطی در
ChannelMappingAudioProcessorوTrimmingAudioProcessor. - افزودن پشتیبانی از وقفههای صوتی در
CompositionPlayer. - تماس جعلی به
BaseAudioProcessor#flush()ازBaseAudioProcessor#reset()را بردارید. - اجازه دادن به ترکیب کاهشی/افزایشی توان ثابت در DefaultAudioMixer.
- Make
ChannelMappingAudioProcessor,TrimmingAudioProcessorandToFloatPcmAudioProcessorpublic (#2339). - از
AudioTrack#getUnderrunCount()درAudioTrackPositionTrackerبرای شناسایی کماجرایی درDefaultAudioSinkبهجای تخمین بهترین تلاش استفاده کنید. - بهبود هموارسازی مُهر زمان صوتی برای رانش موقعیت غیرمنتظره از دستگاه خروجی صوتی.
- رفع اشکالی که باعث میشد همگامسازی صدا/تصویر در ۱۰ ثانیه اول پساز ازسرگیری از حالت مکث هنگام اتصال به دستگاههای بلوتوث خراب شود.
- رفع اشکالی که در آن
AnalyticsListener.onAudioPositionAdvancingزمان شروع پیشروی صدا را گزارش نمیکرد، بلکه زمان اولین اندازهگیری را گزارش میکرد. - رفع مشکل بازیابی به صدای چندکاناله پساز بازگشت به صدای استریو در برخی دستگاهها (#۲۲۵۸).
- رفع اشکالی که در آن
- ویدیو:
- Extend detached surface workaround to "lenovo" and "motorola" devices (#2059).
- بهبود انتشار روان فریم ویدیو در زمان راهاندازی وقتی نمونههای صوتی دقیقاً از موقعیت درخواستی شروع نمیشوند.
- Extend detached surface workaround to "realme" devices (#2059).
- افزودن میانای برنامهسازی کاربردی آزمایشی
ExoPlayerبرای گنجاندن پرچمMediaCodec.BUFFER_FLAG_DECODE_ONLYهنگام صفبندی میانگیرهای ورودی فقط رمزگشایی. این پرچم به رمزگشا علامت میدهد که میانگیرهای فقط-رمزگشایی را نادیده بگیرد و درنتیجه جستجو سریعتر انجام شود. آن را باDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlagفعال کنید. * بهبود بررسیهای عملکرد کدک برای کدکهای ویدیویی نرمافزاری. این ممکن است باعث شود برخی قطعههای دیگر بهعنوانEXCEEDS_CAPABILITIESعلامتگذاری شوند. - رفع خطاهای بازپخش VP9 Widevine در برخیاز دستگاهها (#۲۴۰۸).
- نوشتار:
- افزودن پشتیبانی از قطعههای VobSub در فایلهای MP4 (#۲۵۱۰).
- Fix a playback stall when a subtitle segment initially fails to load and later loads successfully, followed by several empty subtitle segments (#2517).
- رفع مشکل SSA و SubRip برای نمایش نشانه درحال انجام هنگام فعال کردن زیرنویس (#۲۳۰۹).
- رفع مشکل گیر کردن بازپخش هنگام جابهجایی از جاریسازی دارای خطای زیرنویس به جاریسازی زنده با قطعه زیرنویس خالی (#۲۳۲۸).
- رفع مشکل زیرنویسهای CEA-608 ناخوانا هنگام پخش جاریسازیهای H.262 حاوی قابهای B (#۲۳۷۲).
- افزودن پشتیبانی از زیرنویسهای SSA با
CodecId = S_TEXT/SSAدر فایلهای Matroska. قبلاًMatroskaExtractorفقط ازCodecId = S_TEXT/ASSپشتیبانی میکرد که برای نشان دادن گونه «پیشرفته» (v4+) زیرنویسهای SubStation Alpha است (اما منطق تجزیه ExoPlayer برای هر دو گونه یکسان است) (#۲۳۸۴). - افزودن پشتیبانی از ویژگی
layerدر فایلهای زیرنویس SubStation Alpha (SSA) که برای تعریف ترتیب z نشانهها هنگام نمایش بیشاز یک نشانه بهطور همزمان روی صفحه استفاده میشود (#۲۱۲۴).
- فراداده:
- پشتیبانی برای بازیابی مدتزمان رسانه و
TimelineبهMetadataRetrieverاضافه شد و به میانای برنامهسازی کاربردیAutoCloseableمبتنی بر نمونه منتقل شد. ازBuilderجدید برای ایجاد نمونهای برایMediaItemاستفاده کنید، سپسretrieveTrackGroups()،retrieveTimeline()، وretrieveDurationUs()را فراخوانی کنید تاListenableFutureبرای فراداده دریافت کنید. روشهای ایستا قبلی اکنون منسوخ شدهاند (#۲۴۶۲).
- پشتیبانی برای بازیابی مدتزمان رسانه و
- تصویر:
- بیتمپهای کدگشاییشده را به اندازه نمایش در
BitmapFactoryImageDecoderمحدود کنید تا از خراب شدن برنامه باCanvas: trying to draw too large bitmap.ازPlayerViewهنگام تلاش برای نمایش تصاویر بسیار بزرگ (مثلاً ۵۰ مگاپیکسل) جلوگیری شود. - امضای
DefaultRenderersFactory.getImageDecoderFactory()را تغییر دهید تا پارامترContextرا بگیرد. - حداکثر اندازه خروجی بیتمپ استفادهشده در
CompositionPlayerرا با آنچه قبلاً درTransformerاستفاده شده است تراز کنید (یعنیCompositionPlayerبرخلافExoPlayer، هنگام کدگشایی بیتمپها اندازه نمایشگر را درنظر نمیگیرد).
- بیتمپهای کدگشاییشده را به اندازه نمایش در
- مدیریت حقوق دیجیتال:
- افزودن سربارگذاری جدید
OfflineLicenseHelper.newWidevineInstanceکهMediaItem.DrmConfigurationرا میپذیرد تا سرایندهای درخواست HTTP بتوانند بهدرستی اعمال شوند (#2169).
- افزودن سربارگذاری جدید
- جلوه:
Presentation.createForShortSide(int)را اضافه کنید کهPresentationایجاد میکند که تضمین میکند کوتاهترین ضلع همیشه با مقدار دادهشده مطابقت داشته باشد، صرفنظر از جهت ورودی.
- Muxers:
- اشکالی که در آن پرچمهای نمونه صحیح برای نمونههای صوتی در MP4 تکهتکهشده تنظیم نشده بود برطرف شد.
writeSampleData()API اکنون از کلاسBufferInfoمختص muxer بهجایMediaCodec.BufferInfoاستفاده میکند.Muxer.Factory#supportsWritingNegativeTimestampsInEditListرا اضافه کنید که بهطور پیشفرض روی false تنظیم شده است.
- افزونه IMA:
- رفع اشکالی که در آن خطای بارگیری در یک آگهی ممکن است بهطور تصادفی گروه آگهی دیگری را نامعتبر کند.
- رفع اشکالی که در آن گروههای آگهی پساز پایان پنجره «ویدیو بهدرخواست» بازپخش را متوقف میکردند.
گروههای آگهی با زمان شروع پساز پنجره دیگر در صف
MediaPeriodQueueقرار نمیگیرند (#۲۲۱۵).
- جلسه:
- رفع اشکالی که در آن اتصالهای کنترلکنندههای Media3 طرف سوم غیرممتاز نادیده گرفته میشوند.
- Remove check for available commands when sending custom commands to a
legacy
MediaBrowserServiceCompat. این با رفتار کنترلکنندهها/ مرورگرهای قدیمی هنگام اتصال به برنامه قدیمی مطابقت دارد. - اشکالی را برطرف کنید که باعث میشود اولین خطای بازپخش بازیکن بهاشتباه بهعنوان استثنای سفارشی دائمی درنظر گرفته شود. این کار مانع از بازیابی برنامه میشود.
- رفع اشکالی که در آن برخیاز تغییرات کنترلکننده که توسط جلسه مدیریت نمیشوند ممکن است باعث
IllegalStateExceptionsشوند. - رفع اشکالی که در آن کنشهای کنترلکننده که توسط جلسه مدیریت نمیشوند ممکن است کنترلکننده را در وضعیت نامعتبر رها کنند.
- هشدار نقض راهاندازی ناامن StrictMode را برطرف کنید (#۲۳۳۰).
- رفع اشکالی که در آن فراخوانی
setSessionExtrasاز رشته اصلی هنگام اجرای پخشکننده از رشته برنامه دیگری غیراز رشته اصلی باعث ایجادIllegalStateExceptionمیشد (#۲۲۶۵). - اگر پخشکنندهای با موارد رسانهای راهاندازی شده است، بدون آمادهسازی یا پخش آنها، بهطور خودکار اعلان نشان ندهید
(#2423https://github.com/androidx/media/issues/2423). این رفتار
ازطریق
MediaSessionService.setShowNotificationForIdlePlayerقابلپیکربندی است. PlaybackExceptionسفارشی برای همه یا کنترلکنندههای انتخابشده اضافه کنید.- رفع اشکالی که در آن جستجو در جاریسازی زنده در
MediaControllerمیتواند باعثIllegalArgumentExceptionشود. - برای جاریسازیهای زنده، انتشار موقعیت بازپخش و توانایی جستجو در مورد فعلی برای کنترلکنندههای رسانه پلاتفرم را متوقف کنید تا از مصنوعات موقعیت در میانای کاربر Android Auto (و سایر کنترلکنندههایی که از این اطلاعات از جلسه رسانه پلاتفرم استفاده میکنند) جلوگیری شود (#۱۷۵۸).
- رفع اشکالی که در آن ارسال null به
getLibraryRootازMediaBrowserمتصل بهMediaBrowserServiceCompatقدیمی باعث تولیدNullPointerExceptionمیشد. - رفع اشکالی که در آن ارسال کنشهای سفارشی، نتیجه جستجو، یا درخواست getItem باعث ازکار افتادن برنامه جلسه قدیمی با
ClassNotFoundExceptionمیشد. - اشکالی را که در آن
MediaItem.LocalConfiguration.uriباMediaMetadataجلسههای پلاتفرم همرسانی میشد برطرف کنید. برای همرسانی عمدی URI برای اجازه دادن به کنترلکنندهها برای درخواست مجدد رسانه،MediaItem.RequestMetadata.mediaUriرا تنظیم کنید.
- میانای کاربر:
- رفع اشکالی که در آن
PlayerSurfaceداخل مؤلفههای قابلاستفاده مجدد مانندLazyColumnبهدرستی کار نمیکرد (#۲۴۹۳). - رفع اشکال Compose که منجر به ایجاد فاصله بین تنظیم حالتهای اولیه دکمه و مشاهده تغییر در حالت (مثلاً شکل نمادها یا فعال بودن) میشد. هرگونه تغییری که خارج از دوره مشاهده در «پخشکننده» ایجاد شده باشد اکنون اعمال میشود (#۲۳۱۳).
- نگهدارندههای حالت و ترکیبپذیرها را به پیمانه
media3-ui-composeبرایSeekBackButtonStateوSeekForwardButtonStateاضافه کنید. - پشتیبانی از حالت پاکسازی ExoPlayer را به
PlayerControlViewاضافه کنید. وقتی فعال باشد، وقتی کاربر شروع به کشیدن نوار پیمایش میکند، پخشکننده را در حالت پیمایش قرار میدهد، برای هر حرکت یک تماسplayer.seekToصادر میکند، و سپس وقتی لمس از روی صفحه برداشته میشود، از حالت پیمایش خارج میشود. این یکپارچهسازی را میتوان باtime_bar_scrubbing_enabled = trueدر XML یاsetTimeBarScrubbingEnabled(boolean)روش از Java/Kotlin فعال کرد. PlayerSurfaceرا طوری تنظیم کنید که متغیر مستقلPlayerتهیپذیر را بپذیرد.
- رفع اشکالی که در آن
- بارگیریها:
- افزودن پشتیبانی از بارگیری جزئی برای جاریسازیهای پیشرونده. برنامهها میتوانند جاریسازی پیشروندهای را با
DownloadHelperآماده کنند و با مشخص کردن موقعیتهای شروع و پایان رسانه مبتنی بر زمان که بارگیری باید پوشش دهد،DownloadRequestرا از کمککننده درخواست کنند.DownloadRequestبرگشتی حاوی محدوده بایت حلشده است که با آن میتوانProgressiveDownloaderایجاد کرد و محتوا را بهطور متناظر بارگیری کرد. DownloadHelper.Factoryرا که روشهای ایستاDownloadHelper.forMediaItem()با آن جایگزین شده است اضافه کنید.-
Factoryرا برای پیادهسازیهایSegmentDownloaderاضافه کنید. - پشتیبانی از بارگیری جزئی برای جاریسازیهای تطبیقی اضافه شد. برنامهها میتوانند با
DownloadHelperیک جاریسازی تطبیقی آماده کنند و با مشخص کردن موقعیتهای شروع و پایان رسانه مبتنی بر زمان که بارگیری باید پوشش دهد، از کمککنندهDownloadRequestدرخواست کنند.DownloadRequestبرگرداندهشده حاوی محدوده زمانی حلشده است که با آن میتوانSegmentDownloaderمشخصی ایجاد کرد و محتوا را بهطور متناظر بارگیری کرد.
- افزودن پشتیبانی از بارگیری جزئی برای جاریسازیهای پیشرونده. برنامهها میتوانند جاریسازی پیشروندهای را با
- افزونه Cronet:
- مدیریت خودکار کوکی اضافه شد (#۵۹۷۵).
- افزونه HLS:
- رفع اشکال مربوط به تلاش
HlsSampleStreamWrapperبرای جستجو در میانگیر وقتی هیچ تکهای در میانگیر دردسترس نیست #۲۵۹۸. - رفع اشکالی که در آن انتخاب قطعه پساز بار کردن بخشهای با تأخیر کم تغییر میکند و اشارههای پیشبارگذاری میتواند باعث گیر کردن یا توقف بازپخش شود (#۲۲۹۹).
- Prevent excessive reloads by waiting for half the target duration when
CAN-BLOCK-RELOAD=YESis not honored by the server (#2317). - رفع اشکالی که در آن بازپخش هنگام شروع جاریسازی میانآگهی قبلاز میانویدیویی متوقف میشد و وضوح فهرست دارایی برای آگهی اشتباه (#2558) تلاش میشد.
- رفع مشکل تجزیه فهرست پخش برای پذیرش
\f(تغذیه فرم) در مقادیر مشخصه رشته نقلقولشده (#۲۴۲۰). - پشتیبانی از بهروزرسانی بینآگهیها با شناسه یکسان (#۲۴۲۷).
- رفع اشکالی که در آن خطاهای بارگیری فهرست پخش گاهی اوقات پساز اتمام بخشهای جاریسازی زنده برای بارگیری منتشر نمیشوند (#۲۴۰۱https://github.com/androidx/media/issues/2401).
- Group subtitle renditions by NAME tag, similar to how audio renditions are grouped already (#1666).
- پشتیبانی از X-ASSET-LIST و جاریسازیهای زنده با
HlsInterstitialsAdsLoader.
- رفع اشکال مربوط به تلاش
- افزونه DASH:
- رفع مشکل ادغام مجموعه اقتباس ترفند بازی با مجموعه اقتباس اصلی آن برای تشکیل
TrackGroupنامعتبر (#۲۱۴۸). - رفع اشکالی که در آن کوتاه کردن مدت دوره DASH میتواند استثنایی ایجاد کند وقتی نمونههای فراتر از مدت جدید قبلاً توسط خط لوله پردازش خوانده شدهاند (#۲۴۴۰).
- رفع اشکال مربوط به عدم دنبال کردن تغییر مسیر هنگام استفاده از پارامترهای پُرسمان CMCD (#۲۴۷۵).
- رفع مشکل ادغام مجموعه اقتباس ترفند بازی با مجموعه اقتباس اصلی آن برای تشکیل
- افزونه RTSP:
- افزودن پشتیبانی از «بسته انبوهش RTP» برای H265 مطابق با RFC 7798#4.4.2 (#2413).
RtspClientرا اصلاح کنید تا از شناسه منبع یکسان مکان همانطور که هنگام پردازش پاسخ HTTP 302 ارائه شده است استفاده کند (#2398).- افزودن پشتیبانی تجزیه برای SessionDescriptions حاوی خطوطی با نویسههای فاصله سفید انتهایی (#2357).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- رفع اشکالی که در آن
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeتأثیری بر افزونههای رمزگشای صوتی ندارد (#۲۲۵۸).
- رفع اشکالی که در آن
- افزونه Cast:
- ابزارهای آزمایش:
advance(player).untilPositionAtLeastوuntilMediaItemIndexرا بهTestPlayerRunHelperاضافه کنید تا پخشکننده را تا رسیدن به موقعیت مشخصشده جلو ببرید. در بیشتر موارد، این روشها از روشهای موجودuntilPositionوuntilStartOfMediaItemقابلاعتمادتر هستند.FakeDownloaderرا به واحدtest-utils-robolectricمنتقل کنید تا در آزمایشهای دیگر دوباره استفاده شود.-
transformer.TestUtil.addAudioDecoders(String...)،transformer.TestUtil.addAudioEncoders(String...)، وtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)برداشته شدند. درعوض، ازShadowMediaCodecConfigبرای پیکربندی رمزگذارهای سایه و رمزگشاها استفاده کنید. - پیشوند «exotest» با «media3» در نامهای کدک گزارششده توسط
ShadowMediaCodecConfigجایگزین شد.
- برداشتن نمادهای منسوخشده:
- سازنده
SegmentDownloaderمنسوخشدهSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)و سازندههای مربوطه در زیرکلاسهای آنDashDownloader،HlsDownloader، وSsDownloaderبرداشته شد. -
Player.hasNext()وPlayer.hasNextWindow()منسوخشده برداشته شد. درعوض ازPlayer.hasNextMediaItem()استفاده کنید. -
Player.next()منسوخشده برداشته شد. درعوض ازPlayer.seekToNextMediaItem()استفاده کنید. -
Player.seekToPreviousWindow()منسوخشده برداشته شد. درعوض ازPlayer.seekToPreviousMediaItem()استفاده کنید. -
Player.seekToNextWindow()منسوخشده برداشته شد. درعوض ازPlayer.seekToNextMediaItem()استفاده کنید. BaseAudioProcessorمنسوخشده در واحدexoplayerبرداشته شد. ازBaseAudioProcessorدر واحدcommonاستفاده کنید.- برداشتن سازنده
MediaCodecVideoRendererمنسوخشدهMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- سازنده
نسخه 1.8.0-rc02
۲۴ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-rc01
۱۶ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-beta01
۲ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-alpha01
۱۹ مه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه ۱.۷.۰
نسخه ۱.۷.۱
۱۶ مه ۲۰۲۵
این نسخه پخش همان کد نسخه ۱.۶.۱ را دارد و برای اطمینان از اینکه بهعنوان نسخه پخش «جدیدتر» از نسخه ۱.۷.۰ نشان داده شود منتشر میشود. نسخه ۱.۷.۰ نسخه آلفایی بود که بهطور تصادفی بهعنوان نسخه پایدار برچسبگذاری شده بود (به زیر مراجعه کنید).
نسخه ۱.۷.۰
۱۶ مه ۲۰۲۵
این نسخهٔ پخش باید 1.7.0-alpha01 میبود، اما بهطور تصادفی در maven.google.com با برچسب 1.7.0 (یعنی پایدار) علامتگذاری شده است. لطفاً از آن استفاده نکنید. در نسخه ۱.۶.۱ بمانید یا به نسخه ۱.۷.۱ (که کد آن با نسخه ۱.۶.۱ یکسان است) ارتقا دهید.
نسخه ۱.۶.۰
۱.۶.۱
۱۴ آوریل ۲۰۲۵
androidx.media3:media3-*:1.6.1 منتشر شده است. نسخه ۱.۶.۱ حاوی این
ثبتها است.
- کتابخانه مشترک:
- افزودن روش
PlaybackParameters.withPitch(float)برای کپی کردن آسانPlaybackParametersبا مقدار جدیدpitch(#2257).
- افزودن روش
- ExoPlayer:
- رفع مشکلی که در آن انتقال فایل رسانهای بهدلیل خطای قابلبازیابی پردازنده درطول مقداردهی اولیه فایل رسانهای بعدی ناموفق بود (#2229).
- رفع مشکلی که در آن
ProgressiveMediaPeriodIllegalStateExceptionرا بهعنوانPreloadMediaSourceارسال میکند تاgetBufferedDurationUs()را قبلاز آماده شدن فراخوانی کند (#۲۳۱۵). - رفع مشکل ارسال
CmcdDataدر درخواستهای مانیفست برای DASH، HLS، و SmoothStreaming (#۲۲۵۳). - مطمئن شوید که
AdPlaybackState.withAdDurationsUs(long[][])پساز برداشته شدن گروههای آگهی قابلاستفاده است. کاربر همچنان باید آرایهای از مدت زمانها را برای گروههای آگهی برداشتهشده ارسال کند که میتواند خالی یا پوچ باشد (#۲۲۶۷).
- استخراجکنندهها:
- MP4: Parse
alternate_groupfrom thetkhdbox and expose it as anMp4AlternateGroupDataentry in each track'sFormat.metadata(#2242).
- MP4: Parse
- صدا:
- رفع مشکل بارگیری که در آن ممکن است موقعیت هنگام پخش فهرست پخش محتوای کوتاه گیر کند (#۱۹۲۰).
- جلسه:
- کاهش زمان وقفه انبوهش برای فراخوانیهای پلاتفرم
MediaSessionاز ۵۰۰ به ۱۰۰ میلیثانیه و افزودن تنظیمکننده آزمایشی برای اینکه برنامهها بتوانند این مقدار را پیکربندی کنند. - مشکلی را که در آن اعلانها پساز بسته شدن توسط کاربر دوباره ظاهر میشوند برطرف کنید (#۲۳۰۲).
- رفع اشکالی که در آن جلسه خط زمان تکموردی را برمیگرداند درحالیکه
پخشکننده پیچیده درواقع خالی است. این اتفاق زمانی رخ داد که پخشکننده بستهبندیشده
COMMAND_GET_TIMELINEرا دردسترس نداشت درحالیکهCOMMAND_GET_CURRENT_MEDIA_ITEMدردسترس بود و پخشکننده بستهبندیشده خالی بود (#۲۳۲۰). - رفع اشکالی که در آن فراخوانی
MediaSessionService.setMediaNotificationProviderپساز تعاملات دیگر با سرویس مانندsetForegroundServiceTimeoutMsبیصدا نادیده گرفته میشود (#۲۳۰۵).
- کاهش زمان وقفه انبوهش برای فراخوانیهای پلاتفرم
- میانای کاربر:
PlayerSurfaceرا فعال کنید تا باExoPlayer.setVideoEffectsوCompositionPlayerکار کند.- رفع اشکالی که در آن
PlayerSurfaceنمیتواند باPlayerجدید بازترکیب شود.
- افزونه HLS:
- رفع مشکلی که باعث میشد مدتزمان تکه در
CmcdDataبرای رسانه HLS تنظیم نشود، که منجر به شکست ادعا هنگام پردازش بخشهای رسانه رمزگذاریشده میشد (#۲۳۱۲).
- رفع مشکلی که باعث میشد مدتزمان تکه در
- افزونه RTSP:
- افزودن پشتیبانی از URI با طرح RTSPT بهعنوان روشی برای پیکربندی جلسه RTSP برای استفاده از TCP (#۱۴۸۴).
- افزونه Cast:
- پشتیبانی از فراداده فهرست پخش اضافه شد (#۲۲۳۵).
۱.۶.۰
۲۶ مارس ۲۰۲۵
androidx.media3:media3-*:1.6.0 منتشر شده است. نسخه ۱.۶.۰ حاوی این
ثبتها است.
- کتابخانه مشترک:
AudioManagerCompatوAudioFocusRequestCompatرا اضافه کنید تا جایگزین کلاسهای معادل درandroidx.mediaشوند.- Kotlin را از نسخه ۱.۹.۲۰ به ۲.۰.۲۰ ارتقا دهید و از افزونه Compose Compiler Gradle استفاده کنید. کتابخانه KotlinX Coroutines را از نسخه ۱.۸.۱ به ۱.۹.۰ ارتقا دهید.
- روش
Format.toBundle(boolean excludeMetadata)را بردارید، درعوض ازFormat.toBundle()استفاده کنید. - رفع اشکال در
SimpleBasePlayerکه در آن تنظیمcurrentMediaItemIndexجدید درStateپسازsetPlaylistباnullMediaMetadataفراداده را دوباره ارزیابی نمیکند (#۱۹۴۰). - دسترسی
SimpleBasePlayer.Stateرا از محافظتشده به عمومی تغییر دهید تا رسیدگی به بهروزرسانیها در کلاسهای دیگر آسانتر شود (#۲۱۲۸).
- ExoPlayer:
MediaExtractorCompatرا اضافه کنید، کلاس جدیدی که ویژگیهای معادل پلاتفرمMediaExtractorرا ارائه میدهد.- افزودن پشتیبانی آزمایشی از پیشگرم کردن «ExoPlayer» برای بازپخش بااستفاده از
MediaCodecVideoRenderer. میتوانیدDefaultRenderersFactoryرا ازطریقexperimentalSetEnableMediaCodecVideoRendererPrewarmingپیکربندی کنید تاMediaCodecVideoRendererثانویه را بهExoPlayerارائه دهید. اگر فعال باشد،ExoPlayerویدیو فایلهای رسانهای متوالی را درطول بازپخش پیشپردازش میکند تا تأخیر انتقال فایل رسانهای را کاهش دهد. - مقادیر پیشفرض برای
bufferForPlaybackMsوbufferForPlaybackAfterRebufferMsدرDefaultLoadControlرا بهترتیب به ۱۰۰۰ و ۲۰۰۰ میلیثانیه کاهش دهید. DeviceInfoو میزان صدای دستگاه را بهصورت ناهمگام مقداردهی اولیه کنید (اگر بااستفاده ازsetDeviceVolumeControlEnabledفعال شده باشد). این مقادیر بلافاصله پسازExoPlayer.Builder.build()دردسترس نیستند وPlayer.Listenerتغییرات را ازطریقonDeviceInfoChangedوonDeviceVolumeChangedاطلاع میدهد.- شناسه جلسه صوتی اولیه دیگر بلافاصله پساز ایجاد پخشکننده دردسترس نیست. میتوانید از
AnalyticsListener.onAudioSessionIdChangedبرای گوش دادن به بهروزرسانی اولیه درصورت نیاز استفاده کنید. - هنگام انتخاب قطعه ویدیو، زبان را درنظر بگیرید. بهطور پیشفرض، قطعه ویدیو «اصلی» را انتخاب کنید که با زبان قطعه صوتی انتخابشده مطابقت داشته باشد (درصورت وجود). اولویتهای صریح زبان ویدیو را میتوان با
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)بیان کرد. - پارامتر
selectedAudioLanguageرا به روشDefaultTrackSelector.selectVideoTrack()اضافه کنید. - پارامتر
retryCountرا بهMediaSourceEventListener.onLoadStartedو روشهایMediaSourceEventListener.EventDispatcherمربوطه اضافه کنید. - رفع اشکالی که در آن موارد فهرست پخش یا دورهها در جاریسازیهای DASH چنددورهای با مدتهایی که با محتوای واقعی مطابقت ندارند میتوانند باعث توقف فریم در پایان مورد شوند (#۱۶۹۸).
BasePreloadManager.Listenerرا به سطح بالاPreloadManagerListenerمنتقل کنید.RenderersFactory.createSecondaryRendererرا میتوان برای ارائه پردازنده ثانویه برای پیشگرم کردن پیادهسازی کرد. پیشگرمایش امکان انتقال سریعتر فایل رسانهای را درطول بازپخش فراهم میکند.- ارسال
CmcdDataبرای درخواستهای مانیفست در قالبهای جاریسازی تطبیقی DASH، HLS، و SmoothStreaming فعال شد (#۱۹۵۱). -
MediaCodecInfoکدکی را که درMediaCodecRenderer.onReadyToInitializeCodecمقداردهی اولیه خواهد شد ارائه کنید (#۱۹۶۳). AdsMediaSourceرا تغییر دهید تاAdPlaybackStatesبتواند با افزودن گروههای آگهی رشد کند. اصلاحات نامعتبر شناسایی میشوند و استثنایی را ایجاد میکنند.- رفع مشکل نمایش فریمهای اضافی فقط-رمزگشایی بهصورت متوالی و سریع هنگام انتقال به رسانه محتوا پساز آگهی میانویدیویی.
DefaultRenderersFactoryدو نمونهMetadataRendererرا اضافه کنید تا برنامهها بتوانند بهطور پیشفرض دو طرح مختلف فراداده را دریافت کنند.- ارزیابی مجدد اینکه آیا بارگذاری مداوم یک قطعه باید هنگام توقف موقت بازپخش لغو شود یا نه (#۱۷۸۵).
- گزینه
ClippingMediaSourceرا اضافه کنید تا امکان برش در رسانه غیرقابلجستجو فراهم شود. - رفع اشکالی که در آن جستجو با پیشگرم کردن میتوانست مانع انتقال فایل رسانهای بعدی شود.
- اشکالی که باعث میشد
ExoPlayer.isLoading()درحالیکه بهSTATE_IDLEیاSTATE_ENDEDمنتقل شده است،trueباقی بماند برطرف شد (#۲۱۳۳). -
lastRebufferRealtimeMsبهLoadControl.Parameterاضافه شود (#۲۱۱۳).
- ترانسفورماتور:
- پشتیبانی از تبدیل قالب به قالبهای جایگزین سازگار با نسخه قدیمی را اضافه کنید.
- افزودن پشتیبانی برای تراتبدیل و ترامالتیپلکس کردن قالب Dolby Vision (نمایه ۸).
- پارامترهای
VideoFrameProcessor.registerInputStreamوVideoFrameProcessor.Listener.onInputStreamRegisteredرا بهروز کنید تا بتوانید ازFormatاستفاده کنید. - هنگام استفاده از
DefaultEncoderFactory، فراداده ثابت HDR تولید کنید. - پشتیبانی از عیبیابی پلاتفرم Android را بااستفاده از
MediaMetricsManagerفعال کنید. Transformer رویدادهای ویرایش و دادههای عملکرد را به پلاتفرم بازارسال میکند که به ارائه اطلاعات اشکالزدایی و عملکرد سیستم در دستگاه کمک میکند. اگر همرسانی دادههای استفاده و عیبیابی توسط کاربر دستگاه فعال شده باشد، ممکن است این دادهها توسط Google نیز جمعآوری شود. برنامهها میتوانند از مشارکت در تشخیص پلاتفرم برای Transformer باTransformer.Builder.setUsePlatformDiagnostics(false)انصراف دهند. -
InAppMuxerبهInAppMp4MuxerوInAppFragmentedMp4Muxerتقسیم شد. ازInAppMp4Muxerبرای تولید فایل MP4 تکهتکهنشده استفاده میکنید، درحالیکهInAppFragmentedMp4Muxerبرای تولید فایل MP4 تکهتکهشده است. - انتقال میانای
Muxerازmedia3-muxerبهmedia3-transformer. MediaProjectionAssetLoaderرا اضافه کنید که رسانه را ازMediaProjectionبرای ضبط صفحهنمایش ارائه میدهد، و پشتیبانی از ضبط صفحهنمایش را به برنامه نمایشی Transformer اضافه کنید.- افزودن
#getInputFormat()به میانایCodec. - درصورت امکان، مسئولیت انتشار
GlObjectsProviderرا به تماسگیرنده درDefaultVideoFrameProcessorوDefaultVideoCompositorواگذار کنید.
- استخراجکنندهها:
- AVI: رفع مشکل مدیریت فایلهای دارای صدای فشردهشده با نرخ بیت ثابت که در آنها سرصفحه جاریسازی بهجای تعداد تکهها، تعداد بایتها را ذخیره میکند.
- رفع مشکل مدیریت واحدهای NAL با طولهای بیانشده در ۱ یا ۲ بایت (بهجای ۴ بایت).
- رفع
ArrayIndexOutOfBoundsExceptionدر فهرستهای ویرایش MP4 وقتی فهرست ویرایش در قاب غیرهمگامسازی بدون قاب همگامسازی قبلی شروع میشود (#۲۰۶۲). - رفع مشکل گیر کردن جریانهای TS در برخیاز دستگاهها (#2069).
- FLAC: پشتیبانی از فایلهای FLAC ۳۲ بیتی اضافه شد. قبلاً این موارد با
IllegalStateException: Playback stuck buffering and not loading(#۲۱۹۷) پخش نمیشدند.
- صدا:
-
onAudioPositionAdvancingرا اصلاح کنید تا هنگام ازسرگیری بازپخش فراخوانی شود (قبلاً هنگام توقف موقت بازپخش فراخوانی میشد). - وقتی
SpeedChangingAudioProcessorبا پارامترهای پیشفرض پیکربندی شده است،SonicAudioProcessorرا دور نزنید. - سرریز منفی در
Sonic#getOutputSize()که میتوانست باعث توقفDefaultAudioSinkشود برطرف شد. MediaCodecAudioRenderer.getDurationToProgressUs()وDecoderAudioRenderer.getDurationToProgressUs()را اصلاح کنید تا جستجوها مدتهای ارائهشده را بهدرستی بازنشانی کنند.androidx.media3.common.audio.SonicAudioProcessorرا نهایی کنید.- پشتیبانی از PCM شناور را به
ChannelMappingAudioProcessorوTrimmingAudioProcessorاضافه کنید.
-
- ویدیو:
- تغییر
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceبه محافظتشده تا برنامهها بتوانند برای مسدود کردن استفاده از سطوح جایبان لغو کنند (#۱۹۰۵). - افزودن تجزیه وابستگی نمونه آزمایشی
ExoPlayerAV1 برای افزایش سرعت جستجو. آن را باDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI جدید فعال کنید. - افزودن
ExoPlayerAPI آزمایشی برای حذف میانگیرهای ورودی رمزگشایMediaCodecVideoRendererدیرهنگام که به آنها وابسته نیست. آن را باDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUsفعال کنید. * رفع مشکلی که در آن پخشکننده بدون سطح بلافاصله آماده میشد و رمزگشایی فریمهای معلق بسیار کند بود (#۱۹۷۳). - دستگاههای Xiaomi و OPPO را از حالت سطح جداشده مستثنی کنید تا از لرزش صفحه جلوگیری شود (#2059).
- تغییر
- نوشتار:
- پشتیبانی از زیرنویسهای VobSub اضافه شد (#۸۲۶۰).
- بارگیری مشتاقانه همه فایلهای زیرنویس پیکربندیشده با
MediaItem.Builder.setSubtitleConfigurationsمتوقف شد و درعوض فقط یک فایل بارگیری میشود اگر با انتخاب قطعه انتخاب شده باشد (#۱۷۲۱). - TTML: Add support for referencing
tts:originandtts:extentusingstyle(#2953). - مُهرهای زمان WebVTT و SubRip را دقیقاً به ۳ رقم اعشار محدود کنید. قبلاً هر تعداد رقم اعشار را بهاشتباه تجزیه میکردیم اما همیشه فرض میکردیم مقدار برحسب میلیثانیه است، که منجر به مهرهای زمان نادرست میشد (#1997).
- رفع مشکل توقف پخش وقتی فهرست پخش حاوی موارد برشدادهشده با زیرنویس ناشنوایان CEA-608 یا CEA-708 باشد.
- رفع مشکل
IllegalStateExceptionوقتی فایل SSA حاوی نشانهای با مدتزمان صفر است (زمان شروع و پایان برابر است) (#2052). - Suppress (and log) subtitle parsing errors when subtitles are muxed into the same container as audio and video (#2052).
- Fix handling of multi-byte UTF-8 characters in WebVTT files using CR line endings (#2167).
- مدیریت حقوق دیجیتال:
- رفع خطای
MediaCodec$CryptoException: Operation not supported in this configurationهنگام پخش محتوای ClearKey در دستگاههای با میانای برنامهسازی کاربردی کمتر از ۲۷ (#۱۷۳۲).
- رفع خطای
- جلوه:
- عملکرد
OverlaySettingsبهStaticOverlaySettingsمنتقل شد.OverlaySettingsمیتواند زیرکلاسبندی شود تا تنظیمات همپوشانی پویا را مجاز کند.
- عملکرد
- Muxers:
MuxerExceptionاز واسطMuxerخارج شد تا از نام کاملاً واجدشرایط بسیار طولانی جلوگیری شود.- نام روش
setSampleCopyEnabled()بهsetSampleCopyingEnabled()در هر دوMp4Muxer.BuilderوFragmentedMp4Muxer.Builderتغییر کرد. Mp4Muxer.addTrack()وFragmentedMp4Muxer.addTrack()اکنون بهجایTrackToken، شناسه قطعهintرا برمیگردانند.-
Mp4MuxerوFragmentedMp4Muxerدیگر میانایMuxerرا پیادهسازی نمیکنند. - غیرفعال کردن دستهبندی و کپی کردن نمونه
Mp4Muxerبهطور پیشفرض. - رفع اشکالی در
FragmentedMp4Muxerکه وقتی فقط قطعه صوتی نوشته میشود، تکههای زیادی ایجاد میکند.
- جلسه:
- وقتی بازپخش موقتاً متوقف، متوقف، یا ناموفق میشود، وضعیت سرویس پیشزمینهای را برای ۱۰ دقیقه دیگر حفظ کنید. این کار به کاربران امکان میدهد بازپخش را در این مهلت زمانی ازسر بگیرند بدون اینکه با خطر محدودیتهای سرویس پیشزمینهای در دستگاههای مختلف مواجه شوند. توجه داشته باشید که دیگر نمیتوان از فراخوانی
player.pause()برای متوقف کردن سرویس پیشزمینهای قبلازstopSelf()استفاده کرد. هنگام لغو کردنonTaskRemoved، بهجای آن ازMediaSessionService.pauseAllPlayersAndStopSelf()استفاده کنید. - وقتی بازپخش وارد وضعیت خطا یا توقف میشود، اعلان را قابلمشاهده نگه دارید. اعلان فقط درصورتی برداشته میشود که فهرست پخش پاک شود یا پخشکننده آزاد شود.
- بهبود مدیریت کنشهای MediaSession پلاتفرم Android، یعنی ACTION_PLAY و ACTION_PAUSE، برای تنظیم فقط یکی از آنها براساس فرمانهای دردسترس و همچنین پذیرش درصورت تنظیم فقط یکی از آنها.
Contextرا بهعنوان پارامتر بهMediaButtonReceiver.shouldStartForegroundService(#۱۸۸۷) اضافه کنید.- رفع اشکال مربوط به فراخوانی روش
PlayerدرMediaControllerمتصل به جلسه قدیمی که تغییرات را از بهروزرسانی معلق حذف میکرد. - Make
MediaSession.setSessionActivity(PendingIntent)accept null (#2109). - رفع اشکالی که در آن اعلان قدیمی هنگام پاک شدن فهرست پخش همچنان قابلمشاهده میماند (#۲۲۱۱).
- وقتی بازپخش موقتاً متوقف، متوقف، یا ناموفق میشود، وضعیت سرویس پیشزمینهای را برای ۱۰ دقیقه دیگر حفظ کنید. این کار به کاربران امکان میدهد بازپخش را در این مهلت زمانی ازسر بگیرند بدون اینکه با خطر محدودیتهای سرویس پیشزمینهای در دستگاههای مختلف مواجه شوند. توجه داشته باشید که دیگر نمیتوان از فراخوانی
- میانای کاربر:
- نگهدارندههای حالت و ترکیبپذیرها را به واحد
media3-ui-composeبرایPlayerSurface،PresentationState،PlayPauseButtonState،NextButtonState،PreviousButtonState،RepeatButtonState،ShuffleButtonState، وPlaybackSpeedStateاضافه کنید.
- نگهدارندههای حالت و ترکیبپذیرها را به واحد
- بارگیریها:
- رفع اشکال در
CacheWriterکه باعث میشود منابع داده باز بمانند و نواحی حافظه نهان قفل شوند، درصورتیکه منبع دادهExceptionدیگری بهجزIOException(#9760) ایجاد کند.
- رفع اشکال در
- افزونه HLS:
- اولین نسخه
HlsInterstitialsAdsLoaderرا اضافه کنید. بارکننده آگهی، آگهیهای میانویدیویی HLS را در فهرست پخش رسانه HLS میخواند و آنها را بهAdPlaybackStateکه بهAdsMediaSourceمنتقل شده است نگاشت میکند. این نسخه اولیه فقط از جاریسازیهای HLS VOD با مشخصههایX-ASSET-URIپشتیبانی میکند. -
HlsInterstitialsAdsLoader.AdsMediaSourceFactoryرا اضافه کنید. برنامهها میتوانند از آن برای ایجاد نمونههایAdsMediaSourceاستفاده کنند که ازHlsInterstitialsAdsLoaderبهروشی راحت و ایمن استفاده میکند. - تجزیه برچسب
SUPPLEMENTAL-CODECSاز فهرست پخش HLS برای تشخیص قالبهای Dolby Vision (#1785). - Loosen the condition for seeking to sync positions in an HLS stream (#2209).
- اولین نسخه
- افزونه DASH:
- افزودن پشتیبانی از قالب AC-4 Level-4 برای DASH (#۱۸۹۸).
- رفع مشکل هنگام محاسبه فاصله بهروزرسانی برای درج آگهی در جاریسازیهای زنده چنددورهای (#1698).
- تجزیه مشخصه
scte214:supplementalCodecsاز مانیفست DASH برای تشخیص قالبهای Dolby Vision (#1785). - بهبود مدیریت انتقالهای دوره در جاریسازیهای زنده که در آن دوره حاوی نمونههای رسانه فراتر از مدت اعلامشده دوره است (#۱۶۹۸).
- رفع مشکل ادغام شدن مجموعههای اقتباس علامتگذاریشده با
adaptation-set-switchingاما با زبانها یا پرچمهای نقش متفاوت (#۲۲۲۲).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزودن ماژول رمزگشای MPEG-H که از رمزگشای MPEG-H داخلی برای رمزگشایی صدای MPEG-H استفاده میکند (#۱۸۲۶).
- افزونه MIDI:
- نمونههای سفارشی
AudioSinkوAudioRendererEventListenerرا بهMidiRendererمتصل کنید.
- نمونههای سفارشی
- افزونه Cast:
- وابستگی
play-services-cast-frameworkرا به نسخه ۲۱.۵.۰ ارتقا دهید تاFLAG_MUTABLEازکارافتادگی در برنامههایی که میانای برنامهسازی کاربردی ۳۴ و بالاتر را هدف قرار میدهند در دستگاههایی که خدمات Google Play در آنها نصب اما غیرفعال است برطرف شود (#۲۱۷۸).
- وابستگی
- برنامه نمایشی:
demo-composeرا با دکمههای اضافی گسترش دهید و ادغامPlayerSurfaceرا با پشتیبانی از مقیاسبندی و شاتر بهبود بخشید.
- برداشتن نمادهای منسوخشده:
- روش
AudioMixer.create()منسوخشده را بردارید. درعوض ازDefaultAudioMixer.Factory().create()استفاده کنید. - روشهای منسوخشده
Transformer.Builderزیر را بردارید:-
setTransformationRequest()، بهجای آن ازsetAudioMimeType()،setVideoMimeType()، وsetHdrMode()استفاده کنید. setAudioProcessors()، پردازنده صوتی را درEditedMediaItem.Builder.setEffects()تنظیم کنید و آن را بهTransformer.start()ارسال کنید.-
setVideoEffects()، جلوه ویدیویی را درEditedMediaItem.Builder.setEffects()تنظیم کنید و آن را بهTransformer.start()منتقل کنید. setRemoveAudio()، ازEditedMediaItem.Builder.setRemoveAudio()برای برداشتن صدا ازEditedMediaItemمنتقلشده بهTransformer.start()استفاده کنید.setRemoveVideo()، ازEditedMediaItem.Builder.setRemoveVideo()برای برداشتن ویدیو ازEditedMediaItemکه بهTransformer.start()منتقل شده است استفاده کنید.setFlattenForSlowMotion()، ازEditedMediaItem.Builder.setFlattenForSlowMotion()برای مسطح کردنEditedMediaItemکه بهTransformer.start()منتقل شده است استفاده کنید.-
setListener()، بهجای آن ازaddListener()،removeListener()، یاremoveAllListeners()استفاده کنید.
-
- روشهای منسوخشده
Transformer.Listenerزیر را بردارید:onTransformationCompleted(MediaItem)، درعوض ازonCompleted(Composition, ExportResult)استفاده کنید.onTransformationCompleted(MediaItem, TransformationResult)، درعوض ازonCompleted(Composition, ExportResult)استفاده کنید.onTransformationError(MediaItem, Exception)، درعوض ازonError(Composition, ExportResult, ExportException)استفاده کنید.onTransformationError(MediaItem, TransformationException)، درعوض ازonError(Composition, ExportResult, ExportException)استفاده کنید.onTransformationError(MediaItem, TransformationResult, TransformationException)، درعوض ازonError(Composition, ExportResult, ExportException)استفاده کنید.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)، درعوض ازonFallbackApplied(Composition, TransformationRequest, TransformationRequest)استفاده کنید.
- برداشتن کلاس
TransformationResultمنسوخشده. درعوض ازExportResultاستفاده کنید. - برداشتن کلاس
TransformationExceptionمنسوخشده. درعوض ازExportExceptionاستفاده کنید. - برداشتن
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONمنسوخشده. درعوض ازTransformer.PROGRESS_STATE_NOT_STARTEDاستفاده کنید. - برداشتن
Transformer.setListener()منسوخشده. درعوض ازTransformer.addListener()،Transformer.removeListener()، یاTransformer.removeAllListeners()استفاده کنید. - برداشتن
Transformer.startTransformation()منسوخشده. درعوض ازTransformer.start(MediaItem, String)استفاده کنید. - برداشتن
SingleFrameGlShaderProgramمنسوخشده. درعوض ازBaseGlShaderProgramاستفاده کنید. - برداشتن
Transformer.flattenForSlowMotion. درعوض ازEditedMediaItem.flattenForSlowMotionاستفاده کنید. ExoPlayer.VideoComponent،ExoPlayer.AudioComponent،ExoPlayer.TextComponent، وExoPlayer.DeviceComponentبرداشته شدند.-
androidx.media3.exoplayer.audio.SonicAudioProcessorحذف شد. - روشهای
DownloadHelperمنسوخشده زیر برداشته شد:- سازنده
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])، درعوض ازDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)استفاده کنید. -
getRendererCapabilities(RenderersFactory)، عملکرد معادل را میتوان با ایجادDefaultRendererCapabilitiesListباRenderersFactory، و فراخوانیDefaultRendererCapabilitiesList.getRendererCapabilities()بهدست آورد. - روش
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)برداشته شد. ازPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)استفاده کنید و درعوض(MediaSession.Token) compatToken.getToken()را ارسال کنید.
- سازنده
- روش
1.6.0-rc02
۱۹ مارس ۲۰۲۵
از نسخه پایدار ۱.۶.۰ استفاده کنید.
1.6.0-rc01
۱۲ مارس ۲۰۲۵
از نسخه پایدار ۱.۶.۰ استفاده کنید.
1.6.0-beta01
۲۶ فوریه ۲۰۲۵
از نسخه پایدار ۱.۶.۰ استفاده کنید.
نسخه 1.6.0-alpha03
۶ فوریه ۲۰۲۵
از نسخه پایدار ۱.۶.۰ استفاده کنید.
نسخه 1.6.0-alpha02
۳۰ ژانویه ۲۰۲۵
از نسخه پایدار ۱.۶.۰ استفاده کنید.
نسخه 1.6.0-alpha01
۲۰ دسامبر ۲۰۲۴
از نسخه پایدار ۱.۶.۰ استفاده کنید.
نسخه 1.5
نسخه 1.5.1
۱۹ دسامبر ۲۰۲۴
androidx.media3:media3-*:1.5.1 منتشر شده است. نسخه ۱.۵.۱ حاوی این
ثبتها است.
- ExoPlayer:
- غیرفعال کردن استفاده از رمزگشایی ناهمگام در MediaCodec برای جلوگیری از مشکلات گزارششده مربوط به وقفه زمانی کدک با این میانای برنامهسازی کاربردی پلاتفرم (#1641).
- استخراجکنندهها:
- MP3: Don't stop playback early when a
VBRIframe's table of contents doesn't cover all the MP3 data in a file (#1904).
- MP3: Don't stop playback early when a
- ویدیو:
- Rollback of using
MediaCodecAdaptersupplied pixel aspect ratio values when provided while processingonOutputFormatChanged(#1371).
- Rollback of using
- نوشتار:
- رفع اشکال در
ReplacingCuesResolver.discardCuesBeforeTimeUsکه در آن نشانه فعال درtimeUs(قبلاً شروع شده اما هنوز پایان نیافته است) بهاشتباه رد شده بود (#۱۹۳۹).
- رفع اشکال در
- فراداده:
- استخراج شمارهگذاری دیسک/قطعه و ژانر از نظرات Vorbis به
MediaMetadata(#1958).
- استخراج شمارهگذاری دیسک/قطعه و ژانر از نظرات Vorbis به
نسخه ۱.۵.۰
۲۷ نوامبر ۲۰۲۴
androidx.media3:media3-*:1.5.0 منتشر شده است. نسخه ۱.۵.۰ حاوی این
ثبتها است.
- کتابخانه مشترک:
-
ForwardingSimpleBasePlayerاضافه شد که امکان بازارسال به پخشکننده دیگر را با اصلاحات جزئی فراهم میکند و درعینحال سازگاری کامل و مدیریت شنونده را تضمین میکند (#۱۱۸۳). SimpleBasePlayer.State.playlistرا با روشgetPlaylist()جایگزین کنید.- افزودن لغو برای
SimpleBasePlayer.State.Builder.setPlaylist()برای مشخص کردن مستقیمTimelineوTracksوMetadataفعلی بهجای ساختن ساختار فهرست پخش. -
minSdkرا به ۲۱ (Android Lollipop) افزایش دهید. این با همه کتابخانههای AndroidX دیگر همراستا است. - افزودن آرتیفکت
androidx.media3:media3-common-ktxکه عملکرد مختص Kotlin را که روی کتابخانه Common ساخته شده است ارائه میدهد - افزودن تابع افزونه تعلیق
Player.listenبرای چرخاندن یک کوروتین برای گوش دادن بهPlayer.Eventsبه کتابخانهmedia3-common-ktx. - حاشیهنویسیهای
@DoNotInlineرا از کلاسهای داخلی که بهصورت دستی از خط خارج شدهاند و برای جلوگیری از شکست درستیسنجی کلاس زمان اجرا طراحی شدهاند بردارید. نسخههای اخیر R8 اکنون بهطور خودکار تماسهای خارجاز خط مانند اینها را برای جلوگیری از خرابیهای زمان اجرا انجام میدهند (بنابراین دیگر نیازی به خارجاز خط کردن دستی نیست). همه کاربران Gradle این کتابخانه باید از قبل از نسخهای از افزایه Android Gradle استفاده کنند که از نسخهای از R8 استفاده میکند که این کار را انجام میدهد، بهدلیلcompileSdk = 35. کاربران کتابخانه با سیستمهای ساخت غیرGradle باید مطمئن شوند که مرحله کوچکسازی/مبهمسازی معادل R8 آنها فرایند خارجسازی خودکار مشابهی را انجام میدهد تا از شکستهای درستیسنجی کلاس زمان اجرا جلوگیری شود. این تغییر قبلاً در سایر کتابخانههای AndroidX انجام شده است.
-
- ExoPlayer:
- اکنون میتوان
MediaCodecRenderer.onProcessedStreamChange()را برای هر فایل رسانهای فراخوانی کرد. قبلاً برای اولین مورد فراخوانی نمیشد. برای فعال کردن این ویژگی، ازMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()استفاده کنید. PreloadMediaSource.PreloadControl.onPreloadErrorرا اضافه کنید تا به پیادهسازیهایPreloadMediaSource.PreloadControlاجازه دهید هنگام وقوع خطا اقدام کنند.BasePreloadManager.Listenerرا برای انتشار رویدادهای پیشبارکردن به برنامهها اضافه کنید.- اجازه دادن به تغییر زمان اتمام کلاینت SNTP و امتحان مجدد نشانیهای جایگزین درصورت اتمام زمان (#۱۵۴۰).
MediaCodecAdapter.Configuration.flagsبرداشته شد چون فیلد همیشه صفر بود.- به کاربر اجازه میدهد بلندگوی داخلی را برای بازپخش در Wear OS API 35+ (جایی که دستگاه پشتیبانی از این ویژگی را تبلیغ میکند) انتخاب کند.
- تماس مسدودکننده به
Context.getSystemService(Context.AUDIO_SERVICE)را تا زمانی که رسیدگی به تمرکز صوتی فعال شود بهتعویق بیندازید. این کار تضمین میکند که اگر مدیریت تمرکز صوتی فعال نباشد، تماس مسدودکننده انجام نشود (#۱۶۱۶). - Allow playback regardless of buffered duration when loading fails (#1571).
AnalyticsListener.onRendererReadyChanged()را اضافه کنید تا نشان دهد چه زمانی پردازنده مجزایی اجازه میدهد بازپخش آماده شود.- رفع مشکل
MediaCodec.CryptoExceptionکه گاهی بهعنوان «خطای زمان اجرای غیرمنتظره» گزارش میشد، وقتیMediaCodecدر حالت ناهمگام (رفتار پیشفرض در API 31+) اجرا میشد. - مجوز
bufferedDurationUsبهجایbufferedPositionUsباPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). همچنینDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSرا بهDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MSتغییر میدهد، سپس برنامهها باید مقداری را ارسال کنند که نشاندهنده مدت زمان خاصی از موقعیت شروع پیشفرض است که منبع رسانه مربوطه باید با این IntDef پیشبارگیری شود، بهجای موقعیت. - افزودن پیادهسازی
ForwardingRendererکه همه فراخوانیهای روش را به پردازنده دیگری بازارسال میکند (۱۷۰۳). - پیشبارگیری فهرست پخش را برای مورد بعدی در فهرست پخش اضافه کنید. برنامهها میتوانند
با فراخوانی
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)، پیشبارگیری را فعال کنند. پیشبارگذاری بهطور پیشفرض غیرفعال است. وقتی موافقت کرده باشید و برای اینکه تداخلی در بازپخش ایجاد نشود،DefaultLoadControlپیشبارگیری را محدود میکند تا فقط زمانی شروع و ادامه یابد که پخشکننده درحال بار کردن برای بازپخش نباشد. برنامهها میتوانند این رفتار را با پیادهسازیLoadControl.shouldContinuePreloading()بهطور مناسب تغییر دهند (مثلاً هنگام لغو این روش درDefaultLoadControl). پیادهسازی پیشفرضLoadControlپیشبارگیری را درصورتیکه برنامه از پیادهسازی سفارشیLoadControlاستفاده کند غیرفعال میکند. - افزودن روش
MediaSourceEventListener.EventDispatcher.dispatchEvent()برای اجازه دادن به فراخوانی رویدادهای شنوندگان زیرکلاس (۱۷۳۶). DefaultPreloadManager.Builderرا اضافه کنید که نمونههایDefaultPreloadManagerوExoPlayerرا با پیکربندیهای مشترک ثابت میسازد.- پارامتر
Renderer[]را ازLoadControl.onTracksSelected()بردارید زیرا پیادهسازیDefaultLoadControlمیتواند انواع جاریسازی را ازExoTrackSelection[]بازیابی کند. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])منسوخ شد و روش بهعنوان نهایی علامتگذاری شد تا از لغو شدن جلوگیری شود.DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])جدید باید بهجای آن استفاده شود.- گزارش کردن رویدادهای
MediaSourceEventListenerاز منابع ثانویه درMergingMediaSource. این امر منجر به گزارش رویدادهای بارگیری شروع/خطا/لغوشده/تکمیلشده برای زیرنویسهای بارگیری جانبیشده (آنهایی که باMediaItem.LocalConfiguration.subtitleConfigurationsاضافه شدهاند) میشود، که ممکن است بهصورت رویدادهای بارگیری تکراری صادرشده ازAnalyticsListenerظاهر شوند. - جلوگیری از توقف کامل بازپخش بهدلیل خطاهای زیرنویس و فراداده.
درعوض، قطعه مشکلدار غیرفعال میشود و بازپخش قطعههای باقیمانده ادامه مییابد (#۱۷۲۲).
- In new subtitle handling (during extraction), associated parse (e.g.
invalid subtitle data) and load errors (e.g. HTTP 404) are emitted
via
onLoadErrorcallbacks. - در مدیریت زیرنویس قدیمی (درطول پرداز زدن)، فقط خطاهای بارگیری مرتبط ازطریق فراخوانیهای برگشتی
onLoadErrorمنتشر میشوند، درحالیکه خطاهای تجزیه بدون اطلاع نادیده گرفته میشوند (این رفتار ازقبل وجود داشته است).
- In new subtitle handling (during extraction), associated parse (e.g.
invalid subtitle data) and load errors (e.g. HTTP 404) are emitted
via
- رفع اشکالی که در آن موارد فهرست پخش یا دورهها در جاریسازیهای DASH چنددورهای با مدتهایی که با محتوای واقعی مطابقت ندارند میتوانند باعث توقف فریم در پایان مورد شوند (#۱۶۹۸).
- افزودن تنظیمکننده به
SntpClientبرای تنظیم حداکثر زمان سپریشده از آخرین بهروزرسانی که پساز آن کلاینت دوباره مقداردهی اولیه میشود (#۱۷۹۴).
- اکنون میتوان
- ترانسفورماتور:
SurfaceAssetLoaderرا اضافه کنید که از صفبندی دادههای ویدیو در Transformer ازطریقSurfaceپشتیبانی میکند.ImageAssetLoaderورودی پشتیبانینشده را ازطریقAssetLoader.onErrorگزارش میکند بهجای اینکهIllegalStateExceptionرا رد کند.- تنظیم مدت تصویر بااستفاده از
MediaItem.Builder.setImageDurationMsبرای صادر کردن تصویر اجباری شود. - افزودن پشتیبانی صادر کردن برای وقفهها در توالیهای EditedMediaItems صوتی.
- انتخاب قطعه:
DefaultTrackSelector: اگر عوامل دیگر یکسان باشند، صدای مبتنی بر شیء را به صدای مبتنی بر کانال ترجیح دهید.
- استخراجکنندهها:
- به
Mp4ExtractorوFragmentedMp4Extractorاجازه دهید نمونههای H264 را که بهعنوان مرجع توسط نمونههای بعدی استفاده نمیشوند شناسایی کنند. - افزودن گزینه برای فعال کردن جستجوی مبتنی بر نمایه در
AmrExtractor. - فایلهای MP3 با بیشاز ۱۲۸ کیلوبایت بین فریمهای معتبر را بهعنوان ناقص درنظر بگیرید
(بهجای نامعتبر). این یعنی فایلهایی که در انتها دادههای غیرMP3 دارند،
بدون فراداده دیگری که طول بایتهای MP3 را نشان دهد، اکنون
بازپخش را در انتهای دادههای MP3 متوقف میکنند، بهجای اینکه با
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563) ناموفق شوند. - رفع مشکل مدیریت نمونه پیشپخش برای موقعیتهای شروع رسانه غیرکلیدفریم هنگام پردازش فهرستهای ویرایش در فایلهای MP4 (#1659).
- محاسبه نرخ فریم بااستفاده از مدت رسانه از
جعبه
mdhdدرMp4ExtractorوFragmentedMp4Extractorبهبود یافت (#۱۵۳۱). - مقیاسبندی نادرست
media_timeدر فهرستهای ویرایش MP4 را برطرف کنید. درحالیکهsegment_durationقبلاً بهدرستی بااستفاده از مقیاس زمانی فیلم مقیاسبندی شده بود،media_timeاکنون بهدرستی بااستفاده از مقیاس زمانی قطعه مقیاسبندی شده است، همانطور که توسط استاندارد قالب MP4 مشخص شده است (#1792). - Handle out-of-order frames in
endIndicescalculation for MP4 with edit list (#1797). - Fix media duration parsing in
mdhdbox of MP4 files to handle-1values (#1819). - افزودن پشتیبانی برای شناسایی جعبه
h263در فایلهای MP4 برای ویدیو H.263 (#۱۸۲۱). - افزودن پشتیبانی از قالب فایل رسانه پایه AC-4 Level-4 ISO (#1265).
- به
- منبع داده:
HttpEngineDataSourceرا بهروز کنید تا استفاده از نسخه S افزونه ۷ بهجای سطح میانای برنامهسازی کاربردی ۳۴ مجاز شود (#۱۲۶۲).DataSourceContractTest: تأیید کنید کهDataSource.getUri()شناسه منبع یکسان حلشده را برمیگرداند (همانطور که مستند شده است). در مواردی که این با شناسه منبع یکسان درخواستشده متفاوت است، آزمایشها میتوانند این موضوع را بااستفاده از روش جدیدDataSourceContractTest.TestResource.Builder.setResolvedUri()نشان دهند.DataSourceContractTest: Assert thatDataSource.getUri()andgetResponseHeaders()return their 'open' value after a failed call toopen()(due to a 'not found' resource) and before a subsequentclose()call.- Overriding
DataSourceContractTest.getNotFoundResources()allows test sub-classes to provide multiple 'not found' resources, and to provide any expected headers too. این کار امکان تمایز بین HTTP 404 (با سرصفحه) و «سرور پیدا نشد» (بدون سرصفحه) را فراهم میکند.
- Overriding
- صدا:
- اگر فراداده بلندی صدای CTA-2075 در رسانه وجود داشته باشد، بهطور خودکار در کدک پیکربندی میشود.
- هنگام جستجو، مطمئن شوید که صدا بهآرامی کاهش مییابد.
- رفع صدای پاپ که ممکن است هنگام جستجو رخ دهد.
- رفع خطای انباشتگی برش برای الگوریتم تغییر زیروبمی/ کشش زمانی Sonic.
- رفع اشکال در
SpeedChangingAudioProcessorکه باعث ازدست رفتن فریمهای خروجی میشود.
- ویدیو:
-
MediaCodecVideoRendererاز رمزگشایی نمونههایی که نه ارائه شدهاند و نه بهعنوان مرجع توسط نمونههای دیگر استفاده میشوند، اجتناب میکند. - در میانای برنامهسازی کاربردی ۳۵ و بالاتر،
MediaCodecAdapterاکنون ممکن استnullSurfaceرا درconfigureدریافت کند و با روش جدیدdetachOutputSurfaceتماس بگیرد تاSurfaceازپیش تنظیمشده را درصورت پشتیبانی کدک از آن بردارد (MediaCodecInfo.detachedSurfaceSupported). - هنگام پردازش
onOutputFormatChanged، از مقادیر نسبت ابعادی پیکسل ارائهشدهMediaCodecAdapter(درصورت ارائه) استفاده کنید (#۱۳۷۱). - افزودن راهحل برای مشکل دستگاه در Galaxy Tab S7 FE که باعث میشود جاریسازیهای H264 امن با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#۱۶۱۹).
- افزودن راهحل برای کدکهایی که بعداز آخرین نمونه بدون برگرداندن سیگنال پایان جاریسازی گیر میکنند.
-
- نوشتار:
- افزودن
VoiceSpanسفارشی و پر کردن آن برای بخشهای صدای WebVTT (#۱۶۳۲). - مطمئن شوید WebVTT در HLS با مُهرهای زمان زیرنویس بسیار بزرگ (که از
long۶۴ بیتی وقتی بهصورت میکروثانیه نشان داده میشود و در90,000MPEG timebase ضرب میشود سرریز میکند) نمایش داده میشود (#۱۷۶۳). - پشتیبانی از زیرنویسهای CEA-608 در محتوای Dolby Vision (#1820).
- رفع مشکل توقف پخش در جاریسازیهای چنددورهای DASH وقتی زیرنویسهای CEA-608 فعال است (#۱۸۶۳).
- افزودن
- فراداده:
- نوع
C.TRACK_TYPE_METADATAرا به قطعههای حاوی محتوای icy یا vnd.dvb.ait اختصاص دهید.
- نوع
- تصویر:
ExternallyLoadedImageDecoderرا برای ادغام سادهشده با کتابخانههای بار کردن تصویر خارجی مثل Glide یا Coil اضافه کنید.
- منبع داده:
-
FileDescriptorDataSourceاضافه شد،DataSourceجدیدی که میتوان از آن برای خواندن ازFileDescriptorاستفاده کرد (#۳۷۵۷).
-
- جلوه:
- افزودن راهحل
DefaultVideoFrameProcessorبرای مقیاسبندی جزئیSurfaceTexture.SurfaceTextureممکن است شامل مقیاسبندی کوچکی باشد که حاشیه ۱ تکسلی را در اطراف لبه میانگیر برشدادهشده قطع میکند. این مشکل اکنون برطرف شده است بهطوریکه خروجی به آنچه انتظار میرود نزدیکتر است. - سرعت
DefaultVideoFrameProcessor.queueInputBitmap()را افزایش دهید. درنتیجه، صادر کردن تصاویر به ویدیوها باTransformerسریعتر است.
- افزودن راهحل
- افزونه IMA:
- رفع اشکال مربوط به پاک کردن فهرست پخش که ممکن است باعث
ArrayIndexOutOfBoundsExceptionدرImaServerSideAdInsertionMediaSourceشود. - رفع اشکالی که در آن جاریسازیهای DAI درجشده در سمت سرور بدون پیشپخش میتواند
هنگام پخش بعداز آخرین
میانپخش منجر به
ArrayIndexOutOfBoundsExceptionشود (#۱۷۴۱).
- رفع اشکال مربوط به پاک کردن فهرست پخش که ممکن است باعث
- جلسه:
MediaButtonReceiver.shouldStartForegroundService(Intent)را اضافه کنید تا به برنامهها اجازه دهید با لغو این روش، فرمان پخش ورودی برای ازسرگیری بازپخش را سرکوب کنند. بهطور پیشفرض، سرویس همیشه شروع میشود و بازپخش را نمیتوان بدون ازکار افتادن سرویس توسط سیستم باForegroundServiceDidNotStartInTimeException(#1528) متوقف کرد.- رفع اشکالی که باعث میشد فرمانهای سفارشی ارسالشده از
MediaBrowserبهجای نوعMediaBrowserServiceCompatروش، بهMediaSessionCompat.Callbackارسال شود، وقتی به سرویس قدیمی متصل بود. این امر مانع از دریافت مقدار برگشتی واقعی ارسالشده توسط سرویس قدیمی توسطMediaBrowserشد (#۱۴۷۴). - Handle
IllegalArgumentExceptionthrown by devices of certain manufacturers when setting the broadcast receiver for media button intents (#1730). - دکمههای فرمان را برای فایلهای رسانهای اضافه کنید. این کار Media3 API را برای آنچه
با کتابخانه قدیمی با
MediaBrowserCompatبهعنوانCustom browse actionsشناخته میشد اضافه میکند. توجه داشته باشید که با Media3، دکمههای فرمان برای موارد رسانهای هم برایMediaBrowserو هم برایMediaControllerدردسترس است. پیادهسازی کنشهای مرور سفارشی را ببینید. * رفع اشکالی که در آن کنترلکننده Media3 گاهی نمیتوانست به برنامه جلسه اجازه دهد پساز درخواستplay()، سرویس پیشزمینهای را راهاندازی کند. -
CommandButton.Builder.setIconUriرا محدود کنید تا فقط شناسه منبع یکسان محتوا را بپذیرد. - Pass connection hints of a Media3 browser to the initial
MediaBrowserCompatwhen connecting to a legacyMediaBrowserCompat. این سرویس میتواند اشارههای اتصال را که بهعنوان اشارههای ریشه با اولین تماس بهonGetRoot()ارسال شدهاند دریافت کند. - رفع اشکالی که در آن
MediaBrowserمتصل به سرویس مرورگر قدیمی، خطای ارسالشده توسط سرویس را پساز مشترک شدن مرورگر درparentidدریافت نمیکرد. - بهبود رفتار همکنشپذیری، بهطوریکه مرورگر Media3 که به
MediaBrowserServiceقدیمی متصل است، هنگام مشترک شدن در والد، فرزندانparentIdرا دو بار درخواست نکند.
- میانای کاربر:
- Make the stretched/cropped video in
PlayerView-in-Compose-AndroidViewworkaround opt-in, due to issues with XML-based shared transitions. برنامههایی که ازPlayerViewدر داخلAndroidViewاستفاده میکنند بایدPlayerView.setEnableComposeSurfaceSyncWorkaroundرا فراخوانی کنند تا موافقت کنند (#1237، #1594). -
setFullscreenButtonStateرا بهPlayerViewاضافه کنید تا بهروزرسانیهای نماد دکمه تمامصفحه درصورت درخواست مجاز شود، یعنی خارج از باند و نه بهصورت واکنشی به تعامل کلیک (#1590، #184). - رفع اشکال مربوط به کار نکردن گزینه «هیچکدام» در انتخاب نوشتار درصورت وجود اولویتهای انتخاب قطعه نوشتاری تعریفشده توسط برنامه.
- Make the stretched/cropped video in
- افزونه DASH:
- افزودن پشتیبانی برای دورههایی که در وسط بخش شروع میشوند (#1440).
- افزونه پخش جریانی روان:
- رفع خطای
Bad magic number for Bundleهنگام پخش جاریسازیهای SmoothStreaming با قطعههای نوشتاری (#1779).
- رفع خطای
- افزونه RTSP:
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزودن پیمانه رمزگشای IAMF که از بازپخش فایلهای MP4 حاوی قطعههای IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی میکند.
- بازپخش با چیدمان استریو و همچنین 5.1 با فضاسازی بههمراه ردیابی سر اختیاری فعال است، اما پشتیبانی از بازپخش دوگوشی درحالحاضر دردسترس نیست.
- افزودن پشتیبانی از صفحه ۱۶ کیلوبایتی برای افزونههای رمزگشا در Android 15 (#1685).
- افزودن پیمانه رمزگشای IAMF که از بازپخش فایلهای MP4 حاوی قطعههای IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی میکند.
- افزونه Cast:
- پاک کردن خط زمان را پساز قطع اتصال CastSession متوقف کنید، که به برنامه فرستنده امکان میدهد پساز قطع اتصال، بازپخش را بهصورت محلی ازسر بگیرد.
- Populate CastPlayer's
DeviceInfowhen aContextis provided. این امکان پیوند دادنMediaSessionبهRoutingSessionرا فراهم میکند، که برای ادغام «تعویضکننده خروجی» (#۱۰۵۶) ضروری است.
- ابزارهای آزمایش:
DataSourceContractTestاکنون شامل آزمونهایی برای درستیسنجی موارد زیر است:- جریان ورودی
read positionبهروز شد. - میانگیر برونداد
offsetبهدرستی اعمال شده است.
- جریان ورودی
- برنامه نمایشی
- نشتهای حافظه در برنامه کوتاه نمایشی برطرف شد (#1839).
- برداشتن نمادهای منسوخشده:
- برداشتن
Player.hasPrevious،Player.hasPreviousWindow()منسوخشده. درعوض ازPlayer.hasPreviousMediaItem()استفاده کنید. - روش
Player.previous()منسوخشده را بردارید. درعوض ازPlayer.seekToPreviousMediaItem()استفاده کنید. - روش
DrmSessionEventListener.onDrmSessionAcquiredمنسوخشده را بردارید. - سازندههای
DefaultEncoderFactoryمنسوخشده را بردارید. درعوض ازDefaultEncoderFactory.Builderاستفاده کنید.
- برداشتن
نسخه 1.5.0-rc02
۱۹ نوامبر ۲۰۲۴
از نسخه پایدار ۱.۵.۰ استفاده کنید.
نسخه 1.5.0-rc01
۱۳ نوامبر ۲۰۲۴
از نسخه پایدار ۱.۵.۰ استفاده کنید.
نسخه 1.5.0-beta01
۳۰ اکتبر ۲۰۲۴
از نسخه پایدار ۱.۵.۰ استفاده کنید.
نسخه 1.5.0-alpha01
۱۰ سپتامبر ۲۰۲۴
از نسخه پایدار ۱.۵.۰ استفاده کنید.
نسخه ۱.۴.۰
نسخه ۱.۴.۱
۲۷ اوت ۲۰۲۴
androidx.media3:media3-*:1.4.1 منتشر شده است. نسخه ۱.۴.۱ حاوی این
ثبتها است.
- ExoPlayer:
- استخراجکنندهها:
- MP3: Fix
Searched too many byteserror by correctly ignoring trailing non-MP3 data based on the length field in anInfoframe (#1480).
- MP3: Fix
- نوشتار:
- TTML: Fix handling of percentage
tts:fontSizevalues to ensure they are correctly inherited from parent nodes with percentagetts:fontSizevalues. - رفع
IndexOutOfBoundsExceptionدرLegacySubtitleUtilبهدلیل مدیریت نادرست موردی که زمان شروع خروجی درخواستی بزرگتر یا مساوی زمان رویداد نهایی درSubtitle(#۱۵۱۶) است.
- TTML: Fix handling of percentage
- مدیریت حقوق دیجیتال:
- رفع خطای
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEدر دستگاههای دارای API 31+ هنگام پخش محتوای L1 Widevine. این خطا بهدلیل پیادهسازی ناقص روش چارچوبMediaDrm.requiresSecureDecoder(#۱۶۰۳) ایجاد شده است.
- رفع خطای
- جلوه:
- روش
release()را بهGlObjectsProviderاضافه کنید.
- روش
- جلسه:
- تبدیل کردن دو تکضرب روی
KEYCODE_HEADSETHOOKبه کنش «رفتن به بعدی»، همانطور که مستند شده است (#1493). - Handle
KEYCODE_HEADSETHOOKas a 'play' command inMediaButtonReceiverwhen deciding whether to ignore it to avoid aForegroundServiceDidNotStartInTimeException(#1581).
- تبدیل کردن دو تکضرب روی
- افزونه RTSP:
- رد شدن از «شرحهای رسانه» نامعتبر در تجزیه SDP (#1087).
نسخه ۱.۴.۰
۲۵ ژوئیه ۲۰۲۴
androidx.media3:media3-*:1.4.0 منتشر شده است. نسخه ۱.۴.۰ شامل این
ثبتها است.
- کتابخانه مشترک:
- بهجای نادیده گرفتن تماسهای جستجوی بدون عملیات احتمالی، آنها را به روشهای محافظتشده
BasePlayer.seekTo()وSimpleBasePlayer.handleSeek()بازارسال کنید. اگر این روشها را در پخشکننده سفارشی پیادهسازی میکنید، ممکن است لازم باشد این تماسهای اضافی را باmediaItemIndex == C.INDEX_UNSETمدیریت کنید. - برداشتن وابستگی کامپایل در شکرزدایی Java 8 بهبودیافته (#۱۳۱۲).
- Ensure the duration passed to
MediaItem.Builder.setImageDurationMs()is ignored for a non-imageMediaItem(as documented). Format.customDataرا برای ذخیره اطلاعات سفارشی ارائهشده توسط برنامه درباره نمونههایFormatاضافه کنید.
- بهجای نادیده گرفتن تماسهای جستجوی بدون عملیات احتمالی، آنها را به روشهای محافظتشده
- ExoPlayer:
BasePreloadManagerرا اضافه کنید که پیشبارگیری را برای چندین منبع براساس اولویتهای تعریفشده توسطrankingDataآنها هماهنگ میکند. سفارشیسازی با گسترش این کلاس امکانپذیر است. افزودنDefaultPreloadManagerکه ازPreloadMediaSourceبرای پیشبارگیری نمونههای رسانه منابع در حافظه استفاده میکند، و از عدد صحیحrankingDataکه نشاندهنده نمایه موردی در میانای کاربر است استفاده میکند.PlayerIdرا به اکثر روشهایLoadControlاضافه کنید تا پیادهسازیهایLoadControlبتوانند از چند بازیکن پشتیبانی کنند.- برداشتن
Buffer.isDecodeOnly()وC.BUFFER_FLAG_DECODE_ONLY. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. پیادهسازیهای سفارشیRendererباید بررسی کنند که زمان میانگیری حداقلBaseRenderer.getLastResetPositionUs()باشد تا تصمیم بگیرند که آیا نمونه باید نشان داده شود یا نه. پیادهسازیهای سفارشیSimpleDecoderمیتوانند درصورت نیازisAtLeastOutputStartTimeUs()را بررسی کنند یا میانگیرهای دیگر را باDecoderOutputBuffer.shouldBeSkippedعلامتگذاری کنند تا از آنها رد شوند. - اجازه دهید مقدار تهی توسط
TargetPreloadStatusControl.getTargetPreloadStatus(T)برگردانده شود تا نشان دهدMediaSourceباrankingDataدادهشده پیشبارگیری نشود. remove(MediaSource)را بهBasePreloadManagerاضافه کنید.reset()را بهBasePreloadManagerاضافه کنید تا همه منابع نگهداشتهشده را آزاد کنید درحالیکه نمونه مدیر پیشبارگیری را حفظ میکنید.-
ExoPlayer.setPriority()(وBuilder.setPriority()) را برای تعریف مقدار اولویت استفادهشده درPriorityTaskManagerو برای اهمیت MediaCodec از میانای برنامهسازی کاربردی ۳۵ اضافه کنید. - Fix issue with updating the last rebuffer time which resulted in
incorrect
bs(buffer starvation) key in CMCD (#1124). PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)را اضافه کنید تا نشان دهید منبع تا انتها بار شده است. این کار بهDefaultPreloadManagerو پیادهسازیهایPreloadMediaSource.PreloadControlسفارشی اجازه میدهد منبع بعدی را پیشبارگیری کنند یا اقدامات دیگری انجام دهند.- رفع اشکالی که در آن رد شدن از سکوت در پایان موارد میتواند باعث ایجاد استثنای بازپخش شود.
clearرا بهPreloadMediaSourceاضافه کنید تا دوره پیشبارگیری را نادیده بگیرید.- افزودن کد خطای جدید
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDکه هنگام بازیابی منابع کدک برای کارهای با اولویت بالاتر استفاده میشود. - اجازه دهید
AdsMediaSourceآگهیهای پیشپخش را قبلاز تکمیل آمادهسازی رسانه محتوای اولیه بار کند (#1358). - رفع اشکالی که در آن بازپخش به
STATE_ENDEDمنتقل میشد، هنگام آمادهسازی مجدد یک جاریسازی زنده DASH چنددورهای پساز اینکه دوره اصلی قبلاً از مانیفست حذف شده بود. - نام
onTimelineRefreshed()را بهonSourcePrepared()وonPrepared()را بهonTracksSelected()درPreloadMediaSource.PreloadControlتغییر دهید. همچنین نام IntDefs را درDefaultPreloadManager.Stageبهطور مقتضی تغییر دهید. - پشتیبانی آزمایشی برای زمانبندی پویا اضافه کنید تا کار را با چرخههای بیدار شدن CPU بهتر همتراز کنید و بیدار شدن را تا زمانی که پردازنده گرافیکی بتواند پیشرفت کند بهتأخیر بیندازید.
میتوانید این ویژگی را بااستفاده از
experimentalSetDynamicSchedulingEnabled()هنگام راهاندازی نمونه ExoPlayer خود فعال کنید. -
Renderer.getDurationToProgressUs()را اضافه کنید.Rendererمیتواند این روش را پیادهسازی کند تا مدتزمانی را که بازپخش باید جلو برود تا پردازنده پیشرفت کند به ExoPlayer برگرداند. اگرExoPlayerباexperimentalSetDynamicSchedulingEnabled()تنظیم شده باشد،ExoPlayerاین روش را هنگام محاسبه زمان برای زمانبندی تکلیف کاریاش فراخوانی میکند. MediaCodecAdapter#OnBufferAvailableListenerرا به هشدار اضافه کنید تا وقتی میانگیرهای ورودی و خروجی برای استفادهMediaCodecRendererدردسترس قرار گرفتند، هشدار دهد.MediaCodecRendererهنگام دریافت این فراخوانیهای برگشتی بهExoPlayerعلامت میدهد و اگرExoPlayerباexperimentalSetDynamicSchedulingEnabled()تنظیم شده باشد،ExoPlayerحلقه کاری خود را زمانبندی میکند تا پردازنده گرافیکی بتواند پیشرفت کند.- از کلاس داده برای روشهای
LoadControlبهجای پارامترهای فردی استفاده کنید. ExoPlayer.isReleased()را اضافه کنید تا بررسی شود که آیاExoplayer.release()فراخوانی شده است یا نه.ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()را اضافه کنید تا حداکثر موقعیتی را کهseekToPrevious()برای مورد قبلی جستجو میکند پیکربندی کنید (#۱۴۲۵).- برطرف کردن برخی ناهماهنگیهای تمرکز صوتی، مثلاً گزارش نکردن ازدست رفتن کامل یا گذرا تمرکز درحین توقف موقت پخشکننده (#1436).
- Fix potential
IndexOutOfBoundsExceptioncaused by extractors reporting additional tracks after the initial preparation step (#1476). EffectsدرExoPlayer.setVideoEffect()مُهرهای زمان را با حذف جابهجایی پردازنده دریافت خواهد کرد (#۱۰۹۸).- رفع
IllegalArgumentExceptionاحتمالی هنگام رسیدگی به خطای پخشکننده که هنگام خواندن پیشاز موعد در یک مورد فهرست پخش دیگر رخ داد (#۱۴۸۳).
- ترانسفورماتور:
audioConversionProcessوvideoConversionProcessرا بهExportResultاضافه کنید تا نشان دهید قطعه مربوطه در فایل خروجی چگونه ساخته شده است.- بررسیهای سطح H.264 بهینهسازی برش را کاهش دهید.
- پشتیبانی از تغییر بین رسانه ورودی SDR و HDR در یک توالی اضافه شد.
- پشتیبانی از جلوههای صوتی سطح ترکیببندی را اضافه کنید.
- پشتیبانی از تراتبدیل تصاویر Ultra HDR به ویدیوهای HDR را اضافه کنید.
- رفع مشکلی که باعث میشد
DefaultAudioMixerپساز بازنشانی و استفاده مجدد، مقدار بایت صحیح را خروجی ندهد. - رفع اشکال رمزگشا که در آن تعداد کانالهای صوتی هنگام مدیریت ورودی PCM به استریو محدود میشد.
- هنگام انتخاب قطعهها در
ExoPlayerAssetLoader، محدودیتهای تعداد کانال صوتی را نادیده بگیرید زیرا فقط برای بازپخش اعمال میشوند. - جایگزین کردن میانای
androidx.media3.transformer.Muxerباandroidx.media3.muxer.Muxerو برداشتنandroidx.media3.transformer.Muxer. - رفع مشکل بار کردن تصویر HEIC از طرحوارههای شناسه منبع یکسان محتوا. (#1373).
- مدت قطعه صوتی را در
AudioGraphInputتنظیم کنید تا همگامسازی صدا و تصویر بهبود یابد. - برداشتن فیلد
ExportResult.processedInputs. اگر از این فیلد برای جزئیات کدک استفاده میکنید، بهجای آن ازDefaultDecoderFactory.listenerاستفاده کنید. درصورت استثنای کدک، جزئیات کدک درExportException.codecInfoدردسترس خواهد بود.
- استخراجکنندهها:
- MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue (#7909). ادغام اصلاحات برای حل مشکلاتی که فقط در جاریسازیهای HLS با قاب I (#1150) و جاریسازیهای HLS با H.262 (#1126) ظاهر شدند.
- MP3: اندازه داده از فریم
Infoرا به اندازه گزارششده توسط جاریسازی زیربنایی (مثلاً اندازه فایل یا سرایند HTTPContent-Length) ترجیح دهید. This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate (#1376). - MP3: Use the frame count and other data in an
Infoframe (if present) to compute an average bitrate for constant bitrate seeking, rather than extrapolating from the bitrate of the frame after theInfoframe, which may be artificially small, e.g.PCUTframe (#1376). - استخراج قالب صوتی PCM در محفظههای AVI را اصلاح کنید.
- صدا:
- Fix DTS:X Profile 2 encoding attributes for passthrough playback (#1299).
- برای بازپخش بارگذارینشده، فیلد ردیابی را برای تکمیل جاریسازی
در
DefaultAudioSinkقبلاز فراخوانیAudioTrack.stop()بازنشانی کنید تاAudioTrack.StreamEventCallback#onPresentationEndedبهدرستی تشخیص دهد که چه زمانی همه دادههای معلق پخش شدهاند. - رفع اشکال در
SilenceSkippingAudioProcessorکه در آن انتقال بین قالبهای صوتی مختلف (برای مثال استریو به مونو) میتواند باعث شود پردازنده استثنایی را ایجاد کند (#۱۳۵۲). MediaCodecAudioRenderer.getDurationToProgressUs()را پیادهسازی کنید تا ExoPlayer بهطور پویا حلقه کار اصلی خود را برای زمانی که MediaCodecAudioRenderer میتواند پیشرفت کند زمانبندی کند.
- ویدیو:
- مشکلی که باعث میشد
Listener.onRenderedFirstFrame()هنگام عوض کردن سطح در اواسط بازپخش خیلی زود برسد برطرف شد. - منطق بازگشت رمزگشا برای Dolby Vision اصلاح شد تا درصورت نیاز از رمزگشای AV1 سازگار استفاده کند (#1389).
- رفع استثنای کدک که ممکن است بهدلیل فعال کردن پردازنده ویدیو در اواسط بازپخش ایجاد شود.
- مشکلی که باعث میشد
- نوشتار:
- مشکلی که باعث میشد زیرنویسهایی که قبلاز موقعیت جستجو شروع میشوند نادیده گرفته شوند برطرف شد. این مشکل فقط در Media3 1.4.0-alpha01 معرفی شده است.
- تغییر رفتار تجزیه زیرنویس پیشفرض بهگونهای که درطول استخراج اتفاق بیفتد
نه درطول رندر کردن (برای تفاوت بین استخراج و رندر کردن،
نمودار معماری ExoPlayer را ببینید).
- این تغییر را میتوان با فراخوانی هر دو
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)وTextRenderer.experimentalSetLegacyDecodingEnabled(true)لغو کرد. برای نحوه اتصال این مؤلفهها به نمونهExoPlayer، اسناد مربوط به سفارشیسازی را ببینید. این روشها (و همه پشتیبانیها از رمزگشایی زیرنویس قدیمی) در نسخهٔ پخش آتی برداشته خواهند شد. - برنامههایی که پیادهسازیهای سفارشی
SubtitleDecoderدارند باید آنها را بهروز کنند تا بهجای آنSubtitleParserرا پیادهسازی کنند (وSubtitleParser.FactoryبهجایSubtitleDecoderFactory).
- این تغییر را میتوان با فراخوانی هر دو
- PGS: رمزگشایی طول اجرا اصلاح شد تا
0بهعنوان نمایه رنگ حلوفصل شود، نه بهعنوان مقدار رنگ تحتاللفظی (#۱۳۶۷). - CEA-708: مقدار
rowLockنادیده گرفته شود. مشخصات CEA-708-E S-2023 بیان میکند کهrowLockوcolumnLockهر دو باید درست فرض شوند، صرفنظر از مقادیر موجود در جاریسازی (پشتیبانی ازcolumnLockپیادهسازی نشده است، بنابراین عملاً فرض میشود که همیشه نادرست است).- این مورد دراصل در یادداشتهای انتشار
1.3.0-alpha01گنجانده شده بود، اما این تغییر بهطور تصادفی قبلاز انتشار1.3.0-rc01برگردانده شد. اکنون این مشکل رفع شده است، بنابراین تغییر دوباره وجود دارد.
- این مورد دراصل در یادداشتهای انتشار
- CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive handling of the 'set pen location' command (#1315).
- رفع
IllegalArgumentExceptionازLegacySubtitleUtilوقتی که نمونه زیرنویس WebVTT حاوی هیچ نشانهای نباشد، مثلاً بهعنوان بخشی از جاریسازی DASH (#۱۵۱۶).
- فراداده:
- Fix mapping of MP4 to ID3 sort tags. قبلاً برچسبهای MP4 «مرتبسازی آلبوم» (
soal)، «مرتبسازی هنرمند» (soar)، و «مرتبسازی هنرمند آلبوم» (soaa) بهاشتباه به برچسبهای ID3TSO2،TSOA، وTSOPنگاشت میشدند (#۱۳۰۲). - رفع مشکل خواندن برچسبهای عددی MP4 (/iTunes)
gnre(ژانر) وtmpo(تمپو) وقتی مقدار بیشتر از یک بایت طول دارد. - Propagate ID3
TCONframe toMediaMetadata.genre(#1305).
- Fix mapping of MP4 to ID3 sort tags. قبلاً برچسبهای MP4 «مرتبسازی آلبوم» (
- تصویر:
- افزودن پشتیبانی از شبکههای ریزعکس DASH غیرمربعی (#1300).
- پشتیبانی از AVIF برای API 34+ اضافه شد.
nullرا بهعنوان پارامتر برایExoPlayer.setImageOutput()مجاز کنید تاImageOutputقبلاً تنظیمشده را پاک کند.
- منبع داده:
- پشتیبانی از شناسه منبع یکسان منبع خام
android.resource://package/idرا پیادهسازی کنید که در آنpackageبا بسته برنامه فعلی متفاوت است. این روش قبلاً برای کار کردن مستند نشده بود، اما روشی کارآمدتر برای دسترسی به منابع در بستهای دیگر نسبتبه دسترسی ازطریق نام است. - Eagerly check
urlis non-null in theDataSpecconstructors. این پارامتر قبلاً بهعنوان غیرتهی حاشیهنویسی شده است. - Allow
ByteArrayDataSourceto resolve a URI to a byte array duringopen(), instead of being hard-coded at construction (#1405).
- پشتیبانی از شناسه منبع یکسان منبع خام
- مدیریت حقوق دیجیتال:
- Allow setting a
LoadErrorHandlingPolicyonDefaultDrmSessionManagerProvider(#1271).
- Allow setting a
- جلوه:
- پشتیبانی از چند تغییر سرعت در یک
EditedMediaItemیاCompositionدرSpeedChangeEffect. - پشتیبانی از خروجی HLG و PQ از ورودی نقشه بیتی Ultra HDR.
- افزودن پشتیبانی از EGL_GL_COLORSPACE_BT2020_HLG_EXT که خروجی سطح HLG را در ExoPlayer.setVideoEffect و Debug SurfaceView مربوط به Transformer بهبود میبخشد.
- پیادهسازی ماتریس «همپوشانی» را بهروز کنید تا با برگرداندن مقادیر x و y اعمالشده در
setOverlayFrameAnchor()، با مستندات سازگار شود. اگر ازOverlaySettings.Builder.setOverlayFrameAnchor()استفاده میکنید، مقادیر x و y آنها را با ضرب کردن در-1برعکس کنید. - رفع اشکال خرابی
TimestampWrapperهنگام استفاده باExoPlayer#setVideoEffects(#821). - فضای کاری رنگ SDR پیشفرض را از رنگهای خطی به ویدیو BT 709 SDR الکتریکی تغییر دهید. همچنین گزینه سومی برای حفظ فضای رنگی اصلی ارائه دهید.
- Allow defining indeterminate z-order of EditedMediaItemSequences (#1055).
- حفظ محدوده درخشندگی ثابت در بخشهای مختلف محتوای HDR (از محدوده HLG استفاده میکند).
- پشتیبانی از همپوشانیهای Ultra HDR (نقشه بیتی) در محتوای HDR را اضافه کنید.
- اجازه دهید جلوههای
SeparableConvolutionقبلاز API 26 استفاده شوند. OverlaySettings.useHdrاستفادهنشده را بردارید چون محدوده پویای همپوشانی و قاب باید مطابقت داشته باشد.- پشتیبانی HDR برای
TextOverlayاضافه شد. درخشندگی رونهاد نوشتار را میتوان باOverlaySettings.Builder.setHdrLuminanceMultiplier()تنظیم کرد.
- پشتیبانی از چند تغییر سرعت در یک
- افزونه IMA:
- ارتقا دادن میانای برنامهسازی کاربردی که برای پخش جاریسازیهای آگهی درج آگهی پویا در برنامهها لازم است به نسخه پایدار.
replaceAdTagParameters(Map <String, String>)را بهImaServerSideAdInsertionMediaSource.AdLoaderاضافه کنید که امکان جایگزینی پارامترهای برچسب آگهی را در زمان اجرا فراهم میکند.- رفع اشکالی که در آن
VideoAdPlayer.VideoAdPlayerCallback.onError()هنگام رخ دادن خطای پخشکننده درطول بازپخش آگهی فراخوانی نمیشد (#۱۳۳۴). - Bump IMA SDK version to 3.33.0 to fix a
NullPointerExceptionwhen usingdata://ad tag URIs (#700).
- جلسه:
- پیشفرض
CommandButton.enabledرا بهtrueتغییر دهید و مطمئن شوید که مقدار میتواند برای کنترلکنندهها نادرست باقی بماند، حتی اگر فرمان مرتبط دردسترس باشد. - ثابتهای نماد را برای
CommandButtonاضافه کنید که باید بهجای منابع نماد سفارشی استفاده شود. -
MediaSessionService.isPlaybackOngoing()را اضافه کنید تا به برنامهها اجازه دهید پرسوجو کنند که آیا سرویس باید درonTaskRemoved()متوقف شود یا نه (#۱۲۱۹). MediaSessionService.pauseAllPlayersAndStopSelf()را اضافه کنید که بهراحتی امکان توقف موقت بازپخش همه جلسهها را فراهم میکند وstopSelf()را فراخوانی کنید تا چرخه حیاتMediaSessionServiceرا خاتمه دهد.MediaSessionService.onTaskRemoved(Intent)را لغو کنید تا پیادهسازی پیشفرض ایمنی ارائه شود که اگر بازپخش درحال انجام باشد، سرویس را در پیشزمینه درحال اجرا نگه میدارد و درغیراینصورت سرویس را متوقف میکند.- پنهان کردن نوار جستجو در اعلان رسانه برای جاریسازیهای زنده با تنظیم نکردن مدت در فراداده جلسه پلاتفرم (#۱۲۵۶).
- تبدیل
MediaMetadataبهMediaDescriptionCompatرا تراز کنید تا از همان ترتیب و منطق ترجیحی هنگام انتخاب ویژگیهای فراداده مانند media1 استفاده شود. MediaSession.sendError()را اضافه کنید که امکان ارسال خطاهای غیرمهلک به کنترلکننده Media3 را فراهم میکند. When using the notification controller (seeMediaSession.getMediaNotificationControllerInfo()), the custom error is used to update thePlaybackStateof the platform session to an error state with the given error information (#543).MediaSession.Callback.onPlayerInteractionFinished()را اضافه کنید تا به جلسهها اطلاع دهد که مجموعهای از تعاملات بازیکن از یک کنترلکننده خاص به پایان رسیده است.SessionErrorرا اضافه کنید و بهجای کد خطا از آن درSessionResultوLibraryResultاستفاده کنید تا اطلاعات بیشتری درباره خطا و نحوه حل آن (درصورت امکان) ارائه دهید.- کد برنامه آزمایشی کنترلکننده media3 را که میتواند برای آزمایش تعامل با برنامههایی که جلسه رسانه منتشر میکنند استفاده شود، منتشر کنید.
- Propagate extras passed to media3's
MediaSession[Builder].setSessionExtras()to a media1 controller'sPlaybackStateCompat.getExtras(). - خطاهای مهلک و غیرمهلک را به جلسه پلاتفرم و از آن نگاشت کنید.
PlaybackExceptionبه حالت خطای مهلکPlaybackStateCompatنگاشت شده است. SessionErrorارسالشده به کنترلکننده اعلان رسانه باMediaSession.sendError(ControllerInfo, SessionError)به خطای غیرمهلک درPlaybackStateCompatنگاشت میشود، یعنی کد خطا و پیام تنظیم شدهاند اما وضعیت جلسه پلاتفرم باSTATE_ERRORمتفاوت میماند. - Allow the session activity to be set per controller to override the
global session activity. فعالیت جلسه را میتوان برای کنترلکننده در زمان اتصال با ایجاد
ConnectionResultباAcceptedResultBuilder.setSessionActivivty(PendingIntent)تعریف کرد. پساز اتصال، فعالیت جلسه را میتوان باMediaSession.setSessionActivity(ControllerInfo, PendingIntent)بهروز کرد. - بهبود تکرار خطای تماسها با
MediaLibrarySession.Callback. اکنون میتوان تکرار خطا را بااستفاده ازMediaLibrarySession.Builder.setLibraryErrorReplicationMode()برای انتخاب نوع خطا یا انصراف از تکرار خطا که بهطور پیشفرض روشن است پیکربندی کرد.
- پیشفرض
- میانای کاربر:
- افزودن پشتیبانی از نمایش تصویر به
PlayerViewهنگام اتصال بهExoPlayer(#۱۱۴۴). - افزودن سفارشیسازی نمادهای مختلف در
PlayerControlViewازطریق مشخصههای xml برای امکانپذیر کردن ترسیمهای مختلف برای هر نمونهPlayerView، بهجای لغوهای سراسری (#1200). - رفع اشکال پلاتفرم که باعث کشیده شدن/برش ویدیو هنگام استفاده از
SurfaceViewدر ComposeAndroidViewدر API 34 میشد (#1237).
- افزودن پشتیبانی از نمایش تصویر به
- بارگیریها:
- مطمئن شوید که
DownloadHelperنمونههای منتشرنشدهRendererرا نشت نمیدهد، که درنهایت میتواند منجر به ازکار افتادن برنامه باIllegalStateException: Too many receivers, total of 1000, registered for pid(#۱۲۲۴) شود.
- مطمئن شوید که
- افزونه Cronet:
-
SocketTimeoutExceptionرا درCronetDataSourceرفع کنید. در برخیاز نسخههای Cronet، درخواست ارائهشده توسط callback همیشه یکسان نیست. این امر منجر به تکمیل نشدن فراخوانی برگشتی و اتمام مهلت درخواست میشود (https://issuetracker.google.com/328442628).
-
- افزونه HLS:
- اشکالی که در آن نمونههای EMSG معلق درانتظار ناپیوستگی با انحراف نادرست در
HlsSampleStreamWrapperواگذار میشدند و باعث ایجادIndexOutOfBoundsExceptionیاIllegalArgumentExceptionمیشدند برطرف شد (#1002). - رفع اشکالی که در آن فهرستهای پخش غیراصلی برای جاریسازیهای LL-HLS مدام بارگیری مجدد میشوند (#1240).
- رفع اشکالی که در آن فعال کردن CMCD برای HLS با بخشهای مقداردهی اولیه
منجر به
Source ErrorوIllegalArgumentExceptionمیشد. - رفع اشکالی که در آن فهرستهای پخش غیر اصلی درحال پخش درطول بازپخش زنده بازآوری نمیشوند (#1240).
- رفع اشکالی که در آن فعال کردن CMCD برای جاریسازیهای زنده HLS باعث
ArrayIndexOutOfBoundsException(#1395) میشود.
- اشکالی که در آن نمونههای EMSG معلق درانتظار ناپیوستگی با انحراف نادرست در
- افزونه DASH:
- افزونه Cast:
- رفع اشکالی که عنوان آلبوم
MediaQueueItemرا به هنرمند در فایل رسانهای Media3 تبدیل میکرد (#1255).
- رفع اشکالی که عنوان آلبوم
- ابزارهای آزمایش:
-
onInit()وonRelease()را درFakeRendererپیادهسازی کنید. - روشهای
TestPlayerRunHelper.runUntil()/playUntil()را تغییر دهید تا درصورت بروز خطاهای غیرمهلک (مثلاً خطاهای گزارششده بهAnalyticsListener.onVideoCodecError()) ناموفق شوند. برای غیرفعال کردن این رفتار، از زنجیره روش جدیدTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()استفاده کنید.
-
- برنامه نمایشی:
- از
DefaultPreloadManagerدر برنامه نمایشی کوتاه استفاده کنید. - اجازه دادن به تنظیم حالت تکرار با آرگومانهای
Intentاز خط فرمان (#۱۲۶۶). - از
HttpEngineDataSourceبهعنوانHttpDataSourceاستفاده کنید، درصورتیکه دستگاه از آن پشتیبانی کند.
- از
- برداشتن نمادهای منسوخشده:
- برداشتن
CronetDataSourceFactory. درعوض ازCronetDataSource.Factoryاستفاده کنید. - برخیاز سازندگان
DataSpecرا بردارید. درعوض ازDataSpec.Builderاستفاده کنید. - برداشتن روش
setContentTypePredicate(Predicate)ازDefaultHttpDataSource،OkHttpDataSource، وCronetDataSource. درعوض، از روش معادل در هرXXXDataSource.Factoryاستفاده کنید. OkHttpDataSourceسازنده وOkHttpDataSourceFactoryرا بردارید. درعوض ازOkHttpDataSource.Factoryاستفاده کنید.- برداشتن
PlayerMessage.setHandler(Handler). درعوض ازsetLooper(Looper)استفاده کنید. - برداشتن فیلد
Timeline.Window.isLive. بهجای آن از روشisLive()استفاده کنید. - برداشتن
DefaultHttpDataSourceسازنده. درعوض ازDefaultHttpDataSource.Factoryاستفاده کنید. - برداشتن
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. درعوض ازDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSاستفاده کنید. - برداشتن
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). درعوض ازMediaCodecInfo.canReuseCodec(Format, Format)استفاده کنید. - روش
DrmSessionManager.DUMMYوgetDummyDrmSessionManager()را بردارید. درعوض ازDrmSessionManager.DRM_UNSUPPORTEDاستفاده کنید. - برداشتن
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)،AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)،AudioRendererEventListener.onAudioInputFormatChanged(Format)،VideoRendererEventListener.onVideoInputFormatChanged(Format). درعوض از سربارگذاریهایی استفاده کنید کهDecoderReuseEvaluationمیگیرند. - برداشتن IntDef
RendererSupport.FormatSupportو ثابتهایFORMAT_HANDLED،FORMAT_EXCEEDS_CAPABILITIES،FORMAT_UNSUPPORTED_DRM،FORMAT_UNSUPPORTED_SUBTYPE،FORMAT_UNSUPPORTED_TYPE. درعوض، از IntDef و ثابتهای معادل درandroidx.media3.common.Cاستفاده کنید (مثلاًC.FORMAT_HANDLED). - برداشتن میانای
Bundleable. این شامل برداشتن همه فیلدهای ثابتBundleable.Creator<Foo> CREATORمیشود. تماسگیرندگان باید درعوض از روشهایBundle toBundle()وstatic Foo fromBundle(Bundle)در هر نوع استفاده کنند.
- برداشتن
نسخه 1.4.0-rc01
۱۰ ژوئیه ۲۰۲۴
از نسخه پایدار ۱.۴.۰ استفاده کنید.
نسخه 1.4.0-beta01
۲۶ ژوئن ۲۰۲۴
از نسخه پایدار ۱.۴.۰ استفاده کنید.
نسخه 1.4.0-alpha02
۷ ژوئن ۲۰۲۴
از نسخه پایدار ۱.۴.۰ استفاده کنید.
نسخه 1.4.0-alpha01
۱۷ آوریل ۲۰۲۴
از نسخه پایدار ۱.۴.۰ استفاده کنید.
نسخه ۱.۳.۰
نسخه ۱.۳.۱
۱۱ آوریل ۲۰۲۴
androidx.media3:media3-*:1.3.1 منتشر شده است. نسخه ۱.۳.۱ حاوی این
ثبتها است.
- کتابخانه مشترک:
Format.labelsرا اضافه کنید تا برچسبهای بومیسازیشده یا جایگزین دیگر مجاز شود.
- ExoPlayer:
- رفع مشکلی که باعث میشد
PreloadMediaPeriodنتواند جاریسازیها را هنگام پیشبارگیری مجدد حفظ کند. TrackSelectionResultصحیح مربوطه را برای دوره پخش در انتخاب مجدد قطعه اعمال کنید.- Start early-enabled renderers only after advancing the playing period when transitioning between media items (#1017).
- نوع پاسخ ناموجود به قانون proguard
-keepclasseswithmembersبرایDefaultVideoFrameProcessor.Factory.Builder.build()(#1187) اضافه شد.
- رفع مشکلی که باعث میشد
- ترانسفورماتور:
- افزودن راهحل برای استثنای ایجادشده بهدلیل عدم پشتیبانی
MediaMuxerاز مُهرهای زمان ارائه منفی قبلاز میانای برنامهسازی کاربردی ۳۰.
- افزودن راهحل برای استثنای ایجادشده بهدلیل عدم پشتیبانی
- انتخاب قطعه:
DefaultTrackSelector: قطعههای ویدیویی با نرخ فریم «معقول» (>=۱۰ فریم در ثانیه) را به قطعههای ویدیویی با نرخ فریم پایینتر یا تنظیمنشده ترجیح دهید. این کار تضمین میکند که پخشکننده قطعه ویدیویی «واقعی» را در MP4های استخراجشده از عکسهای حرکتی انتخاب کند که میتوانند حاوی دو قطعه HEVC باشند که یکی از آنها وضوح بالاتری دارد اما تعداد فریمهای آن بسیار کم است (#۱۰۵۱).
- استخراجکنندهها:
- رفع مشکل رد نشدن حاشیه هنگام خواندن تکههایی با اندازه فرد از فایلهای WAV (#1117).
- MP3:
Format.averageBitrateرا از قابهای فراداده مانندXINGوVBRIپر کنید. - MPEG-TS: واگرداندن تغییری که هدف آن اطمینان از رندر شدن آخرین قاب با ارسال آخرین واحد دسترسی جاریسازی به صف نمونه بود (#7909). دلیل این امر این است که این تغییر باعث ایجاد مشکلات جدیدی در جاریسازیهای HLS فقط I-frame (#1150) و جاریسازیهای HLS H.262 (#1126) میشود.
- صدا:
- اگر مقداردهی اولیه قطعه صوتی در حالت انتقال بار ناموفق بود، با غیرفعال کردن انتقال بار، بازیابی پردازنده گرافیکی را مجاز کنید.
- ویدیو:
- افزودن راهحل موقت برای مشکل دستگاه در Galaxy Tab S7 FE، Chromecast با Google TV، و Lenovo M10 FHD Plus که باعث میشود جاریسازیهای H265 با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند
- افزودن راهحل موقتی که تضمین میکند اولین فریم همیشه هنگام تونلسازی ارائه میشود، حتی اگر دستگاه این کار را بهطور خودکار طبق الزامات API انجام ندهد (#1169). (#966).
- رفع مشکلی که در آن مدیریت اطلاعات رنگ HDR باعث رفتار نادرست کدک میشود و از تغییر قالب تطبیقی برای قطعههای ویدیو SDR جلوگیری میکند (#1158).
- نوشتار:
- WebVTT: Prevent directly consecutive cues from creating spurious
additional
CuesWithTiminginstances fromWebvttParser.parse(#1177).
- WebVTT: Prevent directly consecutive cues from creating spurious
additional
- مدیریت حقوق دیجیتال:
- رفع مشکل
NoSuchMethodErrorکه ممکن است بهجایResourceBusyExceptionیاNotProvisionedExceptionدر برخیاز دستگاههای Android 14 توسط چارچوبMediaDrmایجاد شود (#۱۱۴۵).
- رفع مشکل
- جلوه:
- نگاشت رنگمایه PQ به SDR با تبدیل فضاهای رنگی بهبود یافته است.
- جلسه:
- میانای کاربر:
- اگر
Localeنتواند نام نمایشی را شناسایی کند، به حالت قبلی برمیگردد تا نام زبان قطعه صوتی را اضافه کند (#۹۸۸).
- اگر
- افزونه DASH:
- همه عناصر
Labelرا از مانیفست درFormat.labelsوارد کنید (#۱۰۵۴).
- همه عناصر
- افزونه RTSP:
- رد شدن از مقادیر اطلاعات جلسه خالی (برچسبهای i) در تجزیه SDP (#۱۰۸۷).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، MIDI، و غیره):
- افزونه MIDI را بهطور پیشفرض بهعنوان وابستگی محلی غیرفعال کنید زیرا به پیکربندی مخزن Maven اضافی نیاز دارد. کاربرانی که به این ماژول از وابستگی محلی نیاز دارند میتوانند آن را دوباره فعال کنند.
نسخه ۱.۳.۰
۶ مارس ۲۰۲۴
androidx.media3:media3-*:1.3.0 منتشر شده است. نسخه ۱.۳.۰ حاوی این
ثبتها است.
- کتابخانه مشترک:
- پشتیبانی از شناسه منبع یکسان منبع خام
android.resource://package/[type/]nameرا که در آنpackageبا بسته برنامه فعلی متفاوت است پیادهسازی کنید. این مورد همیشه برای کار کردن مستند شده است، اما تا کنون بهدرستی پیادهسازی نشده بود. - Normalize MIME types set by app code or read from media to be fully lower-case.
- آگهیها را با
MediaItemکامل بهجای یکUriدرAdPlaybackStateتعریف کنید. minSdkرا به ۱۹ (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تهی به بازیکن ارائه میدهد.- Emit
Player.Listener.onPositionDiscontinuityevent when silence is skipped (#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(#۸۸۳) را تولید کرده است کمک میکند. - Fix the regex used for validating custom Common Media Client Data (CMCD) key names by modifying it to only check for hyphen (#1028).
- توقف کدگذاری دوگانه پارامترهای پُرسمان CMCD (#۱۰۷۵).
- ترانسفورماتور:
- افزودن پشتیبانی برای مسطح کردن ویدیوهای حرکت آهسته H.265/HEVC SEF.
- افزایش سرعت تبدیل قالب، بهویژه برای ویرایشهای «برداشتن ویدیو».
- میانای برنامهسازی کاربردی را اضافه کنید تا مطمئن شوید فایل خروجی از فریم ویدیو شروع میشود. این کار میتواند خروجی عملیات برش را با پیادهسازیهای پخشکنندهای که اولین فریم ویدیو را تا مُهر زمان ارائه آن نشان نمیدهند سازگارتر کند (#۸۲۹).
- پشتیبانی برای بهینهسازی عملیات برش MP4 تکدارایی اضافه شد.
- افزودن پشتیبانی برای اطمینان از اینکه فریم ویدیو اولین مُهر زمان را در فایل خروجی داشته باشد. فایلهای خروجی را که با قاب سیاه در پخشکنندههای مبتنی بر iOS شروع میشوند اصلاح میکند (#۸۲۹).
- انتخاب قطعه:
- برای فعال کردن انتخاب قطعه تصویری،
DefaultTrackSelector.selectImageTrackرا اضافه کنید. TrackSelectionParameters.isPrioritizeImageOverVideoEnabledرا اضافه کنید تا تعیین کنید که اگر هم قطعه تصویری و هم قطعه ویدیویی دردسترس باشد، قطعه تصویری انتخاب شود یا نه. مقدار پیشفرضfalseاست که یعنی انتخاب قطعه ویدیو در اولویت است.
- برای فعال کردن انتخاب قطعه تصویری،
- استخراجکنندهها:
- افزودن تجزیه AV1C اضافی به استخراجکننده MP4 برای بازیابی
مقادیر
ColorInfo.colorSpace،ColorInfo.colorTransfer، وColorInfo.colorRange(#692). - MP3: از نرخ بیت ثابت (CBR) برای جستجوی فایلهای دارای سرصفحه
Infoاستفاده کنید (معادل CBR سرصفحهXing). قبلاً از جدول جستجوی سرصفحهInfoاستفاده میکردیم، اما این کار منجر به جستجوی با دقت کمتر نسبت به زمانی میشود که آن را نادیده بگیریم و فرض کنیم فایل CBR است. - MPEG2-TS: افزودن پشتیبانی از DTS، DTS-LBR، و DTS:X Profile2 (شماره ۲۷۵).
- استخراج انواع صدا از توصیفکنندههای TS و نگاشت آنها به پرچمهای نقش، به کاربران امکان میدهد انتخابهای آگاهانهتری برای قطعه صوتی داشته باشند (#۹۷۳).
- افزودن تجزیه AV1C اضافی به استخراجکننده MP4 برای بازیابی
مقادیر
- صدا:
- ویدیو:
- سازنده
MediaCodecVideoRendererرا که آرگومانVideoFrameProcessor.Factoryمیگیرد تغییر دهید و آن را با سازندهای که آرگومانVideoSinkProviderمیگیرد جایگزین کنید. برنامههایی که میخواهندVideoFrameProcessor.Factoryسفارشی تزریق کنند میتوانندCompositingVideoSinkProviderرا که ازVideoFrameProcessor.Factoryسفارشی استفاده میکند نمونهسازی کنند و ارائهدهنده سینک ویدیو را بهMediaCodecVideoRendererارسال کنند.
- سازنده
- نوشتار:
- رفع کردن سریالسازی نشانههای بیتمپ برای حل خطای
Tried to marshall a Parcel that contained Binder objectsهنگام استفاده ازDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: مقدار
rowLockنادیده گرفته شود. مشخصات CEA-708-E S-2023 بیان میکند کهrowLockوcolumnLockهر دو باید درست فرض شوند، صرفنظر از مقادیر موجود در جاریسازی (پشتیبانی ازcolumnLockپیادهسازی نشده است، بنابراین عملاً فرض میشود که همیشه نادرست است).
- رفع کردن سریالسازی نشانههای بیتمپ برای حل خطای
- تصویر:
- پشتیبانی از ریزعکسهای DASH را اضافه کنید. تصاویر شبکهای برش داده میشوند و ریزعکسهای تکی نزدیک به زمان ارائه آنها به
ImageOutputارائه میشوند.
- پشتیبانی از ریزعکسهای DASH را اضافه کنید. تصاویر شبکهای برش داده میشوند و ریزعکسهای تکی نزدیک به زمان ارائه آنها به
- مدیریت حقوق دیجیتال:
- نمونههای رمزگذارینشده «clear lead» را در محتوای DRM بلافاصله بهطور پیشفرض پخش کنید، حتی اگر کلیدهای نمونههای رمزگذاریشده بعدی هنوز آماده نباشد. اگر کلیدها هنوز آماده نباشند، این امر ممکن است منجر به توقف در اواسط بازپخش شود
وقتی موقعیت بازپخش به نمونههای رمزگذاریشده میرسد (اما قبلاً
بازپخش اصلاً تا این نقطه شروع نشده بود). این رفتار را میتوان با
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyیاDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysغیرفعال کرد.- افزونه IMA:
- رفع مشکلی که باعث میشد آگهیهای DASH و HLS بدون پسوند فایل مناسب پخش نشوند.
- نمونههای رمزگذارینشده «clear lead» را در محتوای DRM بلافاصله بهطور پیشفرض پخش کنید، حتی اگر کلیدهای نمونههای رمزگذاریشده بعدی هنوز آماده نباشد. اگر کلیدها هنوز آماده نباشند، این امر ممکن است منجر به توقف در اواسط بازپخش شود
وقتی موقعیت بازپخش به نمونههای رمزگذاریشده میرسد (اما قبلاً
بازپخش اصلاً تا این نقطه شروع نشده بود). این رفتار را میتوان با
- جلسه:
- غیرفعال کردن تشخیص دوکلیک برای برنامههای تلویزیون (#962).
- رفع مشکل عدم انتقال
MediaItem.RequestMetadataبا موارد اضافی غیرتهی بین کنترلکنندههای رسانه و جلسهها. - سازنده را به
MediaLibrarySession.Builderاضافه کنید که فقطContextرا بهجایMediaLibraryServiceمیگیرد.
- افزونه HLS:
HlsMediaPeriodرا به رؤیتپذیری بسته-خصوصی کاهش دهید. این نوع نباید مستقیماً از خارج از بسته HLS وابسته باشد.- Resolve seeks to beginning of a segment more efficiently (#1031).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، MIDI، و غیره):
- رمزگشای MIDI: نادیده گرفتن پیامهای رویداد SysEx (#۷۱۰).
- ابزارهای آزمایش:
- بازپخش در
TestPlayerRunHelper.playUntilPositionموقتاً متوقف نشود. آزمایش بازپخش را در حالت پخش نگه میدارد، اما پیشرفت را تا زمانی که آزمایش بتواند ادعاها و اقدامات بیشتری اضافه کند، تعلیق میکند.
- بازپخش در
- برنامه نمایشی:
- افزودن یک ماژول نمایشی کوتاه برای نمایش استفاده از
PreloadMediaSourceبا مورد استفاده محتوای کوتاه.
- افزودن یک ماژول نمایشی کوتاه برای نمایش استفاده از
نسخه 1.3.0-rc01
۲۲ فوریه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه 1.3.0-beta01
۷ فوریه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه 1.3.0-alpha01
۱۵ ژانویه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه ۱.۲.۰
نسخه ۱.۲.۱
۹ ژانویه ۲۰۲۴
- ExoPlayer:
- رفع مشکل جستجوی دستی خارج از محدوده
LiveConfiguration.min/maxOffsetکه باعث میشد افست بهmin/maxOffsetبرگردد. - رفع مشکل اشتباه بودن طرحبندی کانال OPUS و VORBIS برای کانالهای ۳، ۵، ۶، ۷، و ۸ (#۸۳۹۶).
- رفع مشکل مربوط به انتخاب قطعه پساز جستجو تا صفر در جاریسازی زنده که بهاشتباه اجازه میداد جاریسازی از موقعیت پیشفرض خود شروع شود (#۹۳۴۷).
- Fix the issue where new instances of
CmcdData.Factorywere receiving negative values forbufferedDurationUsfrom chunk sources, resulting in anIllegalArgumentException(#888).
- رفع مشکل جستجوی دستی خارج از محدوده
- ترانسفورماتور:
- رفع مشکلی که در آن کدبند در زمان پیکربندی بهدلیل تنظیم نرخ عملیاتی بالا، خطا میداد.
- استخراجکنندهها:
- قطعههای HEVC ثانویه (غیرقابلپخش) را در عکسهای حرکتی JPEG بهعنوان
ROLE_FLAG_ALTERNATEعلامتگذاری کنید تا بهدلیل وضوح بالاترشان بهطور خودکار برای بازپخش انتخاب نشوند. - رفع مشکل تشخیص قاب کلیدی اشتباه برای جاریسازیهای TS H264 (#864).
- Fix duration estimation of TS streams that are longer than 47721 seconds (#855).
- قطعههای HEVC ثانویه (غیرقابلپخش) را در عکسهای حرکتی JPEG بهعنوان
- صدا:
- رفع مشکل مدیریت EOS برای
SilenceSkippingAudioProcessorهنگام فراخوانی چندباره (#712).
- رفع مشکل مدیریت EOS برای
- ویدیو:
- افزودن راهحل برای مشکل دستگاه در Galaxy Tab S7 FE، Chromecast با Google TV، و Lenovo M10 FHD Plus که باعث میشود جاریسازیهای AVC با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#693).
- فراداده:
- رفع اشکالی که در آن
MediaMetadataفقط از نظرات Vorbis با کلیدهای حروف بزرگ پر میشد (#876). - Catch
OutOfMemoryErrorwhen parsing very large ID3 frames, meaning playback can continue without the tag info instead of playback failing completely.
- رفع اشکالی که در آن
- مدیریت حقوق دیجیتال:
- Extend workaround for spurious ClearKey
https://default.urllicense URL to API 33+ (previously the workaround only applied on API 33 exactly) (#837). - رفع
ERROR_DRM_SESSION_NOT_OPENEDهنگام جابهجایی از محتوای رمزگذاریشده به محتوای واضح بدون سطح متصل به پخشکننده. خطا بهدلیل استفاده نادرست از رمزگشای ایمن برای پخش محتوای واضح بود.
- Extend workaround for spurious ClearKey
- جلسه:
- کلیدها و مقادیر سفارشی را در
MediaMetadataCompatبهMediaMetadata.extrasوMediaMetadata.extrasبهMediaMetadataCompat(#756، #802) قرار دهید. - رفع مشکل همهفرستی
notifyChildrenChangedبرای کنترلکنندههای قدیمی (#644). - اشکالی که در آن تنظیم زمان منفی برای زمانسنج غیرفعال
setWhenاعلان باعث ازکارافتادن برخیاز دستگاهها میشد برطرف شد (#۹۰۳). - رفع مشکل
IllegalStateExceptionزمانی که کنترلکننده اعلان رسانه اتصال را هنگام درخواست اولین بهروزرسانی اعلان تکمیل نکرده است (#917).
- کلیدها و مقادیر سفارشی را در
- میانای کاربر:
- افزونه DASH:
- تجزیه «f800» بهعنوان تعداد کانال ۵ برای Dolby در مانیفست DASH (#688).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، MIDI، و غیره):
- افزونه Cast:
- Sanitize creation of a
Timelineto not crash the app when loading media fails on the cast device (#708).
- Sanitize creation of a
نسخه ۱.۲.۰
۱۵ نوامبر ۲۰۲۳
- کتابخانه مشترک:
- پارامتر
@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 که بهدلیل عدم شناسایی صحیح نمونههای فقط رمزگشایی ایجاد میشد (#۱۱۰۰۰).
- Add suppression of playback on unsuitable audio output devices (e.g. the
built-in speaker on Wear OS devices) when this feature is enabled via
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علاوهبرplaybackPositionUsموجود، حاوی پارامترهای اضافی ازجملهplaybackSpeedوlastRebufferRealtimeMsاست. - بهبود روش
ChunkSource.getNextChunk(long, long, List, ChunkHolder)در میانایChunkSourceبهChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Add additional fields to Common Media Client Data (CMCD) logging: buffer
starvation (
bs), deadline (dl), playback rate (pr) and startup (su) (#8699). - افزودن عمق بیت لومینانس و کرومینانس به
ColorInfo(#۴۹۱). - افزودن فیلدهای اضافی به ثبت گزارش «دادههای مشتری رسانه مشترک» (CMCD):
درخواست شیء بعدی (
nor) و درخواست محدوده بعدی (nrr) (#۸۶۹۹). - افزودن عملکرد برای انتقال دادههای Common Media Client Data (CMCD) بااستفاده از پارامترهای پُرسمان (#۵۵۳).
- رفع اشکال
ConcurrentModificationExceptionدرExperimentalBandwidthMeter(#612). - پارامتر
MediaPeriodIdرا بهCompositeMediaSource.getMediaTimeForChildMediaTimeاضافه کنید. - پشتیبانی از
ClippingMediaSource(و منابع دیگر با جابهجایی زمانی دوره/پنجره) درConcatenatingMediaSource2(#۱۱۲۲۶). BaseRenderer.onStreamChanged()را تغییر دهید تا آرگومانMediaPeriodIdرا نیز دریافت کند.
- ترانسفورماتور:
- تجزیه دادههای چرخش EXIF برای ورودیهای تصویر.
- نوع حاشیهنویسی
TransformationRequest.HdrModeو ثابتهای مرتبط با آن را بردارید. درعوض ازComposition.HdrModeو ثابتهای مرتبط با آن استفاده کنید. - برای رفع مشکلات چرخش،
OverlaySettingsرا ساده کنید. - پارامترهای
frameRateوdurationUsSampleConsumer.queueInputBitmapبهTimestampIteratorتغییر کرد.
- انتخاب قطعه:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessرا اضافه کنید تا بهطور صریح سازگاری غیریکپارچه را مجاز یا غیرمجاز کنید. پیشفرض روی رفتار فعلیtrueباقی میماند.
- استخراجکنندهها:
- MPEG-TS: با ارسال آخرین واحد دسترسی جاریسازی به صف نمونه، مطمئن شوید که آخرین قاب رندر شده است (#۷۹۰۹).
- Fix typo when determining
rotationDegrees.projectionPosePitchبهprojectionPoseRollتغییر کرد (#۴۶۱). - این فرض را که نمونههای
Extractorرا میتوان مستقیماً باinstanceofبازرسی کرد بردارید. اگر میخواهید به جزئیات پیادهسازیExtractorدسترسی زمان اجرا داشته باشید، ابتدا بایدExtractor.getUnderlyingInstanceرا فراخوانی کنید. -
BmpExtractorرا اضافه کنید. -
WebpExtractorرا اضافه کنید. -
HeifExtractorرا اضافه کنید. - پشتیبانی از QuickTime classic
به
Mp4Extractorاضافه شد.
- صدا:
- پشتیبانی از PCM ۲۴/۳۲ بیتی big-endian در MP4 و Matroska اضافه شد و کدبندی PCM برای
lpcmدر MP4 تجزیه شد. - پشتیبانی از استخراج صدای Vorbis در MP4 اضافه شد.
AudioSink.getFormatOffloadSupport(Format)را اضافه کنید که سطح پشتیبانی از باربرداری را که سینک میتواند برای قالب ازطریقDefaultAudioOffloadSupportProviderارائه دهد بازیابی میکند. این متدAudioOffloadSupportجدیدی را برمیگرداند که حاویisFormatSupported،isGaplessSupported، وisSpeedChangeSupportedاست.AudioSink.setOffloadMode()را که ازطریق آن پیکربندی تخلیه بار در سینک صوتی پیکربندی میشود اضافه کنید. پیشفرضAudioSink.OFFLOAD_MODE_DISABLEDاست.- میتوانید «تخلیه بار» را ازطریق
setAudioOffloadPreferenceدرTrackSelectionParametersفعال کنید. اگر اولویت تنظیمشده فعال باشد، دستگاه از باربرداری برای قالب پشتیبانی کند، و انتخاب قطعه یک قطعه صوتی تکی باشد، باربرداری صوتی فعال خواهد شد. - اگر
audioOffloadModePreferenceرویAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDتنظیم شده باشد،DefaultTrackSelectorفقط قطعه صوتی را انتخاب میکند و فقط درصورتیکه قالب آن قطعه در حالت باربرداری پشتیبانی شود. اگر هیچ قطعه صوتیای در حالت بارگذاری پشتیبانی نشود، هیچ قطعهای انتخاب نخواهد شد. - Disabling gapless support for offload when pre-API level 33 due to playback position issue after track transition.
- پارامتر
enableOffloadرا از امضای روشDefaultRenderersFactory.buildAudioSinkبردارید. - برداشتن روش
DefaultAudioSink.Builder.setOffloadMode. - برداشتن مقدار intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - پشتیبانی از فراداده بدون وقفه Opus درطول بازپخش بارگذاریشده را اضافه میکند.
- Allow renderer recovery by disabling offload if failed at first write (#627).
- «زمانبندی انتقال بار» را بهطور پیشفرض برای بازپخش انتقال بار فقط-صوتی فعال کنید.
ExoPlayer.experimentalSetOffloadSchedulingEnabledوAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChangedرا حذف کنید.- نام
onExperimentalSleepingForOffloadChangedبهonSleepingForOffloadChangedو نامonExperimentalOffloadedPlaybackبهonOffloadedPlaybackتغییر کرد. - واسطها و تعاریف مربوط به حالت تخلیه بار صوتی
TrackSelectionParametersرا به کلاس داخلیAudioOffloadPreferencesمنتقل کنید. - افزودن تماسهای برگشتی
onAudioTrackInitializedوonAudioTrackReleasedبهAnalyticsListener،AudioRendererEventListenerوAudioSink.Listener. - رفع مشکل سرریز منفی میانگیر صوتی DTS Express (#650).
- رفع اشکالی که در آن بررسی قابلیتهای E-AC3-JOC یک
IllegalArgumentException(#677) را ایجاد میکند.
- پشتیبانی از PCM ۲۴/۳۲ بیتی big-endian در MP4 و Matroska اضافه شد و کدبندی PCM برای
- ویدیو:
- به
MediaCodecVideoRendererاجازه دهید ازVideoFrameProcessor.Factoryسفارشی استفاده کند. - رفع اشکالی که در آن اگر جاریسازی صوتی با مُهرهای زمان منفی شروع میشد، فریم اول قابلپرداخت نبود (#291).
- به
- نوشتار:
- برداشتن
ExoplayerCuesDecoder. قطعههای نوشتاری باsampleMimeType = application/x-media3-cuesاکنون مستقیماً توسطTextRendererبدون نیاز به نمونهSubtitleDecoderمدیریت میشوند.
- برداشتن
- فراداده:
MetadataDecoder.decodeدیگر برای نمونههای «فقط رمزگشایی» فراخوانده نخواهد شد چون پیادهسازی باید درهرصورت null برگرداند.
- جلوه:
- افزودن
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)ورودی نگاشت بیتی صفبندیشده براساس مُهر زمان. VideoFrameProcessor.registerInputStream()را به غیرمسدودکننده تغییر دهید. برنامهها بایدVideoFrameProcessor.Listener#onInputStreamRegistered()را پیادهسازی کنند.- پارامترهای
frameRateوdurationUsVideoFrameProcessor.queueInputBitmapبهTimestampIteratorتغییر کرد.
- افزودن
- افزونه IMA:
- رفع اشکال مربوط به زمانی که جاریسازی زنده DASH چنددورهای که اولین مورد در فهرست پخش نیست میتواند استثنا ایجاد کند (#571).
- قبلاز فراخوانی
AdsLoader.destroy()، StreamManager را منتشر کنید - Bump IMA SDK version to 3.31.0.
- جلسه:
- رفتار سرویس پیشزمینهای اعلانها را روی
FOREGROUND_SERVICE_IMMEDIATEدرDefaultMediaNotificationProviderتنظیم کنید (#۱۶۷). - فقط از
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()بالاتر از میانای برنامهسازی کاربردی ۳۱ استفاده کنید تا با مشکل میانای برنامهسازی کاربردی منسوخشده در دستگاههای Samsung مواجه نشوید (#۱۶۷). - از کنترلکننده اعلان رسانه بهعنوان پراکسی برای تنظیم فرمانهای دردسترس و چیدمان سفارشی استفادهشده برای پر کردن اعلان و جلسه پلاتفرم استفاده کنید.
- رویدادهای دکمه رسانه را که توسط
MediaSessionService.onStartCommand()در Media3 دریافت میشود تبدیل کنید، بهجای اینکه آنها را به جلسه پلاتفرم و سپس به Media3 هدایت کنید. با این کار، کنترلکننده تماسگیرنده همیشه کنترلکننده اعلان رسانه است و برنامهها میتوانند بهراحتی تماسهای دریافتی از اعلان را به همان روش در همه سطوح API پشتیبانیشده تشخیص دهند. - رفع اشکالی که در آن
MediaController.getCurrentPosition()هنگام اتصال بهMediaSessionCompatقدیمی پیشرفت نمیکند. - برای راحتی،
MediaLibrarySession.getSubscribedControllers(mediaId)را اضافه کنید. MediaLibrarySession.Callback.onSubscribe()را لغو کنید تا دردسترس بودن شناسه والدینی را که کنترلکننده در آن مشترک است تأیید کنید. اگر موفقیتآمیز باشد، اشتراک پذیرفته میشود وnotifyChildrenChanged()فوراً فراخوانی میشود تا به مرورگر اطلاع دهد (#۵۶۱).- افزودن واحد نمایشی جلسه برای Automotive OS و فعال کردن جلسه نمایشی برای Android Auto.
- وقتی
COMMAND_GET_TIMELINEبرای کنترلکننده اعلان رسانه دردسترس نیست، صف جلسه چارچوب را تنظیم نکنید. با Android Auto بهعنوان کنترلکننده مشتری که از جلسه چارچوب میخواند، این امر باعث میشود که دکمهqueueدر میانای کاربر Android Auto نمایش داده نشود (#339). - استفاده از
DataSourceBitmapLoaderبهجایSimpleBitmapLoaderبهطور پیشفرض (#۲۷۱، #۳۲۷). MediaSession.Callback.onMediaButtonEvent(Intent)را اضافه کنید که به برنامهها اجازه میدهد مدیریت رویداد دکمه رسانه پیشفرض را لغو کنند.
- رفتار سرویس پیشزمینهای اعلانها را روی
- میانای کاربر:
- پیادهسازی
Player.Listenerرا برای دستگاههای Wear OS اضافه کنید که توقف موقت بازپخش بهدلیلPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTرا با راهاندازی کادر گفتگوی سیستم برای اجازه دادن به کاربر برای متصل کردن خروجی صوتی مناسب (مثلاً هدفون بلوتوث) مدیریت میکند. اگر دستگاه مناسبی در مدت زمان وقفه قابلپیکربندی (پیشفرض ۵ دقیقه است) متصل شود، شنونده بهطور خودکار بازپخش را ازسر میگیرد.
- پیادهسازی
- بارگیریها:
- نوع سرویس پیشزمینهای «همگامسازی داده» را برای
DownloadServiceبرای سازگاری با Android 14 اعلام کنید. هنگام استفاده از این سرویس، برنامه همچنین بایدdataSyncرا بهعنوانforegroundServiceTypeدر مانیفست اضافه کند و اجازهFOREGROUND_SERVICE_DATA_SYNCرا اضافه کند (#۱۱۲۳۹).
- نوع سرویس پیشزمینهای «همگامسازی داده» را برای
- افزونه HLS:
- بازآوری فهرست پخش زنده HLS با فاصلهای که از آخرین زمان شروع بارگیری محاسبه شده است، نه آخرین زمان تکمیل بارگیری (#663).
- افزونه DASH:
- مجاز کردن چند شناسه DASH یکسان در نشانی وب الگوی بخش.
- افزودن پشتیبانی آزمایشی برای تجزیه زیرنویسها درطول استخراج. این
پشتیبانی بهتری برای ادغام زیرنویسهای همپوشان دارد، ازجمله
حل مشکل لرزش هنگام انتقال بین بخشهای زیرنویس. میتوانید
این ویژگی را بااستفاده از
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#۲۸۸) فعال کنید.
- افزونه RTSP:
- رفع شرایط رقابتی که میتوانست منجر به
IndexOutOfBoundsExceptionهنگام بازگشت به TCP شود، یا توقف پخش در برخی شرایط. - Check state in RTSP setup when returning loading state of
RtspMediaPeriod(#577). - Ignore custom Rtsp request methods in Options response public header (#613).
- از مقدار زماناتمام «پاسخ راهاندازی RTSP» در بازه زمانی ارسال درخواستهای «گزینههای RTSP» فعالنگهدار استفاده کنید (#۶۶۲).
- رفع شرایط رقابتی که میتوانست منجر به
- افزونههای رمزگشا (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تغییر کرد (#۷۳۴).
- افزونه Leanback:
- رفع اشکالی که در آن غیرفعال کردن سطح میتواند باعث ایجاد
ArithmeticExceptionدر کد Leanback شود (#617).
- رفع اشکالی که در آن غیرفعال کردن سطح میتواند باعث ایجاد
- ابزارهای آزمایش:
TestExoPlayerBuilderوFakeClockرا با آزمایشهای Espresso UI و آزمایشهای 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.2.0-beta01
۱۹ اکتبر ۲۰۲۳
از نسخه پایدار ۱.۲.۰ استفاده کنید.
نسخه 1.2.0-alpha02
۲۹ سپتامبر ۲۰۲۳
از نسخه پایدار ۱.۲.۰ استفاده کنید.
نسخه 1.2.0-alpha01
۱۷ اوت ۲۰۲۳
از نسخه پایدار ۱.۲.۰ استفاده کنید.
نسخه ۱.۱.۰
نسخه ۱.۱.۱
۱۶ اوت ۲۰۲۳
- کتابخانه مشترک:
- Remove accidentally added
multidexdependency from all modules (#499).
- Remove accidentally added
- ExoPlayer:
- رفع مشکل در
PlaybackStatsListenerکه در آنPlaybackStatsجعلی پساز پاک شدن فهرست پخش ایجاد میشود. - افزودن فیلدهای اضافی به ثبت دادههای Common Media Client Data (CMCD): قالب جاریسازی (sf)، نوع جاریسازی (st)، نسخه (v)، بالاترین نرخ بیت (tb)، مدت شیء (d)، توان عملیاتی اندازهگیریشده (mtp)، و نوع شیء (ot) (#8699).
- رفع مشکل در
- صدا:
- اشکالی که باعث میشد
Player.getState()هنگام پخش فایلهای بسیار کوتاه هرگز بهSTATE_ENDEDمنتقل نشود برطرف شد (#۵۳۸).
- اشکالی که باعث میشد
- انتقال بار صوتی:
- پیشافزودن صفحههای «سرایند شناسه Ogg» و «سرایند نظر» به جریان بیت برای بازپخش Opus بارگذاریشده مطابق با RFC 7845.
- ویدیو:
- H.265/HEVC: رفع مشکل تجزیه اطلاعات تصویر مرجع کوتاهمدت و بلندمدت SPS.
- نوشتار:
- CEA-608: منطق کوتاه کردن نشانه تغییر کرد تا فقط نوشتار نمایان درنظر گرفته شود. قبلاً وقتی طول نشانه به ۳۲ نویسه محدود میشد، تورفتگی و فاصله پرش گنجانده میشد (که ازنظر فنی طبق مشخصات درست بود) (#11019).
- افزونه IMA:
- Bump IMA SDK version to 3.30.3.
- جلسه:
- چیدمان سفارشی را به وضعیت کنترلکننده اضافه کنید و یک گیرنده برای دسترسی به آن ارائه دهید. وقتی چیدمان سفارشی تغییر میکند،
MediaController.Listener.onCustomLayoutChangedفراخوانی میشود. برنامههایی که میخواهند چیدمانهای سفارشی متفاوتی را به کنترلکنندههای Media3 مختلف ارسال کنند، میتوانند این کار را درMediaSession.Callback.onConnectبااستفاده ازAcceptedResultBuilderانجام دهند تا مطمئن شوند که چیدمان سفارشی پساز تکمیل اتصال برای کنترلکننده دردسترس است. - مواردی را که
MediaLibraryServiceLegacyStubخطایی بهResultارسال میکرد که از آن پشتیبانی نمیکرد و باعث ایجادUnsupportedOperationExceptionمیشد برطرف کنید (#78). - رفع مشکل نحوه ایجاد
VolumeProviderCompatتوسطPlayerWrapperبا تعیینvolumeControlTypeازطریق فرمانهای قدیمی (COMMAND_ADJUST_DEVICE_VOLUMEوCOMMAND_SET_DEVICE_VOLUME) و فرمانهای جدید (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSوCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#۵۵۴).
- چیدمان سفارشی را به وضعیت کنترلکننده اضافه کنید و یک گیرنده برای دسترسی به آن ارائه دهید. وقتی چیدمان سفارشی تغییر میکند،
نسخه ۱.۱.۰
۵ ژوئیه ۲۰۲۳
- کتابخانه مشترک:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
- افزودن فرمان به «پخشکننده»:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- افزودن روشهای سربارگذاریشده به Player که به کاربران اجازه میدهد پرچمهای میزان صدا را مشخص کنند:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
Builderرا برایDeviceInfoاضافه کنید و سازنده موجود را منسوخ کنید.DeviceInfo.routingControllerIdرا اضافه کنید تا شناسه کنترلکننده مسیریابی را برای بازپخشهای ازراهدور مشخص کنید.-
Player.replaceMediaItem(s)را بهعنوان میانبر برای افزودن و برداشتن موارد در همان موقعیت اضافه کنید (#۸۰۴۶).
- ExoPlayer:
- Allow ExoPlayer to have control of device volume methods only if
explicitly opted in. از
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، گنجانده شدهاند (#۸۶۹۹). ساختار میانای برنامهسازی کاربردی و روشهای میانای برنامهسازی کاربردی:- ثبت CMCD بهطور پیشفرض غیرفعال است، از
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)برای فعال کردن آن استفاده کنید. - همه کلیدها بهطور پیشفرض فعال هستند،
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)را لغو کنید تا کلیدهای ثبتشده را فیلتر کنید. - برای فعال کردن ثبت گزارش کلید سفارشی،
CmcdConfiguration.RequestConfig.getCustomData()را لغو کنید.
- ثبت CMCD بهطور پیشفرض غیرفعال است، از
- افزودن کنش اضافی به مانیفست نسخه نمایشی اصلی برای آسانتر کردن
شروع برنامه نسخه نمایشی با فایل
*.exolist.jsonسفارشی (#۴۳۹). - برای استفاده از
Effectدرطول بازپخش ویدیو،ExoPlayer.setVideoEffects()را اضافه کنید. -
SampleQueueرا بهروز کنید تاsourceIdرا بهجایintبهعنوانlongذخیره کند. این کار امضاهای روشهای عمومیSampleQueue.sourceIdوSampleQueue.peekSourceIdرا تغییر میدهد. - پارامترهایی به روشهای
LoadControlshouldStartPlaybackو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)هنگام فراخوانی در فهرست پخش خالی.
- Allow ExoPlayer to have control of device volume methods only if
explicitly opted in. از
- ترانسفورماتور:
- برداشتن
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). درعوض ازExoPlayerAssetLoader.Factory(MediaSource.Factory)وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)استفاده کنید. - برداشتن
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - رفع اشکالی که در آن اگر پایان جاریسازی ویدیو در لحظهای که فریم ورودی درانتظار پردازش بود علامتگذاری میشد، تبدیل ممکن بود گیر کند (منجر به وقفه زمانی همفرست شود).
- برای گسترش پشتیبانی، کدکها را بهجای استفاده از ابزارهای کمکی
findDecoder/EncoderForFormat، ازطریقMediaCodecListپُرسمان کنید. - پیکربندی قاب B را در
DefaultEncoderFactoryبردارید چون در برخی دستگاهها کار نمیکند.
- برداشتن
- انتخاب قطعه:
- افزودن
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeکه بهطور پیشفرض غیرفعال است. وقتی فعال باشد،DefaultTrackSelectorدرصورت تغییر قابلیتهای پردازشکننده، انتخاب قطعه جدیدی را راهاندازی میکند.
- افزودن
- استخراجکنندهها:
- صدا:
- رفع اشکالی که در آن برخیاز بازپخشها هنگام فعال بودن تونلسازی و
AudioProcessorsناموفق بودند، مثلاً برای برش بدون وقفه (#۱۰۸۴۷). - قابهای Opus در بستههای Ogg در بازپخشهای مستقیم (برونسپاری) کپسولهسازی شوند.
- برونیابی موقعیت فعلی درطول خواب با زمانبندی بارگذاری.
Renderer.release()وAudioSink.release()را برای آزاد کردن منابع در پایان چرخه حیات پخشکننده اضافه کنید.- به تغییرات قابلیتهای صوتی در
DefaultAudioSinkگوش دهید. پارامتر الزامیcontextرا در سازندهDefaultAudioSinkاضافه کنید، که با آنDefaultAudioSinkبهعنوان شنونده درAudioCapabilitiesReceiverثبت میشود و هنگام اطلاع از تغییر قابلیتها، ویژگیaudioCapabilitiesخود را بهروز میکند. - Propagate audio capabilities changes via a new event
onAudioCapabilitiesChangedinAudioSink.Listenerinterface, and a new interfaceRendererCapabilities.Listenerwhich triggersonRendererCapabilitiesChangedevents. ChannelMixingAudioProcessorرا برای اعمال مقیاسبندی/ترکیب به کانالهای صوتی اضافه کنید.- مقدار عدد صحیح جدید
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEرا بهDecoderDiscardReasonsاضافه کنید تا وقتی حالت کنارگذر پساز تغییر قابلیتهای صوتی امکانپذیر است، رمزگشای صوتی کنار گذاشته شود. - افزودن پشتیبانی از بازپخش مستقیم برای DTS Express و DTS:X (#335).
- رفع اشکالی که در آن برخیاز بازپخشها هنگام فعال بودن تونلسازی و
- ویدیو:
MediaCodecVideoRendererرا وادار کنید تا وقتی پردازنده غیرفعال است،VideoSizeرا با عرض و ارتفاع ۰ گزارش کند.Player.Listener.onVideoSizeChangedis called accordingly whenPlayer.getVideoSize()changes. با این تغییر، اندازه ویدیو ExoPlayer باMediaCodecVideoRendererدارای عرض و ارتفاع ۰ است وقتیPlayer.getCurrentTracksاز ویدیو پشتیبانی نمیکند، یا اندازه قطعه ویدیویی پشتیبانیشده هنوز تعیین نشده است.
- مدیریت حقوق دیجیتال:
- کاهش رؤیتپذیری چندین روش فقط داخلی در
DefaultDrmSessionکه انتظار نمیرود از خارج از بسته DRM فراخوانی شوند:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- کاهش رؤیتپذیری چندین روش فقط داخلی در
- Muxer:
- کتابخانه جدیدی برای muxer اضافه کنید که بتوان از آن برای ایجاد فایل محفظه MP4 استفاده کرد.
- افزونه IMA:
- جاریسازیهای DASH زنده چنددورهای را برای درج آگهی پویا فعال کنید. لطفاً توجه داشته باشید که پیادهسازی فعلی هنوز از جستجو در جاریسازیهای زنده پشتیبانی نمیکند (#10912).
- رفع اشکالی که در آن گروه آگهی جدیدی در جاریسازیهای زنده درج میشود زیرا موقعیت محتوای محاسبهشده در خطوط زمانی متوالی کمی متفاوت است.
- جلسه:
- روش کمکی
MediaSession.getControllerForCurrentRequestرا برای دریافت اطلاعات درباره کنترلکنندهای که درحالحاضر روشPlayerرا فراخوانی میکند اضافه کنید. -
androidx.media3.session.MediaButtonReceiverرا اضافه کنید تا برنامهها بتوانند ازسرگیری بازپخش را با رویدادهای دکمه رسانه که مثلاً ازسوی هدست بلوتوث ارسال میشود (#۱۶۷) پیادهسازی کنند. - Add default implementation to
MediaSession.Callback.onAddMediaItemsto allow requestedMediaItemsto be passed ontoPlayerif they haveLocalConfiguration(e.g. URI) (#282). - افزودن دکمههای فرمان «جستجو به قبلی» و «جستجو به بعدی» در نمای فشرده اعلان رسانه بهطور پیشفرض برای Android 12 و نسخههای پایینتر (#410).
- Add default implementation to
MediaSession.Callback.onAddMediaItemsto allow requestedMediaItemsto be passed ontoPlayerif they haveLocalConfiguration(e.g. URI) (#282). - افزودن دکمههای فرمان «جستجو به قبلی» و «جستجو به بعدی» در نمای فشرده اعلان رسانه بهطور پیشفرض برای Android 12 و نسخههای پایینتر (#410).
- روش کمکی
- میانای کاربر:
- روشهای Util
shouldShowPlayButtonوhandlePlayPauseButtonActionرا برای نوشتن عناصر میانای کاربر سفارشی با دکمه پخش/مکث اضافه کنید.
- روشهای Util
- افزونه RTSP:
- افزونه DASH:
- جبران زمان رسانه را از
MediaLoadData.startTimeMsوMediaLoadData.endTimeMsبرای جاریسازیهای DASH چنددورهای بردارید. - اشکالی که در آن آمادهسازی مجدد منبع رسانه Dash زنده چنددورهای
IndexOutOfBoundsExceptionتولید میکرد برطرف شد (شماره ۱۰۸۳۸).
- جبران زمان رسانه را از
- افزونه 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باشد. - ثابتهای رشتهای منسوخشده برای Charsets (
ASCII_NAME،UTF8_NAME،ISO88591_NAME،UTF16_NAME، وUTF16LE_NAME) را بردارید، بهجای آنها از Kotlin Charsets از بسته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
۲۱ ژوئن ۲۰۲۳
از نسخه پایدار ۱.۱.۰ استفاده کنید.
نسخه 1.1.0-beta01
۷ ژوئن ۲۰۲۳
از نسخه پایدار ۱.۱.۰ استفاده کنید.
نسخه 1.1.0-alpha01
۱۰ مه ۲۰۲۳
از نسخه پایدار ۱.۱.۰ استفاده کنید.
نسخه ۱.۰.۰
نسخه ۱.۰.۲
۱۸ مه ۲۰۲۳
androidx.media3:media3-*:1.0.2 منتشر شده است. نسخه ۱.۰.۲ حاوی این
ثبتها است.
این نسخه با نسخه ExoPlayer 2.18.7 مطابقت دارد.
این نسخه حاوی تغییرات زیر نسبت به نسخه ۱.۰.۱ است:
- کتابخانه اصلی:
Buffer.isLastSample()را اضافه کنید که نشان میدهد آیاBufferحاوی پرچمC.BUFFER_FLAG_LAST_SAMPLEاست یا نه.- رفع مشکل عدم رندر شدن قاب آخر درصورت خارج شدن آخرین نمونه دارای قاب از صف بدون خواندن نمونه «پایان جاریسازی». (#11079).
- استخراجکنندهها:
- رفع تجزیه H.265 SPS در فایلهای MPEG-TS بااستفاده مجدد از منطق تجزیه که قبلاً توسط استخراجکنندههای RTSP و MP4 استفاده شده است (#۳۰۳).
- نوشتار:
- SSA: Add support for UTF-16 files if they start with a byte order mark (#319).
- جلسه:
- رفع مشکل بهروز نشدن فرمانهای دردسترس
MediaControllerهنگام اتصال بهMediaSessionCompatقدیمی که کنشهایش را بهروز میکند. - رفع اشکالی که مانع از برگرداندن مقدار تهی توسط
MediaLibraryServiceبرای فراخوانی از «رابط کاربری سیستم» بهCallback.onGetLibraryRootباparams.isRecent == trueدر میانای برنامهسازی کاربردی ۳۰ میشد (#۳۵۵). - رفع نشت حافظه
MediaSessionServiceیاMediaLibraryService(#346). - رفع اشکالی که در آن بهروزرسانی ترکیبی
Timelineو موقعیت درMediaSessionممکن است باعث شودMediaControllerIllegalStateExceptionرا ایجاد کند.
- رفع مشکل بهروز نشدن فرمانهای دردسترس
نسخه ۱.۰.۱
۱۸ آوریل ۲۰۲۳
androidx.media3:media3-*:1.0.1 منتشر شده است. نسخه ۱.۰.۱ حاوی این
ثبتها است.
این نسخه با نسخه ExoPlayer 2.18.6 مطابقت دارد.
- کتابخانه اصلی:
- بازنشانی کردن لغو جاریسازی زنده هدف هنگام جستجوی موقعیت پیشفرض (#11051).
- رفع اشکالی که در آن جاریسازیهای نمونه خالی در رسانه میتوانست باعث توقف بازپخش شود.
- جلسه:
- رفع اشکالی که در آن چند مورد صف یکسان منتشرشده توسط یک
MediaSessionCompatقدیمی منجر به استثنا درMediaControllerمیشود (#۲۹۰). - افزودن بازارسال مفقودشده
MediaSession.broadcastCustomCommandبهMediaControllerCompat.Callback.onSessionEventقدیمی (#۲۹۳). - رفع اشکالی که در آن فراخوانی
MediaSession.setPlayerفرمانهای دردسترس را بهروز نمیکند. - رفع مشکل نادیده گرفته شدن نمونههای
TrackSelectionOverrideارسالشده ازMediaControllerدرصورت ارجاع به گروهی باFormat.metadata(#۲۹۶). - مشکلی را برطرف کنید که در آن
Player.COMMAND_GET_CURRENT_MEDIA_ITEMباید برای دسترسی به فراداده ازطریقMediaSessionCompatقدیمی دردسترس باشد. - رفع مشکل مربوط به نمونههای
MediaSessionدر رشته پسزمینه که هنگام استفاده درMediaSessionServiceباعث ازکارافتادن میشود (#318). - رفع مشکلی که در آن گیرنده دکمه رسانه توسط کتابخانه اعلام میشد بدون اینکه برنامه چنین قصدی داشته باشد (#۳۱۴).
- رفع اشکالی که در آن چند مورد صف یکسان منتشرشده توسط یک
- DASH:
- رفع مشکل مدیریت خطوط زمانی بخش خالی (#11014).
- RTSP:
- اگر «راهاندازی RTSP» با UDP بهدلیل «خطای RTSP ۴۶۱» (UnsupportedTransport) ناموفق بود، با TCP دوباره امتحان کنید (#۱۱۰۶۹).
نسخه ۱.۰.۰
۲۲ مارس ۲۰۲۳
androidx.media3:media3-*:1.0.0 منتشر شده است. نسخه ۱.۰.۰ حاوی این
ثبتها است.
این نسخه با نسخه ExoPlayer 2.18.5 مطابقت دارد.
از نسخه 1.0.0-rc02 تغییری ایجاد نشده است.
نسخه 1.0.0-rc02
۲ مارس ۲۰۲۳
androidx.media3:media3-*:1.0.0-rc02 منتشر شده است. نسخه 1.0.0-rc02 حاوی
این commitها است.
این نسخه با نسخه ExoPlayer 2.18.4 مطابقت دارد.
- کتابخانه اصلی:
- بارگیریها:
- Make the maximum difference of the start time of two segments to be
merged configurable in
SegmentDownloaderand subclasses (#248).
- Make the maximum difference of the start time of two segments to be
merged configurable in
- صدا:
- ویدیو:
- قالب HEVC HDR10 را بهجای
HEVCProfileMain10بهHEVCProfileMain10HDR10نگاشت کنید. - افزودن راهحل برای مشکل دستگاه در Chromecast با Google TV و Lenovo M10 FHD Plus که باعث میشود جاریسازیهای AVC با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#۱۰۸۹۸).
- رفع مشکلات عملکرد انتشار فریم هنگام پخش رسانه با نرخ فریم بسیار بالاتر از نرخ بازآوری صفحهنمایش.
- قالب HEVC HDR10 را بهجای
- بازیگران:
- Fix transient
STATE_IDLEwhen transitioning between media items (#245).
- Fix transient
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- جلسه:
- اشکالی که باعث میشد دکمه پخش/توقف موقت اعلان با وضعیت پخشکننده بهروز نشود برطرف شد (#۱۹۲).
- افزونه IMA:
- رفع اشکالی که مانع از شروع جاریسازیهای DAI بدون آگهی میشد
زیرا اولین (و در مورد بدون آگهی، تنها) رویداد
LOADEDدریافت نمیشد.
- رفع اشکالی که مانع از شروع جاریسازیهای DAI بدون آگهی میشد
زیرا اولین (و در مورد بدون آگهی، تنها) رویداد
نسخه 1.0.0-rc01
۱۶ فوریه ۲۰۲۳
androidx.media3:media3-*:1.0.0-rc01 منتشر شده است. نسخه 1.0.0-rc01 حاوی
این commitها است.
این نسخه با نسخه ExoPlayer 2.18.3 مطابقت دارد.
- کتابخانه اصلی:
- منطق ترتیب رمزگشای پردازنده را تغییر دهید تا اولویتهای
MediaCodecSelectorرا حفظ کند، حتی اگر رمزگشایی گزارش دهد که ممکن است نتواند رسانه را بهطور کارآمد پخش کند. برای مثال، با انتخابگر پیشفرض، رمزگشای سختافزاری با پشتیبانی فقط عملکردی بر رمزگشای نرمافزاری که بهطور کامل از قالب پشتیبانی میکند ترجیح داده خواهد شد (#10604). ExoPlayer.Builder.setPlaybackLooperرا اضافه کنید که رشته بازپخش ازپیش موجودی را برای نمونه ExoPlayer جدید تنظیم میکند.- به کمککنندههای مدیریت بارگیری اجازه داده میشود پاک شوند (#۱۰۷۷۶).
- پارامتر را به
BasePlayer.seekToاضافه کنید تا فرمان استفادهشده برای جستجو را نیز نشان دهد. - استفاده از زمینه هنگام بار کردن ترسیمشدنیها در API 21+ (#220).
- Add
ConcatenatingMediaSource2that allows combining multiple media items into a single window (#247).
- منطق ترتیب رمزگشای پردازنده را تغییر دهید تا اولویتهای
- استخراجکنندهها:
- Throw a
ParserExceptioninstead of aNullPointerExceptionif the sample table (stbl) is missing a required sample description (stsd) when parsing trak atoms. - Correctly skip samples when seeking directly to a sync frame in fMP4 (#10941).
- Throw a
- صدا:
- از نرخ بیت قالب صوتی فشردهشده برای محاسبه حداقل اندازه میانگیر
برای
AudioTrackدر بازپخشهای مستقیم (گذر مستقیم) استفاده کنید.
- از نرخ بیت قالب صوتی فشردهشده برای محاسبه حداقل اندازه میانگیر
برای
- نوشتار:
- رفع
TextRendererارسال نمایه نامعتبر (منفی) بهSubtitle.getEventTimeاگر فایل زیرنویس حاوی هیچ نشانهای نباشد. - SubRip: افزودن پشتیبانی از فایلهای UTF-16 درصورتیکه با علامت ترتیب بایت شروع شوند.
- رفع
- فراداده:
- تجزیه چند مقدار جداشده با تهی از قابهای ID3، طبق مجوز ID3 v2.4.
MediaMetadata.mediaTypeرا اضافه کنید تا نوع محتوا یا نوع پوشه شرحدادهشده توسط فراداده را مشخص کنید.MediaMetadata.isBrowsableرا بهعنوان جایگزینMediaMetadata.folderTypeاضافه کنید. نوع پوشه در نسخه پخش بعدی منسوخ خواهد شد.
- DASH:
- تجزیه کامل برای مجموعههای اقتباس تصویر، ازجمله تعداد کاشیها اضافه شد (#۳۷۵۲).
- میانای کاربر:
- جلسه:
- افزودن
SimpleBasePlayerانتزاعی برای کمک به پیادهسازی میانایPlayerبرای پخشکنندههای سفارشی. - افزودن روش کمکی برای تبدیل کد جلسه پلاتفرم به Media3
SessionToken(#171). - از
onMediaMetadataChangedبرای راهاندازی بهروزرسانیهای جلسه رسانه پلاتفرم (#۲۱۹) استفاده کنید. - جلسه رسانه را بهعنوان آرگومان
getMediaButtons()ازDefaultMediaNotificationProviderاضافه کنید و برای شفافیت از فهرستهای تغییرناپذیر استفاده کنید (#۲۱۶). - Add
onSetMediaItemscallback listener to provide means to modify/setMediaItemlist, starting index and position by session before setting onto Player (#156). - Avoid double tap detection for non-Bluetooth media button events (#233).
- Make
QueueTimelinemore robust in case of a shady legacy session state (#241).
- افزودن
- فراداده:
- تجزیه چند مقدار جداشده با تهی از قابهای ID3، طبق مجوز ID3 v2.4.
MediaMetadata.mediaTypeرا اضافه کنید تا نوع محتوا یا نوع پوشه شرحدادهشده توسط فراداده را مشخص کنید.MediaMetadata.isBrowsableرا بهعنوان جایگزینMediaMetadata.folderTypeاضافه کنید. نوع پوشه در نسخه پخش بعدی منسوخ خواهد شد.
- افزونه Cast:
- ارتقای نسخه Cast SDK به ۲۱.۲.۰.
- افزونه IMA:
- برای جلوگیری از مشکلات رشتهبندی، شنونده پخشکننده
ImaServerSideAdInsertionMediaSourceرا در رشته برنامه بردارید. - ویژگی
focusSkipButtonWhenAvailableرا بهImaServerSideAdInsertionMediaSource.AdsLoader.Builderاضافه کنید تا تمرکز روی دکمه رد شدن در دستگاههای تلویزیون درخواست شود و آن را بهطور پیشفرض روی true تنظیم کنید. - روش
focusSkipButton()را بهImaServerSideAdInsertionMediaSource.AdsLoaderاضافه کنید تا بهصورت برنامهنویسیشده درخواست کنید که دکمه رد شدن در کانون توجه قرار گیرد. - Bump IMA SDK version to 3.29.0.
- برای جلوگیری از مشکلات رشتهبندی، شنونده پخشکننده
- برنامه نمایشی:
- درخواست اجازه اعلان برای اعلانهای بارگیری در زمان اجرا (#۱۰۸۸۴).
نسخه 1.0.0-beta03
۲۲ نوامبر ۲۰۲۲
androidx.media3:media3-*:1.0.0-beta03 منتشر شده است. نسخه 1.0.0-beta03
شامل این ارسالها است.
این نسخه با نسخه ExoPlayer 2.18.2 مطابقت دارد.
- کتابخانه اصلی:
-
ExoPlayer.isTunnelingEnabledرا اضافه کنید تا بررسی شود آیا تونلسازی برای قطعههای انتخابشده فعلی فعال است یا نه (#۲۵۱۸). WrappingMediaSourceرا اضافه کنید تا پیچیدن یکMediaSourceساده شود (#7279).- Discard back buffer before playback gets stuck due to insufficient available memory.
- وقتی بارگذاری فعال است، بلوک «doSomeWork» ردیابی را ببندید.
- Fix session tracking problem with fast seeks in
PlaybackStatsListener(#180). - ارسال فراخوانی
onMediaItemTransitionمفقودشده هنگام تماس باseekToNextیاseekToPreviousدر فهرست پخش تکموردی (#۱۰۶۶۷). Player.getSurfaceSizeرا اضافه کنید که اندازه سطحی را که ویدیو در آن پرداز میشود برمیگرداند.- رفع اشکالی که در آن برداشتن شنوندگان درطول انتشار پخشکننده میتواند باعث
IllegalStateException(#10758) شود.
-
- ساخت:
- برای جلوگیری از خطاهای کامپایل، حداقل
compileSdkVersionرا اعمال کنید (#۱۰۶۸۴). - هنگام گنجانده شدن در ساخت gradle دیگر، از انتشار بلوک اجتناب کنید.
- برای جلوگیری از خطاهای کامپایل، حداقل
- انتخاب قطعه:
- اگر نمایشگر از Dolby Vision پشتیبانی نمیکند، قطعههای دیگر را به Dolby Vision ترجیح دهید. (#8944).
- بارگیریها:
- ویدیو:
- اگر نمایشگر از Dolby Vision پشتیبانی نمیکند، رمزگشای جایگزین را برای Dolby Vision امتحان کنید. (#9794).
- صدا:
- از
SingleThreadExecutorبرای انتشار نمونههایAudioTrackاستفاده کنید تا از خطاهای OutOfMemory هنگام انتشار چندین پخشکننده بهطور همزمان جلوگیری شود (#10057). -
AudioOffloadListener.onExperimentalOffloadedPlaybackرا برای وضعیت تخلیه AudioTrack اضافه میکند. (#۱۳۴). AudioTrackBufferSizeProviderرا به واسط عمومی تبدیل کنید.- برای تنظیم دستگاه خروجی صوتی ترجیحی،
ExoPlayer.setPreferredAudioDeviceرا اضافه کنید (#۱۳۵). - نام
androidx.media3.exoplayer.audio.AudioProcessorبهandroidx.media3.common.audio.AudioProcessorتغییر کند. - Map 8-channel and 12-channel audio to the 7.1 and 7.1.4 channel masks respectively on all Android versions (#10701).
- از
- فراداده:
- اکنون میتوان
MetadataRendererرا بهگونهای پیکربندی کرد که فرادادهها را بهمحض دردسترس قرار گرفتن ارائه دهد. نمونهای باMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)ایجاد کنید تا مشخص شود که آیا پردازنده فراداده را زودتر یا همگام با موقعیت پخشکننده خروجی میدهد یا نه.
- اکنون میتوان
- مدیریت حقوق دیجیتال:
- رفع اشکال در پیادهسازی ClearKey در Android 13 که نشانی وب پروانه نامعتبر اما غیرخالی برمیگرداند.
- رفع خطای
setMediaDrmSession failed: session not openedهنگام جابهجایی بین طرحهای مدیریت حقوق دیجیتال در فهرست پخش (مثلاً Widevine به ClearKey).
- نوشتار:
- CEA-608: Ensure service switch commands on field 2 are handled correctly (#10666).
- DASH:
- تجزیه
EventStream.presentationTimeOffsetاز مانیفستها (#10460).
- تجزیه
- میانای کاربر:
- از لغوهای فعلی پخشکننده بهعنوان پیشتنظیم در
TrackSelectionDialogBuilder(#10429) استفاده کنید.
- از لغوهای فعلی پخشکننده بهعنوان پیشتنظیم در
- جلسه:
- مطمئن شوید که فرمانها همیشه به ترتیب صحیح اجرا میشوند، حتی اگر برخی از آنها به وضوح ناهمگام نیاز داشته باشند (#85).
DefaultMediaNotificationProvider.Builderرا برای ساختنDefaultMediaNotificationProviderنمونه اضافه کنید. سازنده میتواند شناسه اعلان، شناسه کانال اعلان، و نام کانال اعلان مورداستفاده ارائهدهنده را پیکربندی کند. همچنین، روشDefaultMediaNotificationProvider.setSmallIcon(int)را برای تنظیم نماد کوچک اعلانها اضافه کنید. (#104).- مطمئن شوید فرمانهای ارسالشده قبلاز
MediaController.release()حذف نشوند (#۹۹). SimpleBitmapLoaderمیتواند بیتمپ را از URIهایfile://بار کند (#۱۰۸).- Fix assertion that prevents
MediaControllerto seek over an ad in a period (#122). - وقتی بازپخش تمام میشود،
MediaSessionServiceاز پیشزمینه متوقف میشود و اعلانی برای بازراهاندازی بازپخش آخرین فایل رسانهای پخششده نشان داده میشود (#۱۱۲). - سرویس پیشزمینهای را با قصد معوق برای توقف موقت شروع نکنید (#۱۶۷).
- «نشان» مرتبط با اعلان ایجادشده توسط
DefaultNotificationProviderرا در میانای برنامهسازی کاربردی ۲۶ و میانای برنامهسازی کاربردی ۲۷ بهصورت دستی پنهان کنید (نشان بهطور خودکار در میانای برنامهسازی کاربردی ۲۸ و بالاتر پنهان میشود) (#۱۳۱). - رفع اشکالی که در آن اتصال دومین binder از MediaSession قدیمی به Media3 MediaController باعث ایجاد IllegalStateExceptions میشود (#۴۹).
- RTSP:
- آژانس بازاریابی افراد تأثیرگذار:
- افزودن مهلت زمانی برای بار کردن اطلاعات آگهی برای رسیدگی به مواردی که کیت توسعه نرمافزار آگهیهای رسانهای تعاملی در بار کردن آگهی گیر میکند (#10510).
- جلوگیری از رد کردن آگهیهای میانویدیویی هنگام جستجو تا انتهای محتوا (#۱۰۶۸۵).
- محاسبه صحیح مدت پنجره برای جاریسازیهای زنده با آگهیهای درجشده در سمت سرور، برای مثال IMA DAI (#10764).
- افزونه FFmpeg:
- پرچمهای جدیداً الزامیشده برای پیوند دادن کتابخانههای FFmpeg با NDK 23.1.7779620 و بالاتر اضافه شد (#9933).
- افزونه AV1:
- بهروزرسانی نسخه CMake برای جلوگیری از ناسازگاری با جدیدترین نسخههای «استودیو Android» (#9933).
- افزونه Cast:
getDeviceInfo()را پیادهسازی کنید تا بتوانیدCastPlayerرا هنگام کنترل بازپخش باMediaControllerشناسایی کنید (#۱۴۲).
- ترانسفورماتور:
- افزودن زمانسنج ناظر muxer برای تشخیص اینکه تولید نمونه خروجی خیلی کند است.
- برداشتن نمادهای منسوخشده:
- برداشتن
Transformer.Builder.setOutputMimeType(String). این ویژگی برداشته شده است. وقتی از ترکیبکننده پیشفرض استفاده میشود، نوع MIME همیشه MP4 خواهد بود.
- برداشتن
نسخه 1.0.0-beta02
۲۱ ژوئیه ۲۰۲۲
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) میشود. - برای رسانههای پیشرونده، فقط قطعههای انتخابشده را در موقعیت میانگیریشده اضافه کنید (#۱۰۳۶۱).
- اجازه دادن به ثبتکننده سفارشی برای همه خروجیهای گزارش ExoPlayer (#9752).
- پیادهسازی
setDataSourceFactoryدرDefaultMediaSourceFactoryکه در برخی موارد کار نمیکرد اصلاح شد (#۱۱۶).
- مطمئن شوید که تغییر دادن
- استخراجکنندهها:
- DASH:
- نشانی وب پروانه ClearKey را از مانیفستها تجزیه کنید (#10246).
- میانای کاربر:
- مطمئن شوید TalkBack گزینه سرعت فعال کنونی را در منو کنترلهای بازپخش اعلام میکند (#۱۰۲۹۸).
- RTSP:
- افزودن مدیریت بسته تکهتکهشده VP8 (#110).
- افزونه Leanback:
- گوش دادن به تغییرات
playWhenReadyدرLeanbackAdapter(۱۰۴۲۰).
- گوش دادن به تغییرات
- بازیگران:
نسخه 1.0.0-beta01
۱۶ ژوئن ۲۰۲۲
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، قطعهها بیشازحد بازنشانی شوند، برای مثال هنگام بارگذاری جانبی زیرنویسها و تغییر زیرنویس انتخابشده در اواسط بازپخش (#۱۰۲۴۸). - تشخیص نوع شبکه 5G-NSA در API 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.ParametersBuilderمنسوخشده،DefaultTrackSelector.Parameters.Builderرا برگرداند.DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesرا اضافه کنید که بهطور پیشفرض فعال است. وقتی فعال باشد،DefaultTrackSelectorقطعههای صوتیای را ترجیح میدهد که تعداد کانالهای آنها از قابلیتهای خروجی دستگاه فراتر نرود. در دستگاههای دستی،DefaultTrackSelectorقالبهای صوتی چندکاناله را به قالبهای استریو/ مونو ترجیح میدهد، مگراینکه قالب چندکاناله بتواند فضایی شود (Android 12L+) یا قالب صدای فراگیر Dolby باشد. علاوهبراین، در دستگاههایی که از فضاییسازی صدا پشتیبانی میکنند،DefaultTrackSelectorتغییرات در ویژگیهای فضاییساز را پایش میکند و براساس آنها انتخاب قطعه جدید را راهاندازی میکند. دستگاههای دارایtelevisionحالت میانای کاربر از این محدودیتها مستثنی هستند و قالب دارای بیشترین تعداد کانال ترجیح داده خواهد شد. برای فعال کردن این ویژگی، نمونهDefaultTrackSelectorباید باContextساخته شود.
- کلاس
- ویدیو:
- نام
DummySurfaceبهPlaceholderSurfaceتغییر کرد. - پشتیبانی AV1 را به
MediaCodecVideoRenderer.getCodecMaxInputSizeاضافه کنید.
- نام
- صدا:
- از رمزگشای صوتی LG AC3 که نوع MIME غیرمعیار را تبلیغ میکند استفاده کنید.
- نوع پاسخ
AudioAttributes.getAudioAttributesV21()را ازandroid.media.AudioAttributesبه کلاس پوشانندهAudioAttributesV21جدید تغییر دهید تا از درستیسنجی کند ART در API < 21 جلوگیری شود. - Query the platform (API 29+) or assume the audio encoding channel count for audio passthrough when the format audio channel count is unset, which occurs with HLS chunkless preparation (10204).
- اگر رمزگشا صدای PCM با ۱۲ کانال را خروجی میدهد،
AudioTrackرا با ماسک کانالAudioFormat.CHANNEL_OUT_7POINT1POINT4پیکربندی کنید (#۱۰۳۲۲.
- DRM
- مطمئن شوید که جلسه DRM همیشه بهدرستی بهروز میشود وقتی که بلافاصله پساز تغییر قالب، جستجو انجام میشود (۱۰۲۷۴).
- نوشتار:
Player.getCurrentCues()را تغییر دهید تا بهجایList<Cue>،CueGroupرا برگرداند.- SSA: Support
OutlineColourstyle setting whenBorderStyle == 3(i.e.OutlineColoursets the background of the cue) (#8435). - CEA-708: دادهها را به چندین بلوک سرویس تجزیه کنید و بلوکهایی را که با شماره سرویس انتخابشده فعلی مرتبط نیستند نادیده بگیرید.
RawCcExtractorرا بردارید، که فقط برای رسیدگی به قالب زیرنویس داخلی Google استفاده میشد.
- استخراجکنندهها:
- میانای کاربر:
- Fix delivery of events to
OnClickListeners set onPlayerViewin the case thatuseController=false(#9605). همچنین ارسال رویدادها بهOnLongClickListenerرا برای همه پیکربندیهای نما اصلاح کنید. - Fix incorrectly treating a sequence of touch events that exit the bounds
of
PlayerViewbeforeACTION_UPas a click (#9861). - Fix
PlayerViewaccessibility issue where tapping might toggle playback rather than hiding the controls (#8627). -
TrackSelectionViewوTrackSelectionDialogBuilderرا بازنویسی کن تا بهجایExoPlayerبا میانایPlayerکار کنند. این کار امکان استفاده از نماها را با دیگر پیادهسازیهایPlayerفراهم میکند و وابستگی را از ماژول میانای کاربر به ماژول ExoPlayer برمیدارد. این یک تغییر اساسی است. - دستههای هدف نوشتاری اجباری را در انتخابگر دسته هدف
PlayerViewنشان ندهید، و اگر «هیچکدام» انتخاب شده است، دسته هدف نوشتاری اجباری مناسبی را انتخابشده نگه دارید (#۹۴۳۲).
- Fix delivery of events to
- DASH:
- تجزیه تعداد کانال از عناصر DTS
AudioChannelConfiguration. این گذرگاه صوتی را برای جاریسازیهای DTS دوباره فعال میکند (#۱۰۱۵۹). - انتقال
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 تککاناله و غیردرهمبافته پشتیبانی میشود. بار مفید AMR RTP مرکب پشتیبانی نمیشود. (#46)
- افزودن خواننده RTP برای VP8 (#۴۷).
- افزودن خواننده RTP برای WAV (#56).
- رفع مشکل سرایند مجوز پایه RTSP. (#9544).
- Stop checking mandatory SDP fields as ExoPlayer doesn't need them (#10049).
- Throw checked exception when parsing RTSP timing (#10165).
- افزودن خواننده RTP برای VP9 (#47).
- افزودن خواننده RTP برای OPUS (#۵۳).
- منابع دادهها:
- نام
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(#۵۹). - Update session position info on timeline change(#51).
- Fix NPE in
MediaControllerImplBaseafter releasing controller (#74).
- بازپخش آگهی / IMA:
- کاهش نرخ نظرسنجی آگهی از هر ۱۰۰ میلیثانیه به هر ۲۰۰ میلیثانیه، برای همراستا شدن با توصیههای «شورای رتبهبندی رسانه» (MRC).
- افزونه FFmpeg:
- نسخه CMake را به
3.21.0+بهروز کنید تا از اشکال CMake که باعث ناموفق شدن همگامسازی gradle در «استودیو Android» میشود جلوگیری کنید (#9933).
- نسخه CMake را به
- برداشتن نمادهای منسوخشده:
- برداشتن
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). درعوض ازPlayer.Listener.onTracksChanged(Tracks)استفاده کنید. - برداشتن
Player.getCurrentTrackGroupsوPlayer.getCurrentTrackSelections. درعوض ازPlayer.getCurrentTracksاستفاده کنید. همچنین میتوانید به استفاده ازExoPlayer.getCurrentTrackGroupsوExoPlayer.getCurrentTrackSelectionsادامه دهید، هرچند این روشها همچنان منسوخشده باقی میمانند. - برداشتن
DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTوDEFAULT_TRACK_SELECTOR_PARAMETERSثابت. درصورت امکان، ازgetDefaultTrackSelectorParameters(Context)استفاده کنید، و درغیراینصورت ازDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTاستفاده کنید. - برداشتن سازنده
DefaultTrackSelector(ExoTrackSelection.Factory). درعوض ازDefaultTrackSelector(Context, ExoTrackSelection.Factory)استفاده کنید. - برداشتن
Transformer.Builder.setContext.Contextباید بهجای آن به سازندهTransformer.Builderمنتقل شود.
- برداشتن
نسخه 1.0.0-alpha03
۱۴ مارس ۲۰۲۲
androidx.media3:media3-*:1.0.0-alpha03 منتشر شده است. نسخه 1.0.0-alpha03
حاوی این
commitها است.
این مربوط به نسخه ۲.۱۷.۱ ExoPlayer است.
- صدا:
- رفع خطای بررسی قابلیتهای صوتی برای Dolby Atmos (E-AC3-JOC) در HLS.
- استخراجکنندهها:
- FMP4: رفع مشکل مربوط به اینکه فراداده نمونه emsg ممکن است با ترتیب اشتباهی برای جاریسازیهای حاوی اتمهای emsg نسخه ۰ و نسخه ۱ خروجی داده شود (#۹۹۹۶).
- نوشتار:
- Fix the interaction of
SingleSampleMediaSource.Factory.setTrackIdandMediaItem.SubtitleConfiguration.Builder.setIdto prioritise theSubtitleConfigurationfield and fall back to theFactoryvalue if it's not set (#10016).
- Fix the interaction of
- بازپخش آگهی:
- رفع مشکل کمبود داده صوتی بین دورههای آگهی در جاریسازیهای زنده HLS SSAI.
نسخه 1.0.0-alpha02
۲ مارس ۲۰۲۲
androidx.media3:media3-*:1.0.0-alpha02 منتشر شده است. نسخه 1.0.0-alpha02
حاوی این
commitها است.
این با نسخه ExoPlayer 2.17.0 مطابقت دارد.
- کتابخانه اصلی:
- افزودن روش محافظتشده
DefaultRenderersFactory.getCodecAdapterFactory()تا زیرکلاسهایDefaultRenderersFactoryکهbuildVideoRenderers()یاbuildAudioRenderers()را لغو میکنند بتوانند به کارخانه آداپتور کدک دسترسی داشته باشند و آن را به نمونههایMediaCodecRendererکه ایجاد میکنند منتقل کنند. - فیلدهای سرصفحه ICY
nameوgenreرا بهترتیب بهMediaMetadata.stationوMediaMetadata.genreمنتشر کنید تا ازطریقPlayer.Listener.onMediaMetadataChanged()به برنامه برسند (#۹۶۷۷). - کلیدهای تهی را از
DefaultHttpDataSource#getResponseHeadersبردارید. - وقتی ایجاد نمونه
MediaCodecناموفق است، بخوابید و دوباره امتحان کنید. این کار مشکلی را که در برخیاز دستگاهها هنگام جابهجایی سطح از کدک امن به کدک دیگر رخ میدهد برطرف میکند (#۸۶۹۶). MediaCodecAdapter.getMetrics()را اضافه کنید تا کاربران بتوانند دادههای سنجهها را ازMediaCodecدریافت کنند. (#9766).- رفع مشکل وضوح وابستگی Maven (#8353).
- غیرفعال کردن تنظیم خودکار سرعت برای جاریسازیهای زنده که نه ویژگیهای تأخیر کم دارند و نه درخواست کاربر برای تنظیم سرعت (#9329).
- نام
DecoderCounters#inputBufferCountبهqueuedInputBufferCountتغییر کرد. -
SimpleExoPlayer.renderersرا خصوصی کنید. ازطریقExoPlayer.getRendererمیتوان به پردازندههای گرافیکی دسترسی پیدا کرد. - برخیاز مقادیر ثابت
AnalyticsListener.EventFlagsبهروزرسانی شد تا با مقادیرPlayer.EventFlagsمطابقت داشته باشد. -
AnalyticsCollectorرا به یک میانای پیادهسازی پیشفرض تقسیم کنید تا اگر برنامهای به آن نیاز نداشت، R8 بتواند آن را حذف کند.
- افزودن روش محافظتشده
- انتخاب قطعه:
- پشتیبانی از پرچمهای نقش ویدیو ترجیحی در انتخاب قطعه (#9402).
- Update video track selection logic to take preferred MIME types and role flags into account when selecting multiple video tracks for adaptation (#9519).
- منطق انتخاب قطعه ویدیو و صدا بهروزرسانی شد تا فقط قالبهایی برای انتخابهای تطبیقی انتخاب شوند که سطح پشتیبانی سختافزاری و رمزگشایی یکسانی دارند (#9565).
- منطق انتخاب قطعه ویدیو بهروزرسانی شد تا اگر چندین کدک توسط رمزگشاهای اصلی با شتاب سختافزاری پشتیبانی میشود، کدکهای کارآمدتر ترجیح داده شود (#۴۸۳۵).
- اولویتهای محتوای صوتی (برای مثال، قطعه صوتی «پیشفرض» یا قطعهای که با زبان محلی سیستم مطابقت دارد) را بر محدودیتهای انتخاب قطعه فنی (برای مثال، نوع MIME ترجیحی یا حداکثر تعداد کانال) ترجیح دهید.
- رفع مشکل انتخاب قطعه که در آن لغو یک گروه قطعه باعث غیرفعال شدن سایر گروههای قطعه از همان نوع نمیشد (#۹۶۷۵).
- رفع مشکل انتخاب قطعه که در آن ترکیبی از لغو قطعه خالی و غیرخالی بهدرستی اعمال نمیشود (#۹۶۴۹).
-
TrackGroupتکراری درTrackGroupArrayممنوع است.TrackGroups can always be made distinguishable by setting anidin theTrackGroupconstructor. این بهروزرسانی مشکل ازکارافتادن برنامه را هنگام ازسرگیری بازپخش پساز قرار دادن برنامه در پسزمینه با لغو قطعه فعال برطرف میکند (#9718). - منطق در
AdaptiveTrackSelectionاصلاح شد تا افزایش کیفیت تحت پهنای باند کافی شبکه مجاز باشد، حتی اگر بازپخش بسیار نزدیک به لبه زنده باشد (#9784).
- ویدیو:
- منطق جایگزین رمزگشا برای Dolby Vision را اصلاح کنید تا درصورت نیاز از رمزگشای سازگار H264/H265 استفاده کند.
- صدا:
- منطق بازگشت رمزگشا برای Dolby Atmos (E-AC3-JOC) اصلاح شد تا درصورت نیاز از رمزگشای سازگار E-AC3 استفاده شود.
- میاناهای برنامهسازی کاربردی
AudioCapabilitiesرا تغییر دهید تا بهجایnull، بهطور صریحAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESرا ارسال کنند. - Allow customization of the
AudioTrackbuffer size calculation by injecting anAudioTrackBufferSizeProvidertoDefaultAudioSink. (#8891). - اگر اندازه میانگیر درخواستی بیشتر از ۱ مگابایت بود، ایجاد
AudioTrackرا دوباره امتحان کنید. (#9712).
- استخراجکنندهها:
- نوشتار:
- مدیریت حقوق دیجیتال:
playbackLooperازDrmSessionManager.(pre)acquireSessionحذف میشود. وقتیDrmSessionManagerتوسط برنامهای درMediaSourceسفارشی استفاده میشود،playbackLooperباید بهجای آن بهDrmSessionManager.setPlayerمنتقل شود.
- بازپخش آگهی / IMA:
- افزودن پشتیبانی برای درج آگهی پویا (DAI) در IMA (#8213).
- افزودن روشی به
AdPlaybackStateبرای امکان بازنشانی گروه آگهی بهطوریکه بتوان آن را دوباره پخش کرد (#۹۶۱۵). - Enforce playback speed of 1.0 during ad playback (#9018).
- رفع مشکلی که در آن گروه آگهیای که بار نشد باعث بازنشانی فوری بازپخش شد (#9929).
- میانای کاربر:
- DASH:
- افزودن ویژگیهای ضروری و تکمیلی تجزیهشده به
Representation(#9579). - پشتیبانی از نقش قطعه
forced-subtitle(#9727). - تفسیر نقش قطعه
mainبهعنوانC.SELECTION_FLAG_DEFAULTمتوقف شود. - منطق مستثنا کردن نشانی وب پایه برای مانیفستهایی که فضای نام DVB را اعلام نمیکنند اصلاح شد (#9856).
- پشتیبانی از نشانیهای وب نسبی
MPD.Location(#9939).
- افزودن ویژگیهای ضروری و تکمیلی تجزیهشده به
- HLS:
Format.labelرا برای جاریسازیهای HLS فقط صوتی بهدرستی پر کنید (#9608).- بهطور پیشفرض از آمادهسازی بدون قطعه برای بهبود زمان راهاندازی استفاده کنید. اگر
نسخههای شما حاوی قطعههای زیرنویس ناشنوایان درهمگذاریشدهای است که در فهرست پخش اصلی اعلام
نشدهاند، باید آنها را به فهرست پخش اصلی اضافه کنید تا برای بازپخش
دردسترس باشند، یا آمادهسازی بدون تکه را با
HlsMediaSource.Factory.setAllowChunklessPreparation(false)خاموش کنید. - پشتیبانی از جستجوی دقیق قاب کلیدی در HLS (#۲۸۸۲).
- RTSP:
- ترانسفورماتور:
- حداقل نسخه میانای برنامهسازی کاربردی موردنیاز را به ۲۱ افزایش دهید.
- اکنون از
TransformationExceptionبرای توصیف خطاهایی که درطول تبدیل رخ میدهد استفاده میشود. TransformationRequestرا برای مشخص کردن گزینههای تبدیل اضافه کنید.- اجازه دهید چند شنونده ثبت شوند.
- رفع مشکل گیر کردن Transformer وقتی خروجی کدک بهطور جزئی خوانده میشود.
- رفع NPE بالقوه در
Transformer.getProgressهنگام رها کردن پرتابهای چندتاییساز. - برنامه نمایشی برای اعمال تبدیلها اضافه کنید.
- افزونه MediaSession:
- بهطور پیشفرض،
MediaSessionConnectorاکنون فهرست پخش را هنگام توقف پاک میکند. برنامههایی که میخواهند فهرست پخش حفظ شود میتوانندsetClearMediaItemsOnStop(false)را در اتصالدهنده فراخوانی کنند.
- بهطور پیشفرض،
- افزونه Cast:
- افزونه FFmpeg:
- وابسته کردن
build_ffmpeg.shبه ابزارهای bin متعلق به LLVM بهجای GNU (#9933).
- وابسته کردن
- سازگاری با Android 12:
- افزونه Cast را ارتقا دهید تا به
com.google.android.gms:play-services-cast-framework:20.1.0وابسته باشد. نسخههای قبلیplay-services-cast-frameworkبا برنامههایی که Android 12 را هدف قرار میدهند سازگار نیستند و هنگام ایجادPendingIntentباIllegalArgumentExceptionازکار میافتند (#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 نسخه ۲.۱۶.۱ یا قبلاز آن برای استفاده از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
۲۷ اکتبر ۲۰۲۱
androidx.media3:media3-*:1.0.0-alpha01 منتشر شده است. نسخه 1.0.0-alpha01
حاوی این
ثبتها است.
ویژگیهای جدید
Media3 خانه جدیدی برای کتابخانههای پشتیبانی رسانه، ازجمله ExoPlayer، است. اولین نسخه آلفا شامل پیادهسازیهای اولیه و کاربردی کتابخانهها برای پیادهسازی موارد استفاده رسانه است، ازجمله:
- ExoPlayer، پخشکننده رسانه در سطح برنامه برای Android که سفارشیسازی و گسترش آن آسان است.
- عملکرد جلسه رسانه، برای نمایش و کنترل بازپخشها. این
واحد جلسه جدید از همان میانای
PlayerExoPlayer استفاده میکند. - مؤلفههای میانای کاربر برای ساختن میانای کاربر بازپخش رسانه.
- ماژولهایی که عملکرد را در کتابخانههای دیگر برای استفاده با ExoPlayer بستهبندی میکنند، برای مثال، درج آگهی ازطریق IMA SDK.
برای اطلاعات بیشتر، به پروژه Media3 GitHub مراجعه کنید.
ExoPlayer قبلاً در پروژه ExoPlayer GitHub جداگانهای میزبانی میشد. در Media3، نام بسته آن
androidx.media3.exoplayer است. قصد داریم برای مدتی به نگهداری و انتشار پروژه ExoPlayer GitHub ادامه دهیم تا برنامهها فرصت داشته باشند به Media3 منتقل شوند.
Media3 برای همه پیمانههای ExoPlayer جایگزین دارد، بهجز افزونههای قدیمی
media2 و mediasession که با پیمانه جدید
media3-session جایگزین شدهاند. این کار ادغام مستقیم بین پخشکنندهها و جلسههای رسانه را بدون نیاز به استفاده از کلاس آداپتور/رابط فراهم میکند.