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_SIZE from 65536 to 65520 so each buffer allocation (including its byte[] 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 را با JSpecify org.jspecify.annotations.Nullable جایگزین کنید.
    • ‫androidx.media3.common.util.UnknownNull را بردارید و به‌جای آن از حاشیه‌نویسی‌های JSpecify nullness استفاده کنید. زیرکلاس‌های Kotlin از RunnableFutureTask با نوع نتیجه تهی‌پذیر (مثل Void?) باید شناسه نوع تهی‌پذیر (مثلاً RunnableFutureTask<Void?, Exception>) را مشخص کنند.
    • AdViewProvider.getAdVideoView() را اضافه کنید تا محفظه ویدیو View را ارائه دهید که می‌تواند درطول بازپخش آگهی تغییر اندازه دهد.
    • نگاشت رشته کدک mlpa RFC 6381 به MimeTypes.AUDIO_TRUEHD در MimeTypes.getMediaMimeType، رفع مشکل قطعه‌های صوتی Dolby TrueHD درهم‌گذاری‌شده مفقود درطول آماده‌سازی بدون تکه HLS (#3485).
    • ‫AdPlaybackState.withAdDurationsUs را برای کپی کردن آرایه ارسال‌شده و AdPlaybackState.fromAdPlaybackState را برای کپی کردن همه فیلدهای آرایه گروه‌های آگهی اصلاح کنید تا دیگر نتوان نمونه‌ای را ازطریق آرایه‌های حفظ‌شده یا هم‌رسانی‌شده اصلاح کرد.
    • رفع IllegalStateException («به پخش‌کننده در رشته اشتباهی دسترسی پیدا شده است.») هنگامی که Player.listen یا Player.listenTo از رشته‌ای به‌جز رشته برنامه پخش‌کننده لغو می‌شود (برای مثال، درطول جداسازی آزمایش میانای کاربر Compose) (#3005).
  • 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 to false) so that custom MediaPeriod implementations can opt in to reporting initial discontinuities using SampleStream.getFlags(), falling back to MediaPeriod.readDiscontinuity() when not supported and Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION is enabled.
    • مشکلی برطرف شد که در آن رد کردن آگهی‌ای که آگهی دیگری در همان گروه آگهی به‌دنبال آن بود، به‌جای DISCONTINUITY_REASON_SKIP با DISCONTINUITY_REASON_AUTO_TRANSITION گزارش می‌شد، یا وقتی AdsMediaSource از آماده‌سازی منبع محتوای تنبل استفاده می‌کرد، اصلاً گزارش نمی‌شد.
  • ترانسفورماتور:
    • افزودن CodecDB (androidx.media3.transformer.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 OutOfMemoryError when sniffing corrupt or non-media files that start with ID3 (#3502).
  • بازرس:
    • مشکلی که در آن لغو کردن آینده برگردانده‌شده توسط 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 با رندر کردن مستقیم مناطق زیرنویس در بیت‌مپ‌های اندازه منطقه به‌جای حفظ بیت‌مپ موقت تمام‌صفحه کاهش دهید.
  • جلوه:
    • رفع NullPointerException در DefaultVideoFrameProcessor هنگام پاک‌سازی (برای مثال، هنگام جستجو یا پیمایش در CompositionPlayer) (#۳۴۷۰).
    • رفع مشکل DefaultGlObjectsProvider.release که وقتی ارائه‌دهنده پس‌از انتشار دوباره استفاده می‌شود، GlException را نشان می‌دهد (#۲۰۱۶).
  • Muxers:
    • قطعه Format را هنگام افزودن قطعه به Mp4Muxer یا FragmentedMp4Muxer اعتبارسنجی کنید، به‌جای اینکه بعداً هنگام نوشتن نمونه‌ها یا بستن muxer با شکست مواجه شوید.
    • Make repeated calls to Muxer.close() a no-op in all library Muxer implementations, and treat the muxer as closed even if close() 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 را گزارش کنید.
    • رفع مشکل نبودن کار هنری برای جلسه‌های قدیمی که null METADATA_KEY_DISPLAY_ICON (یا URI کار هنری) را درکنار METADATA_KEY_ALBUM_ART معتبر تنظیم می‌کنند: اکنون هنگام تبدیل فراداده قدیمی، مقادیر کار هنری تهی نادیده گرفته می‌شود.
  • میانای کاربر:
    • افزودن جایگاه subtitles Composable به ContentFrame و Player، با پشتیبانی پیش‌فرض در media3-ui-compose-material3 برای رندر کردن نقشه بیتی و نشانه‌های زیرنویس نوشتاری افقی.
    • ‫SubtitleView.setTextDirectionHeuristic اضافه شد تا امکان سفارشی‌سازی کردن اکتشافی جهت نوشتار مورداستفاده برای شکست نوشتار زیرنویس دوطرفه فراهم شود (#۳۴۵۴).
    • Animate all control slots in Player in media3-ui-compose-material3, including custom ones, and remove the visible parameter from PlayerDefaults.TopControls, CenterControls and BottomControls. این یک تغییر مخرب در میانای برنامه‌سازی کاربردی ناپایدار است.
    • با قرار دادن 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 DefaultMediaItemConverter when a playback URI is missing or conversion fails, preserving the media ID and metadata in the CastPlayer timeline for Cast queue items without a playback URI.
    • SessionAvailabilityListener.onCastSessionAvailable(boolean) را اضافه کنید تا نشان دهد که آیا جلسه «ارسال محتوا» دردسترس بااستفاده از قصد پیوستن شروع شده است یا نه، و هنگام پیوستن به جلسه «ارسال محتوا» بااستفاده از «قصد پیوستن» در CastPlayer، وضعیت بازپخش ازراه‌دور را به‌جای بازنویسی با وضعیت پخش‌کننده محلی حفظ کنید.
    • Populate MediaInfo and timeline durations from MediaMetadata.durationMs for non-live items in DefaultMediaItemConverter and RemoteCastPlayer, 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 در نگاشت‌های رنگ ISO MediaFormatUtil و ColorInfo پشتیبانی کنید.
    • افزودن یک Flags مرکزی برای مدیریت پرچم‌های ویژگی آزمایشی و عرضه گام‌به‌گام (Flags.setCanaryModeEnabled). انتقال بسیاری از روش‌های @ExperimentalApi موجود برای استفاده از میانای برنامه‌سازی کاربردی پرچم‌های جدید.
    • ‫MediaMetadata.playlistId، MediaMetadata.Builder.setPlaylistId(String)، MediaMetadata.categories، و MediaMetadata.Builder.setCategories(List<String>) را اضافه کنید.
    • androidx.media3.common.util.NonNullApi را با JSpecify org.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_1 sub-stream header from each PES packet in PsExtractor before 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 MediaCodec MP3 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 در میان جریان.
  • بازرس:
    • پشتیبانی از بازیابی فراداده XMP از فایل‌های MP4 بااستفاده از MetadataRetriever.
    • پشتیبانی از استخراج قطعه‌های فراداده زمان‌بندی‌شده جعبه‌ای mebx در MediaExtractorCompat به‌عنوان MimeTypes.APPLICATION_MEBX.
  • قاب بازرس:
    • برش رنگ‌های BT.2020 با گاموت گسترده در تصویر پایه SDR هنگام استخراج فریم‌های Ultra HDR با FrameExtractor برطرف شد. رنگ‌های خارج از گستره اکنون به‌جای اینکه محدود شوند، به‌آرامی در گستره sRGB فشرده می‌شوند.
  • صدا:
    • افزودن راه‌حل برای دستگاه‌هایی که 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 in FragmentedMp4Extractor using FLAG_READ_MFRA_FOR_SEEK_MAP.
    • رفع خرابی در Mp4Writer و FragmentedMp4Writer هنگام نوشتن نمونه EOS قبل‌از اینکه نمونه‌های دیگر نوشته شوند.
    • Fix container compliance when muxing Dolby content into MP4 or Fragmented MP4 files by advertising the dby1 compatible brand in the container header (#3369).
    • پشتیبانی از قطعه‌های صوتی PCM ممیز شناور ۳۲ بیتی در Mp4Muxer و FragmentedMp4Muxer (#۳۳۸۹).
    • رد کردن نمایه‌های Dolby Vision پشتیبانی‌نشده در Mp4Muxer و FragmentedMp4Muxer هنگام افزودن قطعه.
    • پشتیبانی از قطعه‌های صوتی PCM عدد صحیح ۲۴ بیتی و ۳۲ بیتی در Mp4Muxer و FragmentedMp4Muxer.
  • افزونه IMA:
    • رویدادهای توقف موقت و ازسرگیری پخش‌کننده را به IMA SDK در ImaServerSideAdInsertionMediaSource بازارسال کنید.
  • جلسه:
    • 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.TransportControls calls made within the same Looper iteration when controlling a legacy MediaSessionCompat (for example, calling setMediaItem, prepare, and play together now dispatches a single onPlayFrom* callback).
  • میانای کاربر:
    • رفع مشکل موقعیت علائم نگارشی زیرنویس راست به چپ و حفظ محدوده گستره هنگام فعال بودن شکست نوشتار دوجهته (#3454، #3455).
    • کلاس‌های TrackSelectionState و TrackSelectionParametersState و توابع یادآوری وضعیت Composable مربوطه را به واحد media3-ui-compose اضافه کنید.
    • PresentationState.videoAspectRatio را معرفی کنید و Modifier.resizeWithContentScale را به‌جای sourceSizeDp: Size? به aspectRatio: Float? تبدیل کنید.
    • کلاس CuesState و Composable rememberCuesState را به media3-ui-compose ماژول اضافه کنید تا به نشانه‌های فعلی پخش‌کننده گوش دهید.
    • اگر ProgressSlider براساس ExoPlayer یا CompositionPlayer است، پشتیبانی از حالت پیمایش سریع را به آن اضافه کنید.
    • پشتیبانی showArtwork را به PresentationState اضافه کنید و از آن برای زمان‌بندی پرداخت artwork Composable اختیاری ارائه‌شده در ContentFrame و Player استفاده کنید. Artwork Composable را اضافه کنید تا به‌عنوان مقدار پیش‌فرض برای جایگاه artwork استفاده شود.
    • افزودن فیلدهای جدید به PlayPauseButtonState (showBuffering،‏ showRetry، showReplay) و استفاده از آن‌ها در PlayPauseButton برای ارائه نمادهای بیشتر و نشانگر میان‌گیری.
    • کلاس PlaybackState را برای امکان‌پذیر کردن مشاهده وضعیت بازپخش سفارشی اضافه کنید، و BufferingIndicator را به‌عنوان مؤلفه مستقل از دکمه معرفی کنید.
    • مشکلی را برطرف کنید که در آن PlayerView و PlayerControlView نشانگرهای آگهی را در مرزهای دوره برای جای‌بان‌های پس‌پخش زنده در جاری‌سازی‌های زنده چنددوره‌ای نشان می‌دادند.
    • جایگاه‌های قابل‌ترکیب Player،‏ ContentFrame،‏ PlayerDefaults و MiniController دیگر پخش‌کننده یا رؤیت‌پذیری کنترل‌ها را به‌عنوان پارامتر دریافت نمی‌کنند. به‌جای آن، آن‌ها را از محدوده فراخوانی ضبط کنید (برای مثال، topControls اکنون @Composable BoxScope.() -> Unit است). این یک تغییر مخرب در یک میانای برنامه‌سازی کاربردی ناپایدار است.
    • پارامتر alignment را به ContentFrame، Player و Modifier.resizeWithContentScale اضافه کنید تا محتوای مقیاس‌بندی‌شده را در محفظه آن قرار دهید و محتوای ContentFrame را به حدود آن برش دهید تا ویدیویی که با ContentScale.Crop مقیاس‌بندی شده است دیگر خارج از آن ترسیم نشود.
    • افزودن پشتیبانی میانای کاربر جاری‌سازی زنده به ProgressSlider، ProgressStateWithTickCount و ProgressStateWithTickInterval با نمایان کردن isLive و liveOffsetMs. افزودن LiveButton Composable به media3-ui-compose-material3 (#۲۲۱۳).
  • افزونه Ktor:
    • رفع مشکلی که باعث می‌شد KtorDataSource قطعی اتصال در میان‌جاری را به‌جای ایجاد HttpDataSourceException به‌عنوان پایان ورودی درنظر بگیرد (#۳۴۶۰).
  • افزونه HLS:
    • Parse VIDEO-RANGE (PQ and HLG) on EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF into Format.colorInfo (#3441).
    • رفع NullPointerException هنگام تجزیه بخش‌های مقداردهی اولیه MPEG-TS EXT-X-MAP که حاوی نمونه‌های رسانه PES هستند (#۳۴۵۶).
    • رفع اشکال رگرسیون که در آن Format.id و Format.metadata برای قطعه‌های HLS آشکارشده null بودند (#3402).
    • آگهی‌های فهرست دارایی را به X-PLAYOUT-LIMIT برش دهید و از آگهی‌هایی که کاملاً فراتر از حد مجاز هستند صرف‌نظر کنید، و وقتی میان‌آگهی X-RESUME-OFFSET را حذف می‌کند و مدت آن نامشخص است، حتی اگر X-PLAYOUT-LIMIT تنظیم شده باشد، انحراف ازسرگیری محتوا را به‌طور پیش‌فرض روی ۰ قرار دهید.
    • مشکلی را برطرف کنید که در آن حل کردن یک X-ASSET-LIST بینابینی، مشارکت‌های آفست ازسرگیری محتوای سایر بینابینی‌ها را در همان گروه آگهی رونویسی می‌کرد.
  • افزونه DASH:
    • پشتیبانی از تجزیه رویدادهای «درج MPD جایگزین» (urn:mpeg:dash:event:alternativeMPD:insert:2025) و «جایگزینی» (urn:mpeg:dash:event:alternativeMPD:replace:2025) در DashManifestParser و نمایش آن‌ها به‌عنوان نمونه‌های AlternativeMpdEvent در Period.alternativeMpdEvents. این تغییری ناسازگار برای برنامه‌هایی است که زیرکلاس DashManifestParser هستند: DashManifestParser.buildPeriod اکنون پارامتر List<AlternativeMpdEvent> اضافی می‌گیرد و سربارگذاری قبلی برداشته شده است. برنامه‌هایی که DashManifestParser.parseEventStream(XmlPullParser) را لغو می‌کنند باید به‌جای آن DashManifestParser.parseEventStream(XmlPullParser, String) را لغو کنند، زیرا مورد اول منسوخ شده است و در نسخه پخش آتی خصوصی خواهد شد.
    • تجزیه اطلاعات رنگ CICP (ColourPrimaries، TransferCharacteristics، MatrixCoefficients، و VideoFullRangeFlag) از توصیف‌کننده‌های EssentialProperty و SupplementalProperty به Format.colorInfo (#3426).
    • پشتیبانی از فهرست‌های جداشده با فاصله سفید از مقادیر @id در حالت ترفند (http://dashif.org/guidelines/trickmode) توصیف‌گر @value مشخصه‌ها (#3315).
    • پشتیبانی از تجزیه <ProducerReferenceTime> در DashManifestParser، نمایش آن در AdaptationSet.producerReferenceTimes، و استفاده از آن برای پر کردن Timeline.Window.presentationStartTimeMs و Timeline.Window.windowStartTimeMs برای جاری‌سازی‌های VOD.
    • افزودن پشتیبانی از DASH Content Steering (#۱۶۸۹).
    • رفع NullPointerException که ممکن است هنگام تجزیه مانیفست DASH با مشخصه مفقود در عنصر <UTCTiming> رخ دهد (#۳۴۳۶).
  • افزونه RTSP:
    • رفع خرابی IllegalStateException که هنگام پردازش پاسخ‌های تأخیری شبکه پس‌از بسته شدن کلاینت RTSP رخ می‌داد.
    • رفع مشکلی که در آن پیمایش سریع می‌توانست به‌اشتباه سازوکار بازگشت پروتکل TCP را راه‌اندازی کند.
    • رفع خرابی IllegalStateException که ممکن است هنگام پردازش پاسخ‌های شبکه با تأخیر رخ دهد، پس‌از اینکه کارخواه RTSP وضعیت را درطول انتخاب مجدد قطعه، قطع جلسه، یا تغییر مسیر URI بازنشانی می‌کند.
    • مشکلی که در آن جستجوی مجدد قبل‌از بازراه‌اندازی بازپخش می‌توانست باعث ازکارافتادن IllegalStateException شود برطرف شد.
    • رفع مشکلی که در آن جستجو به عقب درحالی‌که جستجوی دیگری درانتظار بود می‌توانست باعث قطع صدا و توقف بازپخش ویدیو شود.
    • رفع مشکلی که در آن واحدهای دسترسی قاب کلیدی H.264 و H.265 که با یک بسته تجمیعی یا غیر IDR پایان می‌یافتند به‌عنوان قاب کلیدی پرچم‌گذاری نمی‌شدند و باعث می‌شدند بازپخش در حالت میان‌گیری گیر کند (#3434).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • افزونه Opus: رفع خرابی JNI هنگام رمزگشایی داده‌های نامعتبر Opus.
    • افزونه Opus: رفع مشکل نادیده گرفته شدن لایه دورریز وقتی پیش‌پرش و لایه دورریز در یک بسته قرار می‌گیرند (#۲۵۷۶).
  • افزونه Cast:
    • Introduce SessionAvailabilityListener.SessionUnavailableReason to represent the reason for session unavailability, and provide an overloaded method for SessionAvailabilityListener.onCastSessionUnavailable to 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) منتقل یا اعمال نشوند برطرف شد (#۸۸۹).
  • برنامه نمایشی:
    • پشتیبانی از فایل‌های رسانه‌ای محافظت‌شده با مدیریت حقوق دیجیتال و یک جاری‌سازی نمونه 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 را به ۲۴ افزایش دهید.

نسخه ۱.۱۱.۰

‫۱.۱۱.۱

‫۱۰ سپتامبر ۲۰۲۶

  • ExoPlayer:
    • پرچم را برای فعال/ غیرفعال کردن فراداده HAGC برای رسانه پیش‌رونده از MediaSource.Factory به ExtractorsFactory منتقل کنید. روش قبلی setExperimentalEnableHagcPlayback برداشته شده و با ExtractorsFactory.setParseHagcMetadata جایگزین شده است. این به‌روزرسانی همچنین مشکلی را برطرف می‌کند که در آن غیرفعال کردن برای محفظه‌های Matroska/WebM کار نمی‌کرد.
    • رفع توقف بازپخش ناشی از پیش‌گرم کردن پردازنده ثانویه غیرانتقالی.
    • رفع مشکل پیش‌گرمایش که در آن Surface باید به رندرکننده اصلی برگردانده شود وقتی جستجو هر دو رندرکننده را بازنشانی و غیرفعال می‌کند.
    • رفع مشکل ArrayIndexOutOfBoundsException وقتی بازآوری خط زمان زنده، موقعیت پیش‌فرض را از آگهی درج‌شده در سمت سرور که درحال پخش است عبور می‌دهد (#3348).
    • رفع مشکل حالت پیمایش که در آن فریم‌های ویدیو قدیمی ممکن بود به‌طور خلاصه هنگام جستجو با ScrubbingModeParameters.allowSkippingMediaCodecFlush فعال نمایش داده شوند.
  • استخراج‌کننده‌ها:
    • Matroska: رفع مشکلی که در آن، «قطعه‌های» قرارگرفته بعداز خوشه‌ها منجر به خط زمان قابل‌جستجو نمی‌شد (#۳۳۷۷).
  • صدا:
    • محاسبه اندازه میان‌گیر در SilenceSkippingAudioProcessor اصلاح شد تا حداقل مدت سکوت به‌طور نادرست توسط اندازه قاب کاهش مقیاس پیدا نکند (#3271).
    • رفع مشکل مدیریت PCM‏ ۸ بیتی در PcmAudioUtil برای اینکه نمونه‌ها به‌عنوان بدون علامت درنظر گرفته شوند، همان‌طور که توسط Android تعریف شده است (#۳۲۷۱).
    • مشکل تخلیه بار که در آن بازپخش ممکن بود درطول پیش‌ویدیو یا انتقال بدون وقفه به‌دلیل محدود بودن اندازه میان‌گیر سخت‌افزار متوقف شود برطرف شد.
    • رفع اشکال در DefaultAudioSink که در آن تعداد انتشار کاهش نمی‌یابد وقتی رشته بازپخش دیگر فعال نیست (#3338).
  • جلسه:
    • رفع NullPointerException وقتی MediaController درحال پردازش از بازخوانی Player.Listener منتشر می‌شود (#۳۳۷۵).
    • رفع بن‌بست در رشته اصلی وقتی MediaBrowser قدیمی به سرویسی متصل می‌شود که نتیجه ناهمگام از onGetLibraryRoot() یا onConnectAsync() برمی‌گرداند (#3393).
  • افزونه HLS:
    • محاسبه آفست ازسرگیری محتوا وقتی بخش هدف برای چسباندن هنوز در فهرست پخش نیست اصلاح شد (#۳۳۲۲).
    • رفع مشکلی که در آن HlsMediaChunk کاملاً مصرف‌شده، بارگیری را هنگام دریافت EOFException از استخراج‌کننده دوباره امتحان می‌کند (#۳۳۵۰).
  • افزونه DASH:
    • رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعه‌های تصویری با presentationTimeOffset (#3334).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • Opus: رفع خرابی حافظه وقتی چندین نمونه OpusDecoder به‌طور هم‌زمان مقداردهی اولیه می‌شوند.
    • MPEG-H: رفع نشت حافظه، کوتاه شدن نویسه‌های غیرASCII، و خرابی بومی احتمالی در شرایط حافظه کم هنگام ارسال فرمان‌ها به MpeghUiManager (#3365).

نسخه ۱.۱۱.۰

‫۵ اوت ۲۰۲۶

  • کتابخانه مشترک:
    • Format.channelMask را برای نمایش صریح ماسک کانال صوتی اضافه کنید، و یک سربارگذاری Util.getAudioTrackChannelConfig(Format) جدید برای حل ایمن آن.
    • Kotlin را از نسخه 2.0.20 به 2.2.0 ارتقا دهید.
  • ExoPlayer:
    • رفع اشکال همزمانی وابسته به زمان‌بندی که می‌توانست باعث IllegalStateException یا IndexOutOfBoundsException در ExoPlayer شود.
    • Relax ad group count checks in AdsMediaSource to allow the ad group count to decrease when an ad group is fully processed (hasUnplayedAds() is false), accommodating dynamic ad group resizing during reset workflows.
    • ‫getFlags() و FLAG_STRICT_DURATION را به SampleStream اضافه کنید تا به جاری‌سازی‌ها اجازه دهید پرچم‌ها را گزارش کنند و پردازنده گرافیکی را به‌روز کنید تا این پرچم‌ها را به‌طور پویا بررسی کند.
    • Fall back to the frame rate estimator in MediaCodecVideoRenderer and to the codec output format in MediaCodecAudioRenderer to 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 ExoPlayer would be used instead of the value set by setAudioSessionId (#3241).
    • افزودن پشتیبانی آزمایشی از بازپخش فراداده زمان‌بندی‌شده HAGC (ST 2094-50) برای رسانه پیش‌رونده (مثلاً MP4،‏ Matroska). پخش‌کننده به‌طور خودکار قطعه‌های فراداده HAGC را با قطعه ویدیویی مربوطه ادغام می‌کند و فراداده را به‌صورت خارج از باند به رمزگشا در دستگاه‌های دارای API 37+ ارائه می‌دهد. این رفتار را می‌توان ازطریق DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false) غیرفعال کرد.
    • Add Format.selectionPriority representing the relative preference of the Format in 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 Chapter entries in a track's Metadata.
    • MPEG-TS: بهبود استخراج جاری‌سازی‌های DTS-HD و DTS Express با ترکیب کردن «زیرجاری‌سازی هسته و افزونه» در یک نمونه واحد، رفع مشکلات بازپخش که قبلاً این دو به‌عنوان نمونه‌های جداگانه خروجی داده می‌شدند (#۳۱۴۷).
    • MP4: Prevent infinite loops and out-of-bounds reads when parsing empty ilst metadata 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 sgpd boxes in fragmented MP4 files (#3243).
    • AVI: رفع مشکلی که در آن پخش فایل‌های بدون پرچم قاب کلیدی در قطعه‌های صوتی باعث ازدست رفتن صدا و OutOfMemoryError می‌شد.
    • MP3: از مدت‌های آگاه از بی‌وقفه از سرایندهای Xing/Info استفاده کنید (#۳۱۸۳).
    • MP3: تنظیم تأخیر کدبند LAME/Xing و فراداده لایی برای مطابقت با برش PCM رمزگشایی‌شده (#3200).
  • صدا:
    • 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 ToFloatPcmAudioProcessor to 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 Timeline and period UID to AudioSink.configure and AudioProcessor.StreamMetadata to 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 زائد و بیدار شدن بیش‌ازحد واحد پردازش مرکزی در رشته اصلی شود.
  • نوشتار:
    • TTML: Fallback to displayAlign from style for regions (#2559).
    • TTML: Inherit cue start time from parent of <p> elements (#3246).
  • فراداده:
    • افزودن فیلد MediaMetadata.discSubtitle و تجزیه آن از داده‌های ID3v2.4 TSST و Vorbis DISCSUBTITLE.
    • تجزیه شماره و تعداد دیسک از قاب 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 را برای پشتیبانی از پُرسمان جلسه‌های رسانه فعال و برگرداندن نمونه‌های Media3 SessionToken اضافه کنید.
    • تغییر رفتار پیش‌فرض 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 on MediaController when seeking inside the same media item (#3248).
  • میانای کاربر:
    • رفع مشکل رندر شدن قاب اول در اندازه اشتباه وقتی ContentFrame در اواسط بازپخش بازترکیب می‌شود (#۳۲۳۸).
    • کلاس CurrentMediaItemState و rememberCurrentMediaItemState Composable مربوطه را به مدول media3-ui-compose اضافه کنید. This state holder is used in demo-compose to display various metadata information about the currently playing MediaItem.
    • کلاس PlaylistState و rememberPlaylistState مربوطه را به واحد media3-ui-compose اضافه کنید. این نگه‌دارنده حالت در demo-compose برای نمایش اطلاعات فراداده مختلف درباره MediaItems تنظیم‌شده در «پخش‌کننده» استفاده می‌شود.
    • افزودن میانای برنامه‌سازی کاربردی حرکت سریع/ حرکت آهسته به PlaybackSpeedState. از این عملکرد در demo-compose برای نمایش جلو بردن سریع با فشار طولانی استفاده کنید.
    • MiniController composable را به واحد media3-ui-compose-material3 اضافه کنید. این ویژگی یک امکان فشرده برای کنترل Player فراهم می‌کند و درعین‌حال عنوان، هنرمند، اثر هنری، و پیشرفت فایل رسانه‌ای فعلی را نمایش می‌دهد.
    • کلاس ErrorState و rememberErrorState مربوطه را به واحد media3-ui-compose اضافه کنید. ‫ErrorText Composable را به media3-ui-compose-material3 اضافه کنید و آن را به‌عنوان رونهاد پیش‌فرض در Player تنظیم کنید.
    • انتشار شیء PlayerDefaults با composables برای TopControls، CenterControls، BottomControls، و ErrorOverlay.
    • FocusRequester را به Player Composable و جایگاه‌های محتوای آن اضافه کنید.
    • PlayerPool (common-ktx) و rememberPooledPlayer (ui-compose) را منتشر کنید تا از پیش‌بارگیری MediaItems در محیط‌های میانای کاربر پنجره لغزان پشتیبانی شود. این عملکرد را در demo-compose با ShortFormPlayerScreen جدیدی نمایش دهید.
    • رفع اشکال توقف شاتر در PlayerView و Compose PresentationState که باعث ازکارافتادن در خطوط زمانی‌ای می‌شد که از جستجوی UID دوره پشتیبانی نمی‌کنند (#۳۲۶۴).
  • بارگیری‌ها:
    • حل کردن متغیرهای HLS در فهرست پخش رسانه هنگام واکشی برای بارگیری (#۳۲۵۸).
  • افزونه Ktor:
    • افزودن ماژول افزونه جدید media3-datasource-ktor که KtorDataSource را با پشتیبانی پشته HTTP Ktor ارائه می‌دهد.
    • رفع مشکل KtorDataSource بار کردن کل بدنه پاسخ‌های HTTP در حافظه هنگام باز کردن اتصال (#3305).
  • افزونه 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 Location elements from the manifest (MPD) and performing location fallback in DashMediaSource when manifest loads fail.
    • رفع ازکارافتادگی (IndexOutOfBoundsException) هنگام باز کردن مانیفست‌ها با عنصر <SegmentTimeline/> خالی (#3326).
  • افزونه 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 DataSourceContractTest for lengths returned from DataSource.open(). منابعی که ممکن است به C.LENGTH_UNSET منجر شوند باید این موضوع را بااستفاده از TestResource.Builder.setMayResolveToUnknownLength(boolean) نشان دهند.
    • setPlaybackLooper را به TestExoPlayerBuilder اضافه کنید.
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن androidx.media3.exoplayer.MetadataRetriever. درعوض از androidx.media3.inspector.MetadataRetriever استفاده کنید.
    • برداشتن androidx.media3.exoplayer.MediaExtractorCompat. درعوض از androidx.media3.inspector.MediaExtractorCompat استفاده کنید.
    • برداشتن Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. از HeifExtractor برای استخراج فراداده عکس حرکتی از فایل‌های HEIC استفاده کنید.
    • برداشتن androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. درعوض از androidx.media3.extractor.metadata.MotionPhotoMetadata استفاده کنید.
    • برداشتن androidx.media3.extractor.DummyTrackOutput. درعوض از androidx.media3.extractor.DiscardingTrackOutput استفاده کنید.
    • برداشتن androidx.media3.extractor.DummyExtractorOutput. درعوض از androidx.media3.extractor.NoOpExtractorOutput استفاده کنید.
    • برداشتن androidx.media3.common.C.generateAudioSessionIdV21. درعوض از androidx.media3.common.util.Util.generateAudioSessionId استفاده کنید.
  • ساختن
    • دستورالعمل‌های README.md برای وابسته بودن به Media3 به‌صورت محلی به‌روزرسانی شد تا از Gradle 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 MediaController can't set media items on platform media sessions that don't allow PREPARE_FROM actions.
    • رفع اشکالی که در آن فرایند خود با 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 ExoPlayer to be mocked without Robolectric by moving some default constants to ExoPlayer.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 اضافه شد.
  • بازرس:
    • تغییر ناگهانی: 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 پشتیبانی می‌شود.
    • رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صوتی بدون وقفه در حالت انتقال بار فشرده گیر می‌کند.
  • نوشتار:
    • VobSub: Use START and STOP SPU control commands to derive cue duration instead of always defaulting to 5 seconds (#2935).
  • فراداده:
    • افزایش تعداد پیش‌فرض پردازنده فراداده به چهار برای پوشش دادن همه قطعه‌های فراداده بالقوه منتشرشده توسط انواع و نسخه‌های HLS (#۳۰۴۳).
  • جلوه:
    • LottieOverlay را به ماژول :media3-effect-lottie جدیدی منتقل کنید (که شامل تغییر نام آن از androidx.media3.effect.LottieOverlay به androidx.media3.effect.lottie.LottieOverlay نیز می‌شود).
  • جلوه Lottie:
    • Introduce a new :media3-effect-lottie module which provides functionality for applying lottie effects to video frames.
  • افزونه 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 MediaSessionService and MediaLibraryService a LifecycleService, 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).
  • میانای کاربر:
    • ‫PlaybackSpeedControl Composable را به media3-ui-compose اضافه کنید تا سرعت بازپخش را نمایش دهید و اصلاح کنید.
    • PlaybackSpeedToggleButton Composable را به media3-ui-compose-material3 اضافه کنید تا سرعت بازپخش را کنترل کنید.
    • Add ProgressSlider Composable to media3-ui-compose-material3 for displaying player progress and performing seeks using dragging and tapping (#2288).
    • از میان‌گیر بزرگ خارج از صفحه در PlayerControlView پویانمایی اجتناب کنید.
    • Player Composable را به 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:
    • رفع مشکل مربوط به قطعه‌هایی که زمان شروع بخش‌های آن‌ها هم‌تراز نیست و باعث تأخیر یا ازدست رفتن نمونه‌ها در شروع بازپخش می‌شود (#۳۰۵۷).
    • رفع اشکالی که در آن مُهرهای زمان فراداده EMSG v0 درون‌باندی به‌درستی تنظیم نمی‌شود (#۳۰۲۴).
  • افزونه 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 extras Bundle instances in various classes to guard against malformed Bundle instances 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 MediaMetadataCompat and MediaDescriptionCompat (#3018).
  • بارگیری‌ها:
    • رفع حلقه‌های بی‌نهایت احتمالی هنگام رسیدگی به PriorityTooLowException توسط SegmentDownloader (برای DASH،‏ HLS، و SmoothStreaming). لغوهای سفارشی SegmentDownloader بااستفاده از روش محافظت‌شده execute باید تکلیف خود را در Supplier ارائه دهند تا بتوان آن را بازآفرینی کرد (#۲۹۳۱).
  • افزونه HLS:
    • سند JSON فهرست دارایی خام را به Listener.onAssetListLoadCompleted callback ارسال کنید. این یک تغییر اساسی در یک API ناپایدار است که برنامه‌هایی را که این callback را پیاده‌سازی می‌کنند ملزم می‌کند تا یک آرگومان اضافی از نوع JSONObject اضافه کنند (#2950).
  • افزونه 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 Mp3Extractor to default to a constant bitrate (CBR) assumption when no seeking metadata (e.g., Xing, VBRI) is found, even when FLAG_ENABLE_INDEX_SEEKING is 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-L1 and audio/mpeg-L2 MIME 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 stbl box 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 as TextInformationFrame objects in Format.metadata with IDs of MVNM and MVIN respectively (#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 را مدیریت کند.
    • انتشار مقادیر فراداده غیرString CharSequence مانند رشته‌های دارای سبک span (#۲۸۵۳) اصلاح شد.
    • CommandButton.executeAction را اضافه کنید تا کنترل‌کننده‌ها بتوانند راحت‌تر کنش موردنظر را راه‌اندازی کنند. همچنین اجازه می‌دهد پارامترهایی برای برخی‌از فرمان‌های پخش‌کننده و جلسه مشخص شود تا کنش راه‌انداز تعریف شود.
    • سازگاری با نسخه قدیمی را برای نمونه‌های CommandButton که از Player.Command یا SessionCommand غیرسفارشی برای تعریف کنش خود استفاده می‌کنند اضافه کنید. این موارد اکنون به‌درستی در جلسه‌های رسانه پلاتفرم نشان داده می‌شوند، برای مثال برای «رابط کاربری سیستم» یا Android Auto.
    • رفع مشکلی که در آن هنگام اتصال MediaController به جلسه رسانه پلاتفرم، همان Bitmap چندین بار فشرده می‌شود.
  • میانای کاربر:
    • کلاس ProgressStateWithTickInterval و rememberProgressStateWithTickInterval Composable مربوطه را به media3-ui-compose ماژول اضافه کنید. این نگه‌دارنده حالت در demo-compose برای نمایش موقعیت و مدت فعلی به‌صورت نوشتاری استفاده می‌شود.
    • MuteButtonState را به ui-compose اضافه کنید که بی‌صدا کردن میزان صدای Player را مدیریت می‌کند. این نگه‌دارنده حالت در demo-compose برای نمایش دکمه مبدل بی‌صدا/ باصدا کردن استفاده می‌شود.
    • کلاس‌های ProgressStateWithTickCount و rememberProgressStateWithTickCount Composable مربوطه را به مدول media3-ui-compose اضافه کنید. این نگه‌دارنده حالت در demo-compose برای نمایش پیشرفت به‌صورت نوار پیشرفت افقی فقط خواندنی استفاده می‌شود.
    • افزودن ContentFrame Composable به media3-ui-compose که مدیریت PlayerSurface را با تغییر اندازه نسبت ابعادی و پوشاندن با شاتر ترکیب می‌کند.
    • Work around a known API 34 platform bug causing stretched/cropped videos when using SurfaceView inside a Compose AndroidView and hence affecting ContentFrame and PlayerSurface Composables with SURFACE_TYPE_SURFACE_VIEW (#1237, #2811).
    • یک واحد media3-ui-compose-material3 جدید ایجاد کنید و «ترکیب‌شدنی‌های» با زمینه Material3 (PlayPauseButton،‏ NextButton، PreviousButton،‏ SeekBackButton،‏ SeekForwardButton،‏ RepeatButton، ShuffleButton،‏ MuteButton) را به آن اضافه کنید.
    • افزودن TimeText قابل‌ترکیب به media3-ui-compose-material3 برای نمایش پیشرفت پخش‌کننده به‌صورت متنی. می‌توان آن را برای نمایش موقعیت فعلی، مدت، یا زمان باقی‌مانده پیکربندی کرد.
    • پشتیبانی از قرار دادن دکمه مسیر رسانه در PlayerView را اضافه کنید.
    • از BidiFormatter برای نمایش صحیح علائم نگارشی در زیرنویس‌های متنی راست‌به‌چپ (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 HlsMediaPlaylist with 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 به‌درستی تجزیه شده و به رمزگشا ارسال می‌شود (#۲۸۸۷).
  • افزونه 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 منتقل کنید.
  • برداشتن نمادهای منسوخ‌شده:
    • Remove deprecated DefaultPreloadManager constructor. درعوض از DefaultPreloadManager.Builder استفاده کنید.
    • سازنده‌های EditedMediaItemSequence منسوخ‌شده برداشته شد. درعوض از EditedMediaItemSequence.Builder استفاده کنید.
    • برداشتن BitmapFactoryImageDecoder.BitmapDecoder. درعوض از ExternallyLoadedImageDecoder استفاده کنید.
    • برداشتن ShadowMediaCodecConfig.forAllSupportedMimeTypes() منسوخ‌شده. درعوض از ShadowMediaCodecConfig.withAllDefaultSupportedCodecs() استفاده کنید.
    • برداشتن منسوخ‌شده ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes(). درعوض از ShadowMediaCodecConfig.withNoDefaultSupportedCodecs() استفاده کنید.

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 DefaultAudioSink is accessed from multiple threads. اگر این اتفاق به‌دلیل فراخوانی RendererCapabilities.getFormatSupport خارج از پخش‌کننده رخ دهد، مطمئن شوید که این روش را در همان رشته‌ای که رشته بازپخش ExoPlayer است فراخوانی کنید یا از نمونه‌ای متفاوت از نمونه‌ای که برای بازپخش استفاده می‌شود استفاده کنید (#1191).
    • رفع اشکالی که در آن قالب‌های صوتی غیر استریو در تلویزیون‌ها ممکن است توسط DefaultTrackSelector به‌عنوان پشتیبانی‌نشده علامت‌گذاری شوند.
    • مطمئن شوید که آخرین قاب هنگام استفاده از پرچم DECODE_ONLY MediaCodec (که به‌طور پیش‌فرض در حالت پاک‌سازی فعال است) به‌درستی پرداز شده است.
    • پشتیبانی از استفاده از شناسه دستگاه مجازی از 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, TrimmingAudioProcessor and ToFloatPcmAudioProcessor public (#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=YES is 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:
    • افزودن پشتیبانی برای setVolume() و getVolume() (#۲۲۷۹).
    • Prevent CastPlayer from entering STATE_BUFFERING while the timeline is empty.
    • افزودن پشتیبانی برای getDeviceVolume()، setDeviceVolume()، getDeviceMuted()، و setDeviceMuted() (#2089).
  • ابزارهای آزمایش:
    • 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).
    • رفع مشکلی که در آن ProgressiveMediaPeriod IllegalStateException را به‌عنوان PreloadMediaSource ارسال می‌کند تا getBufferedDurationUs() را قبل‌از آماده شدن فراخوانی کند (#۲۳۱۵).
    • رفع مشکل ارسال CmcdData در درخواست‌های مانیفست برای DASH،‏ HLS، و SmoothStreaming (#۲۲۵۳).
    • مطمئن شوید که AdPlaybackState.withAdDurationsUs(long[][]) پس‌از برداشته شدن گروه‌های آگهی قابل‌استفاده است. کاربر همچنان باید آرایه‌ای از مدت زمان‌ها را برای گروه‌های آگهی برداشته‌شده ارسال کند که می‌تواند خالی یا پوچ باشد (#۲۲۶۷).
  • استخراج‌کننده‌ها:
    • MP4: Parse alternate_group from the tkhd box and expose it as an Mp4AlternateGroupData entry in each track's Format.metadata (#2242).
  • صدا:
    • رفع مشکل بارگیری که در آن ممکن است موقعیت هنگام پخش فهرست پخش محتوای کوتاه گیر کند (#۱۹۲۰).
  • جلسه:
    • کاهش زمان وقفه انبوهش برای فراخوانی‌های پلاتفرم 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 با null MediaMetadata فراداده را دوباره ارزیابی نمی‌کند (#۱۹۴۰).
    • دسترسی 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 به محافظت‌شده تا برنامه‌ها بتوانند برای مسدود کردن استفاده از سطوح جای‌بان لغو کنند (#۱۹۰۵).
    • افزودن تجزیه وابستگی نمونه آزمایشی ExoPlayer AV1 برای افزایش سرعت جستجو. آن را با DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API جدید فعال کنید.
    • افزودن ExoPlayer API آزمایشی برای حذف میانگیرهای ورودی رمزگشای MediaCodecVideoRenderer دیرهنگام که به آن‌ها وابسته نیست. آن را با DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs فعال کنید. * رفع مشکلی که در آن پخش‌کننده بدون سطح بلافاصله آماده می‌شد و رمزگشایی فریم‌های معلق بسیار کند بود (#۱۹۷۳).
    • دستگاه‌های Xiaomi و OPPO را از حالت سطح جداشده مستثنی کنید تا از لرزش صفحه جلوگیری شود (#2059).
  • نوشتار:
    • پشتیبانی از زیرنویس‌های VobSub اضافه شد (#۸۲۶۰).
    • بارگیری مشتاقانه همه فایل‌های زیرنویس پیکربندی‌شده با MediaItem.Builder.setSubtitleConfigurations متوقف شد و درعوض فقط یک فایل بارگیری می‌شود اگر با انتخاب قطعه انتخاب شده باشد (#۱۷۲۱).
    • TTML: Add support for referencing tts:origin and tts:extent using style (#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 VBRI frame's table of contents doesn't cover all the MP3 data in a file (#1904).
  • ویدیو:
    • Rollback of using MediaCodecAdapter supplied pixel aspect ratio values when provided while processing onOutputFormatChanged (#1371).
  • نوشتار:
    • رفع اشکال در ReplacingCuesResolver.discardCuesBeforeTimeUs که در آن نشانه فعال در timeUs (قبلاً شروع شده اما هنوز پایان نیافته است) به‌اشتباه رد شده بود (#۱۹۳۹).
  • فراداده:
    • استخراج شماره‌گذاری دیسک/قطعه و ژانر از نظرات Vorbis به MediaMetadata (#1958).

نسخه ۱.۵.۰

‫۲۷ نوامبر ۲۰۲۴

‫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 onLoadError callbacks.
      • در مدیریت زیرنویس قدیمی (درطول پرداز زدن)، فقط خطاهای بارگیری مرتبط ازطریق فراخوانی‌های برگشتی onLoadError منتشر می‌شوند، درحالی‌که خطاهای تجزیه بدون اطلاع نادیده گرفته می‌شوند (این رفتار ازقبل وجود داشته است).
    • رفع اشکالی که در آن موارد فهرست پخش یا دوره‌ها در جاری‌سازی‌های 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 endIndices calculation for MP4 with edit list (#1797).
    • Fix media duration parsing in mdhd box of MP4 files to handle -1 values (#1819).
    • افزودن پشتیبانی برای شناسایی جعبه h263 در فایل‌های MP4 برای ویدیو H.263 (#۱۸۲۱).
    • افزودن پشتیبانی از قالب فایل رسانه پایه AC-4 Level-4 ISO (#1265).
  • منبع داده:
    • HttpEngineDataSource را به‌روز کنید تا استفاده از نسخه S افزونه ۷ به‌جای سطح میانای برنامه‌سازی کاربردی ۳۴ مجاز شود (#۱۲۶۲).
    • DataSourceContractTest: تأیید کنید که DataSource.getUri() شناسه منبع یکسان حل‌شده را برمی‌گرداند (همان‌طور که مستند شده است). در مواردی که این با شناسه منبع یکسان درخواست‌شده متفاوت است، آزمایش‌ها می‌توانند این موضوع را بااستفاده از روش جدید DataSourceContractTest.TestResource.Builder.setResolvedUri() نشان دهند.
    • DataSourceContractTest: Assert that DataSource.getUri() and getResponseHeaders() return their 'open' value after a failed call to open() (due to a 'not found' resource) and before a subsequent close() call.
      • Overriding DataSourceContractTest.getNotFoundResources() allows test sub-classes to provide multiple 'not found' resources, and to provide any expected headers too. این کار امکان تمایز بین HTTP 404 (با سرصفحه) و «سرور پیدا نشد» (بدون سرصفحه) را فراهم می‌کند.
  • صدا:
    • اگر فراداده بلندی صدای CTA-2075 در رسانه وجود داشته باشد، به‌طور خودکار در کدک پیکربندی می‌شود.
    • هنگام جستجو، مطمئن شوید که صدا به‌آرامی کاهش می‌یابد.
    • رفع صدای پاپ که ممکن است هنگام جستجو رخ دهد.
    • رفع خطای انباشتگی برش برای الگوریتم تغییر زیروبمی/ کشش زمانی Sonic.
    • رفع اشکال در SpeedChangingAudioProcessor که باعث ازدست رفتن فریم‌های خروجی می‌شود.
  • ویدیو:
    • ‫MediaCodecVideoRenderer از رمزگشایی نمونه‌هایی که نه ارائه شده‌اند و نه به‌عنوان مرجع توسط نمونه‌های دیگر استفاده می‌شوند، اجتناب می‌کند.
    • در میانای برنامه‌سازی کاربردی ۳۵ و بالاتر، MediaCodecAdapter اکنون ممکن است null Surface را در configure دریافت کند و با روش جدید detachOutputSurface تماس بگیرد تا Surface ازپیش تنظیم‌شده را درصورت پشتیبانی کدک از آن بردارد (MediaCodecInfo.detachedSurfaceSupported).
    • هنگام پردازش onOutputFormatChanged، از مقادیر نسبت ابعادی پیکسل ارائه‌شده MediaCodecAdapter (درصورت ارائه) استفاده کنید (#۱۳۷۱).
    • افزودن راه‌حل برای مشکل دستگاه در Galaxy Tab S7 FE که باعث می‌شود جاری‌سازی‌های H264 امن با نرخ ۶۰ فریم در ثانیه به‌عنوان پشتیبانی‌نشده علامت‌گذاری شوند (#۱۶۱۹).
    • افزودن راه‌حل برای کدک‌هایی که بعداز آخرین نمونه بدون برگرداندن سیگنال پایان جاری‌سازی گیر می‌کنند.
  • نوشتار:
    • افزودن VoiceSpan سفارشی و پر کردن آن برای بخش‌های صدای WebVTT (#۱۶۳۲).
    • مطمئن شوید WebVTT در HLS با مُهرهای زمان زیرنویس بسیار بزرگ (که از long ۶۴ بیتی وقتی به‌صورت میکروثانیه نشان داده می‌شود و در 90,000 MPEG 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 IllegalArgumentException thrown 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 MediaBrowserCompat when connecting to a legacy MediaBrowserCompat. این سرویس می‌تواند اشاره‌های اتصال را که به‌عنوان اشاره‌های ریشه با اولین تماس به onGetRoot() ارسال شده‌اند دریافت کند.
    • رفع اشکالی که در آن MediaBrowser متصل به سرویس مرورگر قدیمی، خطای ارسال‌شده توسط سرویس را پس‌از مشترک شدن مرورگر در parentid دریافت نمی‌کرد.
    • بهبود رفتار هم‌کنش‌پذیری، به‌طوری‌که مرورگر Media3 که به MediaBrowserService قدیمی متصل است، هنگام مشترک شدن در والد، فرزندان parentId را دو بار درخواست نکند.
  • میانای کاربر:
    • Make the stretched/cropped video in PlayerView-in-Compose-AndroidView workaround opt-in, due to issues with XML-based shared transitions. برنامه‌هایی که از PlayerView در داخل AndroidView استفاده می‌کنند باید PlayerView.setEnableComposeSurfaceSyncWorkaround را فراخوانی کنند تا موافقت کنند (#1237، #1594).
    • ‫setFullscreenButtonState را به PlayerView اضافه کنید تا به‌روزرسانی‌های نماد دکمه تمام‌صفحه درصورت درخواست مجاز شود، یعنی خارج از باند و نه به‌صورت واکنشی به تعامل کلیک (#1590، #184).
    • رفع اشکال مربوط به کار نکردن گزینه «هیچ‌کدام» در انتخاب نوشتار درصورت وجود اولویت‌های انتخاب قطعه نوشتاری تعریف‌شده توسط برنامه.
  • افزونه DASH:
    • افزودن پشتیبانی برای دوره‌هایی که در وسط بخش شروع می‌شوند (#1440).
  • افزونه پخش جریانی روان:
    • رفع خطای Bad magic number for Bundle هنگام پخش جاری‌سازی‌های SmoothStreaming با قطعه‌های نوشتاری (#1779).
  • افزونه RTSP:
    • برداشتن اطلاعات کاربر برای نشانی‌های وب حاوی نویسه‌های @ کدبندی‌شده اصلاح شد (#1138).
    • رفع مشکل ازکارافتادن هنگام تجزیه بسته‌های RTP با افزونه‌های سرصفحه (#1225).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • افزودن پیمانه رمزگشای IAMF که از بازپخش فایل‌های MP4 حاوی قطعه‌های IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی می‌کند.
      • بازپخش با چیدمان استریو و همچنین 5.1 با فضاسازی به‌همراه ردیابی سر اختیاری فعال است، اما پشتیبانی از بازپخش دوگوشی درحال‌حاضر دردسترس نیست.
    • افزودن پشتیبانی از صفحه ۱۶ کیلوبایتی برای افزونه‌های رمزگشا در Android 15 (#1685).
  • افزونه Cast:
    • پاک کردن خط زمان را پس‌از قطع اتصال CastSession متوقف کنید، که به برنامه فرستنده امکان می‌دهد پس‌از قطع اتصال، بازپخش را به‌صورت محلی ازسر بگیرد.
    • Populate CastPlayer's DeviceInfo when a Context is 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:
    • مدیریت ناهمگام فراخوانی‌های برگشتی پیش‌بارگیری در PreloadMediaSource (#۱۵۶۸).
    • Allow playback regardless of buffered duration when loading fails (#1571).
  • استخراج‌کننده‌ها:
    • MP3: Fix Searched too many bytes error by correctly ignoring trailing non-MP3 data based on the length field in an Info frame (#1480).
  • نوشتار:
    • TTML: Fix handling of percentage tts:fontSize values to ensure they are correctly inherited from parent nodes with percentage tts:fontSize values.
    • رفع IndexOutOfBoundsException در LegacySubtitleUtil به‌دلیل مدیریت نادرست موردی که زمان شروع خروجی درخواستی بزرگ‌تر یا مساوی زمان رویداد نهایی در Subtitle (#۱۵۱۶) است.
  • مدیریت حقوق دیجیتال:
    • رفع خطای 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_HEADSETHOOK as a 'play' command in MediaButtonReceiver when deciding whether to ignore it to avoid a ForegroundServiceDidNotStartInTimeException (#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-image MediaItem (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 IndexOutOfBoundsException caused 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 را به اندازه گزارش‌شده توسط جاری‌سازی زیربنایی (مثلاً اندازه فایل یا سرایند HTTP Content-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 Info frame (if present) to compute an average bitrate for constant bitrate seeking, rather than extrapolating from the bitrate of the frame after the Info frame, which may be artificially small, e.g. PCUT frame (#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) به‌اشتباه به برچسب‌های ID3‏ TSO2،‏ TSOA، و TSOP نگاشت می‌شدند (#۱۳۰۲).
    • رفع مشکل خواندن برچسب‌های عددی MP4 (/iTunes) gnre (ژانر) و tmpo (تمپو) وقتی مقدار بیشتر از یک بایت طول دارد.
    • Propagate ID3 TCON frame to MediaMetadata.genre (#1305).
  • تصویر:
    • افزودن پشتیبانی از شبکه‌های ریزعکس DASH غیرمربعی (#1300).
    • پشتیبانی از AVIF برای API 34+‎ اضافه شد.
    • null را به‌عنوان پارامتر برای ExoPlayer.setImageOutput() مجاز کنید تا ImageOutput قبلاً تنظیم‌شده را پاک کند.
  • منبع داده:
    • پشتیبانی از شناسه منبع یکسان منبع خام android.resource://package/id را پیاده‌سازی کنید که در آن package با بسته برنامه فعلی متفاوت است. این روش قبلاً برای کار کردن مستند نشده بود، اما روشی کارآمدتر برای دسترسی به منابع در بسته‌ای دیگر نسبت‌به دسترسی ازطریق نام است.
    • Eagerly check url is non-null in the DataSpec constructors. این پارامتر قبلاً به‌عنوان غیرتهی حاشیه‌نویسی شده است.
    • Allow ByteArrayDataSource to resolve a URI to a byte array during open(), instead of being hard-coded at construction (#1405).
  • مدیریت حقوق دیجیتال:
    • Allow setting a LoadErrorHandlingPolicy on DefaultDrmSessionManagerProvider (#1271).
  • جلوه:
    • پشتیبانی از چند تغییر سرعت در یک 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 NullPointerException when using data:// 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 (see MediaSession.getMediaNotificationControllerInfo()), the custom error is used to update the PlaybackState of 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's PlaybackStateCompat.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 در Compose AndroidView در 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) می‌شود.
  • افزونه DASH:
    • رفع اشکالی که در آن آماده‌سازی مجدد جاری‌سازی زنده چنددوره‌ای می‌تواند IndexOutOfBoundsException (#۱۳۲۹) را ایجاد کند.
    • Add support for dashif:Laurl license urls (#1345).
  • افزونه 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 CuesWithTiming instances from WebvttParser.parse (#1177).
  • مدیریت حقوق دیجیتال:
    • رفع مشکل NoSuchMethodError که ممکن است به‌جای ResourceBusyException یا NotProvisionedException در برخی‌از دستگاه‌های Android 14 توسط چارچوب MediaDrm ایجاد شود (#۱۱۴۵).
  • جلوه:
    • نگاشت رنگ‌مایه PQ به SDR با تبدیل فضاهای رنگی بهبود یافته است.
  • جلسه:
    • رفع مشکل پرش موقعیت فعلی به عقب وقتی کنترل‌کننده مورد فعلی را جایگزین می‌کند (#951).
    • رفع مشکلی که در آن MediaMetadata با فقط extras غیرتهی بین کنترل‌کننده‌های رسانه و جلسه‌ها منتقل نمی‌شود (#۱۱۷۶).
  • میانای کاربر:
    • اگر 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.onPositionDiscontinuity event 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 و نگاشت آن‌ها به پرچم‌های نقش، به کاربران امکان می‌دهد انتخاب‌های آگاهانه‌تری برای قطعه صوتی داشته باشند (#۹۷۳).
  • صدا:
    • بهبود الگوریتم رد شدن از سکوت با شیب صدای ملایم؛ حفظ حداقل سکوت و مدت زمان طبیعی‌تر سکوت (#۷۴۲۳).
    • گزارش سکوت ردشده به‌صورت قطعی‌تر (#۱۰۳۵).
  • ویدیو:
    • سازنده 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 ارائه می‌شوند.
  • مدیریت حقوق دیجیتال:
    • نمونه‌های رمزگذاری‌نشده «clear lead» را در محتوای DRM بلافاصله به‌طور پیش‌فرض پخش کنید، حتی اگر کلیدهای نمونه‌های رمزگذاری‌شده بعدی هنوز آماده نباشد. اگر کلیدها هنوز آماده نباشند، این امر ممکن است منجر به توقف در اواسط بازپخش شود وقتی موقعیت بازپخش به نمونه‌های رمزگذاری‌شده می‌رسد (اما قبلاً بازپخش اصلاً تا این نقطه شروع نشده بود). این رفتار را می‌توان با MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey یا DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys غیرفعال کرد.
      • افزونه IMA:
    • رفع مشکلی که باعث می‌شد آگهی‌های DASH و HLS بدون پسوند فایل مناسب پخش نشوند.
  • جلسه:
    • غیرفعال کردن تشخیص دوکلیک برای برنامه‌های تلویزیون (#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.Factory were receiving negative values for bufferedDurationUs from chunk sources, resulting in an IllegalArgumentException (#888).
  • ترانسفورماتور:
    • رفع مشکلی که در آن کدبند در زمان پیکربندی به‌دلیل تنظیم نرخ عملیاتی بالا، خطا می‌داد.
  • استخراج‌کننده‌ها:
    • قطعه‌های HEVC ثانویه (غیرقابل‌پخش) را در عکس‌های حرکتی JPEG به‌عنوان ROLE_FLAG_ALTERNATE علامت‌گذاری کنید تا به‌دلیل وضوح بالاترشان به‌طور خودکار برای بازپخش انتخاب نشوند.
    • رفع مشکل تشخیص قاب کلیدی اشتباه برای جاری‌سازی‌های TS H264 (#864).
    • Fix duration estimation of TS streams that are longer than 47721 seconds (#855).
  • صدا:
    • رفع مشکل مدیریت EOS برای SilenceSkippingAudioProcessor هنگام فراخوانی چندباره (#712).
  • ویدیو:
    • افزودن راه‌حل برای مشکل دستگاه در Galaxy Tab S7 FE،‏ Chromecast با Google TV، و Lenovo M10 FHD Plus که باعث می‌شود جاری‌سازی‌های AVC با نرخ ۶۰ فریم در ثانیه به‌عنوان پشتیبانی‌نشده علامت‌گذاری شوند (#693).
  • فراداده:
    • رفع اشکالی که در آن MediaMetadata فقط از نظرات Vorbis با کلیدهای حروف بزرگ پر می‌شد (#876).
    • Catch OutOfMemoryError when 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.url license URL to API 33+ (previously the workaround only applied on API 33 exactly) (#837).
    • رفع ERROR_DRM_SESSION_NOT_OPENED هنگام جابه‌جایی از محتوای رمزگذاری‌شده به محتوای واضح بدون سطح متصل به پخش‌کننده. خطا به‌دلیل استفاده نادرست از رمزگشای ایمن برای پخش محتوای واضح بود.
  • جلسه:
    • کلیدها و مقادیر سفارشی را در MediaMetadataCompat به MediaMetadata.extras و MediaMetadata.extras به MediaMetadataCompat (#756، #802) قرار دهید.
    • رفع مشکل همه‌فرستی notifyChildrenChanged برای کنترل‌کننده‌های قدیمی (#644).
    • اشکالی که در آن تنظیم زمان منفی برای زمان‌سنج غیرفعال setWhen اعلان باعث ازکارافتادن برخی‌از دستگاه‌ها می‌شد برطرف شد (#۹۰۳).
    • رفع مشکل IllegalStateException زمانی که کنترل‌کننده اعلان رسانه اتصال را هنگام درخواست اولین به‌روزرسانی اعلان تکمیل نکرده است (#917).
  • میانای کاربر:
    • مشکلی که باعث می‌شد دکمه‌های جلوبر و عقب‌بر هنگام استفاده با «طراحی مواد» در BottomSheetDialogFragment نمایان نباشند برطرف شد (#۵۱۱).
    • مشکل تراز نبودن اعداد در دکمه جلو بردن سریع PlayerControlView برطرف شد (#۵۴۷).
  • افزونه DASH:
    • تجزیه «f800» به‌عنوان تعداد کانال ۵ برای Dolby در مانیفست DASH (#688).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1،‏ MIDI، و غیره):
    • MIDI: رفع مشکل رد شدن رویدادهای «تغییر برنامه» هنگام جستجو به‌جلو (#704).
    • انتقال به FFmpeg 6.0 و به‌روزرسانی NDK پشتیبانی‌شده به r26b (#707، #867).
  • افزونه Cast:
    • Sanitize creation of a Timeline to not crash the app when loading media fails on the cast device (#708).

نسخه ۱.۲.۰

۱۵ نوامبر ۲۰۲۳

  • کتابخانه مشترک:
    • پارامتر @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 و durationUs SampleConsumer.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) را ایجاد می‌کند.
  • ویدیو:
    • به 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 و durationUs VideoFrameProcessor.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 multidex dependency from all modules (#499).
  • 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_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_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() را لغو کنید.
    • افزودن کنش اضافی به مانیفست نسخه نمایشی اصلی برای آسان‌تر کردن شروع برنامه نسخه نمایشی با فایل *.exolist.json سفارشی (#۴۳۹).
    • برای استفاده از Effect درطول بازپخش ویدیو، ExoPlayer.setVideoEffects() را اضافه کنید.
    • ‫SampleQueue را به‌روز کنید تا sourceId را به‌جای int به‌عنوان long ذخیره کند. این کار امضاهای روش‌های عمومی SampleQueue.sourceId و SampleQueue.peekSourceId را تغییر می‌دهد.
    • پارامترهایی به روش‌های LoadControl shouldStartPlayback و onTracksSelected اضافه کنید که امکان مرتبط کردن این روش‌ها را با MediaPeriod مربوطه فراهم کند.
    • امضای ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) را با افزودن پارامتر خط زمان که حاوی دوره‌هایی با شناسه‌های کاربری یکتا است و به‌عنوان کلید در نقشه استفاده می‌شود تغییر دهید. این کار برای جلوگیری از مشکلات هم‌زمانی در جاری‌سازی‌های زنده چنددوره‌ای لازم است.
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) و BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) منسوخ شود. به‌جای آن، می‌توان گونه روش‌های بدون mediaTimeOffsetUs را فراخوانی کرد. توجه داشته باشید که حتی برای انواع منسوخ‌شده، افست دیگر به startTimeUs و endTimeUs اشیاء MediaLoadData که توسط توزیع‌کننده ارسال می‌شوند اضافه نمی‌شود.
    • نام ExoTrackSelection.blacklist را به excludeTrack و isBlacklisted را به isTrackExcluded تغییر دهید.
    • رفع رفتار ناهماهنگ بین ExoPlayer.setMediaItem(s) و addMediaItem(s) هنگام فراخوانی در فهرست پخش خالی.
  • ترانسفورماتور:
    • برداشتن 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 درصورت تغییر قابلیت‌های پردازش‌کننده، انتخاب قطعه جدیدی را راه‌اندازی می‌کند.
  • استخراج‌کننده‌ها:
    • Ogg: رفع اشکال هنگام جستجو در فایل‌های با مدت طولانی (#۳۹۱).
    • FMP4: رفع مشکل مقداردهی اولیه TimestampAdjuster با مُهر زمان اشتباه با زمان نمونه فراداده از اتم emsg (#356).
  • صدا:
    • رفع اشکالی که در آن برخی‌از بازپخش‌ها هنگام فعال بودن تونل‌سازی و AudioProcessors ناموفق بودند، مثلاً برای برش بدون وقفه (#۱۰۸۴۷).
    • قاب‌های Opus در بسته‌های Ogg در بازپخش‌های مستقیم (برون‌سپاری) کپسوله‌سازی شوند.
    • برون‌یابی موقعیت فعلی درطول خواب با زمان‌بندی بارگذاری.
    • Renderer.release() و AudioSink.release() را برای آزاد کردن منابع در پایان چرخه حیات پخش‌کننده اضافه کنید.
    • به تغییرات قابلیت‌های صوتی در DefaultAudioSink گوش دهید. پارامتر الزامی context را در سازنده DefaultAudioSink اضافه کنید، که با آن DefaultAudioSink به‌عنوان شنونده در AudioCapabilitiesReceiver ثبت می‌شود و هنگام اطلاع از تغییر قابلیت‌ها، ویژگی audioCapabilities خود را به‌روز می‌کند.
    • Propagate audio capabilities changes via a new event onAudioCapabilitiesChanged in AudioSink.Listener interface, and a new interface RendererCapabilities.Listener which triggers onRendererCapabilitiesChanged events.
    • ChannelMixingAudioProcessor را برای اعمال مقیاس‌بندی/ترکیب به کانال‌های صوتی اضافه کنید.
    • مقدار عدد صحیح جدید DISCARD_REASON_AUDIO_BYPASS_POSSIBLE را به DecoderDiscardReasons اضافه کنید تا وقتی حالت کنارگذر پس‌از تغییر قابلیت‌های صوتی امکان‌پذیر است، رمزگشای صوتی کنار گذاشته شود.
    • افزودن پشتیبانی از بازپخش مستقیم برای DTS Express و DTS:X (#335).
  • ویدیو:
    • MediaCodecVideoRenderer را وادار کنید تا وقتی پردازنده غیرفعال است، VideoSize را با عرض و ارتفاع ۰ گزارش کند. Player.Listener.onVideoSizeChanged is called accordingly when Player.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.onAddMediaItems to allow requested MediaItems to be passed onto Player if they have LocalConfiguration (e.g. URI) (#282).
    • افزودن دکمه‌های فرمان «جستجو به قبلی» و «جستجو به بعدی» در نمای فشرده اعلان رسانه به‌طور پیش‌فرض برای Android 12 و نسخه‌های پایین‌تر (#410).
    • Add default implementation to MediaSession.Callback.onAddMediaItems to allow requested MediaItems to be passed onto Player if they have LocalConfiguration (e.g. URI) (#282).
    • افزودن دکمه‌های فرمان «جستجو به قبلی» و «جستجو به بعدی» در نمای فشرده اعلان رسانه به‌طور پیش‌فرض برای Android 12 و نسخه‌های پایین‌تر (#410).
  • میانای کاربر:
    • روش‌های Util shouldShowPlayButton و handlePlayPauseButtonAction را برای نوشتن عناصر میانای کاربر سفارشی با دکمه پخش/مکث اضافه کنید.
  • افزونه RTSP:
    • برای MPEG4-LATM، اگر مقدار profile-level-id در پیام SDP پاسخ «توصیف» وجود ندارد، از مقدار پیش‌فرض آن استفاده کنید (#۳۰۲).
    • Use base Uri for relative path resolution from the RTSP session if present in DESCRIBE response header (#11160).
  • افزونه DASH:
    • جبران زمان رسانه را از MediaLoadData.startTimeMs و MediaLoadData.endTimeMs برای جاری‌سازی‌های DASH چنددوره‌ای بردارید.
    • اشکالی که در آن آماده‌سازی مجدد منبع رسانه Dash زنده چنددوره‌ای IndexOutOfBoundsException تولید می‌کرد برطرف شد (شماره ۱۰۸۳۸).
  • افزونه HLS:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) را اضافه کنید تا زمان وقفه برای رشته بارگیری تنظیم شود تا منتظر مقداردهی اولیه TimestampAdjuster بماند. اگر مقداردهی اولیه قبل‌از اتمام مهلت تکمیل نشود، PlaybackException ایجاد می‌شود تا از توقف بی‌پایان بازپخش جلوگیری شود. زمان اتمام به‌طور پیش‌فرض روی صفر تنظیم شده است (#323).
  • ابزارهای آزمایش:
    • بررسی عدم حساسیت به بزرگی و کوچکی حروف طرح‌واره URI در DataSourceContractTest.
  • برداشتن نمادهای منسوخ‌شده:
    • سازنده‌های 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 ممکن است باعث شود MediaController IllegalStateException را ایجاد کند.

نسخه ۱.۰.۱

‫۱۸ آوریل ۲۰۲۳

‫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 مطابقت دارد.

  • کتابخانه اصلی:
    • رفع مشکل تشخیص نوع شبکه در API 33 (#10970).
    • رفع مشکل NullPointerException هنگام تماس با ExoPlayer.isTunnelingEnabled (#۱۰۹۷۷).
  • بارگیری‌ها:
    • Make the maximum difference of the start time of two segments to be merged configurable in SegmentDownloader and subclasses (#248).
  • صدا:
    • رفع مشکل بازپخش MP3 بدون وقفه در دستگاه‌های Samsung (#۸۵۹۴).
    • رفع اشکالی که در آن سرعت‌های بازپخش تنظیم‌شده بلافاصله پس‌از غیرفعال کردن صدا ممکن است با تغییر سرعت قبلی لغو شود (#۱۰۸۸۲).
  • ویدیو:
    • قالب HEVC HDR10 را به‌جای HEVCProfileMain10 به HEVCProfileMain10HDR10 نگاشت کنید.
    • افزودن راه‌حل برای مشکل دستگاه در Chromecast با Google TV و Lenovo M10 FHD Plus که باعث می‌شود جاری‌سازی‌های AVC با نرخ ۶۰ فریم در ثانیه به‌عنوان پشتیبانی‌نشده علامت‌گذاری شوند (#۱۰۸۹۸).
    • رفع مشکلات عملکرد انتشار فریم هنگام پخش رسانه با نرخ فریم بسیار بالاتر از نرخ بازآوری صفحه‌نمایش.
  • بازیگران:
    • Fix transient STATE_IDLE when transitioning between media items (#245).
  • RTSP:
    • Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
  • جلسه:
    • اشکالی که باعث می‌شد دکمه پخش/توقف موقت اعلان با وضعیت پخش‌کننده به‌روز نشود برطرف شد (#۱۹۲).
  • افزونه IMA:
    • رفع اشکالی که مانع از شروع جاری‌سازی‌های DAI بدون آگهی می‌شد زیرا اولین (و در مورد بدون آگهی، تنها) رویداد LOADED دریافت نمی‌شد.

نسخه 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 ConcatenatingMediaSource2 that allows combining multiple media items into a single window (#247).
  • استخراج‌کننده‌ها:
    • Throw a ParserException instead of a NullPointerException if 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).
  • صدا:
    • از نرخ بیت قالب صوتی فشرده‌شده برای محاسبه حداقل اندازه میان‌گیر برای AudioTrack در بازپخش‌های مستقیم (گذر مستقیم) استفاده کنید.
  • نوشتار:
    • رفع TextRenderer ارسال نمایه نامعتبر (منفی) به Subtitle.getEventTime اگر فایل زیرنویس حاوی هیچ نشانه‌ای نباشد.
    • SubRip: افزودن پشتیبانی از فایل‌های UTF-16 درصورتی‌که با علامت ترتیب بایت شروع شوند.
  • فراداده:
    • تجزیه چند مقدار جداشده با تهی از قاب‌های ID3، طبق مجوز ID3 v2.4.
    • MediaMetadata.mediaType را اضافه کنید تا نوع محتوا یا نوع پوشه شرح‌داده‌شده توسط فراداده را مشخص کنید.
    • MediaMetadata.isBrowsable را به‌عنوان جایگزین MediaMetadata.folderType اضافه کنید. نوع پوشه در نسخه پخش بعدی منسوخ خواهد شد.
  • DASH:
    • تجزیه کامل برای مجموعه‌های اقتباس تصویر، ازجمله تعداد کاشی‌ها اضافه شد (#۳۷۵۲).
  • میانای کاربر:
    • PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) منسوخ‌شده را اصلاح کنید تا مطمئن شوید تغییرات رؤیت‌پذیری به شنونده ثبت‌شده منتقل می‌شود (#229).
    • Fix the ordering of the center player controls in PlayerView when using a right-to-left (RTL) layout (#227).
  • جلسه:
    • افزودن SimpleBasePlayer انتزاعی برای کمک به پیاده‌سازی میانای Player برای پخش‌کننده‌های سفارشی.
    • افزودن روش کمکی برای تبدیل کد جلسه پلاتفرم به Media3 SessionToken (#171).
    • از onMediaMetadataChanged برای راه‌اندازی به‌روزرسانی‌های جلسه رسانه پلاتفرم (#۲۱۹) استفاده کنید.
    • جلسه رسانه را به‌عنوان آرگومان getMediaButtons() از DefaultMediaNotificationProvider اضافه کنید و برای شفافیت از فهرست‌های تغییرناپذیر استفاده کنید (#۲۱۶).
    • Add onSetMediaItems callback listener to provide means to modify/set MediaItem list, starting index and position by session before setting onto Player (#156).
    • Avoid double tap detection for non-Bluetooth media button events (#233).
    • Make QueueTimeline more 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).
  • بارگیری‌ها:
    • رفع حلقه بی‌نهایت احتمالی در ProgressiveDownloader که به‌دلیل بارگیری و بازپخش هم‌زمان با همان PriorityTaskManager ایجاد شده است (#10570).
    • نمایش فوری اعلان بارگیری (#۱۸۳).
    • Limit parallel download removals to 1 to avoid excessive thread creation (#10458).
  • ویدیو:
    • اگر نمایشگر از 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 MediaController to seek over an ad in a period (#122).
    • وقتی بازپخش تمام می‌شود، MediaSessionService از پیش‌زمینه متوقف می‌شود و اعلانی برای بازراه‌اندازی بازپخش آخرین فایل رسانه‌ای پخش‌شده نشان داده می‌شود (#۱۱۲).
    • سرویس پیش‌زمینه‌ای را با قصد معوق برای توقف موقت شروع نکنید (#۱۶۷).
    • «نشان» مرتبط با اعلان ایجادشده توسط DefaultNotificationProvider را در میانای برنامه‌سازی کاربردی ۲۶ و میانای برنامه‌سازی کاربردی ۲۷ به‌صورت دستی پنهان کنید (نشان به‌طور خودکار در میانای برنامه‌سازی کاربردی ۲۸ و بالاتر پنهان می‌شود) (#۱۳۱).
    • رفع اشکالی که در آن اتصال دومین binder از MediaSession قدیمی به Media3 MediaController باعث ایجاد IllegalStateExceptions می‌شود (#۴۹).
  • RTSP:
    • افزودن مدیریت بسته تکه‌تکه‌شده H263 (#119).
    • افزودن پشتیبانی از MP4A-LATM (#162).
  • آژانس بازاریابی افراد تأثیرگذار:
    • افزودن مهلت زمانی برای بار کردن اطلاعات آگهی برای رسیدگی به مواردی که کیت توسعه نرم‌افزار آگهی‌های رسانه‌ای تعاملی در بار کردن آگهی گیر می‌کند (#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 که در برخی موارد کار نمی‌کرد اصلاح شد (#۱۱۶).
  • استخراج‌کننده‌ها:
    • رفع مشکل تجزیه مجموعه‌های تصویر مرجع کوتاه‌مدت H265 (#10316).
    • Fix parsing of bitrates from esds boxes (#10381).
  • DASH:
    • نشانی وب پروانه ClearKey را از مانیفست‌ها تجزیه کنید (#10246).
  • میانای کاربر:
    • مطمئن شوید TalkBack گزینه سرعت فعال کنونی را در منو کنترل‌های بازپخش اعلام می‌کند (#۱۰۲۹۸).
  • RTSP:
    • افزودن مدیریت بسته تکه‌تکه‌شده VP8 (#110).
  • افزونه Leanback:
    • گوش دادن به تغییرات playWhenReady در LeanbackAdapter (۱۰۴۲۰).
  • بازیگران:
    • از MediaItem که به‌عنوان Window.mediaItem در CastTimeline به روش‌های فهرست پخش ارسال شده است استفاده کنید (#۲۵، #۸۲۱۲).
    • حمایت از Player.getMetadata() و Listener.onMediaMetadataChanged() با CastPlayer (#۲۵).

نسخه 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 را اضافه کنید تا بازیکنان بتوانند یک مورد را تنظیم کنند.
  • انتخاب قطعه:
    • کلاس 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 OutlineColour style setting when BorderStyle == 3 (i.e. OutlineColour sets the background of the cue) (#8435).
    • CEA-708: داده‌ها را به چندین بلوک سرویس تجزیه کنید و بلوک‌هایی را که با شماره سرویس انتخاب‌شده فعلی مرتبط نیستند نادیده بگیرید.
    • RawCcExtractor را بردارید، که فقط برای رسیدگی به قالب زیرنویس داخلی Google استفاده می‌شد.
  • استخراج‌کننده‌ها:
    • افزودن پشتیبانی از AVI (#۲۰۹۲).
    • Matroska: تجزیه DiscardPadding برای قطعه‌های Opus.
    • MP4: تجزیه نرخ بیت از چارگوش‌های esds.
    • Ogg: Allow duplicate Opus ID and comment headers (#10038).
  • میانای کاربر:
    • Fix delivery of events to OnClickListeners set on PlayerView in the case that useController=false (#9605). همچنین ارسال رویدادها به OnLongClickListener را برای همه پیکربندی‌های نما اصلاح کنید.
    • Fix incorrectly treating a sequence of touch events that exit the bounds of PlayerView before ACTION_UP as a click (#9861).
    • Fix PlayerView accessibility issue where tapping might toggle playback rather than hiding the controls (#8627).
    • ‫TrackSelectionView و TrackSelectionDialogBuilder را بازنویسی کن تا به‌جای ExoPlayer با میانای Player کار کنند. این کار امکان استفاده از نماها را با دیگر پیاده‌سازی‌های Player فراهم می‌کند و وابستگی را از ماژول میانای کاربر به ماژول ExoPlayer برمی‌دارد. این یک تغییر اساسی است.
    • دسته‌های هدف نوشتاری اجباری را در انتخابگر دسته هدف PlayerView نشان ندهید، و اگر «هیچ‌کدام» انتخاب شده است، دسته هدف نوشتاری اجباری مناسبی را انتخاب‌شده نگه دارید (#۹۴۳۲).
  • DASH:
    • تجزیه تعداد کانال از عناصر DTS AudioChannelConfiguration. این گذرگاه صوتی را برای جاری‌سازی‌های DTS دوباره فعال می‌کند (#۱۰۱۵۹).
    • انتقال null به DashMediaSource.Factory.setCompositeSequenceableLoaderFactory مجاز نیست. درصورت نیاز، نمونه‌های DefaultCompositeSequenceableLoaderFactory را می‌توان به‌طور صریح منتقل کرد.
  • HLS:
    • اگر مشخصه CODECS فهرست پخش حاوی کدک صوتی نباشد، به آماده‌سازی تکه‌ای برمی‌گردد (#10065).
    • انتقال null به HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory، HlsMediaSource.Factory.setPlaylistParserFactory، و HlsMediaSource.Factory.setPlaylistTrackerFactory مجاز نیست. درصورت نیاز، نمونه‌های DefaultCompositeSequenceableLoaderFactory، DefaultHlsPlaylistParserFactory، یا ارجاع به DefaultHlsPlaylistTracker.FACTORY را می‌توان به‌طور صریح ارسال کرد.
  • جاری‌سازی یکنواخت:
    • انتقال null به SsMediaSource.Factory.setCompositeSequenceableLoaderFactory مجاز نیست. درصورت نیاز، نمونه‌های DefaultCompositeSequenceableLoaderFactory را می‌توان به‌طور صریح ارسال کرد.
  • RTSP:
    • افزودن خواننده RTP برای H263 (#63).
    • افزودن خواننده RTP برای MPEG4 (#35).
    • افزودن خواننده RTP برای HEVC (#36).
    • افزودن خواننده RTP برای AMR. درحال‌حاضر فقط جاری‌سازی‌های AMR تک‌کاناله و غیردرهم‌بافته پشتیبانی می‌شود. بار مفید AMR RTP مرکب پشتیبانی نمی‌شود. (#46)
    • افزودن خواننده RTP برای VP8 (#۴۷).
    • افزودن خواننده 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 MediaControllerImplBase after releasing controller (#74).
  • بازپخش آگهی / IMA:
    • کاهش نرخ نظرسنجی آگهی از هر ۱۰۰ میلی‌ثانیه به هر ۲۰۰ میلی‌ثانیه، برای هم‌راستا شدن با توصیه‌های «شورای رتبه‌بندی رسانه» (MRC).
  • افزونه FFmpeg:
    • نسخه CMake را به 3.21.0+ به‌روز کنید تا از اشکال CMake که باعث ناموفق شدن همگام‌سازی gradle در «استودیو Android» می‌شود جلوگیری کنید (#9933).
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). درعوض از Player.Listener.onTracksChanged(Tracks) استفاده کنید.
    • برداشتن Player.getCurrentTrackGroups و Player.getCurrentTrackSelections. درعوض از Player.getCurrentTracks استفاده کنید. همچنین می‌توانید به استفاده از ExoPlayer.getCurrentTrackGroups و ExoPlayer.getCurrentTrackSelections ادامه دهید، هرچند این روش‌ها همچنان منسوخ‌شده باقی می‌مانند.
    • برداشتن DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT و DEFAULT_TRACK_SELECTOR_PARAMETERS ثابت. درصورت امکان، از getDefaultTrackSelectorParameters(Context) استفاده کنید، و درغیراین‌صورت از DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT استفاده کنید.
    • برداشتن سازنده DefaultTrackSelector(ExoTrackSelection.Factory). درعوض از DefaultTrackSelector(Context, ExoTrackSelection.Factory) استفاده کنید.
    • برداشتن Transformer.Builder.setContext. Context باید به‌جای آن به سازنده Transformer.Builder منتقل شود.

نسخه 1.0.0-alpha03

‫۱۴ مارس ۲۰۲۲

‫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.setTrackId and MediaItem.SubtitleConfiguration.Builder.setId to prioritise the SubtitleConfiguration field and fall back to the Factory value if it's not set (#10016).
  • بازپخش آگهی:
    • رفع مشکل کمبود داده صوتی بین دوره‌های آگهی در جاری‌سازی‌های زنده 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 an id in the TrackGroup constructor. این به‌روزرسانی مشکل ازکارافتادن برنامه را هنگام ازسرگیری بازپخش پس‌از قرار دادن برنامه در پس‌زمینه با لغو قطعه فعال برطرف می‌کند (#9718).
    • منطق در AdaptiveTrackSelection اصلاح شد تا افزایش کیفیت تحت پهنای باند کافی شبکه مجاز باشد، حتی اگر بازپخش بسیار نزدیک به لبه زنده باشد (#9784).
  • ویدیو:
    • منطق جایگزین رمزگشا برای Dolby Vision را اصلاح کنید تا درصورت نیاز از رمزگشای سازگار H264/H265 استفاده کند.
  • صدا:
    • منطق بازگشت رمزگشا برای Dolby Atmos (E-AC3-JOC)‎ اصلاح شد تا درصورت نیاز از رمزگشای سازگار E-AC3 استفاده شود.
    • میاناهای برنامه‌سازی کاربردی AudioCapabilities را تغییر دهید تا به‌جای null، به‌طور صریح AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES را ارسال کنند.
    • Allow customization of the AudioTrack buffer size calculation by injecting an AudioTrackBufferSizeProvider to DefaultAudioSink. (#8891).
    • اگر اندازه میان‌گیر درخواستی بیشتر از ۱ مگابایت بود، ایجاد AudioTrack را دوباره امتحان کنید. (#9712).
  • استخراج‌کننده‌ها:
    • WAV: افزودن پشتیبانی از جاری‌سازی‌های RF64 (#9543).
    • Fix incorrect parsing of H.265 SPS NAL units (#9719).
    • تجزیه کردن نظرات Vorbis (ازجمله METADATA_BLOCK_PICTURE) در فایل‌های Ogg Opus و Ogg Vorbis.
  • نوشتار:
    • فیلد MediaItem.SubtitleConfiguration.id را اضافه کنید که به فیلد Format.id قطعه زیرنویس ایجادشده از پیکربندی (#۹۶۷۳) منتشر می‌شود.
    • افزودن پشتیبانی پایه برای زیرنویس‌های WebVTT در محفظه‌های Matroska (#9886).
    • جلوگیری از خواندن بیش‌از اندازه اعلام‌شده بلوک سرویس توسط Cea708Decoder.
  • مدیریت حقوق دیجیتال:
    • 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).
  • میانای کاربر:
    • Fix the color of the numbers in StyledPlayerView rewind and fastforward buttons when using certain themes (#9765).
    • رشته‌های سرعت بازپخش را به‌درستی ترجمه کنید (#۹۸۱۱).
  • 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:
    • ارائه میانای برنامه‌سازی کاربردی کارخواه برای لغو SocketFactory مورداستفاده برای هر اتصال سرور (#9606).
    • اگر هر دو روش اصالت‌سنجی DIGEST و BASIC وجود دارد، روش DIGEST را ترجیح دهید (#9800).
    • Handle when RTSP track timing is not available (#9775).
    • نادیده گرفتن مقادیر نامعتبر سرصفحه RTP-Info (#9619).
  • ترانسفورماتور:
    • حداقل نسخه میانای برنامه‌سازی کاربردی موردنیاز را به ۲۱ افزایش دهید.
    • اکنون از TransformationException برای توصیف خطاهایی که درطول تبدیل رخ می‌دهد استفاده می‌شود.
    • TransformationRequest را برای مشخص کردن گزینه‌های تبدیل اضافه کنید.
    • اجازه دهید چند شنونده ثبت شوند.
    • رفع مشکل گیر کردن Transformer وقتی خروجی کدک به‌طور جزئی خوانده می‌شود.
    • رفع NPE بالقوه در Transformer.getProgress هنگام رها کردن پرتاب‌های چندتایی‌ساز.
    • برنامه نمایشی برای اعمال تبدیل‌ها اضافه کنید.
  • افزونه MediaSession:
    • به‌طور پیش‌فرض، MediaSessionConnector اکنون فهرست پخش را هنگام توقف پاک می‌کند. برنامه‌هایی که می‌خواهند فهرست پخش حفظ شود می‌توانند setClearMediaItemsOnStop(false) را در اتصال‌دهنده فراخوانی کنند.
  • افزونه Cast:
    • رفع اشکالی که مانع از تماس صحیح CastPlayer با onIsPlayingChanged می‌شد (#9792).
    • پشتیبانی از فراداده‌های صوتی ازجمله کار هنری با DefaultMediaItemConverter (#9663).
  • افزونه 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).
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن 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 که سفارشی‌سازی و گسترش آن آسان است.
  • عملکرد جلسه رسانه، برای نمایش و کنترل بازپخش‌ها. این واحد جلسه جدید از همان میانای Player ExoPlayer استفاده می‌کند.
  • مؤلفه‌های میانای کاربر برای ساختن میانای کاربر بازپخش رسانه.
  • ماژول‌هایی که عملکرد را در کتابخانه‌های دیگر برای استفاده با ExoPlayer بسته‌بندی می‌کنند، برای مثال، درج آگهی ازطریق IMA SDK.

برای اطلاعات بیشتر، به پروژه Media3 GitHub مراجعه کنید.

ExoPlayer قبلاً در پروژه ExoPlayer GitHub جداگانه‌ای میزبانی می‌شد. در Media3، نام بسته آن androidx.media3.exoplayer است. قصد داریم برای مدتی به نگهداری و انتشار پروژه ExoPlayer GitHub ادامه دهیم تا برنامه‌ها فرصت داشته باشند به Media3 منتقل شوند. Media3 برای همه پیمانه‌های ExoPlayer جایگزین دارد، به‌جز افزونه‌های قدیمی media2 و mediasession که با پیمانه جدید media3-session جایگزین شده‌اند. این کار ادغام مستقیم بین پخش‌کننده‌ها و جلسه‌های رسانه را بدون نیاز به استفاده از کلاس آداپتور/رابط فراهم می‌کند.