Media3

کتابخانه‌های پشتیبانی برای موارد استفاده از رسانه.
جدیدترین به‌روزرسانی نسخه پایدار نامزد انتشار انتشار نسخه بتا نسخه آلفا
‫۲۶ اکتبر ۲۰۲۶ ۱.۱۱.۱ - - 1.12.0-alpha02

اعلام وابستگی‌ها

برای افزودن وابستگی به 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-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 که ممکن است هنگام فعال بودن Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION، اگر ExoPlayer پردازنده گرافیکی را به دوره رسانه آماده‌نشده منتقل کند، رخ دهد.
    • رفع مشکلی که باعث می‌شد فریم‌های ویدیو به‌طور غیرمنتظره درطول زمان‌بندی پویا وقتی Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS فعال است رد شوند یا ازبین بروند.
    • رفع ArrayIndexOutOfBoundsException در شنوندگان تجزیه‌وتحلیل هنگام توقف بازپخش درطول آگهی در جاری‌سازی زنده (#۳۴۲۳).
    • رفع مشکلی که در آن PreloadMediaSource می‌توانست به‌طور غیرمنتظره رویداد پیش‌بارکردن را پست کند، درحالی‌که preload() هرگز فراخوانی نشده است (#۳۴۰۸).
    • رفع مشکلی که در آن Format.subsampleOffsetUs برای قطعه‌های فراداده نادیده گرفته می‌شد و باعث ایجاد مُهرهای زمان بازپخش نادرست در فرمان‌های اتصال SCTE-35 رمزگشایی‌شده می‌شد (#3413).
    • رفع نشت حافظه در PreloadMediaSource و DefaultPreloadManager وقتی preload() چندین بار در یک منبع فراخوانی می‌شود (#۳۴۴۵).
    • رفع NullPointerException هنگام انتشار AdsMediaSource درحالی‌که بازآوری خط زمان محتوا معلق است (#۳۴۴۲).
    • رفع مشکلی که در آن بازپخش رسانه پیش‌رونده می‌توانست به موقعیت اشتباهی بپرد، زمانی که بارگیری پس‌از جستجو (یا هنگام شروع بازپخش در موقعیت غیرصفر) ناموفق بود و دوباره امتحان می‌شد (#۳۴۴۰).
    • افزودن راه‌حل برای Xiaomi TV Stick 4K (MiTV-AYFR0)‎ رمزگشای H.264 ثابت ماندن در تغییرات وضوح یکپارچه (#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 سطح بالا استخراج کنید.
    • رفع مشکل AC-3،‏ DTS، و صدای LPCM خراب هنگام پخش محتوای MPEG-PS سبک DVD، با حذف کردن سرصفحه زیرجریان private_stream_1 از هر بسته PES در PsExtractor قبل‌از ارسال بار مفید به خواننده صدا (#3327).
    • برطرف کردن مشکل خرابی در FragmentedMp4Extractor وقتی جعبه نسخه ۱ tfdt baseMediaDecodeTime منفی را کدبندی می‌کند (#۳۴۱۲).
    • MPEG-TS: پشتیبانی از تجزیه پیام‌های SEI ترتیب ترکیب قاب H.264 و H.265 برای پر کردن Format.stereoMode (#۳۴۱۹).
    • تجزیه داده‌های پیکربندی Dolby Vision Profile 20 و رد کردن نمایه‌های Dolby Vision پشتیبانی‌نشده به‌جای بازپخش به‌عنوان HEVC استاندارد با رنگ‌های نادرست (#۳۴۲۷).
    • 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 برای بازپخش بدون وقفه (#2576)، و اصلاح مُهرهای زمان نمونه پس‌از جستجو برای صفحه‌ای که با بسته ادامه‌دار شروع می‌شود.
    • Ogg: رفع خطاهای رمزگشایی و پرش‌های مُهر زمان حدود ۱ ثانیه‌ای در جریان‌های زنجیره‌ای Ogg Opus با نادیده گرفتن بسته‌های سرایند شناسه و نظر Opus در میان جریان.
  • بازرس:
    • پشتیبانی از بازیابی فراداده XMP از فایل‌های MP4 بااستفاده از MetadataRetriever.
    • پشتیبانی از استخراج قطعه‌های فراداده زمان‌بندی‌شده جعبه‌ای mebx در MediaExtractorCompat به‌عنوان MimeTypes.APPLICATION_MEBX.
  • قاب بازرس:
    • رفع برش رنگ‌های BT.2020 با گستره وسیع در تصویر پایه SDR هنگام استخراج فریم‌های Ultra HDR با FrameExtractor. رنگ‌های خارج از گستره رنگی اکنون به‌جای اینکه محدود شوند، به‌آرامی در گستره رنگی sRGB فشرده می‌شوند.
  • صدا:
    • افزودن راه‌حل برای دستگاه‌هایی که android.media.AudioDeviceCallback را در رشته اشتباه فراخوانی می‌کنند (#۳۳۸۶).
    • رفع مشکل گیر کردن احتمالی بازپخش‌ها پس‌از انتقال قطعه با بارگذاری فشرده.
    • رفع مشکلی در Amazon Fire TV sticks که در آن صدای AC-3 ممکن بود درطول انتقال دوره متوقف شود (#3448).
    • پشتیبانی از برش دادن لایه کدبند پایان جاری‌سازی برای بازپخش بدون وقفه Ogg و WebM/Matroska Opus (#2576).
    • رفع مشکل به‌روزرسانی‌های لایی و تأخیر بدون وقفه تخلیه پویا درطول انتقال قطعه به‌طوری‌که به‌جای قطعه درحال پخش، روی قطعه ورودی اعمال شوند.
    • برش دادن لایه پایانی کدبند در جاری‌سازی‌های تکی و جاری‌سازی نهایی در فهرست پخش علاوه‌بر انتقال‌های بدون وقفه در میان فهرست پخش (#۲۵۷۶).
    • از کپی‌های غیرضروری میان‌گیر صوتی در TrimmingAudioProcessor پس‌از تکمیل شدن برش تأخیر کدبند شروع جاری‌سازی و زمانی که نیازی به برش حاشیه پایان جاری‌سازی نیست اجتناب کنید.
  • ویدیو:
    • گزارش فریم‌های ویدیو دیرهنگام با مُهرهای زمان انتشار یکسان اصلاح شد تا به‌جای رد شدن، به‌عنوان رهاشده گزارش شوند.
  • نوشتار:
    • MediaItem.SubtitleConfiguration.timeOffsetUs را اضافه کنید تا مُهرهای زمان زیرنویس‌های جانبی نسبت به رسانه تغییر کند. آفست را می‌توان درطول بازپخش با Player.replaceMediaItem(int, MediaItem) بدون قطع کردن بازپخش تغییر داد (#۱۹۷۶).
    • SubRip: افزودن پشتیبانی برای تزریق CharsetDetector به DefaultSubtitleParserFactory برای تشخیص کدبندی نویسه زیرنویس‌های SubRip مستقل بدون علامت ترتیب بایت (#2247).
  • جلوه:
    • SoundSeparationAudioProcessor را برای جداسازی منبع صدا بااستفاده از ماژول StudioSound GMSCore پیاده‌سازی کنید.
  • Muxers:
    • نوشتن جعبه dOps برای Opus در Mp4Muxer و FragmentedMp4Muxer که در آن PreSkip، InputSampleRate، و OutputGain به‌جای big-endian در little-endian نوشته شده بودند (#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() null را درطول درخواست‌های پخش در Android 12 (میانای برنامه‌سازی کاربردی ۳۱ و ۳۲) برمی‌گرداند، وقتی MediaSessionService هنوز در پیش‌زمینه نبود.
    • رفع خرابی IllegalArgumentException وقتی MediaController به جلسه قدیمی‌ای متصل می‌شود که حداکثر میزان صدای منفی را گزارش می‌کند.
    • مشکلی برطرف شد که در آن، فراخوانی MediaController.setMediaItem یا setMediaItems و به‌دنبال آن play() در MediaSessionCompat قدیمی موقتاً متوقف‌شده می‌توانست به‌جای onPlayFrom*، یک فراخوانی برگشتی onPrepareFrom* پشتیبانی‌نشده ارسال کند، یا onPlay() را بدون راه‌اندازی مجدد فایل رسانه‌ای درخواست‌شده ارسال کند.
    • رفع NullPointerException در MediaBrowser قدیمی هنگام دریافت پاسخ فرمان سفارشی (#3432).
    • رفع خرابی 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 به‌عنوان پایان ورودی درنظر بگیرد (#3460).
  • افزونه HLS:
    • Parse VIDEO-RANGE (PQ and HLG) on EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF into Format.colorInfo (#3441).
    • Fix NullPointerException when parsing MPEG-TS EXT-X-MAP initialization segments that contain PES media samples (#3456).
    • رفع رگرسیون که در آن Format.id و Format.metadata برای قطعه‌های HLS آشکارشده null بودند (#۳۴۰۲).
    • آگهی‌های فهرست دارایی را به 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 (#1689).
    • رفع 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:
    • SessionAvailabilityListener.SessionUnavailableReason را برای نشان دادن دلیل دردسترس نبودن جلسه معرفی کنید و روشی سربارگذاری‌شده برای SessionAvailabilityListener.onCastSessionUnavailable ارائه دهید تا آن را نمایش دهد.
    • رفع مشکلی که باعث می‌شد بازپخش پس‌از توقف جلسه «ارسال محتوا» به‌طور غیرمنتظره‌ای به‌صورت محلی ازسر گرفته شود.
    • وقتی عملیات RemoteMediaClient (مانند پخش، مکث، تغییر سرعت، حالت تکرار، میزان صدا، بی‌صدا کردن، یا انتخاب قطعه) در RemoteCastPlayer ناموفق است، خطایی ثبت کنید (#۳۳۷۳).
    • رفع ArrayIndexOutOfBoundsException در RemoteCastPlayer وقتی که صف گیرنده «ارسال محتوا» درحین انتظار برای عملیات جستجو تغییر می‌کند یا کوچک می‌شود (#۳۳۷۲).
    • مشکل مربوط به گیرنده 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 وقتی بازآوری خط زمان زنده، موقعیت پیش‌فرض را از آگهی درج‌شده در سمت سرور که درحال پخش است عبور می‌دهد (#۳۳۴۸).
    • مشکل حالت پاک‌سازی که در آن فریم‌های ویدیو قدیمی ممکن بود به‌طور خلاصه هنگام جستجو با ScrubbingModeParameters.allowSkippingMediaCodecFlush فعال نمایش داده شوند برطرف شد.
  • استخراج‌کننده‌ها:
    • Matroska: رفع مشکلی که در آن قطعه‌های قرارگرفته بعداز خوشه‌ها منجر به خط زمان قابل‌جستجو نمی‌شد (#3377).
  • صدا:
    • محاسبه اندازه میان‌گیر در SilenceSkippingAudioProcessor اصلاح شد تا حداقل مدت سکوت به‌طور نادرست توسط اندازه قاب کاهش مقیاس پیدا نکند (#3271).
    • رفع مشکل مدیریت PCM‏ ۸ بیتی در PcmAudioUtil برای اینکه نمونه‌ها به‌عنوان بدون علامت درنظر گرفته شوند، همان‌طور که توسط Android تعریف شده است (#۳۲۷۱).
    • رفع مشکل باربرداری که در آن بازپخش ممکن بود درطول پیش‌پخش یا انتقال بدون وقفه به‌دلیل محدود بودن اندازه میان‌گیر سخت‌افزار متوقف شود.
    • رفع اشکال در DefaultAudioSink که در آن تعداد انتشار کاهش نمی‌یابد وقتی رشته بازپخش دیگر فعال نیست (#3338).
  • جلسه:
    • رفع NullPointerException وقتی MediaController درحال پردازش از بازخوانی Player.Listener منتشر می‌شود (#۳۳۷۵).
    • رفع بن‌بست در رشته اصلی وقتی MediaBrowser قدیمی به سرویسی متصل می‌شود که نتیجه ناهمگام از onGetLibraryRoot() یا onConnectAsync() برمی‌گرداند (#۳۳۹۳).
  • افزونه HLS:
    • Fix calculation of content resume offset when the target segment for snapping is not yet in the playlist (#3322).
    • رفع مشکلی که در آن HlsMediaChunk کاملاً مصرف‌شده، بارگیری را هنگام دریافت EOFException از استخراج‌کننده دوباره امتحان می‌کند (#۳۳۵۰).
  • افزونه DASH:
    • رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعه‌های تصویری با presentationTimeOffset (#3334).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • Opus: رفع خرابی حافظه وقتی چندین نمونه OpusDecoder به‌طور هم‌زمان مقداردهی اولیه می‌شوند.
    • MPEG-H: رفع نشت حافظه، کوتاه شدن نویسه‌های غیرASCII، و خرابی بومی احتمالی در شرایط حافظه کم هنگام ارسال فرمان‌ها به MpeghUiManager (#3365).

نسخه ۱.۱۱.۰

‫۵ اوت ۲۰۲۶

  • کتابخانه مشترک:
    • Format.channelMask را برای نمایش صریح ماسک کانال صوتی اضافه کنید، و یک سربارگذاری جدید Util.getAudioTrackChannelConfig(Format) برای حل ایمن آن.
    • Kotlin را از نسخه ۲.۰.۲۰ به ۲.۲.۰ ارتقا دهید.
  • 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() آزمایشی را اضافه کنید تا امکان پردازش رسانه پیشرفته به‌صورت هرجریان فراهم شود. این کار تأخیر راه‌اندازی بین موارد فهرست پخش را کاهش می‌دهد و از «گیر کردن» بازپخش در محتوای بسیار کوتاه جلوگیری می‌کند (#۳۱۲۲).
    • رفع شرایط رقابتی مربوط به استفاده از شناسه جلسه صوتی که در آن شناسه جلسه صوتی اولیه تولیدشده خودکار توسط ExoPlayer به‌جای مقدار تنظیم‌شده توسط 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 با ترکیب کردن Core و Extension Substream در یک نمونه واحد، رفع مشکلات بازپخش که در آن این دو قبلاً به‌عنوان نمونه‌های جداگانه خروجی داده می‌شدند (#3147).
    • MP4: جلوگیری از حلقه‌های بی‌نهایت و خواندن‌های خارج از محدوده هنگام تجزیه موارد برچسب فراداده خالی ilst (#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: Use gapless-aware durations from Xing/Info headers (#3183).
    • MP3: Adjust LAME/Xing encoder delay and padding metadata to match decoded PCM trimming (#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) را اضافه کنید.
    • ToFloatPcmAudioProcessor را بهبود دهید تا از تبدیل PCM‏ ۸ بیتی، PCM‏ ۱۶ بیتی big-endian، و PCM ممیز شناور ۶۴ بیتی به 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 اصلی خود بودند. اکنون جلسه به‌طور قابل‌اعتمادی این شناسه‌های کاربری را درطول به‌روزرسانی‌های وضعیت ترجمه و منتشر می‌کند.
    • با گرفتن 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 اضافه کنید. این نگه‌دارنده حالت در demo-compose برای نمایش اطلاعات فراداده مختلف درباره 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 که باعث ازکارافتادن در خطوط زمانی‌ای می‌شد که از جستجوی شناسه کاربری دوره پشتیبانی نمی‌کنند (#۳۲۶۴).
  • بارگیری‌ها:
    • حل کردن متغیرهای HLS در فهرست پخش رسانه هنگام واکشی برای بارگیری (#۳۲۵۸).
  • افزونه Ktor:
    • افزودن ماژول افزونه جدید media3-datasource-ktor که KtorDataSource را با پشتیبانی پشته HTTP Ktor ارائه می‌دهد.
    • رفع مشکل KtorDataSource بار کردن کل بدنه پاسخ‌های HTTP در حافظه هنگام باز کردن اتصال (#3305).
  • افزونه HLS:
    • افزودن پشتیبانی از HLS Content Steering و Pathway Cloning (#۱۶۸۹).
    • setWithAssetListReset را به HlsInterstitialsAdsLoader اضافه کنید تا به برنامه‌ها اجازه دهید بین‌آگهی‌های فهرست دارایی کاملاً پردازش‌شده را به حالت غیرقابل‌دسترس بازنشانی کنند تا دوباره به‌صورت درخواستی حل‌وفصل شوند.
    • Parse SCORE attribute of EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF, and populate it to Format.selectionPriority (#3236).
    • رفع اشکالی که در آن بازآوری‌های زمان‌بندی‌شده فهرست پخش HLS ادامه می‌یابد حتی اگر فهرست پخش دیگر اصلی یا فعال نباشد (#۳۲۵۴).
    • Fix calculation of content resume offset when resolving interstitial asset lists (#3322).
    • رفع ناپیوستگی غیرمنتظره مُهر زمان قطعه صوتی هنگام ازسر گرفتن بازپخش زنده با تأخیر کم پس‌از ناموفق بودن درخواست فهرست پخش (#۳۳۱۱).
    • رفع اشکال در HlsMediaPeriod.getStreamKeys() که در آن قطعه ID3 در نسخه‌های صوتی به‌عنوان زیرنویس درنظر گرفته می‌شود (#3333).
  • افزونه DASH:
    • زیرنویس ناشنوایان CEA را براساس زبان به TrackGroupهای مختلف تقسیم کنید (#۳۱۱۳).
    • افزودن پشتیبانی برای تجزیه چند عنصر Location از مانیفست (MPD) و انجام بازگشت مکان در DashMediaSource هنگام ناموفق بودن بارگیری مانیفست.
    • رفع ازکارافتادگی (IndexOutOfBoundsException) هنگام باز کردن مانیفست‌ها با عنصر <SegmentTimeline/> خالی (#3326).
  • افزونه RTSP:
    • رفع توقف یا خرابی موقت بازپخش درطول آماده‌سازی بازپخش RTSP که به‌دلیل خطاهای اتصال درگاه UDP ایجاد می‌شود.
  • افزونه Cast:
    • کلاس جدید CastParams را اضافه کنید تا پیکربندی Cast با فراخوانی Cast.initialize(CastParams) مجاز شود.
    • گزینه جدید CastParams.getShowSystemOutputSwitcherOnCastIconClick() اضافه شده است که درصورت دردسترس بودن، به‌جای انتخابگر دستگاه «پخش» درون‌برنامه، استفاده از «تعویض‌کننده خروجی» SystemUI را راه‌اندازی می‌کند.
    • MediaRouteButtonState و rememberMediaRouteButtonState برای پشتیبانی از مشاهده وضعیت نمایان بودن انتخابگر مسیر رسانه اضافه شد، و پارامتر state به MediaRouteButton اضافه شد (#3172).
    • رفع اشکالی که در آن 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 ایجاد می‌شد (#۳۱۵۳).
  • انتخاب قطعه:
    • منطق انتخاب قطعه در 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) است.
  • صدا:
    • رفع اشکالی که در آن اگر چند پردازنده صوتی به پخش‌کننده اضافه شود، ممکن است رویدادهای صوتی به‌اشتباه هدایت شوند.
  • ویدیو:
    • منطق استفاده مجدد از کدک در تغییرات نرخ فریم در میانای برنامه‌سازی کاربردی زیر ۳۰ را تنظیم کنید تا از بازنشانی کدک در مواردی که مفید نیستند جلوگیری شود (#۳۱۲۰).
    • غیرفعال کردن راه‌حل همگام‌سازی اجباری در queueSecureInputBuffer برای API 31+. این راه‌حل یک گلوگاه مصنوعی بود که رمزگشایی را مجبور می‌کرد به‌صورت سریالی اجرا شود و از مخدوش شدن ویدیو به‌دلیل مشکل چارچوب موجود قبل‌از API 31 جلوگیری می‌کرد.
  • تصویر:
    • مشکل در حالت پاک‌سازی که در آن به‌روزرسانی‌های تصویر فقط زمانی اعمال می‌شد که کاربر «پاک‌سازی را متوقف می‌کرد» برطرف شد (#۲۸۱۵).
  • جلسه:
    • رفع اشکالی که در آن 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:
    • Fix crash in SampleQueue when seeking into a chunk that is currently being canceled.

‫۱.۱۰.۰

‫۲۶ مارس ۲۰۲۶

  • کتابخانه مشترک:
    • ‫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 (#2830).
    • رفع اشکالی که در آن آگهی پیش‌پخش مقداردهی‌نشده باعث ایجاد ArrayIndexOutOfBoundsException (#۳۱۲۵) می‌شد.
  • CompositionPlayer:
    • افزودن پشتیبانی برای EditedMediaItem.removeVideo.
  • ترانسفورماتور:
    • EditedMediaItem.Builder.setFrameRate() اکنون می‌تواند حداکثر نرخ فریم خروجی را برای ویدیو تنظیم کند، که به‌ویژه هنگام افزایش سرعت رسانه با setSpeed() مفید است.
  • انتخاب قطعه:
    • امضای DefaultTrackSelector.selectAllTracks را تغییر دهید تا آرایه خروجی را به‌عنوان پارامتر دربرگیرد، که ازپیش با لغوهای قطعه تکمیل شده است.
    • رفع مشکل انتخاب شدن قطعه‌های فراداده جاسازی‌شده بدون توجه به اینکه قطعه اصلی مربوطه انتخاب شده است یا نه (#۲۹۴).
    • گزینه‌های تثبیت TrackSelectionParameters برای preferredVideoLanguages،‏ preferredVideoLabels، preferredAudioLabels،‏ preferredTextLabels، و selectTextByDefault.
  • استخراج‌کننده‌ها:
    • MP4: پشتیبانی از فایل‌هایی با جعبه‌های بزرگ uuid قبل‌از جعبه‌های دیگر مانند moov (#3046).
    • MP4: پشتیبانی از قطعه‌های «کدبندی ویدیویی همه‌کاره» (VVC) در محتواهای MP4 اضافه شد.
  • بازرس:
    • تغییر ناگهانی: FrameExtractor را بردارید. کاربران اکنون باید به واحد جدید :media3-inspector-frame وابسته باشند و واردات را به androidx.media3.inspector.frame.FrameExtractor به‌روز کنند.
    • واحد جدیدی برای استخراج و پردازش فریم‌های ویدیو رمزگشایی‌شده معرفی کنید.
  • صدا:
    • کتابخانه رمزگشایی زیربنایی برای افزونه رمزگشای IAMF از libiamf به iamf_tools تغییر کرد.
    • رمزگشایی IAMF از خروجی دوگوشی ازطریق رمزگشا (هنگام استفاده از افزونه رمزگشای IAMF) یا ازطریق «فضاساز Android» پشتیبانی می‌کند.
    • هنگام ارزیابی پشتیبانی از رمزگشای AC-4 در سناریوهای Automotive، پشتیبانی از AC4Profile22 و دیگر نمایه‌های قدیمی به‌درستی برداشته می‌شود (#۲۶۰۹).
    • منطق تکرار مجدد مقداردهی اولیه AudioOutput را در DefaultAudioSink (#2905) بهبود دهید.
    • تلاش برای مطابقت دادن چیدمان خروجی بلندگوها (یا «فضاساز» درصورت وجود) هنگام رمزگشایی IAMF، هم با افزونه IAMF و هم با رمزگشاهای کدک رسانه، که توسط فیلدها و منطق جدید در AudioCapabilities و AudioCapabilitiesReceiver پشتیبانی می‌شود.
    • رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صدای بدون وقفه در حالت انتقال بار فشرده‌شده گیر می‌کند.
  • نوشتار:
    • VobSub: از فرمان‌های کنترلی START و STOP SPU برای به‌دست آوردن مدت زمان راهنما استفاده کنید، به‌جای اینکه همیشه به‌طور پیش‌فرض ۵ ثانیه باشد (#۲۹۳۵).
  • فراداده:
    • افزایش تعداد پیش‌فرض پردازنده فراداده به چهار برای پوشش دادن همه قطعه‌های فراداده بالقوه منتشرشده توسط انواع و نسخه‌های HLS (#۳۰۴۳).
  • جلوه:
    • LottieOverlay را به ماژول :media3-effect-lottie جدیدی منتقل کنید (که شامل تغییر نام آن از androidx.media3.effect.LottieOverlay به androidx.media3.effect.lottie.LottieOverlay نیز می‌شود).
  • Lottie جلوه:
    • معرفی یک ماژول جدید :media3-effect-lottie که عملکردی برای اعمال جلوه‌های lottie به فریم‌های ویدیو ارائه می‌دهد.
  • افزونه 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 را ازکار بیندازد و دستگاه را مجبور به بازراه‌اندازی کند (#۳۱۱۸).
    • Fix notification artwork icon scaling on Android Q (#3084).
  • رابط کاربری:
    • PlaybackSpeedControl Composable را به media3-ui-compose اضافه کنید تا سرعت بازپخش را نمایش دهید و اصلاح کنید.
    • PlaybackSpeedToggleButton Composable را به media3-ui-compose-material3 اضافه کنید تا سرعت بازپخش را کنترل کنید.
    • افزودن ProgressSlider Composable به media3-ui-compose-material3 برای نمایش پیشرفت پخش‌کننده و انجام جستجو بااستفاده از کشیدن و ضربه زدن (#۲۲۸۸).
    • از میان‌گیر بزرگ خارج از صفحه در PlayerControlView پویانمایی‌شده اجتناب کنید.
    • Player Composable را به media3-ui-compose-material3 اضافه کنید که ContentFrame را با کنترل‌های سفارشی‌سازی‌شدنی تراز‌شده با بالا، مرکز، و پایین ترکیب می‌کند.
    • پنهان کردن موقعیت بازپخش از سرویس دسترس‌پذیری برای جلوگیری از به‌روزرسانی مداوم اعلامیه وقتی PlayerControlView نمایان است.
  • افزونه HLS:
    • پشتیبانی از X-PLAYOUT-LIMIT با میان‌آگهی‌های HLS (#۲۴۸۴).
    • پشتیبانی از مشخصه QUERYPARAM با #EXT-X-DEFINE (#۱۸۵۴).
    • تجزیه فهرست پخش HLS با ذخیره کردن تطبیق‌دهنده‌های عبارت باقاعده در حافظه نهان بهینه‌سازی شد (#۳۰۰۸).
    • 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

‫۶ فوریه ۲۰۲۶

از نسخه پایدار ۱.۱۰.۰ استفاده کنید.

نسخه ۱.۹.۰

‫۱.۹.۴

‫۱۶ مه ۲۰۲۶

نسخه ۱.۹.۴ شامل ثبت‌های زیر است.

  • جلوه:
    • هنگام انتقال از بافت بدون سطح، GL_DRAW_BUFFER و GL_READ_BUFFER را به‌طور صریح تنظیم کنید.

‫۱.۹.۳

‫۱۶ مارس ۲۰۲۶

نسخه ۱.۹.۳ حاوی ثبت‌های زیر است.

  • صدا:
    • رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صدای بدون وقفه در حالت انتقال بار فشرده‌شده گیر می‌کند.

‫۱.۹.۲

‫۶ فوریه ۲۰۲۶

نسخه ۱.۹.۲ حاوی ثبت‌های زیر است.

  • ExoPlayer:
    • رفع اشکالی که در آن ProgressiveMediaSource اطلاعات خط زمان قدیمی را به پخش‌کننده منتقل می‌کند و دوره‌های صف‌بندی‌شده به‌طور غیرمنتظره‌ای حذف می‌شوند (#3016).
  • جلسه:
    • رفع مشکلی که در آن راه‌حل جایگزین برای قرار دادن دکمه میانای کاربری سیستم تأثیر منفی بر دیگر سطوح میانای کاربری مانند Android Auto یا سازندگانی که به راه‌حل جایگزین نیاز ندارند می‌گذارد (#3041).
  • افزونه Cast:
    • اشکال مربوط به انتقال از Cast به بازپخش محلی برطرف شد.

‫۱.۹.۱

‫۲۶ ژانویه ۲۰۲۶

نسخه ۱.۹.۱ حاوی این ثبت‌ها است.

  • کتابخانه مشترک:
    • پشتیبانی از رشته‌های تاریخ-زمان با فقط ساعت در انحراف منطقه زمانی (#۲۹۲۹).
  • ExoPlayer:
    • به زمان‌بندی پویا اجازه دهید تا فاصله doSomeWork را فقط پس‌از شروع صدا کند کند تا از همگام‌سازی روان‌تر صدا/تصویر در شروع بازپخش پشتیبانی کند.
    • رفع اشکال در DefaultLoadErrorHandlingPolicy که در آن FileNotFoundException و انواع استثناهای مشابه چندین بار دوباره امتحان می‌شدند.
    • رفع اشکال زمان‌بندی پویا که در آن زمان محاسبه‌شده برای doSomeWork بعدی به‌اشتباه با زمان سپری‌شده از تکرار فعلی doSomeWork کاهش می‌یافت. امیدواریم با رسیدگی به این موضوع، زمان بیکاری واحد پردازش مرکزی افزایش یابد و در مصرف برق صرفه‌جویی شود.
    • رفع مشکل عدم موفقیت برخی‌از بازپخش‌های فایل‌های Dolby Vision هنگام تلاش برای استفاده از کدک AVC یا HEVC جایگزین.
    • رفع اشکالی که در آن بار کردن پس‌از پایان بازپخش ادامه می‌یابد، وقتی که مورد درحال پخش از فهرست پخش برداشته می‌شود (#2873).
    • از نشت نمونه‌های MediaItem هنگام استفاده مکرر از ExoPlayer.replaceMediaItem در همان مورد (#۲۹۹۳) جلوگیری کنید.
    • جلوگیری از خطاهای احتمالی «برنامه پاسخ نمی‌دهد» ناشی از انتشار اضطراری قفل بیداری (#۲۹۷۹).
  • استخراج‌کننده‌ها:
    • MP3: Parse LAME ReplayGain data (#2840).
  • صدا:
    • هنگام ارزیابی پشتیبانی از رمزگشای AC-4 در سناریوهای Automotive، پشتیبانی از AC4Profile22 و دیگر نمایه‌های قدیمی به‌درستی برداشته می‌شود (#۲۶۰۹).
  • ویدیو:
    • Discard video codecs on devices below API 30 when the content frame rate changes to avoid stuttering playback (#2941).
  • نوشتار:
    • VobSub: Fix some missing subtitles by correctly handling SPUs that either contain only a single control sequence, or have critical info split across multiple control sequences (#2935).
  • افزونه 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).
    • رفع اشکال مربوط به عدم استفاده از مؤلف، نویسنده، و آهنگساز به‌عنوان جایگزین هنگام تبدیل از MediaMetadataCompat و MediaDescriptionCompat قدیمی (#3018).
  • بارگیری‌ها:
    • رفع حلقه‌های بی‌نهایت احتمالی هنگام رسیدگی به PriorityTooLowException توسط SegmentDownloader (برای DASH،‏ HLS، و SmoothStreaming). لغوهای سفارشی SegmentDownloader بااستفاده از روش محافظت‌شده execute باید تکلیف خود را در Supplier ارائه دهند تا بتوان آن را بازآفرینی کرد (#۲۹۳۱).
  • افزونه HLS:
    • سند JSON فهرست دارایی خام را به فراخوانی برگشتی Listener.onAssetListLoadCompleted ارسال کنید. این یک تغییر اساسی در میانای برنامه‌سازی کاربردی ناپایدار است که برنامه‌هایی را که این callback را پیاده‌سازی می‌کنند ملزم می‌کند تا یک آرگومان اضافی از نوع JSONObject اضافه کنند (#۲۹۵۰).
  • افزونه 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 به‌صورت داخلی استفاده می‌شدند منتشر شدند تا امکان استفاده مجدد برای پخش‌کننده‌های دیگر فراهم شود (#۱۸۹۳).
    • Fix ForwardingPlayer listener handling when the underlying delegate player uses reference equality for comparing listener instances (#2675).
    • یک تابع افزونه تعلیق Player.listenTo در کتابخانه media3-common-ktx اضافه کنید که Player.Events خاصی را که باید روی آن اقدام شود مشخص می‌کند.
    • رفع خرابی در BasePlayer.getBufferedPercentage ناشی از سرریز عدد صحیح وقتی موقعیت میان‌گیرشده گزارش‌شده به‌طور غیرقابل‌باوری بسیار بزرگ‌تر از مدت گزارش‌شده است (#2750).
    • رفع مشکل تشخیص خودکار نوع قطعه TrackGroup با نادیده نگرفتن نوع MIME نمونه سفارشی و بازگشت به استفاده از نوع قطعه احتمالاً اشتباه از نوع MIME محفظه (#۲۸۶۰).
  • ExoPlayer:
    • افزودن تشخیص گیر کردن پخش‌کننده که اگر پخش‌کننده گیر کرده باشد، خطای پخش‌کننده StuckPlayerException را راه‌اندازی می‌کند. این اتفاق در موارد زیر رخ می‌دهد، که درصورت نیاز، هر زمان‌اتمام پیش‌فرض را می‌توان در ExoPlayer.Builder پیکربندی کرد:
      • پس‌از ۱۰ دقیقه STATE_BUFFERING هنگام تلاش برای پخش و عدم پیشرفت میان‌گیری.
      • پس‌از ۱۰ ثانیه STATE_READY درحین تلاش برای پخش و بدون پیشرفت بازپخش.
      • پس‌از ۱ دقیقه STATE_READY فراتر از مدت اعلام‌شده بدون رسیدن به پایان مورد.
      • پس‌از ۱۰ دقیقه با دلیل توقف بازپخش هنگام تلاش برای پخش.
    • مدیریت قفل بیداری را به‌طور پیش‌فرض فعال کنید تا مشکلات مربوط به میان‌گیری درطول بازپخش پس‌زمینه برطرف شود. این معادل تنظیم 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 با پیاده‌سازی پیش‌فرض (#۲۸۳۴).
    • افزودن افست ازسرگیری محتوا هنگام رد شدن از پخش آگهی پس‌از تنظیم جستجو یا انتقال خودکار (#۲۴۸۴).
    • افزودن میانای برنامه‌سازی کاربردی برای تنظیم و مشاهده پارامترهای کدک برای قطعه‌های صوتی و تصویری. این ویژگی برای پردازنده گرافیکی مبتنی بر MediaCodec پیاده‌سازی شده است و به میانای برنامه‌سازی کاربردی ۲۹ یا بالاتر نیاز دارد.
      • برای اعمال پارامترها، از ExoPlayer.setAudioCodecParameters() و ExoPlayer.setVideoCodecParameters() استفاده کنید.
      • از ExoPlayer.addAudioCodecParametersChangeListener() و ExoPlayer.addVideoCodecParametersChangeListener() برای گوش دادن به تغییرات استفاده کنید. مشاهده کلیدهای مختص ارائه‌دهنده به میانای برنامه‌سازی کاربردی ۳۱ یا بالاتر نیاز دارد.
    • رفع IllegalStateException ناشی از تنظیم منبع رسانه خالی پس‌از جستجوی موقعیت غیرصفر و سپس آماده‌سازی پخش‌کننده با منبع رسانه غیرخالی.
    • اشکال مربوط به جستجو در فایل‌های رسانه‌ای دیگر درحین حالت پاک‌سازی که می‌توانست باعث IllegalStateException شود برطرف شد.
    • رفع NullPointerException احتمالی در DefaultPlaybackSessionManager (#۲۸۸۵).
    • بهبود عملکرد جستجو را برای ویدیوهای واجدشرایط فعال کنید.
    • استفاده از رمزگشایی ناهمگام در MediaCodec در میانای برنامه‌سازی کاربردی ۳۶+ دوباره فعال شد و مشکلات وقفه زمانی با این میانای برنامه‌سازی کاربردی پلاتفرم برطرف شده است (#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 به‌عنوان muxer پیش‌فرض.
    • EditedMediaItem.Builder#setSpeed() را اضافه کنید و Effects#createExperimentalSpeedChangingEffects() را منسوخ کنید.
    • forceAudioTrack و forceVideoTrack را با trackTypes در EditedMediaItemSequence جایگزین کنید.
  • انتخاب قطعه:
    • TrackSelectionParameters.selectTextByDefault را اضافه کنید تا انتخاب هر قطعه نوشتاری را بدون مشخص کردن اولویت‌های خاص‌تر دیگر ترجیح دهید.
    • preferredVideoLabels، preferredAudioLabels و preferredTextLabels را در TrackSelectionParameters اضافه کنید تا اولویت قطعه‌هایی با برچسب خاص را مشخص کنید، برای مثال قطعه‌هایی که از برچسب‌های HLS NAME خوانده می‌شوند (#۱۶۶۶).
  • استخراج‌کننده‌ها:
    • FLAC: تشخیص سرصفحه را سخت‌گیرانه‌تر کنید تا احتمال پیدا کردن سرصفحه‌های جعلی در داده‌های FLAC کدگذاری‌شده کاهش یابد، که منجر به خطاهای کدگشایی می‌شود (#۵۵۸).
    • MP3: Allow gaps between (and before) ID3 tags at the beginning of MP3 files (#811, #5718).
    • MP3: افزایش حد بوکشیدن به ۱۲۸ کیلوبایت برای مطابقت با حد جستجوی موجود برای بایت همگام‌سازی (#۲۷۱۳).
    • MP3: FLAG_ENABLE_INDEX_SEEKING را تغییر دهید تا ترجیحاً اطلاعات را از سرصفحه‌های فراداده (مانند Xing و VBRI) درصورت دردسترس بودن جستجو کند و اگر اطلاعات جستجوی دیگری وجود نداشت، به جستجوی مبتنی بر نمایه برگردد. این عملکرد را برای فایل‌های دارای فراداده جستجو بهبود می‌بخشد (#۲۸۳۹).
    • MP3: تغییر Mp3Extractor به پیش‌فرض برای فرض نرخ بیت ثابت (CBR) وقتی فراداده جستجو (مثلاً Xing،‏ VBRI) پیدا نشود، حتی وقتی FLAG_ENABLE_INDEX_SEEKING تنظیم شده باشد. این براساس سابقه مشخصات MP3 است که در آن CBR استاندارد بود و VBR به سرصفحه‌های صریح نیاز دارد. این کار قابلیت جستجوی فوری را برای فایل‌های بدون فراداده بهبود می‌بخشد، اما ممکن است دقت فایل‌های VBR بدون سرصفحه را کاهش دهد. اکنون اگر فرض 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 (#6225).
    • رفع مشکلی در MatroskaExtractor که در آن جستجو برای فایل‌های دارای چند قطعه ممکن بود نادرست باشد. اکنون نقاط نشانه به‌درستی با قطعه‌های مربوطه مرتبط شده‌اند که منجر به جستجوی دقیق‌تر می‌شود.
    • MPEG-TS: رفع IllegalArgumentException از ReorderingBufferQueue ناشی از بسته‌های PES بدون مُهر زمان (#2764).
    • افزودن پشتیبانی برای استخراج «عکس‌های حرکتی» HEIC. HeifExtractor اکنون می‌تواند فایل‌های HEIC حاوی قطعه‌های ویدیو و صدای جاسازی‌شده را تجزیه کند.
  • بازرس:
    • ماژول جدید :media3-inspector را معرفی کردیم تا به‌عنوان خانه اختصاصی برای ابزارهای بازرسی رسانه عمل کند. این ماژول اکنون دارای یک androidx.media3.inspector.MetadataRetriever جدید است که یک API یکپارچه برای استخراج فراداده و فریم ارائه می‌دهد. 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).
  • تصویر:
    • Fix ScrubbingMode issue where player gets stuck while scrubbing a DASH thumbnail track (#2815).
  • مدیریت حقوق دیجیتال:
    • نوع پاسخ روش‌های 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 برای مدیریت شناسه‌های آگهی‌ها طبق مشخصات تنظیمات Google Ad Manager. کدهای شبکه اختیاری هستند اما برای درخواست‌های جاری‌سازی «خدمات کامل» توصیه می‌شوند. برای پیدا کردن کد شبکه، این مقاله را ببینید.
    • Bump IMA dependency to 3.37.0 which requires enabling core library desugaring. این ویژگی باید توسط برنامه‌های وابسته نیز فعال شود. یادداشت‌های پیکربندی IMA را ببینید. * پشتیبانی از گزینه‌های واسط کاربر سفارشی IMA DAI در سازنده SSAI URI. گزینه‌های رابط کاربری سفارشی برای درج آگهی سمت سرور شامل پشتیبانی از ارائه «قابل‌ردشدن» و «درباره این آگهی» است. این ویژگی درحال‌حاضر برای ناشران منتخب در فهرست مجاز دردسترس است. این تغییر همچنین نسخه IMA SDK را به ۳.۳۸.۰ ارتقا می‌دهد (یادداشت‌های انتشار) تا به API گزینه‌های سفارشی واسط کاربر دسترسی پیدا کند.
    • مشکلی که در آن خطای آماده‌سازی محتوا برای محتوای بعداز آگهی به‌اشتباه به‌عنوان خطای بازپخش آگهی گزارش می‌شد برطرف شد (#۲۶۵۶).
  • جلسه:
    • پارامتر جدیدی به MediaSession.Callback.onPlaybackResumption اضافه کنید تا نشان دهد تماس فقط برای جمع‌آوری اطلاعات است یا برای شروع بازپخش (#۱۷۶۴).
    • MediaSession.ControllerInfo.isTrusted را به‌روز کنید تا کنترل‌کننده‌های برنامه خود را نیز به‌عنوان قابل‌اعتماد اعلام کند (#۲۵۴۲).
    • MediaSessionService.triggerNotificationUpdate را اضافه کنید تا به‌روزرسانی اعلان به‌صورت دستی راه‌اندازی شود (#1833).
    • ProgressListener را به روش‌های فرمان سفارشی اضافه کنید.
    • مقدار پیش‌فرض برای MediaLibrarySession.Builder.setLibraryErrorReplicationMode را به غیر مهلک تغییر دهید.
    • پارامتر Context را به MediaButtonReceiver.onForegroundServiceStartNotAllowedException (#۲۶۲۵) اضافه کنید.
    • شناسه کنترل میزان صدا را به‌جای واکشی ازطریق binder، از پلاتفرم PlaybackInfo بخوانید. این کار تضمین می‌کند که نوع بازپخش و شناسه کنترل میزان صدا به‌صورت اتمی خوانده می‌شوند و با یکدیگر مطابقت دارند.
    • رفع اشکالی که در آن رویدادهای کلید ACTION_UP قبل‌از ارسال به callback برای رسیدگی سفارشی فیلتر می‌شدند. این امر باعث برابری با آنچه media1 انجام داد و پلاتفرم انجام می‌دهد می‌شود (#2637).
    • رفع اشکالی که در آن getCurrentTimeline() توسط PlayerWrapper فراخوانی می‌شد، حتی زمانی که فرمان دردسترس نبود (#2665).
    • رفع اشکالی که در آن پیامی در صف پیام لوپر اصلی باقی می‌ماند و باعث نشت حافظه پس‌از پایان سرویس می‌شد (#2692).
    • وقتی به برنامه جلسه قدیمی با MediaBrowser متصل هستید، فرمان‌های سفارشی فقط درصورتی به جلسه ارسال می‌شود که کنش سفارشی به‌عنوان کنش سفارشی در PlaybackStateCompat جلسه قدیمی تبلیغ شده باشد. همه کنش‌های سفارشی دیگر به سرویس ارسال می‌شود.
    • onAudioSessionIdChanged پیاده‌سازی شد تا وقتی شناسه جلسه صوتی توسط جلسه تنظیم می‌شود، به کنترل‌کننده‌های رسانه اطلاع داده شود (#244).
    • رفع اشکالی که باعث می‌شد KEYCODE_HEADSETHOOK پخش‌کننده را پس‌از دریافت رویداد کلید رسانه Intent در onStartCommand() راه‌اندازی نکند. این مشکل با مدیریت KEYCODE_HEADSETHOOK درست مثل KEYCODE_MEDIA_PLAY_PAUSE برطرف شده است (#2816).
    • اشکالی که در آن اندازه Surface بین جلسه و کنترل‌کننده منتقل نمی‌شد و درنتیجه جلوه‌های ویدیویی در جلسه نمایشی اعمال نمی‌شد برطرف شد. اگر از کنترل‌کننده استفاده می‌کنید، این ممکن است تغییری مخرب باشد اگر پخش‌کننده شما نتواند تماس setVideoSurfaceHolder را مدیریت کند.
    • Fix propagation of non-String CharSequence metadata values like span-styled strings (#2853).
    • 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 را با تغییر اندازه نسبت ابعادی و پوشاندن با شاتر ترکیب می‌کند.
    • رفع اشکال شناخته‌شده پلاتفرم API 34 که باعث کشیده شدن/برش ویدیوها هنگام استفاده از SurfaceView در Compose AndroidView می‌شود و درنتیجه بر ContentFrame و PlayerSurface Composables با SURFACE_TYPE_SURFACE_VIEW تأثیر می‌گذارد (#1237، #2811).
    • یک واحد media3-ui-compose-material3 جدید ایجاد کنید و «ترکیب‌شدنی‌های» با زمینه Material3 (PlayPauseButton،‏ NextButton،‏ PreviousButton،‏ SeekBackButton،‏ SeekForwardButton،‏ RepeatButton،‏ ShuffleButton،‏ MuteButton) را به آن اضافه کنید.
    • TimeText composable را به media3-ui-compose-material3 اضافه کنید تا پیشرفت بازیکن را به‌صورت متنی نمایش دهید. می‌توان آن را برای نمایش موقعیت فعلی، مدت، یا زمان باقی‌مانده پیکربندی کرد.
    • پشتیبانی از قرار دادن دکمه مسیر رسانه در PlayerView را اضافه کنید.
    • از BidiFormatter برای نمایش صحیح علائم نگارشی در زیرنویس‌های نوشتاری راست‌به‌چپ (#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: (#۲۶۸۸).
    • Reset LiveConfiguration to the value provided by the MediaItem of the DashMediaSource when released and when the media item is updated by the user (#2606).
    • از خرابی‌های ناشی از به‌روزرسانی‌های مانیفست نامعتبر که به‌عنوان خطاهای پخش‌کننده گزارش نشده‌اند جلوگیری کنید (#۲۸۰۵).
  • افزونه 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 فعال کنید.
    • پشتیبانی از «ارسال محتوا» را در نسخه نمایشی «جلسه» اضافه کنید.
    • پشتیبانی برای نمایش دکمه مسیر رسانه در Composable UI اضافه کنید.
    • پشتیبانی برای نمایش دکمه مسیر رسانه در منو نوار اقدام را اضافه کنید.
    • پشتیبانی برای نمایش دکمه مسیر رسانه به‌عنوان واسط کاربر «نما» اضافه کنید.
  • ابزارهای آزمایشی:
    • Add maximum time diff for the auto-advancing behavior of FakeClock. به‌طور پیش‌فرض روی ۱ ثانیه تنظیم شده است، اما ازطریق FakeClock.Builder قابل‌پیکربندی است.
    • حداکثر تفاوت زمانی بین پیام‌ها را برای RobolectricUtil.runMainLooperUntil (و runLooperUntil) اضافه کنید. به‌طور پیش‌فرض ۱ ثانیه است، اما ازطریق سربارهای جدید این روش‌ها قابل‌پیکربندی است.
    • CapturingRenderersFactory را از test-utils به test-utils-robolectric منتقل کنید.
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن سازنده DefaultPreloadManager منسوخ‌شده. درعوض از DefaultPreloadManager.Builder استفاده کنید.
    • سازنده‌های EditedMediaItemSequence منسوخ‌شده برداشته شد. درعوض از EditedMediaItemSequence.Builder استفاده کنید.
    • برداشتن BitmapFactoryImageDecoder.BitmapDecoder. درعوض از ExternallyLoadedImageDecoder استفاده کنید.
    • برداشتن ShadowMediaCodecConfig.forAllSupportedMimeTypes() منسوخ‌شده. درعوض از ShadowMediaCodecConfig.withAllDefaultSupportedCodecs() استفاده کنید.
    • برداشتن ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes() منسوخ‌شده. درعوض از ShadowMediaCodecConfig.withNoDefaultSupportedCodecs() استفاده کنید.

1.9.0-rc01

‫۱ دسامبر ۲۰۲۵

از نسخه پایدار ۱.۹.۰ استفاده کنید.

1.9.0-beta01

‫۲۰ نوامبر ۲۰۲۵

از نسخه پایدار ۱.۹.۰ استفاده کنید.

1.9.0-alpha01

‫۲۲ اکتبر ۲۰۲۵

از نسخه پایدار ۱.۹.۰ استفاده کنید.

نسخه ۱.۸.۰

‫۱.۸.۱

‫۲۱ مه ۲۰۲۶

نسخه ۱.۸.۱ حاوی ثبت‌های زیر است.

  • جلوه:
    • هنگام انتقال از بافت بدون سطح، GL_DRAW_BUFFER و GL_READ_BUFFER را به‌طور صریح تنظیم کنید.

نسخه ۱.۸.۰

‫۳۰ ژوئیه ۲۰۲۵

نسخه ۱.۸.۰ حاوی این ثبت‌ها است.

  • کتابخانه مشترک:
    • پشتیبانی از جایگزینی پخش‌کننده در ForwardingSimpleBasePlayer را اضافه کنید.
  • ExoPlayer:
    • افزودن گیرنده برای حالت پخش درهم به میانای ExoPlayer (#۲۵۲۲).
    • اگر از چند رشته به DefaultAudioSink دسترسی پیدا شود، استثنایی به‌طور واضح‌تر ایجاد می‌شود. اگر این اتفاق به‌دلیل فراخوانی RendererCapabilities.getFormatSupport خارج از پخش‌کننده رخ دهد، مطمئن شوید که این روش را در همان رشته‌ای که رشته بازپخش ExoPlayer است فراخوانی کنید یا از نمونه‌ای متفاوت از نمونه‌ای که برای بازپخش استفاده می‌شود استفاده کنید (#1191).
    • رفع اشکالی که در آن قالب‌های صوتی غیر استریو در تلویزیون‌ها ممکن است توسط DefaultTrackSelector به‌عنوان پشتیبانی‌نشده علامت‌گذاری شوند.
    • مطمئن شوید که آخرین قاب هنگام استفاده از پرچم DECODE_ONLY MediaCodec (که به‌طور پیش‌فرض در حالت پاک‌سازی فعال است) به‌درستی پرداز می‌شود.
    • پشتیبانی از استفاده از شناسه دستگاه مجازی از Context منتقل‌شده به ExoPlayer.Builder را اضافه کنید.
    • زمان‌بندی پویا به‌طور پیش‌فرض در حالت پاک‌سازی فعال می‌شود.
    • هنگام جستجو تا انتهای یک مورد، از بارگیری مجدد غیرضروری منبع خودداری کنید.
    • به‌طور پیش‌فرض از MediaCodec.BUFFER_FLAG_DECODE_ONLY در حالت پاک‌سازی استفاده کنید.
    • Throw IllegalStateException when PreloadMediaSource is played by an ExoPlayer with a playback thread that is different than the preload thread (#2495).
    • افزودن cloneAndMove به ShuffleMode با پیاده‌سازی پیش‌فرض (#۲۲۲۶).
    • رفتار پیش‌فرض Renderer.getMinDurationToProgressUs را تغییر دهید تا اگر نیازی به فراخوانی render نیست، مقدار بزرگ‌تری برگرداند.
    • رفع اشکالی که در آن زمان‌بندی داخلی آخرین فریم را هنگام جستجو تا پایان درحالت مکث به‌تأخیر می‌انداخت. درحال‌حاضر، رفع اشکال فقط درصورتی اعمال می‌شود که ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled فعال باشد.
    • روش ExoPlayer.setScrubbingModeEnabled(boolean) را اضافه کنید. این کار پخش‌کننده را برای جستجوهای مکرر (مثلاً وقتی کاربر نوار لغزنده را جابه‌جا می‌کند) بهینه‌سازی می‌کند. رفتار حالت پیمایش را می‌توان با setScrubbingModeParameters(..) در ExoPlayer و ExoPlayer.Builder سفارشی‌سازی کرد.
    • امکان سفارشی‌سازی تلورانس جستجوی کسری در حالت پیمایش سریع.
    • افزایش نرخ عملکرد کدک در حالت پاک‌سازی.
    • رفع اشکالی که در آن خطاهای آماده‌سازی در محتوای 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 سفارشی اضافه کنید تا توالی‌ها را در چیدمان ۲×۲ یا PiP مرتب کند.
  • استخراج‌کننده‌ها:
    • تجزیه فراداده از فایل‌های MP4 تکه‌تکه‌شده (#۲۰۸۴).
    • JPEG: پشتیبانی از عکس‌های حرکتی که بخش Exif در ابتدا ندارند (#۲۵۵۲).
    • افزودن پشتیبانی برای جستجو در MP4 تکه‌تکه با چندین اتم sidx. این رفتار را می‌توان بااستفاده از پرچم FLAG_MERGE_FRAGMENTED_SIDX در FragmentedMp4Extractor (#9373) فعال کرد.
    • نادیده گرفتن جدول‌های جستجوی خالی در فایل‌های FLAC (ازجمله جدول‌هایی که فقط حاوی نقطه‌های جستجوی جای‌بان هستند)، و بازگشت به جستجوی دودویی درصورت مشخص بودن مدت فایل (#۲۳۲۷).
    • رفع مشکل تجزیه واحدهای H.265 SEI برای رد شدن کامل از انواع SEI ناشناخته (#۲۴۵۶).
    • WavExtractor را به‌روز کنید تا از داده‌های SubFormat افزونه سرصفحه برای قالب صوتی هنگام تجزیه فایل نوع WAVE_FORMAT_EXTENSIBLE استفاده کند.
    • 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() برداشته شد.
    • Allow constant power upmixing/downmixing in DefaultAudioMixer.
    • Make ChannelMappingAudioProcessor, TrimmingAudioProcessor and ToFloatPcmAudioProcessor public (#2339).
    • از AudioTrack#getUnderrunCount() در AudioTrackPositionTracker برای شناسایی کم‌ریزی در DefaultAudioSink به‌جای تخمین بهترین تلاش استفاده کنید.
    • بهبود هموارسازی مُهر زمان صدا برای انحراف موقعیت غیرمنتظره از دستگاه خروجی صدا.
    • رفع اشکالی که در آن همگام‌سازی صوتی/تصویری در ۱۰ ثانیه اول پس‌از ازسرگیری از حالت مکث هنگام اتصال به دستگاه‌های بلوتوث خراب می‌شود.
    • رفع اشکالی که در آن AnalyticsListener.onAudioPositionAdvancing زمان شروع پیشروی صدا را گزارش نمی‌کرد، بلکه زمان اولین اندازه‌گیری را گزارش می‌کرد.
    • رفع مشکل بازیابی به صدای چندکاناله پس‌از بازگشت به صدای استریو در برخی دستگاه‌ها (#2258).
  • ویدیو:
    • 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 (#۲۵۱۰).
    • رفع توقف بازپخش وقتی که بخش زیرنویس در ابتدا بار نمی‌شود و بعداً با موفقیت بار می‌شود، و به‌دنبال آن چندین بخش زیرنویس خالی وجود دارد (#۲۵۱۷).
    • رفع مشکل 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 غیرممتاز طرف سوم نادیده گرفته می‌شوند.
    • بررسی فرمان‌های دردسترس هنگام ارسال فرمان‌های سفارشی به 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 تلاش می‌کند در میانگیر جستجو کند وقتی هیچ تکه‌ای در میانگیر دردسترس نیست #۲۵۹۸.
    • رفع اشکالی که در آن انتخاب قطعه پس‌از بار کردن بخش‌های با تأخیر کم تغییر می‌کند و اشاره‌های پیش‌بارگذاری می‌تواند باعث گیر کردن یا توقف بازپخش شود (#۲۲۹۹).
    • با منتظر ماندن برای نیمی از مدت هدف، از بارگیری مجدد بیش‌ازحد جلوگیری کنید وقتی سرور به CAN-BLOCK-RELOAD=YES احترام نمی‌گذارد (#2317).
    • رفع اشکالی که در آن بازپخش هنگام شروع جاری‌سازی بینابینی قبل‌از میان‌ویدیویی متوقف می‌شد و وضوح فهرست دارایی برای آگهی اشتباه (#۲۵۵۸) تلاش می‌شد.
    • تجزیه فهرست پخش برای پذیرش \f (تغذیه فرم) در مقادیر مشخصه رشته نقل‌قول‌شده اصلاح شد (#۲۴۲۰).
    • پشتیبانی از به‌روزرسانی آگهی‌های بینابینی با شناسه یکسان (#۲۴۲۷).
    • رفع اشکالی که در آن خطاهای بار کردن فهرست پخش گاهی اوقات پس‌از اینکه جاری‌سازی زنده بخش‌های قابل‌بارگیری را تمام می‌کند، منتشر نمی‌شود (#2401https://github.com/androidx/media/issues/2401).
    • گروه‌بندی بازگردانی‌های زیرنویس براساس برچسب NAME، مشابه نحوه گروه‌بندی بازگردانی‌های صوتی (#1666).
    • پشتیبانی از X-ASSET-LIST و جاری‌سازی‌های زنده با HlsInterstitialsAdsLoader.
  • افزونه DASH:
    • رفع مشکل ادغام مجموعه اقتباس ترفند بازی با مجموعه اقتباس اصلی آن برای تشکیل TrackGroup نامعتبر (#۲۱۴۸).
    • رفع اشکالی که در آن کوتاه کردن مدت دوره DASH می‌تواند استثنایی ایجاد کند وقتی نمونه‌های فراتر از مدت جدید قبلاً توسط خط لوله پردازش خوانده شده‌اند (#۲۴۴۰).
    • رفع اشکال مربوط به عدم دنبال کردن تغییر مسیر هنگام استفاده از پارامترهای پُرسمان CMCD (#۲۴۷۵).
  • افزونه RTSP:
    • افزودن پشتیبانی از «بسته انبوهش RTP» برای H265 مطابق با RFC 7798#4.4.2 (#2413).
    • رفع RtspClient برای استفاده از URI مکان به‌صورت ارائه‌شده هنگام پردازش پاسخ HTTP 302 (#2398).
    • افزودن پشتیبانی تجزیه برای SessionDescriptions حاوی خطوطی با نویسه‌های فاصله سفید انتهایی (#۲۳۵۷).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • رفع اشکالی که در آن DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange تأثیری بر افزونه‌های رمزگشای صوتی ندارد (#۲۲۵۸).
  • افزونه Cast:
    • افزودن پشتیبانی برای setVolume() و getVolume() (#۲۲۷۹).
    • Prevent CastPlayer from entering STATE_BUFFERING while the timeline is empty.
    • افزودن پشتیبانی برای getDeviceVolume()، setDeviceVolume()، getDeviceMuted()، و setDeviceMuted() (#۲۰۸۹).
  • ابزارهای آزمایشی:
    • 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 می‌بود، اما به‌طور تصادفی با برچسب 1.7.0 (یعنی پایدار) در maven.google.com علامت‌گذاری شد. لطفاً از آن استفاده نکنید. در نسخه ۱.۶.۱ بمانید یا به نسخه ۱.۷.۱ (که کد آن با نسخه ۱.۶.۱ یکسان است) ارتقا دهید.

نسخه ۱.۶.۰

‫۱.۶.۱

‫۱۴ آوریل ۲۰۲۵

‫androidx.media3:media3-*:1.6.1 منتشر شده است. نسخه ۱.۶.۱ حاوی این ثبت‌ها است.

  • کتابخانه مشترک:
    • افزودن روش PlaybackParameters.withPitch(float) برای کپی کردن آسان PlaybackParameters با مقدار جدید pitch (#۲۲۵۷).
  • ExoPlayer:
    • رفع مشکلی که در آن انتقال فایل رسانه‌ای به‌دلیل خطای قابل‌بازیابی پردازنده درطول مقداردهی اولیه فایل رسانه‌ای بعدی ناموفق بود (#۲۲۲۹).
    • رفع مشکلی که در آن 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 دردسترس بود و پخش‌کننده بسته‌بندی‌شده خالی بود (#2320).
    • رفع اشکالی که در آن فراخوانی MediaSessionService.setMediaNotificationProvider پس‌از تعامل‌های دیگر با سرویس مانند setForegroundServiceTimeoutMs بدون اطلاع نادیده گرفته می‌شود (#۲۳۰۵).
  • رابط کاربری:
    • ‫PlayerSurface را فعال کنید تا با ExoPlayer.setVideoEffects و CompositionPlayer کار کند.
    • رفع اشکالی که در آن PlayerSurface نمی‌تواند با Player جدید بازترکیب شود.
  • افزونه HLS:
    • رفع مشکلی که باعث می‌شد مدت‌زمان تکه در CmcdData برای رسانه HLS تنظیم نشود، که منجر به شکست ادعا هنگام پردازش بخش‌های رسانه رمزگذاری‌شده می‌شد (#۲۳۱۲).
  • افزونه RTSP:
    • افزودن پشتیبانی از URI با طرح RTSPT به‌عنوان روشی برای پیکربندی جلسه RTSP برای استفاده از TCP (#۱۴۸۴).
  • افزونه Cast:
    • پشتیبانی از فراداده فهرست پخش اضافه شد (#۲۲۳۵).

1.6.0

‫۲۶ مارس ۲۰۲۵

‫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 چنددوره‌ای با مدت‌هایی که با محتوای واقعی مطابقت ندارند می‌توانند باعث توقف فریم در پایان مورد شوند (#1698).
    • BasePreloadManager.Listener را به سطح بالا PreloadManagerListener منتقل کنید.
    • RenderersFactory.createSecondaryRenderer را می‌توان برای ارائه پردازنده ثانویه برای پیش‌گرم کردن پیاده‌سازی کرد. پیش‌گرمایش امکان انتقال سریع‌تر فایل رسانه‌ای را درطول بازپخش فراهم می‌کند.
    • ارسال CmcdData برای درخواست‌های مانیفست در قالب‌های جاری‌سازی تطبیقی DASH،‏ HLS، و SmoothStreaming فعال شد (#۱۹۵۱).
    • ‫MediaCodecInfo کدکی را که در MediaCodecRenderer.onReadyToInitializeCodec مقداردهی اولیه خواهد شد ارائه دهید (#۱۹۶۳).
    • AdsMediaSource را تغییر دهید تا AdPlaybackStates بتواند با افزودن گروه‌های آگهی رشد کند. اصلاحات نامعتبر شناسایی می‌شوند و استثنایی را ایجاد می‌کنند.
    • مشکل نمایش فریم‌های فقط رمزگشایی اضافی به‌صورت متوالی و سریع هنگام انتقال به رسانه محتوا پس‌از آگهی میان‌ویدیویی برطرف شد.
    • ‫DefaultRenderersFactory دو نمونه MetadataRenderer را اضافه می‌کند تا برنامه‌ها بتوانند به‌طور پیش‌فرض دو طرح مختلف فراداده را دریافت کنند.
    • ارزیابی مجدد اینکه آیا بارگذاری مداوم یک قطعه باید هنگام توقف موقت بازپخش لغو شود یا نه (#۱۷۸۵).
    • گزینه ClippingMediaSource را اضافه کنید تا برش در رسانه غیرقابل‌جستجو مجاز شود.
    • رفع اشکالی که در آن جستجو با پیش‌گرم کردن می‌توانست مانع انتقال فایل رسانه‌ای بعدی شود.
    • رفع اشکالی که در آن ExoPlayer.isLoading() همچنان true باقی می‌ماند درحالی‌که به STATE_IDLE یا STATE_ENDED منتقل شده است (#۲۱۳۳).
    • ‫lastRebufferRealtimeMs را به LoadControl.Parameter اضافه کنید (#۲۱۱۳).
  • ترانسفورماتور:
    • پشتیبانی از تبدیل قالب به قالب‌های جایگزین سازگار با نسخه‌های قدیمی را اضافه کنید.
    • افزودن پشتیبانی از تراتبدیل و ترامالتی‌پلکس کردن قالب Dolby Vision (نمایه ۸).
    • پارامترهای VideoFrameProcessor.registerInputStream و VideoFrameProcessor.Listener.onInputStreamRegistered را برای استفاده از Format به‌روز کنید.
    • هنگام استفاده از DefaultEncoderFactory، فراداده ثابت HDR تولید کنید.
    • پشتیبانی از عیب‌یابی پلاتفرم Android را بااستفاده از MediaMetricsManager فعال کنید. Transformer رویدادهای ویرایش و داده‌های عملکرد را به پلاتفرم بازارسال می‌کند که به ارائه اطلاعات اشکال‌زدایی و عملکرد سیستم در دستگاه کمک می‌کند. اگر کاربر دستگاه هم‌رسانی داده‌های استفاده و عیب‌یابی را فعال کرده باشد، ممکن است Google نیز این داده‌ها را جمع‌آوری کند. برنامه‌ها می‌توانند بااستفاده از Transformer.Builder.setUsePlatformDiagnostics(false) از مشارکت در عیب‌یابی پلاتفرم برای Transformer انصراف دهند.
    • ‫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 را دقیقاً به ۳ رقم اعشار محدود کنید. قبلاً هر تعداد رقم اعشار را به‌اشتباه تجزیه می‌کردیم اما همیشه فرض می‌کردیم مقدار برحسب میلی‌ثانیه است، که منجر به مهرهای زمان نادرست می‌شد (#۱۹۹۷).
    • رفع مشکل توقف بازپخش وقتی فهرست پخش حاوی موارد برش‌خورده با زیرنویس ناشنوایان 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 به‌روشی راحت و ایمن استفاده می‌کنند.
    • Parse SUPPLEMENTAL-CODECS tag from HLS playlist to detect Dolby Vision formats (#1785).
    • شرط جستجو برای همگام‌سازی موقعیت‌ها در جاری‌سازی HLS را آسان‌تر کردیم (#۲۲۰۹).
  • افزونه DASH:
    • پشتیبانی از قالب AC-4 Level-4 برای DASH اضافه شد (#۱۸۹۸).
    • رفع مشکل هنگام محاسبه فاصله به‌روزرسانی برای درج آگهی در جاری‌سازی‌های زنده چنددوره‌ای (#1698).
    • تجزیه کردن مشخصه scte214:supplementalCodecs از مانیفست DASH برای تشخیص قالب‌های Dolby Vision (#۱۷۸۵).
    • بهبود مدیریت انتقال‌های دوره در جاری‌سازی‌های زنده که در آن دوره حاوی نمونه‌های رسانه فراتر از مدت اعلام‌شده دوره است (#1698).
    • رفع مشکل ادغام شدن مجموعه‌های اقتباس علامت‌گذاری‌شده با 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: وقتی فهرست مطالب قاب VBRI همه داده‌های MP3 را در فایل پوشش نمی‌دهد، بازپخش را زود متوقف نکنید (#1904).
  • ویدیو:
    • Rollback of using MediaCodecAdapter supplied pixel aspect ratio values when provided while processing onOutputFormatChanged (#1371).
  • نوشتار:
    • رفع اشکال در ReplacingCuesResolver.discardCuesBeforeTimeUs که در آن نشانه فعال در timeUs (قبلاً شروع شده اما هنوز پایان نیافته است) به‌اشتباه نادیده گرفته می‌شد (#۱۹۳۹).
  • فراداده:
    • Extract disc/track numbering and genre from Vorbis comments into MediaMetadata (#1958).

نسخه ۱.۵.۰

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

‫androidx.media3:media3-*:1.5.0 منتشر شده است. نسخه ۱.۵.۰ حاوی این ثبت‌ها است.

  • کتابخانه مشترک:
    • ‫ForwardingSimpleBasePlayer اضافه شد که امکان بازارسال به پخش‌کننده دیگری را با اصلاحات جزئی فراهم می‌کند و درعین‌حال سازگاری کامل و مدیریت شنونده را تضمین می‌کند (#۱۱۸۳).
    • SimpleBasePlayer.State.playlist را با روش getPlaylist() جایگزین کنید.
    • برای مشخص کردن مستقیم Timeline و Tracks و Metadata فعلی به‌جای ساختن ساختار فهرست پخش، لغو کردن را برای SimpleBasePlayer.State.Builder.setPlaylist() اضافه کنید.
    • ‫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 چنددوره‌ای با مدت‌هایی که با محتوای واقعی مطابقت ندارند می‌توانند باعث توقف فریم در پایان مورد شوند (#1698).
    • افزودن تنظیم‌کننده به 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} (#۱۵۶۳) ناموفق شوند.
    • Fix preroll sample handling for non-keyframe media start positions when processing edit lists in MP4 files (#1659).
    • محاسبه نرخ فریم بااستفاده از مدت رسانه از کادر mdhd در Mp4Extractor و FragmentedMp4Extractor بهبود یافت (#۱۵۳۱).
    • مقیاس‌بندی نادرست media_time در فهرست‌های ویرایش MP4 را برطرف کنید. درحالی‌که segment_duration قبلاً به‌درستی بااستفاده از مقیاس زمانی فیلم مقیاس‌بندی شده بود، media_time اکنون به‌درستی بااستفاده از مقیاس زمانی قطعه مقیاس‌بندی شده است، همان‌طور که توسط استاندارد قالب MP4 مشخص شده است (#1792).
    • مدیریت فریم‌های نامرتب در محاسبه endIndices برای MP4 با فهرست ویرایش (#۱۷۹۷).
    • 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 (#۱۶۳۲).
    • Ensure WebVTT in HLS with very large subtitle timestamps (which overflow a 64-bit long when represented as microseconds and multiplied by the 90,000 MPEG timebase) are displayed (#1763).
    • پشتیبانی از زیرنویس‌های CEA-608 در محتوای Dolby Vision (#۱۸۲۰).
    • رفع مشکل توقف پخش در جاری‌سازی‌های چنددوره‌ای 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 شود.
    • رفع اشکالی که در آن جاری‌سازی‌های «درج آگهی پویا» واردشده از سمت سرور بدون پیش‌پخش می‌تواند هنگام پخش بعداز آخرین میان‌پخش منجر به ArrayIndexOutOfBoundsException شود (#1741).
  • جلسه:
    • 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:
    • افزودن پشتیبانی برای دوره‌هایی که در وسط بخش شروع می‌شوند (#۱۴۴۰).
  • افزونه جاری‌سازی روان:
    • رفع خطای Bad magic number for Bundle هنگام پخش جاری‌سازی‌های SmoothStreaming با قطعه‌های نوشتاری (#۱۷۷۹).
  • افزونه RTSP:
    • رفع مشکل برداشتن اطلاعات کاربر برای نشانی‌های وب حاوی نویسه‌های @ کدبندی‌شده (#1138).
    • رفع مشکل ازکار افتادن هنگام تجزیه بسته‌های RTP با افزونه‌های سرصفحه (#1225).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1، و غیره):
    • افزودن پیمانه رمزگشای IAMF که از بازپخش فایل‌های MP4 حاوی قطعه‌های IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی می‌کند.
      • بازپخش با چیدمان استریو و همچنین 5.1 با فضاسازی به‌همراه ردیابی سر اختیاری فعال است، اما پشتیبانی از بازپخش دوگوشی درحال‌حاضر دردسترس نیست.
    • افزودن پشتیبانی از صفحه ۱۶ کیلوبایتی برای افزونه‌های رمزگشا در Android 15 (#1685).
  • افزونه Cast:
    • پاک کردن خط زمان را پس‌از قطع اتصال CastSession متوقف می‌کند، که به برنامه فرستنده امکان می‌دهد بازپخش را پس‌از قطع اتصال به‌صورت محلی ازسر بگیرد.
    • وقتی Context ارائه شد، DeviceInfo CastPlayer را پر کنید. این امکان پیوند دادن MediaSession به RoutingSession را فراهم می‌کند که برای ادغام «تعویض‌کننده خروجی» (#۱۰۵۶) ضروری است.
  • ابزارهای آزمایشی:
    • DataSourceContractTest اکنون شامل آزمون‌هایی برای درستی‌سنجی موارد زیر است:
      • جریان ورودی read position به‌روز شد.
      • میان‌گیر خروجی offset به‌درستی اعمال شده است.
  • برنامه نمایشی
    • نشت حافظه در برنامه کوتاه نمایشی برطرف شد (#۱۸۳۹).
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن 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: رفع خطای Searched too many bytes با نادیده گرفتن صحیح داده‌های غیرMP3 دنباله‌دار براساس فیلد طول در قاب Info (#1480).
  • نوشتار:
    • TTML: رفع مشکل مدیریت مقادیر درصد tts:fontSize برای اطمینان از اینکه به‌درستی از گره‌های والد با مقادیر درصد tts:fontSize به ارث برده می‌شوند.
    • رفع IndexOutOfBoundsException در LegacySubtitleUtil به‌دلیل مدیریت نادرست موردی که زمان شروع خروجی درخواستی بزرگ‌تر یا مساوی زمان رویداد نهایی در Subtitle است (#۱۵۱۶).
  • مدیریت حقوق دیجیتال:
    • رفع خطای android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE در دستگاه‌های دارای میانای برنامه‌سازی کاربردی ۳۱+ که محتوای 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. نیازی به تنظیم این پرچم نیست زیرا پردازنده گرافیکی و رمزگشاها براساس مُهر زمان تصمیم می‌گیرند میان‌گیرها را نادیده بگیرند. پیاده‌سازی‌های سفارشی Renderer باید بررسی کنند که آیا زمان میان‌گیری حداقل BaseRenderer.getLastResetPositionUs() است تا تصمیم بگیرند که آیا نمونه باید نشان داده شود یا نه. پیاده‌سازی‌های سفارشی SimpleDecoder می‌توانند درصورت نیاز isAtLeastOutputStartTimeUs() را بررسی کنند یا میان‌گیرهای دیگر را با DecoderOutputBuffer.shouldBeSkipped علامت‌گذاری کنند تا از آن‌ها رد شوند.
    • اجازه دهید مقدار تهی توسط TargetPreloadStatusControl.getTargetPreloadStatus(T) برگردانده شود تا نشان دهد MediaSource با rankingData داده‌شده پیش‌بارگیری نشود.
    • remove(MediaSource) را به BasePreloadManager اضافه کنید.
    • reset() را به BasePreloadManager اضافه کنید تا همه منابع نگه‌داشته‌شده آزاد شوند و درعین‌حال نمونه مدیر پیش‌بارگیری حفظ شود.
    • ‫ExoPlayer.setPriority() (و Builder.setPriority()) را برای تعریف مقدار اولویت مورداستفاده در PriorityTaskManager و برای اهمیت MediaCodec از میانای برنامه‌سازی کاربردی ۳۵ اضافه کنید.
    • رفع مشکل به‌روزرسانی آخرین زمان میان‌گیر مجدد که منجر به کلید نادرست bs (کمبود میان‌گیر) در CMCD می‌شد (#1124).
    • PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) را اضافه کنید تا نشان دهد منبع تا انتها بار شده است. این کار به DefaultPreloadManager و پیاده‌سازی‌های PreloadMediaSource.PreloadControl سفارشی اجازه می‌دهد منبع بعدی را پیش‌بارگیری کنند یا اقدامات دیگری انجام دهند.
    • رفع اشکالی که در آن رد شدن از سکوت در انتهای موارد می‌تواند باعث ایجاد استثنای بازپخش شود.
    • clear را به PreloadMediaSource اضافه کنید تا دوره پیش‌بارگیری را نادیده بگیرید.
    • افزودن کد خطای جدید PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED که هنگام بازیابی منابع کدک برای تکالیف با اولویت بالاتر استفاده می‌شود.
    • اجازه دهید AdsMediaSource آگهی‌های پیش‌پخش را قبل‌از تکمیل آماده‌سازی رسانه محتوای اولیه بار کند (#۱۳۵۸).
    • رفع اشکالی که در آن بازپخش به STATE_ENDED منتقل می‌شد، هنگام آماده‌سازی مجدد یک جاری‌سازی زنده DASH چنددوره‌ای پس‌از اینکه دوره اصلی قبلاً از مانیفست حذف شده بود.
    • نام onTimelineRefreshed() به onSourcePrepared() و onPrepared() به onTracksSelected() در PreloadMediaSource.PreloadControl تغییر کرد. همچنین IntDefs را در DefaultPreloadManager.Stage به‌طور مقتضی تغییر نام دهید.
    • افزودن پشتیبانی آزمایشی برای زمان‌بندی پویا برای هم‌راستا کردن بهتر کار با چرخه‌های بیدار شدن واحد پردازش مرکزی و به‌تأخیر انداختن بیدار شدن تا زمانی که پردازشگرهای گرافیکی بتوانند پیشرفت کنند. می‌توانید این ویژگی را بااستفاده از experimentalSetDynamicSchedulingEnabled() هنگام راه‌اندازی نمونه ExoPlayer خود فعال کنید.
    • ‫Renderer.getDurationToProgressUs() اضافه کنید. Renderer می‌تواند این روش را پیاده‌سازی کند تا مدت‌زمانی را که بازپخش باید جلو برود تا پردازنده پیشرفت کند به ExoPlayer برگرداند. اگر ExoPlayer با experimentalSetDynamicSchedulingEnabled() تنظیم شده باشد، ExoPlayer این روش را هنگام محاسبه زمان برای زمان‌بندی تکلیف کاری خود فراخوانی می‌کند.
    • MediaCodecAdapter#OnBufferAvailableListener را اضافه کنید تا وقتی میانگیرهای ورودی و خروجی برای استفاده MediaCodecRenderer دردسترس هستند هشدار دهد. MediaCodecRenderer هنگام دریافت این فراخوانی‌های برگشتی به ExoPlayer علامت می‌دهد و اگر ExoPlayer با experimentalSetDynamicSchedulingEnabled() تنظیم شده باشد، ExoPlayer حلقه کاری خود را زمان‌بندی می‌کند زیرا پردازنده گرافیکی می‌تواند پیشرفت کند.
    • از کلاس داده برای روش‌های LoadControl به‌جای پارامترهای فردی استفاده کنید.
    • ExoPlayer.isReleased() را اضافه کنید تا بررسی شود که آیا Exoplayer.release() فراخوانی شده است یا نه.
    • ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() را برای پیکربندی حداکثر موقعیتی که seekToPrevious() به مورد قبلی می‌رود اضافه کنید (#1425).
    • رفع برخی ناهماهنگی‌های تمرکز صوتی، مثلاً گزارش نکردن ازدست رفتن کامل یا موقت تمرکز درحین توقف پخش‌کننده (#۱۴۳۶).
    • رفع IndexOutOfBoundsException احتمالی ناشی از گزارش استخراج‌کننده‌ها درباره قطعه‌های اضافی پس‌از مرحله آماده‌سازی اولیه (#۱۴۷۶).
    • 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). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams(#1150) and H.262 HLS streams (#1126).
    • MP3: Prefer the data size from an Info frame over the size reported by the underlying stream (e.g. file size, or HTTP Content-Length header). این کار به مستثنی کردن داده‌های پیش‌پرده غیرقابل‌پخش (مثلاً طرح آلبوم) از محاسبات جستجوی نرخ بیت ثابت کمک می‌کند و جستجوها را دقیق‌تر می‌کند (#۱۳۷۶).
    • 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.
  • صدا:
    • رفع مشکل ویژگی‌های کدگذاری DTS:X Profile 2 برای بازپخش عبوری (#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 (#۱۵۱۶).
  • فراداده:
    • رفع نگاشت MP4 به برچسب‌های مرتب‌سازی ID3. قبلاً برچسب‌های MP4 «مرتب‌سازی آلبوم» (soal)، «مرتب‌سازی هنرمند» (soar)، و «مرتب‌سازی هنرمند آلبوم» (soaa) به‌اشتباه به برچسب‌های ID3‏ TSO2،‏ TSOA، و TSOP نگاشت می‌شدند (#۱۳۰۲).
    • رفع مشکل خواندن برچسب‌های عددی gnre (ژانر) و tmpo (تمپو) MP4 (/iTunes) وقتی مقدار بیشتر از یک بایت باشد.
    • 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 قبل‌از میانای برنامه‌سازی کاربردی ۲۶.
    • OverlaySettings.useHdr استفاده‌نشده را بردارید زیرا محدوده پویای هم‌پوشانی و قاب باید مطابقت داشته باشد.
    • پشتیبانی HDR برای TextOverlay اضافه شد. درخشندگی نوشتار رونهاد را می‌توان با OverlaySettings.Builder.setHdrLuminanceMultiplier() تنظیم کرد.
  • افزونه IMA:
    • ارتقا دادن میانای برنامه‌سازی کاربردی که برای پخش جاری‌سازی‌های آگهی DAI در برنامه‌ها لازم است به نسخه پایدار.
    • replaceAdTagParameters(Map <String, String>) را به ImaServerSideAdInsertionMediaSource.AdLoader اضافه کنید که امکان جایگزینی پارامترهای برچسب آگهی را در زمان اجرا فراهم می‌کند.
    • رفع اشکالی که در آن VideoAdPlayer.VideoAdPlayerCallback.onError() هنگام رخ دادن خطای پخش‌کننده درطول بازپخش آگهی فراخوانی نمی‌شد (#1334).
    • 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 را منتشر کنید که می‌تواند برای آزمایش تعامل با برنامه‌هایی که جلسه رسانه منتشر می‌کنند استفاده شود.
    • انتشار موارد اضافی منتقل‌شده به MediaSession[Builder].setSessionExtras() media3 به PlaybackStateCompat.getExtras() کنترل‌کننده media1.
    • خطاهای مهلک و غیرمهلک را به جلسه پلاتفرم و از آن نگاشت کنید. ‫PlaybackException به حالت خطای مهلک PlaybackStateCompat نگاشت شده است. ‫SessionError ارسال‌شده به کنترل‌کننده اعلان رسانه با MediaSession.sendError(ControllerInfo, SessionError) به خطای غیرمهلک در PlaybackStateCompat نگاشت می‌شود، یعنی کد خطا و پیام تنظیم شده‌اند اما وضعیت جلسه پلاتفرم با STATE_ERROR متفاوت می‌ماند.
    • اجازه دهید فعالیت جلسه برای هر کنترل‌کننده تنظیم شود تا فعالیت جلسه سراسری لغو شود. فعالیت جلسه را می‌توان برای کنترل‌کننده در زمان اتصال با ایجاد ConnectionResult با AcceptedResultBuilder.setSessionActivivty(PendingIntent) تعریف کرد. پس‌از اتصال، فعالیت جلسه را می‌توان با MediaSession.setSessionActivity(ControllerInfo, PendingIntent) به‌روز کرد.
    • بهبود تکرار خطای تماس‌ها با MediaLibrarySession.Callback. اکنون می‌توان تکرار خطا را بااستفاده از MediaLibrarySession.Builder.setLibraryErrorReplicationMode() برای انتخاب نوع خطا یا انصراف از تکرار خطا که به‌طور پیش‌فرض روشن است پیکربندی کرد.
  • رابط کاربری:
    • افزودن پشتیبانی از نمایش تصویر به 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 می‌شد.
    • رفع اشکالی که در آن فهرست‌های پخش غیر اصلی درحال پخش درطول بازپخش زنده بازآوری نمی‌شوند (#۱۲۴۰).
    • رفع اشکالی که در آن فعال کردن CMCD برای جاری‌سازی‌های زنده HLS باعث ArrayIndexOutOfBoundsException می‌شود (#1395).
  • افزونه DASH:
    • رفع اشکالی که در آن آماده‌سازی مجدد جاری‌سازی زنده چنددوره‌ای می‌تواند IndexOutOfBoundsException را ایجاد کند (#۱۳۲۹).
    • افزودن پشتیبانی برای نشانی‌های وب پروانه dashif:Laurl (#۱۳۴۵).
  • افزونه 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 می‌گیرند.
    • ثابت‌های RendererSupport.FormatSupport IntDef و 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: Revert a change that aimed to ensure 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) می‌شود.
  • صدا:
    • اگر مقداردهی اولیه قطعه صوتی در حالت انتقال بار ناموفق بود، با غیرفعال کردن انتقال بار، بازیابی پردازنده گرافیکی را مجاز کنید.
  • ویدیو:
    • افزودن راهکار موقت برای مشکل دستگاه در 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).
  • مدیریت حقوق دیجیتال:
    • Work around a NoSuchMethodError which can be thrown by the MediaDrm framework instead of ResourceBusyException or NotProvisionedException on some Android 14 devices (#1145).
  • جلوه:
    • نگاشت رنگ‌مایه PQ به SDR با تبدیل فضاهای رنگی بهبود یافته است.
  • جلسه:
    • رفع مشکل پرش موقعیت فعلی به عقب وقتی کنترل‌کننده مورد فعلی را جایگزین می‌کند (#951).
    • رفع مشکلی که در آن MediaMetadata با فقط extras غیرتهی بین کنترل‌کننده‌ها و جلسه‌های رسانه منتقل نمی‌شود (#۱۱۷۶).
  • رابط کاربری:
    • اگر Locale نتواند نام نمایشی را شناسایی کند، به حالت قبلی برمی‌گردد تا نام زبان قطعه صوتی را اضافه کند (#۹۸۸).
  • افزونه DASH:
    • همه عناصر Label را از مانیفست در Format.labels وارد کنید (#۱۰۵۴).
  • افزونه RTSP:
    • رد شدن از مقادیر اطلاعات جلسه خالی (i-tags) در تجزیه پروتکل شرح جلسه (#۱۰۸۷).
  • افزونه‌های رمزگشا (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 ما لازم است.
    • Populate both artworkUri and artworkData in MediaMetadata.Builder.populate(MediaMetadata) when at least one of them is non-null (#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) برای کنترل رفتار تجزیه استفاده کنید.
    • Add support for customising the SubtitleParser.Factory used during extraction. این کار را می‌توان ازطریق MediaSource.Factory.setSubtitleParserFactory() انجام داد.
    • پیشوند منبع به همه فیلدهای Format.id تولیدشده از MergingMediaSource اضافه می‌شود. این کار به شناسایی منبعی که Format (#883) را تولید کرده است کمک می‌کند.
    • Fix the regex used for validating custom Common Media Client Data (CMCD) key names by modifying it to only check for hyphen (#1028).
    • Stop double-encoding CMCD query parameters (#1075).
  • ترانسفورماتور:
    • افزودن پشتیبانی برای مسطح کردن ویدیوهای حرکت آهسته H.265/HEVC SEF.
    • افزایش سرعت تبدیل قالب، به‌ویژه برای ویرایش‌های «برداشتن ویدیو».
    • میانای برنامه‌سازی کاربردی اضافه کنید تا مطمئن شوید فایل خروجی از فریم ویدیو شروع می‌شود. این کار می‌تواند خروجی عملیات برش را با پیاده‌سازی‌های پخش‌کننده‌ای که اولین فریم ویدیو را تا زمان مُهر زمان ارائه آن نشان نمی‌دهند، سازگارتر کند (#۸۲۹).
    • افزودن پشتیبانی برای بهینه‌سازی عملیات برش MP4 تک‌دارایی.
    • افزودن پشتیبانی برای اطمینان از اینکه فریم ویدیو اولین مُهر زمان را در فایل خروجی داشته باشد. فایل‌های خروجی را که با قاب سیاه در پخش‌کننده‌های مبتنی بر iOS شروع می‌شوند اصلاح می‌کند (#۸۲۹).
  • انتخاب قطعه:
    • برای فعال کردن انتخاب قطعه تصویری، DefaultTrackSelector.selectImageTrack را اضافه کنید.
    • TrackSelectionParameters.isPrioritizeImageOverVideoEnabled را اضافه کنید تا تعیین کنید که اگر هم قطعه تصویری و هم قطعه ویدیویی دردسترس باشد، قطعه تصویری انتخاب شود یا نه. مقدار پیش‌فرض false است که یعنی انتخاب قطعه ویدیو در اولویت است.
  • استخراج‌کننده‌ها:
    • افزودن تجزیه AV1C اضافی به استخراج‌کننده MP4 برای بازیابی مقادیر ColorInfo.colorSpace، ColorInfo.colorTransfer، و ColorInfo.colorRange (#۶۹۲).
    • MP3: از جستجوی نرخ بیت ثابت (CBR) برای فایل‌های دارای سرصفحه Info استفاده کنید (معادل CBR سرصفحه Xing). قبلاً از جدول جستجو از سرصفحه Info استفاده می‌کردیم، اما این کار منجر به جستجوی با دقت کمتر می‌شود تا اینکه آن را نادیده بگیریم و فرض کنیم فایل CBR است.
    • MPEG2-TS: افزودن پشتیبانی از DTS،‏ DTS-LBR، و DTS:X Profile2 (#275).
    • استخراج انواع صدا از توصیف‌کننده‌های 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 ارائه می‌شوند.
  • مدیریت حقوق دیجیتال:
    • نمونه‌های رمزگذاری‌نشده «پیش‌نمونه واضح» را در محتوای 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 برای کانال‌های ۳، ۵، ۶، ۷، و ۸ (#۸۳۹۶).
    • رفع مشکل مربوط به انتخاب قطعه پس‌از جستجو تا صفر در جاری‌سازی زنده که به‌اشتباه اجازه می‌داد جاری‌سازی از موقعیت پیش‌فرض خود شروع شود (#۹۳۴۷).
    • رفع مشکل دریافت مقادیر منفی برای bufferedDurationUs از منابع تکه‌ای توسط نمونه‌های جدید CmcdData.Factory که منجر به IllegalArgumentException می‌شد (#۸۸۸).
  • ترانسفورماتور:
    • مشکلی را که در آن کدبند به‌دلیل تنظیم نرخ عملیاتی بالا در زمان پیکربندی خطا می‌داد، برطرف کنید.
  • استخراج‌کننده‌ها:
    • قطعه‌های HEVC ثانویه (غیرقابل‌پخش) در عکس‌های حرکتی JPEG را به‌عنوان ROLE_FLAG_ALTERNATE علامت‌گذاری کنید تا به‌دلیل وضوح بالاترشان به‌طور خودکار برای بازپخش انتخاب نشوند.
    • رفع مشکل تشخیص قاب کلیدی اشتباه برای جاری‌سازی‌های TS H264 (#864).
    • برآورد مدت‌زمان جاری‌سازی‌های TS که طولانی‌تر از ۴۷۷۲۱ ثانیه هستند اصلاح شد (#۸۵۵).
  • صدا:
    • Fix handling of EOS for SilenceSkippingAudioProcessor when called multiple times (#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 اعلان باعث ازکارافتادن برخی‌از دستگاه‌ها می‌شد برطرف شد (#903).
    • رفع مشکل IllegalStateException زمانی که کنترل‌کننده اعلان رسانه اتصال را هنگام درخواست اولین به‌روزرسانی اعلان تکمیل نکرده است (#917).
  • رابط کاربری:
    • مشکلی که باعث می‌شد دکمه‌های جلوبر و عقب‌بر هنگام استفاده با «طراحی مواد» در BottomSheetDialogFragment نمایان نباشند برطرف شد (#۵۱۱).
    • مشکل تراز نبودن اعداد در دکمه جلو بردن سریع PlayerControlView برطرف شد (#۵۴۷).
  • افزونه DASH:
    • تجزیه «f800» به‌عنوان تعداد کانال ۵ برای Dolby در مانیفست DASH (#688).
  • افزونه‌های رمزگشا (FFmpeg،‏ VP9،‏ AV1،‏ MIDI، و غیره):
    • MIDI: رفع مشکل رد شدن رویدادهای «تغییر برنامه» هنگام جستجو به‌جلو (#۷۰۴).
    • انتقال به 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) مجاز شد (#۳۳، #۹۹۷۸).
    • نام MimeTypes.TEXT_EXOPLAYER_CUES به MimeTypes.APPLICATION_MEDIA3_CUES تغییر کرد.
    • PngExtractor را اضافه کنید که کل فایل PNG را به‌عنوان یک نمونه به TrackOutput ارسال و در آن می‌خواند.
    • بهبود روش SequenceableLoader.continueLoading(long) در میانای SequenceableLoader به SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo حاوی پارامترهای اضافی است، ازجمله playbackSpeed و lastRebufferRealtimeMs علاوه‌بر playbackPositionUs موجود.
    • روش ChunkSource.getNextChunk(long, long, List, ChunkHolder) در میانای ChunkSource به ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) بهبود داده شود.
    • افزودن فیلدهای اضافی به ثبت گزارش «داده‌های مشتری رسانه مشترک» (CMCD): کمبود میان‌گیر (bs)، مهلت (dl)، نرخ بازپخش (pr)، و راه‌اندازی (su) (#۸۶۹۹).
    • افزودن عمق بیت لومینانس و کرومینانس به ColorInfo (#۴۹۱).
    • افزودن فیلدهای اضافی به ثبت داده‌های مشتری رسانه مشترک (CMCD): درخواست شیء بعدی (nor) و درخواست محدوده بعدی (nrr) (#8699).
    • افزودن عملکرد برای انتقال داده‌های 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 با ترتیب بایت‌های باارزش ۲۴/۳۲ بیتی در 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 سفارشی استفاده کند.
    • رفع اشکالی که در آن اگر جاری‌سازی صوتی با مُهر زمان منفی شروع می‌شد، فریم اول رندر نمی‌شد (#۲۹۱).
  • نوشتار:
    • برداشتن 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 چنددوره‌ای که اولین مورد در فهرست پخش نیست می‌تواند استثنا ایجاد کند (#۵۷۱).
    • قبل‌از فراخوانی AdsLoader.destroy()، StreamManager را منتشر کنید
    • Bump IMA SDK version to 3.31.0.
  • جلسه:
    • تنظیم رفتار سرویس پیش‌زمینه‌ای اعلان‌ها روی FOREGROUND_SERVICE_IMMEDIATE در DefaultMediaNotificationProvider (#۱۶۷).
    • فقط از android.media.session.MediaSession.setMediaButtonBroadcastReceiver() بالاتر از API 31 استفاده کنید تا با مشکل API منسوخ‌شده در دستگاه‌های 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 نمایش داده نشود (#۳۳۹).
    • به‌جای SimpleBitmapLoader، به‌طور پیش‌فرض از DataSourceBitmapLoader استفاده کنید (#۲۷۱، #۳۲۷).
    • 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:
    • رفع شرایط رقابتی که ممکن بود هنگام بازگشت به TCP منجر به IndexOutOfBoundsException شود، یا بازپخش در برخی شرایط متوقف شود.
    • Check state in RTSP setup when returning loading state of RtspMediaPeriod (#577).
    • نادیده گرفتن روش‌های درخواست Rtsp سفارشی در سرایند عمومی پاسخ «گزینه‌ها» (#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 view پیش می‌رود.
  • برداشتن نمادهای منسوخ‌شده:
    • برداشتن 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

‫۱۷ اوت ۲۰۲۳

از نسخه پایدار ۱.۲.۰ استفاده کنید.

نسخه ۱.۱.۰

نسخه ۱.۱.۱

‫۱۶ اوت ۲۰۲۳

  • کتابخانه مشترک:
    • برداشتن وابستگی multidex که به‌طور تصادفی به همه ماژول‌ها اضافه شده بود (#۴۹۹).
  • ExoPlayer:
    • رفع مشکل در PlaybackStatsListener که در آن PlaybackStats جعلی پس‌از پاک شدن فهرست پخش ایجاد می‌شود.
    • افزودن فیلدهای اضافی به ثبت Common Media Client Data (CMCD): قالب جاری‌سازی (sf)، نوع جاری‌سازی (st)، نسخه (v)، بالاترین نرخ بیت (tb)، مدت شیء (d)، توان عملیاتی اندازه‌گیری‌شده (mtp)، و نوع شیء (ot) (#۸۶۹۹).
  • صدا:
    • اشکالی که باعث می‌شد Player.getState() هنگام پخش فایل‌های بسیار کوتاه هرگز به STATE_ENDED منتقل نشود برطرف شد (#۵۳۸).
  • انتقال صدا:
    • Prepend Ogg ID Header and Comment Header Pages to bitstream for offloaded Opus playback in accordance with 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: رفع اشکال هنگام جستجو در فایل‌های با مدت طولانی (#391).
    • FMP4: رفع مشکل مقداردهی اولیه مُهر زمان اشتباه توسط TimestampAdjuster با زمان نمونه فراداده از اتم emsg (#356).
  • صدا:
    • رفع اشکالی که در آن برخی‌از بازپخش‌ها هنگام فعال بودن تونل‌سازی و AudioProcessors ناموفق بودند، مثلاً برای برش بدون وقفه (#10847).
    • قاب‌های Opus در بسته‌های Ogg در بازپخش‌های مستقیم (برون‌سپاری) کپسوله شوند.
    • برون‌یابی موقعیت فعلی درطول خواب با زمان‌بندی بارگذاری.
    • برای آزاد کردن منابع در پایان چرخه حیات پخش‌کننده، Renderer.release() و AudioSink.release() را اضافه کنید.
    • به تغییرات قابلیت‌های صوتی در DefaultAudioSink گوش کنید. پارامتر الزامی context را در سازنده DefaultAudioSink اضافه کنید، که با آن DefaultAudioSink به‌عنوان شنونده در AudioCapabilitiesReceiver ثبت می‌شود و ویژگی audioCapabilities خود را هنگام اطلاع از تغییر قابلیت‌ها به‌روز می‌کند.
    • انتشار تغییرات قابلیت‌های صوتی ازطریق رویداد جدید onAudioCapabilitiesChanged در میانای AudioSink.Listener، و میانای جدید RendererCapabilities.Listener که رویدادهای onRendererCapabilitiesChanged را راه‌اندازی می‌کند.
    • ChannelMixingAudioProcessor را برای اعمال مقیاس‌بندی/ترکیب به کانال‌های صوتی اضافه کنید.
    • مقدار عدد صحیح جدید DISCARD_REASON_AUDIO_BYPASS_POSSIBLE را به DecoderDiscardReasons اضافه کنید تا وقتی حالت کنارگذر پس‌از تغییر قابلیت‌های صوتی امکان‌پذیر است، رمزگشای صوتی کنار گذاشته شود.
    • افزودن پشتیبانی از بازپخش مستقیم برای DTS Express و DTS:X (#335).
  • ویدیو:
    • MediaCodecVideoRenderer را وادار کنید تا وقتی پردازنده غیرفعال است، VideoSize را با عرض و ارتفاع ۰ گزارش کند. 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:
    • کتابخانه جدیدی برای ترکیب‌کننده اضافه کنید که بتوان از آن برای ایجاد فایل محفظه MP4 استفاده کرد.
  • افزونه IMA:
    • جاری‌سازی‌های DASH زنده چنددوره‌ای را برای DAI فعال کنید. لطفاً توجه داشته باشید که پیاده‌سازی فعلی هنوز از جستجو در جاری‌سازی‌های زنده پشتیبانی نمی‌کند (#10912).
    • رفع اشکالی که در آن یک گروه آگهی جدید در جاری‌سازی‌های زنده درج می‌شود زیرا موقعیت محتوای محاسبه‌شده در خطوط زمانی متوالی کمی متفاوت است.
  • جلسه:
    • روش کمکی MediaSession.getControllerForCurrentRequest را برای دریافت اطلاعات درباره کنترل‌کننده‌ای که درحال‌حاضر روش Player را فراخوانی می‌کند اضافه کنید.
    • ‫androidx.media3.session.MediaButtonReceiver را اضافه کنید تا برنامه‌ها بتوانند ازسرگیری بازپخش را با رویدادهای دکمه رسانه که مثلاً توسط هدست بلوتوث ارسال می‌شود پیاده‌سازی کنند (#۱۶۷).
    • افزودن پیاده‌سازی پیش‌فرض به MediaSession.Callback.onAddMediaItems برای اجازه دادن به MediaItems درخواست‌شده برای انتقال به Player درصورت داشتن LocalConfiguration (مثلاً URI) (#282).
    • Add "seek to previous" and "seek to next" command buttons on compact media notification view by default for Android 12 and below (#410).
    • افزودن پیاده‌سازی پیش‌فرض به MediaSession.Callback.onAddMediaItems برای اجازه دادن به MediaItems درخواست‌شده برای انتقال به Player درصورت داشتن LocalConfiguration (مثلاً URI) (#282).
    • Add "seek to previous" and "seek to next" command buttons on compact media notification view by default for Android 12 and below (#410).
  • رابط کاربری:
    • روش‌های Util shouldShowPlayButton و handlePlayPauseButtonAction را برای نوشتن عناصر میانای کاربر سفارشی با دکمه پخش/مکث اضافه کنید.
  • افزونه RTSP:
    • برای MPEG4-LATM، اگر مقدار profile-level-id در پیام SDP پاسخ Describe وجود ندارد، از مقدار پیش‌فرض آن استفاده کنید (#302).
    • Use base Uri for relative path resolution from the RTSP session if present in DESCRIBE response header (#11160).
  • افزونه DASH:
    • برای جاری‌سازی‌های DASH چنددوره‌ای، جابه‌جایی زمانی رسانه را از MediaLoadData.startTimeMs و MediaLoadData.endTimeMs بردارید.
    • رفع اشکالی که در آن آماده‌سازی مجدد منبع رسانه 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 در API 30 می‌شد (#۳۵۵).
    • رفع نشت حافظه 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 می‌شود (#۳۱۸).
    • رفع مشکلی که در آن گیرنده دکمه رسانه توسط کتابخانه اعلام می‌شد بدون اینکه برنامه چنین قصدی داشته باشد (#۳۱۴).
  • 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 حفظ شود، حتی اگر رمزگشایی گزارش دهد که ممکن است نتواند رسانه را به‌طور کارآمد پخش کند. برای مثال، با انتخابگر پیش‌فرض، رمزگشای سخت‌افزاری که فقط پشتیبانی عملکردی دارد بر رمزگشای نرم‌افزاری که به‌طور کامل از قالب پشتیبانی می‌کند ترجیح داده می‌شود (#۱۰۶۰۴).
    • ExoPlayer.Builder.setPlaybackLooper را اضافه کنید که رشته بازپخش ازپیش موجودی را برای نمونه ExoPlayer جدید تنظیم می‌کند.
    • به کمک‌کننده‌های مدیریت بارگیری اجازه داده می‌شود پاک شوند (#۱۰۷۷۶).
    • پارامتر را به BasePlayer.seekTo اضافه کنید تا فرمان استفاده‌شده برای جستجو را نیز نشان دهد.
    • استفاده از زمینه هنگام بار کردن drawable در API 21+‎ (#220).
    • ‫ConcatenatingMediaSource2 را اضافه کنید که امکان ترکیب کردن چند فایل رسانه‌ای را در یک پنجره فراهم می‌کند (#247).
  • استخراج‌کننده‌ها:
    • اگر جدول نمونه (stbl) هنگام تجزیه اتم‌های trak فاقد شرح نمونه (stsd) الزامی است، به‌جای NullPointerException، ParserException را برگردانید.
    • 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 برای پخش‌کننده‌های سفارشی اضافه کنید.
    • Add helper method to convert platform session token to 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 حاوی این commitها است.

این نسخه با نسخه 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 را اعمال کنید (#10684).
    • از انتشار بلوک هنگام گنجانده شدن در ساخت 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 اضافه می‌کند. (#134).
    • 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 هنگام جابه‌جایی بین طرح‌های DRM در فهرست پخش (مثلاً Widevine به ClearKey).
  • نوشتار:
    • CEA-608: Ensure service switch commands on field 2 are handled correctly (#10666).
  • DASH:
    • تجزیه EventStream.presentationTimeOffset از مانیفست‌ها (#۱۰۴۶۰).
  • رابط کاربری:
    • از لغوهای فعلی پخش‌کننده به‌عنوان پیش‌تنظیم در TrackSelectionDialogBuilder (#10429) استفاده کنید.
  • جلسه:
    • مطمئن شوید که فرمان‌ها همیشه به ترتیب درست اجرا می‌شوند، حتی اگر برخی از آن‌ها به وضوح ناهمگام نیاز داشته باشند (#85).
    • برای ساختن DefaultMediaNotificationProvider نمونه، DefaultMediaNotificationProvider.Builder اضافه کنید. سازنده می‌تواند شناسه اعلان، شناسه کانال اعلان، و نام کانال اعلان مورداستفاده ارائه‌دهنده را پیکربندی کند. همچنین، روش DefaultMediaNotificationProvider.setSmallIcon(int) را برای تنظیم نماد کوچک اعلان‌ها اضافه کنید. (#104).
    • Ensure commands sent before MediaController.release() are not dropped (#99).
    • ‫SimpleBitmapLoader می‌تواند بیت‌مپ را از URIهای file:// بار کند (#۱۰۸).
    • Fix assertion that prevents MediaController to seek over an ad in a period (#122).
    • وقتی بازپخش تمام می‌شود، MediaSessionService از پیش‌زمینه متوقف می‌شود و اعلانی برای بازراه‌اندازی بازپخش آخرین فایل رسانه‌ای پخش‌شده نشان داده می‌شود (#112).
    • سرویس پیش‌زمینه‌ای را با قصد معوق برای مکث شروع نکنید (#۱۶۷).
    • پنهان کردن دستی «نشان» مرتبط با اعلان ایجادشده توسط DefaultNotificationProvider در میانای برنامه‌سازی کاربردی ۲۶ و میانای برنامه‌سازی کاربردی ۲۷ (نشان به‌طور خودکار در میانای برنامه‌سازی کاربردی ۲۸ و بالاتر پنهان می‌شود) (#۱۳۱).
    • رفع اشکالی که در آن اتصال دومین binder از MediaSession قدیمی به Media3 MediaController باعث ایجاد IllegalStateExceptions می‌شود (#۴۹).
  • RTSP:
    • افزودن مدیریت بسته تکه‌تکه‌شده H263 (#119).
    • افزودن پشتیبانی از MP4A-LATM (#162).
  • IMA:
    • افزودن مهلت زمانی برای بار کردن اطلاعات آگهی برای رسیدگی به مواردی که کیت توسعه نرم‌افزار IMA در بار کردن آگهی گیر می‌کند (#10510).
    • جلوگیری از رد کردن آگهی‌های میان‌ویدیویی هنگام رفتن به انتهای محتوا (#10685).
    • محاسبه صحیح مدت پنجره برای جاری‌سازی‌های زنده با آگهی‌های درج‌شده در سمت سرور، برای مثال IMA DAI (#۱۰۷۶۴).
  • افزونه 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 حاوی این commit-ها است.

این نسخه با نسخه ExoPlayer 2.18.1 مطابقت دارد.

  • کتابخانه اصلی:
    • مطمئن شوید که تغییر دادن ShuffleOrder با ExoPlayer.setShuffleOrder منجر به تماس با Player.Listener#onTimelineChanged با reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#۹۸۸۹) می‌شود.
    • برای رسانه‌های پیش‌رونده، فقط قطعه‌های انتخاب‌شده را در موقعیت میان‌گیری‌شده اضافه کنید (#۱۰۳۶۱).
    • اجازه دادن به ثبت‌کننده سفارشی برای همه خروجی‌های گزارش ExoPlayer (#9752).
    • پیاده‌سازی setDataSourceFactory در DefaultMediaSourceFactory که در برخی موارد کار نمی‌کرد اصلاح شد (#۱۱۶).
  • استخراج‌کننده‌ها:
    • رفع مشکل تجزیه مجموعه‌های تصویر مرجع کوتاه‌مدت H265 (#10316).
    • Fix parsing of bitrates from esds boxes (#10381).
  • DASH:
    • تجزیه نشانی وب پروانه ClearKey از مانیفست‌ها (#10246).
  • رابط کاربری:
    • Ensure TalkBack announces the currently active speed option in the playback controls menu (#10298).
  • 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 شامل این commit-ها است.

این با نسخه ExoPlayer 2.18.0 مطابقت دارد.

  • کتابخانه اصلی:
    • فعال کردن پشتیبانی از عیب‌یابی پلاتفرم Android ازطریق MediaMetricsManager. ExoPlayer رویدادهای بازپخش و داده‌های عملکرد را به پلاتفرم ارسال می‌کند، که به ارائه اطلاعات اشکال‌زدایی و عملکرد سیستم در دستگاه کمک می‌کند. اگر کاربر دستگاه هم‌رسانی داده‌های استفاده و عیب‌یابی را فعال کرده باشد، ممکن است Google نیز این داده‌ها را جمع‌آوری کند. برنامه‌ها می‌توانند با ExoPlayer.Builder.setUsePlatformDiagnostics(false) از مشارکت در عیب‌یابی پلاتفرم برای ExoPlayer انصراف دهند.
    • رفع اشکالی که باعث می‌شد هنگام استفاده از MergingMediaSource، قطعه‌ها بیش‌ازحد بازنشانی شوند، برای مثال هنگام بارگذاری جانبی زیرنویس‌ها و تغییر زیرنویس انتخاب‌شده در اواسط بازپخش (#10248).
    • شناسایی نوع شبکه 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 29+) یا فرض کردن تعداد کانال کدبندی صدا برای گذر صدا وقتی تعداد کانال صدای قالب تنظیم نشده باشد، که با آماده‌سازی بدون تکه HLS رخ می‌دهد (۱۰۲۰۴).
    • اگر رمزگشا صدای PCM با ۱۲ کانال را خروجی می‌دهد، AudioTrack را با ماسک کانال AudioFormat.CHANNEL_OUT_7POINT1POINT4 پیکربندی کنید (#۱۰۳۲۲.
  • مدیریت حقوق دیجیتال
    • مطمئن شوید که جلسه 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 برمی‌دارد. این یک تغییر ناسازگار است.
    • Don't show forced text tracks in the PlayerView track selector, and keep a suitable forced text track selected if "None" is selected (#9432).
  • DASH:
    • Parse channel count from DTS AudioChannelConfiguration elements. این گذرگاه صوتی را برای جاری‌سازی‌های 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 (#۵۶).
    • رفع مشکل سرایند مجوز پایه RTSP. (#9544).
    • بررسی فیلدهای اجباری SDP متوقف شد زیرا ExoPlayer به آن‌ها نیاز ندارد (#10049).
    • Throw checked exception when parsing RTSP timing (#10165).
    • افزودن خواننده RTP برای VP9 (#47).
    • افزودن خواننده RTP برای OPUS (#53).
  • منابع داده‌ها:
    • نام DummyDataSource را به PlaceholderDataSource تغییر دهید.
    • مدیریت وقفه OkHttp راه‌حل جایگزین.
  • جلسه:
    • MediaSession.MediaItemFiller را با MediaSession.Callback.onAddMediaItems جایگزین کنید تا وضوح ناهمگام درخواست‌ها مجاز شود.
    • پشتیبانی از روش‌های setMediaItems(s) وقتی MediaController به جلسه رسانه قدیمی متصل می‌شود.
    • برداشتن MediaController.setMediaUri و MediaSession.Callback.onSetMediaUri. بااستفاده از MediaController.setMediaItem و MediaSession.Callback.onAddMediaItems می‌توان به همان عملکرد دست یافت.
    • بازارسال تماس‌های قدیمی MediaController برای پخش رسانه به MediaSession.Callback.onAddMediaItems به‌جای onSetMediaUri.
    • MediaNotification.Provider و DefaultMediaNotificationProvider را اضافه کنید تا سفارشی‌سازی اعلان را ارائه دهید.
    • ‫BitmapLoader و SimpleBitmapLoader را برای بارگیری تصاویر آثار هنری اضافه کنید.
    • MediaSession.setCustomLayout() را اضافه کنید تا سازگاری با نسخه قدیمی با جلسه قدیمی ارائه شود.
    • MediaSession.setSessionExtras() را اضافه کنید تا برابری ویژگی با جلسه قدیمی ارائه شود.
    • نام MediaSession.MediaSessionCallback به MediaSession.Callback، MediaLibrarySession.MediaLibrarySessionCallback به MediaLibrarySession.Callback، و MediaSession.Builder.setSessionCallback به setCallback تغییر کرد.
    • رفع NPE در MediaControllerImplLegacy (#59).
    • Update session position info on timeline change(#51).
    • رفع NPE در MediaControllerImplBase پس‌از انتشار کنترل‌کننده (#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 نسخه ۰ و نسخه ۱ خروجی داده شود (#۹۹۹۶).
  • نوشتار:
    • تعامل SingleSampleMediaSource.Factory.setTrackId و MediaItem.SubtitleConfiguration.Builder.setId را اصلاح کنید تا فیلد SubtitleConfiguration اولویت‌بندی شود و اگر تنظیم نشده بود، به مقدار Factory برگردد (#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 (#۸۳۵۳).
    • غیرفعال کردن تنظیم خودکار سرعت برای جاری‌سازی‌های زنده که نه ویژگی‌های تأخیر کم دارند و نه تنظیم سرعت درخواست کاربر (#9329).
    • نام DecoderCounters#inputBufferCount را به queuedInputBufferCount تغییر دهید.
    • ‫SimpleExoPlayer.renderers را خصوصی کنید. ازطریق ExoPlayer.getRenderer می‌توان به پردازنده دسترسی پیدا کرد.
    • برخی‌از مقادیر ثابت AnalyticsListener.EventFlags برای مطابقت با مقادیر Player.EventFlags به‌روزرسانی شد.
    • ‫AnalyticsCollector را به یک میانای و پیاده‌سازی پیش‌فرض تقسیم کنید تا اگر برنامه‌ای به آن نیاز نداشت، R8 بتواند آن را حذف کند.
  • انتخاب قطعه:
    • پشتیبانی از پرچم‌های نقش ویدیو ترجیحی در انتخاب قطعه (#۹۴۰۲).
    • Update video track selection logic to take preferred MIME types and role flags into account when selecting multiple video tracks for adaptation (#9519).
    • منطق انتخاب قطعه ویدیویی و صوتی به‌روزرسانی شد تا فقط قالب‌هایی برای انتخاب‌های تطبیقی انتخاب شوند که سطح یکسانی از پشتیبانی سخت‌افزاری و رمزگشا دارند (#۹۵۶۵).
    • منطق انتخاب قطعه ویدیو به‌روزرسانی شد تا اگر چند کدک توسط رمزگشاهای اصلی با شتاب سخت‌افزاری پشتیبانی می‌شود، کدک‌های کارآمدتر ترجیح داده شود (#۴۸۳۵).
    • اولویت‌های محتوای صوتی (برای مثال، قطعه صوتی «پیش‌فرض» یا قطعه‌ای که با زبان محلی سیستم مطابقت دارد) را بر محدودیت‌های انتخاب قطعه فنی (برای مثال، نوع MIME ترجیحی یا حداکثر تعداد کانال) ترجیح دهید.
    • Fix track selection issue where overriding one track group did not disable other track groups of the same type (#9675).
    • مشکل انتخاب قطعه که در آن ترکیبی از لغوهای قطعه خالی و غیرخالی به‌درستی اعمال نمی‌شود برطرف شد (#۹۶۴۹).
    • ‫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).
    • رفع مشکل تجزیه نادرست واحدهای H.265 SPS NAL (#۹۷۱۹).
    • تجزیه کردن نظرات 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).
    • رشته‌های سرعت بازپخش را به‌درستی ترجمه کنید (#9811).
  • DASH:
    • افزودن ویژگی‌های ضروری و تکمیلی تجزیه‌شده به Representation (#9579).
    • پشتیبانی از نقش قطعه forced-subtitle (#9727).
    • تفسیر نقش قطعه main به‌عنوان C.SELECTION_FLAG_DEFAULT متوقف شود.
    • منطق مستثنا کردن نشانی وب پایه برای مانیفست‌هایی که فضای نام DVB را اعلام نمی‌کنند اصلاح شد (#9856).
    • پشتیبانی از نشانی‌های وب نسبی MPD.Location (#۹۹۳۹).
  • 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 هنگام انتشار muxer throws.
    • برنامه نمایشی برای اعمال تبدیل‌ها اضافه کنید.
  • افزونه MediaSession:
    • به‌طور پیش‌فرض، MediaSessionConnector اکنون فهرست پخش را هنگام توقف پاک می‌کند. برنامه‌هایی که می‌خواهند فهرست پخش حفظ شود می‌توانند setClearMediaItemsOnStop(false) را در اتصال‌دهنده فراخوانی کنند.
  • افزونه Cast:
    • رفع اشکالی که مانع از فراخوانی صحیح onIsPlayingChanged توسط CastPlayer می‌شد (#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 جایگزین شده‌اند. این کار ادغام مستقیم بین پخش‌کننده‌ها و جلسه‌های رسانه را بدون نیاز به استفاده از کلاس آداپتور/رابط فراهم می‌کند.