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 در نگاشتهای رنگ ISOMediaFormatUtilوColorInfoپشتیبانی کنید.- افزودن یک دفتر ثبت مرکزی
Flagsبرای مدیریت پرچمهای ویژگی آزمایشی و عرضه گامبهگام (Flags.setCanaryModeEnabled). انتقال بسیاری از روشهای موجود@ExperimentalApiبرای استفاده از میانای برنامهسازی کاربردی پرچمهای جدید. -
MediaMetadata.playlistId،MediaMetadata.Builder.setPlaylistId(String)،MediaMetadata.categories، وMediaMetadata.Builder.setCategories(List<String>)را اضافه کنید. androidx.media3.common.util.NonNullApiرا با JSpecifyorg.jspecify.annotations.NullMarkedجایگزین کنید.
- ExoPlayer:
- رفع مشکلی که در آن بازپخش چنددورهای DASH وقتی اولین بخش دوره بعدی بار نمیشود گیر میکند (#۳۳۹۶).
- گزارش
wasCanceled = trueدرAnalyticsListener.onLoadErrorوMediaSourceEventListener.onLoadErrorوقتی تلاشهای مجدد بارگیری تمام شده است. - پشتیبانی از ثبت چندین نمونه
VideoFrameMetadataListenerبااستفاده ازExoPlayer.addVideoFrameMetadataListenerوExoPlayer.removeVideoFrameMetadataListener، منسوخ کردنExoPlayer.setVideoFrameMetadataListenerوExoPlayer.clearVideoFrameMetadataListener. - با تقسیم و جبران
AdPlaybackStateبرای هر دوره، پشتیبانی از آگهیها را در محتوای چنددورهای (مثلاً DASH) اضافه کنید. - رفع شرایط رقابتی در
PreCacheHelperکه در آن لغو درخواست آمادهسازی درحال انجام همچنان میتوانست بارگیریهای پسزمینه را شروع کند. setLoadOnlySelectedTracks(true)را درProgressiveMediaSourceوDefaultMediaSourceFactoryمحدود کنید تا فقط قطعههای ویدیو و تصویر انتخابنشده را فیلتر کند. قطعههای صوتی و نوشتاری همیشه بار میشوند تا امکان تعویض یکپارچه قطعه بدون میانگیری مجدد فراهم شود.setLoadOnlySelectedTracks(true)را بهطور پیشفرض درProgressiveMediaSourceوDefaultMediaSourceFactoryفعال کنید. این کار باعث صرفهجویی در حافظه میشود و به محاسبات تخصیص میانگیرDefaultLoadControlاجازه میدهد تا زمانی که همه قطعهها انتخاب نشدهاند، دقیقتر کار کنند. توجه داشته باشید که اگر قطعههای ویدیو یا تصویر انتخابنشده در اواسط بازپخش بهتازگی فعال شده باشند، این کار ممکن است باعث میانگیری بیشتر شود.- رفع مشکلی که در آن
Player.getCurrentPosition()میتوانست مقادیر قدیمی را برگرداند (فقط چند بار در ثانیه بهروزرسانی میشد) وقتی زمانبندی پویا فعال بود (#۳۲۸۶). - رفع مشکلی که در آن کاهش یا بازنشانی غیرمنتظره در موقعیت سر بازپخش
AudioTrackممکن است بهاشتباه بهعنوان سرریز عدد صحیح تلقی شود و باعث توقف بازپخش در میانگیری شود (#3407). - برداشتن آزمایشی
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - از فعال کردن مجدد غیرضروری پردازنده و اشکالات هنگام بازگشت از آگهیهای بینابینی یا آگهیها به محتوای بریدهشده در پایان جلوگیری میکند (#۳۳۷۱).
- رفع مشکلی که در آن خطای پردازنده در مورد آتی فهرست پخش میتوانست
بازپخش فعلی را زودتر از موعد قطع کند، وقتی
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONفعال است. - رفع
NullPointerExceptionکه ممکن است هنگام فعال بودن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وقتی جعبه نسخه ۱tfdtbaseMediaDecodeTimeمنفی را کدبندی میکند (#۳۴۱۲). - 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
MediaCodecMP3 decoders (#3425). - Matroska: رفع
NullPointerExceptionهنگام تجزیه عناصرChapterAtomتودرتو (#3438). - Ogg: رفع اشکالی که در آن بستهای که اندازه آن مضربی از ۲۵۵ بایت است و در مرز صفحه بهپایان میرسد با بسته بعدی ادغام میشود.
- MP4: تجزیه قطعههای فراداده زمانبندیشده جعبهای
mebxدرMp4ExtractorوFragmentedMp4Extractor. قطعههای دارای کلیدit35بهعنوانMimeTypes.APPLICATION_ITUT_T35(فعال کردن بازپخش HAGC) نمایش داده میشوند. سایر قطعههایmebxنادیده گرفته میشوند، مگراینکهFLAG_EMIT_RAW_MEBX_DATAتنظیم شده باشد که دراینصورت همه قطعههایmebxبهصورتMimeTypes.APPLICATION_MEBXخام منتشر میشوند. - Ogg: پشتیبانی از استخراج Opus end-padding برای بازپخش بدون وقفه (#2576)، و اصلاح مُهرهای زمان نمونه پساز جستجو برای صفحهای که با بسته ادامهدار شروع میشود.
- Ogg: رفع خطاهای رمزگشایی و پرشهای مُهر زمان حدود ۱ ثانیهای در جریانهای زنجیرهای Ogg Opus با نادیده گرفتن بستههای سرایند شناسه و نظر Opus در میان جریان.
- Mp4Extractor: رفع مشکل تجزیه جعبه
- بازرس:
- پشتیبانی از بازیابی فراداده XMP از فایلهای MP4 بااستفاده از
MetadataRetriever. - پشتیبانی از استخراج قطعههای فراداده زمانبندیشده جعبهای
mebxدرMediaExtractorCompatبهعنوانMimeTypes.APPLICATION_MEBX.
- پشتیبانی از بازیابی فراداده XMP از فایلهای MP4 بااستفاده از
- قاب بازرس:
- رفع برش رنگهای BT.2020 با گستره وسیع در تصویر پایه SDR هنگام
استخراج فریمهای Ultra HDR با
FrameExtractor. رنگهای خارج از گستره رنگی اکنون بهجای اینکه محدود شوند، بهآرامی در گستره رنگی sRGB فشرده میشوند.
- رفع برش رنگهای BT.2020 با گستره وسیع در تصویر پایه SDR هنگام
استخراج فریمهای Ultra HDR با
- صدا:
- افزودن راهحل برای دستگاههایی که
android.media.AudioDeviceCallbackرا در رشته اشتباه فراخوانی میکنند (#۳۳۸۶). - رفع مشکل گیر کردن احتمالی بازپخشها پساز انتقال قطعه با بارگذاری فشرده.
- رفع مشکلی در 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 inFragmentedMp4ExtractorusingFLAG_READ_MFRA_FOR_SEEK_MAP. - رفع خرابی در
Mp4WriterوFragmentedMp4Writerهنگام نوشتن نمونه EOS قبلاز نوشتن هر نمونه دیگری. - Fix container compliance when muxing Dolby content into MP4 or
Fragmented MP4 files by advertising the
dby1compatible brand in the container header (#3369). - پشتیبانی از قطعههای صوتی PCM ممیز شناور ۳۲ بیتی در
Mp4MuxerوFragmentedMp4Muxer(#۳۳۸۹). - رد کردن نمایههای Dolby Vision پشتیبانینشده در
Mp4MuxerوFragmentedMp4Muxerهنگام افزودن قطعه. - از قطعههای صوتی PCM عدد صحیح ۲۴ بیتی و ۳۲ بیتی در
Mp4MuxerوFragmentedMp4Muxerپشتیبانی میکند.
- نوشتن جعبه
- افزونه IMA:
- رویدادهای توقف موقت و ازسرگیری پخشکننده را به IMA SDK در
ImaServerSideAdInsertionMediaSourceبازارسال کنید.
- رویدادهای توقف موقت و ازسرگیری پخشکننده را به IMA SDK در
- جلسه:
MediaConstants.EXTRAS_KEY_PLAYLIST_ID،MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE،MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI، وMediaConstants.EXTRAS_KEY_CATEGORIESرا اضافه کنید تا فراداده فهرست پخش و مورد را از فراداده و توضیحات قدیمی پر کنید، وMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEوMediaConstants.EXTRAS_KEY_TTL_SECONDSرا برای پیشنهادLibraryParams.extrasاضافه کنید.- رفع خرابی
SecurityExceptionهنگام ایجاد یا انتشارMediaSessionدر دستگاههایی که محدودیتهای سختگیرانهPendingIntentرا اعمال میکنند. - رفع مشکلی که در آن
MediaSession.getControllerForCurrentRequest()nullرا درطول درخواستهای پخش در Android 12 (میانای برنامهسازی کاربردی ۳۱ و ۳۲) برمیگرداند، وقتیMediaSessionServiceهنوز در پیشزمینه نبود. - رفع خرابی
IllegalArgumentExceptionوقتیMediaControllerبه جلسه قدیمیای متصل میشود که حداکثر میزان صدای منفی را گزارش میکند. - مشکلی برطرف شد که در آن، فراخوانی
MediaController.setMediaItemیاsetMediaItemsو بهدنبال آنplay()درMediaSessionCompatقدیمی موقتاً متوقفشده میتوانست بهجایonPlayFrom*، یک فراخوانی برگشتیonPrepareFrom*پشتیبانینشده ارسال کند، یاonPlay()را بدون راهاندازی مجدد فایل رسانهای درخواستشده ارسال کند. - رفع
NullPointerExceptionدرMediaBrowserقدیمی هنگام دریافت پاسخ فرمان سفارشی (#3432). - رفع خرابی
IllegalArgumentExceptionهنگام دریافت فراداده قدیمی با کلیدهای تکراری درBundleزیرین آن. - Coalesce outgoing
MediaControllerCompat.TransportControlscalls made within the sameLooperiteration when controlling a legacyMediaSessionCompat(for example, callingsetMediaItem,prepare, andplaytogether now dispatches a singleonPlayFrom*callback).
- رابط کاربری:
- رفع مشکل موقعیت علائم نگارشی زیرنویس راست به چپ و حفظ محدوده گستره هنگام فعال بودن شکست نوشتار دوجهته (#3454، #3455).
- کلاسهای
TrackSelectionStateوTrackSelectionParametersStateو توابع یادآوری وضعیت Composable مربوطه را به واحدmedia3-ui-composeاضافه کنید. PresentationState.videoAspectRatioرا معرفی کنید وModifier.resizeWithContentScaleرا بهجایsourceSizeDp: Size?بهaspectRatio: Float?تبدیل کنید.- کلاس
CuesStateو ComposablerememberCuesStateرا بهmedia3-ui-composeماژول اضافه کنید تا به نشانههای فعلی پخشکننده گوش دهید. - اگر
ProgressSliderبراساسExoPlayerیاCompositionPlayerاست، پشتیبانی از حالت پیمایش سریع را به آن اضافه کنید. - پشتیبانی
showArtworkرا بهPresentationStateاضافه کنید و از آن برای زمانبندی پرداختartworkComposable اختیاری ارائهشده درContentFrameوPlayerاستفاده کنید.ArtworkComposable را اضافه کنید تا بهعنوان مقدار پیشفرض برای شکافartworkاستفاده شود. - فیلدهای جدیدی به
PlayPauseButtonState(showBuffering،showRetry،showReplay) اضافه کنید و از آنها درPlayPauseButtonبرای ارائه نمادهای بیشتر و نشانگر میانگیری استفاده کنید. - کلاس
PlaybackStateرا برای امکانپذیر کردن مشاهده وضعیت بازپخش سفارشی اضافه کنید، وBufferingIndicatorرا بهعنوان مؤلفه مستقل از دکمه معرفی کنید. - برطرف کردن مشکلی که در آن
PlayerViewوPlayerControlViewنشانگرهای آگهی را در مرزهای دوره برای جایبانهای پسآگهی زنده در جاریسازیهای زنده چنددورهای نشان میدادند. - جایگاههای قابلترکیب
Player،ContentFrame،PlayerDefaults، وMiniControllerدیگر پخشکننده یا نمایان بودن کنترلها را بهعنوان پارامتر دریافت نمیکنند. درعوض، آنها را از محدوده فراخوانی ضبط کنید (برای مثال،topControlsاکنون@Composable BoxScope.() -> Unitاست). این یک تغییر مخرب در میانای برنامهسازی کاربردی ناپایدار است. - پارامتر
alignmentرا بهContentFrame،Player، وModifier.resizeWithContentScaleاضافه کنید تا محتوای مقیاسبندیشده را در محفظه آن قرار دهید و محتوایContentFrameرا به مرزهای آن برش دهید تا ویدیویی که باContentScale.Cropمقیاسبندی شده است دیگر خارج از آن ترسیم نشود. - افزودن پشتیبانی میانای کاربر جاریسازی زنده به
ProgressSlider،ProgressStateWithTickCountوProgressStateWithTickIntervalبا نمایان کردنisLiveوliveOffsetMs. افزودنLiveButtonComposable بهmedia3-ui-compose-material3(#۲۲۱۳).
- افزونه Ktor:
- رفع مشکلی که باعث میشد
KtorDataSourceقطعی اتصال در میانجاری را بهجای ایجادHttpDataSourceExceptionبهعنوان پایان ورودی درنظر بگیرد (#3460).
- رفع مشکلی که باعث میشد
- افزونه HLS:
- Parse
VIDEO-RANGE(PQandHLG) onEXT-X-STREAM-INFandEXT-X-I-FRAME-STREAM-INFintoFormat.colorInfo(#3441). - Fix
NullPointerExceptionwhen parsing MPEG-TSEXT-X-MAPinitialization 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، مشارکتهای جابهجایی ازسرگیری محتوا را در سایر بینابینیها در همان گروه آگهی بازنویسی میکرد.
- Parse
- افزونه DASH:
- پشتیبانی از تجزیه رویدادهای «درج MPD جایگزین» (
urn:mpeg:dash:event:alternativeMPD:insert:2025) و «جایگزینی» (urn:mpeg:dash:event:alternativeMPD:replace:2025) درDashManifestParserو نمایش آنها بهعنوان نمونههایAlternativeMpdEventدرPeriod.alternativeMpdEvents. این تغییر برای برنامههایی که زیرکلاسDashManifestParserهستند، تغییر مخربی است:DashManifestParser.buildPeriodاکنون پارامترList<AlternativeMpdEvent>اضافی میگیرد و سربارگذاری قبلی برداشته شده است. برنامههایی کهDashManifestParser.parseEventStream(XmlPullParser)را لغو میکنند باید بهجای آنDashManifestParser.parseEventStream(XmlPullParser, String)را لغو کنند، زیرا مورد اول منسوخ شده است و در نسخه پخش آتی خصوصی خواهد شد. - تجزیه اطلاعات رنگ CICP (
ColourPrimaries،TransferCharacteristics،MatrixCoefficients، وVideoFullRangeFlag) از توصیفکنندههایEssentialPropertyوSupplementalPropertyبهFormat.colorInfo(#3426). - پشتیبانی از فهرستهای جداشده با فاصله سفید از مقادیر
@idدر توصیفگر حالت ترفند (http://dashif.org/guidelines/trickmode) مشخصههای@value(#3315). - پشتیبانی از تجزیه
<ProducerReferenceTime>درDashManifestParser، نمایش آن درAdaptationSet.producerReferenceTimes، و استفاده از آن برای پر کردنTimeline.Window.presentationStartTimeMsوTimeline.Window.windowStartTimeMsبرای جاریسازیهای VOD. - افزودن پشتیبانی از DASH Content Steering (#1689).
- رفع
NullPointerExceptionکه ممکن است هنگام تجزیه مانیفست DASH با مشخصه مفقود در عنصر<UTCTiming>رخ دهد (#۳۴۳۶).
- پشتیبانی از تجزیه رویدادهای «درج MPD جایگزین» (
- افزونه RTSP:
- رفع خرابی
IllegalStateExceptionکه هنگام پردازش پاسخهای شبکه با تأخیر پساز بسته شدن کلاینت RTSP رخ میداد. - رفع مشکلی که در آن پیمایش سریع میتوانست بهاشتباه سازوکار بازگشت پروتکل TCP را راهاندازی کند.
- رفع خرابی
IllegalStateExceptionکه میتواند هنگام پردازش پاسخهای شبکه با تأخیر پساز بازنشانی وضعیت کارخواه RTSP درطول انتخاب مجدد قطعه، قطع جلسه، یا تغییر مسیر URI رخ دهد. - مشکلی که در آن جستجوی مجدد قبلاز بازراهاندازی بازپخش میتوانست باعث ازکارافتادن
IllegalStateExceptionشود برطرف شد. - رفع مشکلی که در آن جستجو به عقب درحالیکه جستجوی دیگری درانتظار بود میتوانست باعث قطع صدا و توقف بازپخش ویدیو شود.
- رفع مشکلی که در آن واحدهای دسترسی فریم کلیدی H.264 و H.265 که با یک بسته انبوهشی یا غیر IDR پایان مییافتند بهعنوان فریم کلیدی پرچمگذاری نمیشدند و باعث میشدند بازپخش در حالت میانگیری گیر کند (#3434).
- رفع خرابی
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزونه Opus: رفع خرابی JNI هنگام رمزگشایی دادههای نامعتبر Opus.
- افزونه Opus: رفع مشکل نادیده گرفته شدن لایه دورریز وقتی پیشپرش و لایه دورریز در یک بسته قرار میگیرند (#۲۵۷۶).
- افزونه Cast:
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به ۲۴.
- افزایش Gradle
نسخه ۱.۱۱.۰
۱.۱۱.۱
۱۰ سپتامبر ۲۰۲۶
- ExoPlayer:
- پرچم را برای فعال/غیرفعال کردن فراداده HAGC برای رسانه پیشرونده از
MediaSource.FactoryبهExtractorsFactoryمنتقل کنید. روش قبلیsetExperimentalEnableHagcPlaybackبرداشته شده و باExtractorsFactory.setParseHagcMetadataجایگزین شده است. این بهروزرسانی همچنین مشکلی را برطرف میکند که در آن غیرفعال کردن برای محفظههای Matroska/WebM کار نمیکرد. - رفع توقف بازپخش ناشی از پیشگرم کردن پردازنده ثانویه غیرانتقالی.
- رفع مشکل پیشگرمایش که در آن
Surfaceباید به پردازنده اصلی برگردانده شود، وقتی که جستجو هر دو پردازنده را بازنشانی و غیرفعال میکند. - رفع
ArrayIndexOutOfBoundsExceptionوقتی بازآوری خط زمان زنده، موقعیت پیشفرض را از آگهی درجشده در سمت سرور که درحال پخش است عبور میدهد (#۳۳۴۸). - مشکل حالت پاکسازی که در آن فریمهای ویدیو قدیمی ممکن بود بهطور خلاصه هنگام جستجو با
ScrubbingModeParameters.allowSkippingMediaCodecFlushفعال نمایش داده شوند برطرف شد.
- پرچم را برای فعال/غیرفعال کردن فراداده HAGC برای رسانه پیشرونده از
- استخراجکنندهها:
- Matroska: رفع مشکلی که در آن قطعههای قرارگرفته بعداز خوشهها منجر به خط زمان قابلجستجو نمیشد (#3377).
- صدا:
- محاسبه اندازه میانگیر در
SilenceSkippingAudioProcessorاصلاح شد تا حداقل مدت سکوت بهطور نادرست توسط اندازه قاب کاهش مقیاس پیدا نکند (#3271). - رفع مشکل مدیریت PCM ۸ بیتی در
PcmAudioUtilبرای اینکه نمونهها بهعنوان بدون علامت درنظر گرفته شوند، همانطور که توسط Android تعریف شده است (#۳۲۷۱). - رفع مشکل باربرداری که در آن بازپخش ممکن بود درطول پیشپخش یا انتقال بدون وقفه بهدلیل محدود بودن اندازه میانگیر سختافزار متوقف شود.
- رفع اشکال در
DefaultAudioSinkکه در آن تعداد انتشار کاهش نمییابد وقتی رشته بازپخش دیگر فعال نیست (#3338).
- محاسبه اندازه میانگیر در
- جلسه:
- افزونه HLS:
- افزونه DASH:
- رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعههای تصویری با
presentationTimeOffset(#3334).
- رفع اشکال محاسبه مُهر زمان نمونه نادرست برای قطعههای تصویری با
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- Opus: رفع خرابی حافظه وقتی چندین نمونه
OpusDecoderبهطور همزمان مقداردهی اولیه میشوند. - MPEG-H: رفع نشت حافظه، کوتاه شدن نویسههای غیرASCII، و
خرابی بومی احتمالی در شرایط حافظه کم هنگام ارسال فرمانها
به
MpeghUiManager(#3365).
- Opus: رفع خرابی حافظه وقتی چندین نمونه
نسخه ۱.۱۱.۰
۵ اوت ۲۰۲۶
- کتابخانه مشترک:
Format.channelMaskرا برای نمایش صریح ماسک کانال صوتی اضافه کنید، و یک سربارگذاری جدیدUtil.getAudioTrackChannelConfig(Format)برای حل ایمن آن.- Kotlin را از نسخه ۲.۰.۲۰ به ۲.۲.۰ ارتقا دهید.
- ExoPlayer:
- رفع اشکال همزمانی وابسته به زمانبندی که میتوانست باعث
IllegalStateExceptionیاIndexOutOfBoundsExceptionدر ExoPlayer شود. - Relax ad group count checks in
AdsMediaSourceto allow the ad group count to decrease when an ad group is fully processed (hasUnplayedAds()isfalse), accommodating dynamic ad group resizing during reset workflows. getFlags()وFLAG_STRICT_DURATIONرا بهSampleStreamاضافه کنید تا به جاریسازیها اجازه دهید پرچمها را گزارش کنند و پردازنده گرافیکی را بهروز کنید تا این پرچمها را بهطور پویا بررسی کند.- Fall back to the frame rate estimator in
MediaCodecVideoRendererand to the codec output format inMediaCodecAudioRendererto calculate the codec operating rate when the stream formats do not provide a valid value, and avoid unnecessary codec resets. - برداشتن برش محتوا برای آگهیهای درجشده در سمت کارخواه در پخشکننده اصلی. درعوض،
AdsMediaSourceمنطق برش را مدیریت میکند. منابع آگهیهای درجشده سفارشی سمت کارخواه باید بهروزرسانی شوند تا برش محتوا را بهصورت داخلی پیادهسازی کنند. - قطعههایی را که نمایه یا سطح کدک آنها خوشساخت اما ناشناخته است، بهجای
supported=YES، بهعنوانsupported=NO_EXCEEDS_CAPABILITIESعلامتگذاری کنید (قطعههایی که اطلاعات نمایه یا سطح آنها وجود ندارد یا بدساخت است، به این صورت علامتگذاری میشوند). این کار تضمین میکند که این قطعهها (که احتمالاً توسط دستگاه پشتیبانی نمیشوند) وقتی جایگزینهای بهتری وجود دارد که پشتیبانی میشوند، انتخاب نشوند. DefaultPreloadManager.SimpleRankingDataComparatorرا اضافه کنید که یکRankingDataComparatorاست که رتبههای فایلهای رسانهای را براساس فاصلهشان تا نمایه فایل رسانهای درحال پخش فعلی مقایسه میکند. اگر منطق مقایسه دقیقتری لازم باشد، برنامهها میتوانند روشcompare(Integer, Integer)آن را لغو کنند.SimpleRankingDataComparatorسفارشی را میتوان ازطریق سازنده جدیدDefaultPreloadManager.Builderتزریق کرد.- کاهش خطر کمبود حافظه
DefaultLoadControl.prioritizeTimeOverSizeThresholdsبا بازگشت به محدودیتهای اندازه بایت میانگیر درصورت کم بودن حافظه توده موجود. - تراز کردن مدیریت تصاویر ثابت وقتی
MediaItem.imageDurationUsتنظیم نشده است: تصاویر ثابت JPEG و HEIC اکنون با مدت پیشفرض بسیار کوتاهی «پخش» میشوند (همانطور که PNG و تصاویر دیگر قبلاً رفتار میکردند). MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)را بهBandwidthMeterترازMediaSourceاضافه کنید. روش منسوخشده با پیادهسازی سفارشی همچنان بهطور پیشفرض فراخوانی میشود، اما توصیه میشود روش جدید را پیادهسازی کنید و ازBandwidthMeter.getTransferListener()استفاده کنید تا با روش قدیمی برابری داشته باشد.- در
DefaultBandwidthMeter، پشتیبانی ازInitialBitrateSupplierسفارشی را اضافه کنید. این به برنامهها اجازه میدهد منطق خود را برای تعیین تخمین نرخ بیت اولیه ارائه دهند، که در ایجادDefaultBandwidthMeterو در تغییرات نوع شبکه استفاده خواهد شد. تأمینکننده را میتوان ازطریقDefaultBandwidthMeter.Builder.setInitialBitrateSupplier()تنظیم کرد. - زمانبندی پویا را بهطور پیشفرض فعال کنید. حلقه کاری بازپخش
ExoPlayerبهجای اجرا در بازه زمانی ثابت، بهصورت پویا اجرا خواهد شد. - بازنشانی غیرضروری را که ممکن است هنگام پیوستن قطعهها با نمونههای پیشپخش به بازپخش فعال رخ دهد بردارید.
- در
DefaultBandwidthMeter،getInitialBitrateCountryGroupAssignmentرا بهینهسازی کنید تا تخصیصهای گروه کشور را بهجای آرایه در یک عدد صحیح ۳۲ بیتی برگرداند، اندازه کد را کاهش دهد، و از تخصیصها جلوگیری کند. - رفع خرابیهای مقداردهی اولیه
AudioTrackدر برخیاز دستگاهها با اطمینان از اینکه منطق تکرار مجدد همیشه حداقل ۱ ثانیه اندازه میانگیر را امتحان میکند اگر تکرارهای مجدد دیگر (با نصف کردن اندازه میانگیر) ناموفق باشند (#3207). - رفع مشکل کدک در برخیاز دستگاهها که در آن کدک همه نمونهها را درصورت پاکسازی قبلی قبلاز دریافت میانگیرهای ورودی میبلعید.
ExoPlayer.Builder.enablePerStreamMediaProgression()آزمایشی را اضافه کنید تا امکان پردازش رسانه پیشرفته بهصورت هرجریان فراهم شود. این کار تأخیر راهاندازی بین موارد فهرست پخش را کاهش میدهد و از «گیر کردن» بازپخش در محتوای بسیار کوتاه جلوگیری میکند (#۳۱۲۲).- رفع شرایط رقابتی مربوط به استفاده از شناسه جلسه صوتی که در آن شناسه جلسه صوتی اولیه تولیدشده خودکار توسط
ExoPlayerبهجای مقدار تنظیمشده توسطsetAudioSessionIdاستفاده میشد (#3241). - افزودن پشتیبانی آزمایشی از بازپخش فراداده زمانبندیشده HAGC (ST 2094-50) برای
رسانه پیشرونده (مثلاً MP4، Matroska). پخشکننده بهطور خودکار قطعههای فراداده HAGC را با قطعه ویدیویی مربوطه ادغام میکند و فراداده را بهصورت خارج از باند به رمزگشا در دستگاههای دارای API 37+ ارائه میدهد. این رفتار را میتوان ازطریق
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)غیرفعال کرد. - Add
Format.selectionPriorityrepresenting the relative preference of theFormatin track selection (#3236). - رفع مشکل احتمالی حالت پیمایش که در آن پیمایش ممکن بود هنگام جستجو برای «پایان جاریسازی» متوقف شود.
- رفع اشکال همزمانی وابسته به زمانبندی که میتوانست باعث
- CompositionPlayer:
- مشکلی که باعث میشد نمونههای
TrackSelectorمنتشر نشوند برطرف شد.
- مشکلی که باعث میشد نمونههای
- ترانسفورماتور:
- رفع مشکلی که ممکن است باعث گزارش بیشازحد
ExportResult.fileSizeBytesشود.
- رفع مشکلی که ممکن است باعث گزارش بیشازحد
- انتخاب قطعه:
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORرا نمایش دهید وAdaptiveTrackSelection.Factory.setTrackFormatComparatorرا اضافه کنید تا سفارش قالب سفارشی و اولویت انتخاب ABR فراتر از سفارش فقط نرخ بیت مجاز شود.- رفع مشکل همزمانی وابسته به زمان که در آن بهروزرسانیهای متوالی سریع برای ردیابی پارامترهای انتخاب میتوانست منجر به ازدست رفتن یا بازنویسی برخیاز بهروزرسانیها شود.
- استخراجکنندهها:
- MP4، MP3، و FLAC: افزودن
FLAG_DISABLE_ARTWORK_METADATAبرای مجاز کردن دور انداختن تصاویر پیوستشده و فراداده جلدنگاره درطول تجزیه ظرف برای کاهش مصرف حافظه زمان اجرا (#2077). این ویژگی را میتوان بهطور متمرکز ازطریقDefaultExtractorsFactory.setDisableArtworkMetadataنیز فعال کرد. - MP4: پشتیبانی از استخراج قطعههای فراداده زمانبندیشده ITU-T T.35 (
it35) اضافه شد. - MP4: پشتیبانی از استخراج فراداده فصل (هر دو قالب Nero و QuickTime) اضافه شد. اگر هر دو موجود باشند، فصلهای QuickTime ترجیح داده میشوند. اطلاعات استخراجشده فصل بهصورت ورودیهای
ChapterدرMetadataقطعه نمایش داده میشود، که امکان پیمایش بومی فصل را در فایلهای MP4، M4A، و M4B (مانند کتابهای صوتی و پادکستها) فراهم میکند (#۲۸۰۳). - WAV، Matroska، و MP4: افزودن پشتیبانی از صدای PCM ممیز شناور ۶۴ بیتی (#۳۰۹۰).
- Matroska: از فرادادههای بیتاستریم کدک برای پر کردن
ColorInfoدقیق استفاده کنید. - MP4: افزودن پشتیبانی برای جستجو در فایلهای MP4 تکهتکهشده بااستفاده از چارگوش
mfraوقتی چارگوشsidxوجود ندارد. برای فعال کردن این مورد،FLAG_READ_MFRA_FOR_SEEK_MAPرا بهFragmentedMp4Extractorارائه دهید، که اکنون بهطور پیشفرض درDefaultExtractorsFactoryانجام میشود (#3088). - نادیده گرفتن دادههای
av1Cبا نسخه پشتیبانینشده. - MP4: افزودن پشتیبانی از PCM ممیز شناور big-endian در جعبههای
fpcm. - Matroska: Parse chapter info to
Chapterentries in a track'sMetadata. - MPEG-TS: بهبود استخراج جریانهای DTS-HD و DTS Express با ترکیب کردن 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
sgpdboxes 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).
- MP4، MP3، و FLAC: افزودن
- صدا:
- Add a 100ms grace period in ExoPlayer's audio renderers when transitioning from ready to not-ready state, to debounce transient underruns and avoid unexpected buffering states during active playout (#3210).
- منطق اندازه میانگیر PCM پیشفرض در
DefaultAudioTrackBufferSizeProviderرا تغییر دهید تا از میانگیر ثابت ۵۰۰ میلیثانیهای استفاده کند تا کمتر به دستگاه وابسته باشد. MediaCodecAudioRendererرا بهروز کنید تا channelMask فضایی را از رمزگشای پلاتفرم استخراج کند، و بهDefaultAudioSinkاجازه دهد بهجای استنباط ماسک از تعداد کانال، از این ماسک صریح استفاده کند.- پارامترهای
AudioSink.configureرا به کلاس داده تبدیل کنید. لغوهای سفارشیForwardingAudioSink.configureباید به امضای روش جدید منتقل شود. - پشتیبانی از حفظ زیروبمی صدا هنگام کشش زمانی جاریسازی صوتی با
EditedMediaItem.Builder#setSpeed(SpeedParameters)را اضافه کنید. ToFloatPcmAudioProcessorرا بهبود دهید تا از تبدیل PCM ۸ بیتی، PCM ۱۶ بیتی big-endian، و PCM ممیز شناور ۶۴ بیتی به PCM ممیز شناور ۳۲ بیتی پشتیبانی کند (#3090).- مقدار برگشتی
DecoderAudioRenderer.getChannelMappingرا بهImmutableIntArrayتغییر دهید. - رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صدای بدون وقفه در حالت انتقال بار فشردهشده گیر میکند.
- Forward
Timelineand period UID toAudioSink.configureandAudioProcessor.StreamMetadatato provide playlist context to the audio processors (#418). AudioProcessor.StreamMetadata.positionOffsetUsصحیح را تنظیم کنید تا پردازش صوتی مبتنی بر زمان مجاز شود (#۴۱۸).- پشتیبانی از PCM ممیز شناور ۳۲ بیتی و ۶۴ بیتی با ترتیب بایتهای بزرگ را اضافه کنید.
- برداشتن مسیر بازگشت EAC3-JOC به EAC3 برای بازپخش در دستگاههای Google Pixel، زیرا رمزگشاهای استاندارد EAC3 آنها نمیتوانند جاریسازیهای EAC3-JOC را رمزگشایی کنند (#۳۲۵۷).
- ویدیو:
- Fix video joining logic to count dropped buffers during joining as skipped instead of dropped.
- رفع تصمیمگیری فوری برای رندر کردن هنگام تنظیم سطح جدید برای جلوگیری از افت فریم در دستگاههایی که از سطوح جایبان پشتیبانی نمیکنند.
- برآورد نرخ فریم در
MediaCodecVideoRendererرا با درنظر گرفتن فریمهای حذفشده یا ردشده اصلاح کنید تا دقیقتر شود. - اجازه دادن به پیکربندی آستانه استفادهشده برای زمانبندی زودهنگام قابها. مقدار پیشفرض ۵۰ میلیثانیه است اما میتوان آن را ازطریق
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()سفارشیسازی کرد. - رفع اشکال در
VideoFrameReleaseHelperکه در آن تغییرات نمایشگر میتوانست باعث راهاندازی فراخوانیهای برگشتیChoreographerزائد و بیدار شدن بیشازحد واحد پردازش مرکزی در رشته اصلی شود.
- نوشتار:
- فراداده:
- افزودن فیلد
MediaMetadata.discSubtitleو تجزیه آن از دادههای ID3v2.4TSSTو VorbisDISCSUBTITLE. - تجزیه شماره و تعداد دیسک از قاب ID3
TPOS.
- افزودن فیلد
- جلوه:
- پاک کردن وضعیت بازترسیم در
FinalShaderProgramWrapperهنگام فلاش کردن برای جلوگیری از توقف پخشکننده هنگام جستجو.
- پاک کردن وضعیت بازترسیم در
- Muxers:
- افزودن پشتیبانی از ارجاعهای قطعه (چارگوش
tref) درMp4Muxerازطریق میانای برنامهسازی کاربردیaddTrackReferenceجدید. این کار امکان برقراری ارتباط بین قطعهها را فراهم میکند، مانند پیوند دادن یک قطعه فراداده به قطعه ویدیویی که توصیف میکند. OggMuxerرا اضافه کنید تا امکان ادغام جریانهای رسانهایOPUSیاVORBISدر قالب فایلoggفراهم شود.WavMuxerرا برای تولید فایل WAV اضافه کنید (از PCM عدد صحیح و ممیز شناور پشتیبانی میکند).setAttemptStreamableOutputEnabledرا بهInAppMp4Muxer.Factoryاضافه کنید تا نوشتن فایلهای کوچکتر غیرقابلجاریسازی بدون فضای رزروشده مجاز شود.- پشتیبانی از صدای IAMF در
Mp4MuxerوFragmentedMp4Muxerاضافه شد.
- افزودن پشتیبانی از ارجاعهای قطعه (چارگوش
- افزونه IMA:
-
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotرا اضافه کنید تا امکان ارائه جایگاه آگهی برای استفاده در آگهیهای توقف موقت فراهم شود. - رفع اشکال مربوط به نمایش فوری دکمه رد شدن در آگهی دوم برای آگهیهای VAST ردشدنی پیدرپی (#3165).
-
- جلسه:
- رفع بنبستهای احتمالی و ازکارافتادنهای
IllegalStateExceptionدرMediaNotificationManagerهنگام استفاده از جلسه با پخشکننده لوپر رشته پسزمینه. - الزامات رشتهای سختگیرانهتری برای روشهای
MediaSessionاعمال کنید. روشهای Void اکنون بهطور خودکار اجرا را در رشته لوپر برنامه پست میکنند، و دسترسیدهندههای حالت (گیرندهها) بهطور صریحIllegalStateExceptionرا درصورت فراخوانی از رشتهای غیراز لوپر برنامه ارسال میکنند. - رفع خرابی ادغام خط زمان خارج از محدوده (
IllegalStateExceptionدرMediaUtils.mergePlayerInfo) با ردیابی سازگاری وضعیت بهازای هر کنترلکننده در سمت جلسه. androidx.media3.session.MediaSessionManagerرا اضافه کنید تا از پُرسمان جلسههای رسانه فعال و برگرداندن نمونههای Media3SessionTokenپشتیبانی شود.- رفتار پیشفرض
MediaSession.Callback.onConnectرا تغییر دهید اگر روش لغو نشده باشد تا فقط دسترسی خواندن به کنترلکنندههای غیرقابلاعتماد ارائه شود. - افزودن پشتیبانی برای لغو نام بسته هنگام ایجاد
MediaSessionازطریق میانای برنامهسازی کاربردی جدیدMediaSession.Builder#setPackageNameOverride. فراخواننده باید اجازهandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERرا داشته باشد تا نام بسته جلسه را لغو کند. -
MediaSession.Callback.onConnectAsync()اضافه کنید. روش جدید امکان پردازش ناهمگام تلاش برای اتصال کنترلکننده را فراهم میکند. برنامهها میتوانندFutureفوری را باFutures.immediateFuture(ConnectionResult)برگردانند تا به رفتار قبلی دست یابند. توصیه میشود به روش جدید مهاجرت کنید زیراCallback.onConnectنامزد منسوخ شدن است. - مشکلی که باعث میشد مرور AVRCP بلوتوث
MediaLibraryServiceرا در میانای برنامهسازی کاربردی ۳۶ و ۳۷ تشخیص ندهد برطرف شد. - رفع مشکل کاهش مقیاس دوبرابری آثار هنری در
MediaSessionوقتی اندازه تصویر به حد پلاتفرم نزدیک است، که باعث رفع تاری در اعلانها میشود (#3134). - رفع ازکارافتادن
ForegroundServiceStartNotAllowedExceptionدرMediaNotificationManagerوقتیکه فراخوانی برگشت بارگیری بیتمپ اثر هنری ناهمگام تلاش میکند سرویس پیشزمینهای را درحالیکه برنامه در پسزمینه است راهاندازی کند (#۳۲۷۰). - رفع مشکلی که در آن اشیاء
PositionInfoدریافتشده توسطMediaControllerفاقد شناسه کاربریTimelineاصلی خود بودند. اکنون جلسه بهطور قابلاعتمادی این شناسههای کاربری را درطول بهروزرسانیهای وضعیت ترجمه و منتشر میکند. - با گرفتن
ForegroundServiceStartNotAllowedExceptionدرMediaSessionService.stopSelfSafely()(#3310)، خرابی را برطرف کنید. - Fix unexpected
onMediaItemTransition()callback onMediaControllerwhen seeking inside the same media item (#3248).
- رفع بنبستهای احتمالی و ازکارافتادنهای
- رابط کاربری:
- رفع مشکل رندر شدن فریم اول با اندازه اشتباه وقتی
ContentFrameدر اواسط بازپخش بازترکیب میشود (#۳۲۳۸). - کلاس
CurrentMediaItemStateوrememberCurrentMediaItemStateComposable مربوطه را به واحدmedia3-ui-composeاضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش اطلاعات فراداده مختلف دربارهMediaItemدرحال پخش استفاده میشود. - کلاس
PlaylistStateوrememberPlaylistStateمربوطه را به واحدmedia3-ui-composeاضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش اطلاعات فراداده مختلف دربارهMediaItemsتنظیمشده در «پخشکننده» استفاده میشود. - افزودن میانای برنامهسازی کاربردی حرکت سریع/حرکت آهسته به
PlaybackSpeedState. از این عملکرد درdemo-composeبرای نمایش جلو بردن سریع با فشار طولانی استفاده کنید. MiniControllercomposable را به واحدmedia3-ui-compose-material3اضافه کنید. این ویژگی امکان کنترل فشردهPlayerرا فراهم میکند و درعینحال عنوان، هنرمند، اثر هنری، و پیشرفت فایل رسانهای فعلی را نمایش میدهد.- کلاس
ErrorStateوrememberErrorStateمربوطه را به واحدmedia3-ui-composeاضافه کنید. ErrorTextComposable را بهmedia3-ui-compose-material3اضافه کنید و آن را بهعنوان رونهاد پیشفرض درPlayerتنظیم کنید. - انتشار شیء
PlayerDefaultsبا composables برایTopControls،CenterControls،BottomControls، وErrorOverlay. FocusRequesterرا بهPlayerComposable و جایگاههای محتوای آن اضافه کنید.-
PlayerPool(common-ktx) وrememberPooledPlayer(ui-compose) را برای پشتیبانی از پیشبارگیریMediaItemsدر محیطهای واسط کاربر پنجره لغزنده منتشر کنید. این عملکرد را درdemo-composeباShortFormPlayerScreenجدیدی بهنمایش بگذارید. - رفع اشکال توقف شاتر در
PlayerViewو ComposePresentationStateکه باعث ازکارافتادن در خطوط زمانیای میشد که از جستجوی شناسه کاربری دوره پشتیبانی نمیکنند (#۳۲۶۴).
- رفع مشکل رندر شدن فریم اول با اندازه اشتباه وقتی
- بارگیریها:
- حل کردن متغیرهای HLS در فهرست پخش رسانه هنگام واکشی برای بارگیری (#۳۲۵۸).
- افزونه Ktor:
- افزونه HLS:
- افزودن پشتیبانی از HLS Content Steering و Pathway Cloning (#۱۶۸۹).
setWithAssetListResetرا بهHlsInterstitialsAdsLoaderاضافه کنید تا به برنامهها اجازه دهید بینآگهیهای فهرست دارایی کاملاً پردازششده را به حالت غیرقابلدسترس بازنشانی کنند تا دوباره بهصورت درخواستی حلوفصل شوند.- Parse
SCOREattribute ofEXT-X-STREAM-INFandEXT-X-I-FRAME-STREAM-INF, and populate it toFormat.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).
- زیرنویس ناشنوایان CEA را براساس زبان به
- افزونه 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
DataSourceContractTestfor lengths returned fromDataSource.open(). منابعی که ممکن است بهC.LENGTH_UNSETمنجر شوند باید این موضوع را بااستفاده ازTestResource.Builder.setMayResolveToUnknownLength(boolean)نشان دهند. setPlaybackLooperرا بهTestExoPlayerBuilderاضافه کنید.
- برداشتن نمادهای منسوخشده:
- برداشتن
androidx.media3.exoplayer.MetadataRetriever. درعوض ازandroidx.media3.inspector.MetadataRetrieverاستفاده کنید. - برداشتن
androidx.media3.exoplayer.MediaExtractorCompat. درعوض ازandroidx.media3.inspector.MediaExtractorCompatاستفاده کنید. - برداشتن
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. بهجای آن، ازHeifExtractorبرای استخراج فراداده عکس حرکتی از فایلهای HEIC استفاده کنید. - برداشتن
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. درعوض ازandroidx.media3.extractor.metadata.MotionPhotoMetadataاستفاده کنید. - برداشتن
androidx.media3.extractor.DummyTrackOutput. درعوض ازandroidx.media3.extractor.DiscardingTrackOutputاستفاده کنید. - برداشتن
androidx.media3.extractor.DummyExtractorOutput. درعوض ازandroidx.media3.extractor.NoOpExtractorOutputاستفاده کنید. - برداشتن
androidx.media3.common.C.generateAudioSessionIdV21. درعوض ازandroidx.media3.common.util.Util.generateAudioSessionIdاستفاده کنید.
- برداشتن
- ساخت
- دستورالعملهای
README.mdبرای وابسته بودن به Media3 بهصورت محلی بهروزرسانی شد تا از Gradle Composite Builds (includeBuild) استفاده شود. اسکریپتcore_settings.gradleبرداشته شده است و دیگر از ویژگیهایandroidxMediaModulePrefixوandroidxMediaEnableMidiModuleاستفاده نمیشود.
- دستورالعملهای
1.11.0-rc01
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
1.11.0-beta01
۷ ژوئیه ۲۰۲۶
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
1.11.0-alpha01
۲۴ ژوئن ۲۰۲۶
از نسخه پایدار ۱.۱۱.۰ استفاده کنید.
نسخه ۱.۱۰.۰
۱.۱۰.۱
۱۲ مه ۲۰۲۶
- کتابخانه مشترک:
- رفع مشکل مدیریت
onAudioSessionIdChangedدرSimpleBasePlayerوForwardingSimpleBasePlayer.
- رفع مشکل مدیریت
- ExoPlayer:
- رفع شرایط رقابتی مربوط به تولید شناسه جلسه صوتی که میتواند
منجر به
IllegalStateExceptionبا حالت تونلزنی شود. (#3099). - رفع خرابیهای احتمالی برنامه هنگام بازیابی از خطاهای رمزگشا با پیشگرم کردن پردازنده گرافیکی.
- رفع مشکلی که در آن مصنوعات ویدیویی بهدلیل ارائه دادههای مقداردهی اولیه هنگام استفاده از کدک Dolby Vision مبتنی بر AV1 ایجاد میشد (#۳۱۵۳).
- رفع شرایط رقابتی مربوط به تولید شناسه جلسه صوتی که میتواند
منجر به
- انتخاب قطعه:
- منطق انتخاب قطعه در
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
MediaControllercan't set media items on platform media sessions that don't allowPREPARE_FROMactions. - رفع اشکالی که در آن فرایند خود با
Controller.isTrusted()در API 27 یا قبلاز آن هنگام اتصال ازطریق کنترلکنندههای پلاتفرم علامتگذاری نشده بود.
- رفع اشکالی که در آن
- افزونه HLS:
- رفع اشکالی که در آن اگر انتخاب قطعه زیرمجموعهای از قطعههای دردسترس باشد، درطول بازگشت جریانی
ArrayIndexOutOfBoundsExceptionایجاد میشود (شماره ۳۱۶۱). - رفع مشکلی که در آن بخش مقداردهی اولیه در بهروزرسانیهای فهرست پخش رسانه منتقل نمیشد، اگر برچسب
#EXT-X-MAPدر بهروزرسانیهای بعدی تکرار نمیشد (#۳۱۰۵).
- رفع اشکالی که در آن اگر انتخاب قطعه زیرمجموعهای از قطعههای دردسترس باشد، درطول بازگشت جریانی
- افزونه DASH:
- Fix crash in
SampleQueuewhen seeking into a chunk that is currently being canceled.
- Fix crash in
۱.۱۰.۰
۲۶ مارس ۲۰۲۶
- کتابخانه مشترک:
-
Player.mute()وPlayer.unmute()را ازUnstableApiبه نسخه پایدار ارتقا دهید. -
Format.pcmEncodingوC.PcmEncodingرا ازUnstableApiبه نسخه پایدار ارتقا دهید. Format.primaryTrackGroupIdرا برای شناسایی گروه اصلی نمونههای جاسازیشدهFormatاضافه کنید (#۲۹۴).
-
- ExoPlayer:
- قابلیتهای برش را به
AdsMediaSourceاضافه کنید. - افزودن پشتیبانی از زمانبندی پویا در
MediaCodecVideoRendererبرای همترازی بهتر کار زمانبندی و چرخههای بیدار شدن CPU با زمانی که فریمهای ویدیو میتوانند پردازش شوند. میتوانید این ویژگی را بااستفاده ازexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()درDefaultRenderersFactoryفعال کنید. - اجازه دادن به تنظیم
DataSource.Factoryسفارشی درDefaultPreloadManager.Builder. - Allow
ExoPlayerto be mocked without Robolectric by moving some default constants toExoPlayer.Builder. Mocking this complex interface is not generally encouraged - only when the usage is minimal/simple/incidental (#2985).- این کار مستلزم انتقال
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSازExoPlayerبهExoPlayer.Builderبود (بدون منسوخ شدن).
- این کار مستلزم انتقال
- رفع اشکالی که در آن
ProgressiveMediaSourceاطلاعات قدیمی خط زمان را به پخشکننده منتقل میکند و دورههای صفبندیشده بهطور غیرمنتظرهای حذف میشوند (#3016). - رفع مشکلی که باعث میشد ExoPlayer هنگام درخواست بازپخش درطول تماس تلفنی، درخواست تمرکز صوتی تأخیری نکند.
- رفع اشکالی که در آن انتقال از محتوای درخواستی به محتوای زنده ممکن است باعث میانگیری مجدد در پایان محتوای درخواستی شود (#3052).
- افزودن پشتیبانی از Dolby Vision Profile 10 (#2830).
- رفع اشکالی که در آن آگهی پیشپخش مقداردهینشده باعث ایجاد
ArrayIndexOutOfBoundsException(#۳۱۲۵) میشد.
- قابلیتهای برش را به
- CompositionPlayer:
- افزودن پشتیبانی برای
EditedMediaItem.removeVideo.
- افزودن پشتیبانی برای
- ترانسفورماتور:
EditedMediaItem.Builder.setFrameRate()اکنون میتواند حداکثر نرخ فریم خروجی را برای ویدیو تنظیم کند، که بهویژه هنگام افزایش سرعت رسانه باsetSpeed()مفید است.
- انتخاب قطعه:
- امضای
DefaultTrackSelector.selectAllTracksرا تغییر دهید تا آرایه خروجی را بهعنوان پارامتر دربرگیرد، که ازپیش با لغوهای قطعه تکمیل شده است. - رفع مشکل انتخاب شدن قطعههای فراداده جاسازیشده بدون توجه به اینکه قطعه اصلی مربوطه انتخاب شده است یا نه (#۲۹۴).
- گزینههای تثبیت
TrackSelectionParametersبرایpreferredVideoLanguages،preferredVideoLabels،preferredAudioLabels،preferredTextLabels، وselectTextByDefault.
- امضای
- استخراجکنندهها:
- MP4: پشتیبانی از فایلهایی با جعبههای بزرگ
uuidقبلاز جعبههای دیگر مانندmoov(#3046). - MP4: پشتیبانی از قطعههای «کدبندی ویدیویی همهکاره» (VVC) در محتواهای MP4 اضافه شد.
- 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 پشتیبانی میشود.
- رفع اشکالی که در آن بازپخش هنگام پخش فهرست پخش صدای بدون وقفه در حالت انتقال بار فشردهشده گیر میکند.
- کتابخانه رمزگشایی زیربنایی برای افزونه رمزگشای IAMF از
- نوشتار:
- VobSub: از فرمانهای کنترلی
STARTوSTOPSPU برای بهدست آوردن مدت زمان راهنما استفاده کنید، بهجای اینکه همیشه بهطور پیشفرض ۵ ثانیه باشد (#۲۹۳۵).
- VobSub: از فرمانهای کنترلی
- فراداده:
- افزایش تعداد پیشفرض پردازنده فراداده به چهار برای پوشش دادن همه قطعههای فراداده بالقوه منتشرشده توسط انواع و نسخههای 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
MediaSessionServiceandMediaLibraryServiceaLifecycleService, allowing to attach lifecycle-aware operations to the service's lifecycle (#187). - پشتیبانی از فرمانهای تغییر میزان صدای دستگاه از
MediaControllerوMediaBrowserبرای بازپخشهای محلی متوقف میشود. برنامهها نباید میزان صدای دستگاه محلی را تغییر دهند و درصورت نیاز میتوانند از میاناهای برنامهسازی کاربردیAudioManagerبرای این منظور استفاده کنند. - نمونههای
Intentقدیمی را که سرویس را بهعنوان سرویس پیشزمینهای شروع کردهاند شناسایی کنید. این کار از ایجادForegroundServiceDidNotStartInTimeExceptionتوسط سیستم جلوگیری میکند. این یک تغییر مخرب در میانای برنامهسازی کاربردی ناپایدار برای برنامههایی است کهMediaNotification.Providerسفارشی را پیادهسازی میکنند، زیرا روش الزامی جدیدی وجود دارد. - سازندههایی برای نمونههای
PendingIntentاضافه کنید تا با ابزارکهای صفحه اصلی استفاده شوند (#2933). - افزودن روشهای ایستا برای ایجاد نمونههای
Intentبرای ابزارههای صفحه اصلی مبتنی بر Compose (#۲۹۳۳). - رفع اشکالی که در آن انتقال فایل رسانهای به کنترلکنندهها گزارش نمیشد وقتی بازپخش از یک نمایه فایل رسانهای معین به نمایه دیگری با همان فایل رسانهای بهدلیل ناپیوستگی «AUTO» و «SEEK» منتقل میشد (#۲۹۹۷).
- رفع مشکلی که در آن راهحل جایگزین برای قرار دادن دکمه میانای کاربری سیستم تأثیر منفی بر دیگر سطوح میانای کاربری مانند Android Auto یا سازندگانی که به راهحل جایگزین نیاز ندارند میگذارد (#3041).
- رفع مشکل عدم همگامسازی دسترسی به اشتراکها (#3056).
- اشکال SysUI را در میانای برنامهسازی کاربردی ۲۹ دور بزنید، جایی که آثار هنری جلسه رسانه در اندازه خاصی میتواند SysUI را ازکار بیندازد و دستگاه را مجبور به بازراهاندازی کند (#۳۱۱۸).
- Fix notification artwork icon scaling on Android Q (#3084).
- رفع اشکالی که در آن آرایههای بزرگ در
- رابط کاربری:
PlaybackSpeedControlComposable را بهmedia3-ui-composeاضافه کنید تا سرعت بازپخش را نمایش دهید و اصلاح کنید.PlaybackSpeedToggleButtonComposable را بهmedia3-ui-compose-material3اضافه کنید تا سرعت بازپخش را کنترل کنید.- افزودن
ProgressSliderComposable بهmedia3-ui-compose-material3برای نمایش پیشرفت پخشکننده و انجام جستجو بااستفاده از کشیدن و ضربه زدن (#۲۲۸۸). - از میانگیر بزرگ خارج از صفحه در PlayerControlView پویانماییشده اجتناب کنید.
PlayerComposable را به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:
- افزونه 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و دیگر نمایههای قدیمی بهدرستی برداشته میشود (#۲۶۰۹).
- هنگام ارزیابی پشتیبانی از رمزگشای AC-4 در سناریوهای Automotive،
پشتیبانی از
- ویدیو:
- 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
extrasBundleinstances in various classes to guard against malformedBundleinstances sent from other processes. - رفع مشکل عدم وجود فرمانهای
COMMAND_SEEK_NEXTیاCOMMAND_SEEK_BACKکه میتوانست باعث ایجاد وقفه در اعلان رسانه سیستم شود (#۲۹۷۶). - Move bitmap scaling for notification icon off the main thread (#2829).
- رفع اشکال مربوط به عدم استفاده از مؤلف، نویسنده، و آهنگساز بهعنوان جایگزین
هنگام تبدیل از
MediaMetadataCompatوMediaDescriptionCompatقدیمی (#3018).
- رفع اشکالی که در آن توقف
- بارگیریها:
- رفع حلقههای بینهایت احتمالی هنگام رسیدگی به
PriorityTooLowExceptionتوسطSegmentDownloader(برای DASH، HLS، و SmoothStreaming). لغوهای سفارشیSegmentDownloaderبااستفاده از روش محافظتشدهexecuteباید تکلیف خود را درSupplierارائه دهند تا بتوان آن را بازآفرینی کرد (#۲۹۳۱).
- رفع حلقههای بینهایت احتمالی هنگام رسیدگی به
- افزونه HLS:
- سند JSON فهرست دارایی خام را به
فراخوانی برگشتی
Listener.onAssetListLoadCompletedارسال کنید. این یک تغییر اساسی در میانای برنامهسازی کاربردی ناپایدار است که برنامههایی را که این callback را پیادهسازی میکنند ملزم میکند تا یک آرگومان اضافی از نوعJSONObjectاضافه کنند (#۲۹۵۰).
- سند JSON فهرست دارایی خام را به
فراخوانی برگشتی
- افزونه RTSP:
- مدیریت صحیح بستههای RTP با مُهرهای زمان که بهصورت چرخهای تکرار میشوند (#2930).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- رفع
NullPointerExceptionاحتمالی که ممکن است هنگام جستجو پیشاز پردازش اولین فریم ویدیو رخ دهد (#2965).
- رفع
- افزونه Cast:
- رفع اشکالی که مانع از بهروزرسانی صحیح خط زمان
RemoteCastPlayerهنگام جایگزینی فهرست پخش میشود.
- رفع اشکالی که مانع از بهروزرسانی صحیح خط زمان
۱.۹.۰
۱۷ دسامبر ۲۰۲۵
- کتابخانه مشترک:
- بهروزرسانی
minSdkبه23مطابق با سایر کتابخانههای AndroidX. -
PlayerTransferStateرا اضافه کنید که انتقال وضعیت بازپخش را در نمونههایPlayerتسهیل میکند. - روشهای
void mute()وvoid unmute()را به Player اضافه کنید که میزان صدای Player را قبل و بعداز تنظیم آن روی صفر حفظ و درنتیجه بازیابی میکند. - کلاسهای کاربردی
WakeLockManager،WifiLockManager،AudioFocusManager،AudioBecomingNoisyManagerوStuckPlayerDetectorکه قبلاً توسطExoPlayerبهصورت داخلی استفاده میشدند منتشر شدند تا امکان استفاده مجدد برای پخشکنندههای دیگر فراهم شود (#۱۸۹۳). - Fix
ForwardingPlayerlistener 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-L1andaudio/mpeg-L2MIME types by peeking the layer value of the first sample before emitting a track format from the extractor (#2683). - MP4: Improve sniffing efficiency of very large files by assuming a
stblbox larger than 1MB implies the file must be non-fragmented (#2650). - MP4: Add support for
©mvn(movement name) and©mvi(movement index) metadata, these are now emitted asTextInformationFrameobjects inFormat.metadatawith IDs ofMVNMandMVINrespectively (#2754). - MP4: نادیده گرفتن قطعههای فاقد جعبه
stsd(بهجای عدم تجزیه کل فایل). - Matroska: افزودن پشتیبانی برای تشخیص DTS-HD (#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-
StringCharSequencemetadata values like span-styled strings (#2853). CommandButton.executeActionرا اضافه کنید تا کنترلکنندهها بتوانند راحتتر کنش موردنظر را راهاندازی کنند. همچنین اجازه میدهد پارامترهایی برای برخیاز فرمانهای پخشکننده و جلسه مشخص شود تا کنش راهانداز تعریف شود.- سازگاری با نسخه قدیمی را برای نمونههای
CommandButtonکه ازPlayer.CommandیاSessionCommandغیرسفارشی برای تعریف کنش خود استفاده میکنند اضافه کنید. این موارد اکنون بهدرستی در جلسههای رسانه پلاتفرم نشان داده میشوند، برای مثال برای «رابط کاربری سیستم» یا Android Auto. - رفع مشکلی که در آن هنگام اتصال
MediaControllerبه جلسه رسانه پلاتفرم،Bitmapیکسان چندین بار فشرده میشود.
- پارامتر جدیدی به
- رابط کاربری:
- کلاس
ProgressStateWithTickIntervalوrememberProgressStateWithTickIntervalComposable مربوطه را بهmedia3-ui-composeماژول اضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش موقعیت و مدت فعلی بهصورت نوشتاری استفاده میشود. MuteButtonStateرا بهui-composeاضافه کنید که بیصدا کردن میزان صدایPlayerرا مدیریت میکند. این نگهدارنده حالت درdemo-composeبرای نمایش دکمه مبدل بیصدا/باصدا کردن استفاده میشود.- کلاسهای
ProgressStateWithTickCountوrememberProgressStateWithTickCountComposable مربوطه را به مدولmedia3-ui-composeاضافه کنید. این نگهدارنده حالت درdemo-composeبرای نمایش پیشرفت بهصورت نوار پیشرفت افقی فقط خواندنی استفاده میشود. - افزودن
ContentFrameComposable بهmedia3-ui-composeکه مدیریتPlayerSurfaceرا با تغییر اندازه نسبت ابعادی و پوشاندن با شاتر ترکیب میکند. - رفع اشکال شناختهشده پلاتفرم API 34 که باعث کشیده شدن/برش ویدیوها
هنگام استفاده از
SurfaceViewدر ComposeAndroidViewمیشود و درنتیجه برContentFrameوPlayerSurfaceComposables باSURFACE_TYPE_SURFACE_VIEWتأثیر میگذارد (#1237، #2811). - یک واحد
media3-ui-compose-material3جدید ایجاد کنید و «ترکیبشدنیهای» با زمینه Material3 (PlayPauseButton، NextButton، PreviousButton، SeekBackButton، SeekForwardButton، RepeatButton، ShuffleButton، MuteButton) را به آن اضافه کنید. TimeTextcomposable را به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
HlsMediaPlaylistwith no segments (#2821). - از موقعیت شروع پیشفرض برای پیشپخشها با جاریسازیهای زنده استفاده کنید.
- افزونه DASH:
- رفع مشکل
UnsupportedOperationExceptionهنگام پخش جاریسازیهای DASH با مانیفست URI غیرسلسلهمراتبیdata:(#۲۶۸۸). - Reset
LiveConfigurationto the value provided by theMediaItemof theDashMediaSourcewhen 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بهدرستی تجزیه و به رمزگشا ارسال میشود انجام شد (#۲۸۸۷).
- افزونه AV1: رمزگشای نرمافزاری AV1 اکنون از کتابخانه با عملکرد بالای
- افزونه Cast:
CastPlayer.Builderرا اضافه کنید که بهCastPlayerامکان میدهد هم بازپخش محلی و هم بازپخش «ارسال محتوا» را انجام دهد. برای حفظ رفتار قدیمیCastPlayerکه فقط از بازپخش Cast پشتیبانی میکند، میتوانید ازRemoteCastPlayerاستفاده کنید. سازندههایCastPlayerازقبل موجود رفتار قدیمی خود را حفظ میکنند، اما بهنفع استفاده از سازندههایCastPlayerیاRemoteCastPlayerمنسوخ شدهاند.- Stop enforcing a non-null mime type in
DefaultMediaItemConverter. - از
MediaItem.mediaMetadata.mediaTypeبرای استنباط Cast MEDIA_TYPE برای استفاده درDefaultCastOptionsProvider#toMediaQueueItem(درصورت دردسترس بودن) استفاده کنید. - انتقال از راه دور به محلی را در
DefaultCastOptionsProviderفعال کنید. - پشتیبانی از «ارسال محتوا» را در نسخه نمایشی «جلسه» اضافه کنید.
- پشتیبانی برای نمایش دکمه مسیر رسانه در Composable UI اضافه کنید.
- پشتیبانی برای نمایش دکمه مسیر رسانه در منو نوار اقدام را اضافه کنید.
- پشتیبانی برای نمایش دکمه مسیر رسانه بهعنوان واسط کاربر «نما» اضافه کنید.
- ابزارهای آزمایشی:
- Add maximum time diff for the auto-advancing behavior of
FakeClock. بهطور پیشفرض روی ۱ ثانیه تنظیم شده است، اما ازطریقFakeClock.Builderقابلپیکربندی است. - حداکثر تفاوت زمانی بین پیامها را برای
RobolectricUtil.runMainLooperUntil(وrunLooperUntil) اضافه کنید. بهطور پیشفرض ۱ ثانیه است، اما ازطریق سربارهای جدید این روشها قابلپیکربندی است. CapturingRenderersFactoryرا ازtest-utilsبهtest-utils-robolectricمنتقل کنید.
- Add maximum time diff for the auto-advancing behavior of
- برداشتن نمادهای منسوخشده:
- برداشتن سازنده
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_ONLYMediaCodec (که بهطور پیشفرض در حالت پاکسازی فعال است) بهدرستی پرداز میشود. - پشتیبانی از استفاده از شناسه دستگاه مجازی از
Contextمنتقلشده بهExoPlayer.Builderرا اضافه کنید. - زمانبندی پویا بهطور پیشفرض در حالت پاکسازی فعال میشود.
- هنگام جستجو تا انتهای یک مورد، از بارگیری مجدد غیرضروری منبع خودداری کنید.
- بهطور پیشفرض از
MediaCodec.BUFFER_FLAG_DECODE_ONLYدر حالت پاکسازی استفاده کنید. - Throw
IllegalStateExceptionwhenPreloadMediaSourceis played by anExoPlayerwith 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,TrimmingAudioProcessorandToFloatPcmAudioProcessorpublic (#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:
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- رفع اشکالی که در آن
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeتأثیری بر افزونههای رمزگشای صوتی ندارد (#۲۲۵۸).
- رفع اشکالی که در آن
- افزونه Cast:
- ابزارهای آزمایشی:
advance(player).untilPositionAtLeastوuntilMediaItemIndexرا بهTestPlayerRunHelperاضافه کنید تا پخشکننده را جلو ببرید تا به موقعیت مشخصشده برسد. در بیشتر موارد، این روشها قابلاعتمادتر از روشهایuntilPositionوuntilStartOfMediaItemموجود هستند.FakeDownloaderرا به ماژولtest-utils-robolectricمنتقل کنید تا در آزمایشهای دیگر دوباره استفاده شود.transformer.TestUtil.addAudioDecoders(String...)،transformer.TestUtil.addAudioEncoders(String...)، وtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)برداشته شدند. درعوض، ازShadowMediaCodecConfigبرای پیکربندی رمزگذارهای سایه و رمزگشاها استفاده کنید.- پیشوند «exotest» با «media3» در نامهای کدک گزارششده توسط
ShadowMediaCodecConfigجایگزین شد.
- برداشتن نمادهای منسوخشده:
- سازنده
SegmentDownloaderمنسوخشدهSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)و سازندههای مربوطه در زیرکلاسهای آنDashDownloader،HlsDownloader، وSsDownloaderبرداشته شد. -
Player.hasNext()وPlayer.hasNextWindow()منسوخشده برداشته شد. درعوض ازPlayer.hasNextMediaItem()استفاده کنید. -
Player.next()منسوخشده برداشته شد. درعوض ازPlayer.seekToNextMediaItem()استفاده کنید. -
Player.seekToPreviousWindow()منسوخشده برداشته شد. درعوض ازPlayer.seekToPreviousMediaItem()استفاده کنید. -
Player.seekToNextWindow()منسوخشده برداشته شد. درعوض ازPlayer.seekToNextMediaItem()استفاده کنید. BaseAudioProcessorمنسوخشده در واحدexoplayerبرداشته شد. ازBaseAudioProcessorدر واحدcommonاستفاده کنید.- برداشتن سازنده
MediaCodecVideoRendererمنسوخشدهMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- سازنده
نسخه 1.8.0-rc02
۲۴ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-rc01
۱۶ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-beta01
۲ ژوئیه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه 1.8.0-alpha01
۱۹ مه ۲۰۲۵
از نسخه پایدار ۱.۸.۰ استفاده کنید.
نسخه ۱.۷.۰
نسخه ۱.۷.۱
۱۶ مه ۲۰۲۵
این نسخه پخش همان کد نسخه ۱.۶.۱ را دارد و برای اطمینان از اینکه بهعنوان نسخه پخش «جدیدتر» از نسخه ۱.۷.۰ نمایش داده شود منتشر میشود. نسخه ۱.۷.۰ نسخه پخش آلفا بود که بهطور تصادفی بهعنوان نسخه پایدار برچسبگذاری شده بود (به زیر مراجعه کنید).
نسخه ۱.۷.۰
۱۶ مه ۲۰۲۵
این نسخه پخش باید 1.7.0-alpha01 میبود، اما بهطور تصادفی با برچسب
1.7.0 (یعنی پایدار) در maven.google.com علامتگذاری شد. لطفاً از آن استفاده نکنید. در نسخه ۱.۶.۱ بمانید یا به نسخه ۱.۷.۱ (که کد آن با نسخه ۱.۶.۱ یکسان است) ارتقا دهید.
نسخه ۱.۶.۰
۱.۶.۱
۱۴ آوریل ۲۰۲۵
androidx.media3:media3-*:1.6.1 منتشر شده است. نسخه ۱.۶.۱ حاوی این
ثبتها است.
- کتابخانه مشترک:
- افزودن روش
PlaybackParameters.withPitch(float)برای کپی کردن آسانPlaybackParametersبا مقدار جدیدpitch(#۲۲۵۷).
- افزودن روش
- ExoPlayer:
- رفع مشکلی که در آن انتقال فایل رسانهای بهدلیل خطای قابلبازیابی پردازنده درطول مقداردهی اولیه فایل رسانهای بعدی ناموفق بود (#۲۲۲۹).
- رفع مشکلی که در آن
ProgressiveMediaPeriodIllegalStateExceptionرا بهعنوانPreloadMediaSourceارسال میکند تاgetBufferedDurationUs()را قبلاز آماده شدن فراخوانی کند (#۲۳۱۵). - رفع مشکل ارسال
CmcdDataدر درخواستهای مانیفست برای DASH، HLS، و SmoothStreaming (#۲۲۵۳). - مطمئن شوید
AdPlaybackState.withAdDurationsUs(long[][])میتواند بعداز برداشته شدن گروههای آگهی استفاده شود. کاربر همچنان باید آرایهای از مدت زمانها را برای گروههای آگهی برداشتهشده که میتواند خالی یا پوچ باشد ارسال کند (#۲۲۶۷).
- استخراجکنندهها:
- MP4: Parse
alternate_groupfrom thetkhdbox and expose it as anMp4AlternateGroupDataentry in each track'sFormat.metadata(#2242).
- MP4: Parse
- صدا:
- رفع مشکل بارگذاری که در آن ممکن است موقعیت هنگام پخش فهرست پخش محتوای کوتاه گیر کند (#۱۹۲۰).
- جلسه:
- زمان وقفه تجمیع برای بازخوانیهای پلاتفرم
MediaSessionاز ۵۰۰ به ۱۰۰ میلیثانیه کاهش یافته است و یک تنظیمکننده آزمایشی اضافه شده است تا برنامهها بتوانند این مقدار را پیکربندی کنند. - مشکلی را که در آن اعلانها پساز بسته شدن توسط کاربر دوباره ظاهر میشوند برطرف کنید (#۲۳۰۲).
- رفع اشکالی که در آن جلسه خط زمان تکموردی را برمیگرداند درحالیکه
پخشکننده پیچیده درواقع خالی است. این اتفاق زمانی رخ داد که پخشکننده بستهبندیشده
COMMAND_GET_TIMELINEرا دردسترس نداشت درحالیکهCOMMAND_GET_CURRENT_MEDIA_ITEMدردسترس بود و پخشکننده بستهبندیشده خالی بود (#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باnullMediaMetadataفراداده را مجدداً ارزیابی نمیکند (#۱۹۴۰). - دسترسی
SimpleBasePlayer.Stateرا از محافظتشده به عمومی تغییر دهید تا مدیریت بهروزرسانیها در کلاسهای دیگر آسانتر شود (#۲۱۲۸).
- ExoPlayer:
MediaExtractorCompatرا اضافه کنید، کلاس جدیدی که ویژگیهای معادل پلاتفرمMediaExtractorرا ارائه میدهد.- افزودن پشتیبانی آزمایشی پیشگرمسازی «ExoPlayer» برای بازپخش بااستفاده از
MediaCodecVideoRenderer. میتوانیدDefaultRenderersFactoryرا ازطریقexperimentalSetEnableMediaCodecVideoRendererPrewarmingپیکربندی کنید تاMediaCodecVideoRendererثانویه را برایExoPlayerارائه دهید. اگر فعال باشد،ExoPlayerویدیوِ فایلهای رسانهای متوالی را درطول بازپخش پیشپردازش میکند تا تأخیر انتقال فایل رسانهای کاهش یابد. - مقادیر پیشفرض برای
bufferForPlaybackMsوbufferForPlaybackAfterRebufferMsدرDefaultLoadControlرا بهترتیب به ۱۰۰۰ و ۲۰۰۰ میلیثانیه کاهش دهید. -
DeviceInfoو میزان صدای دستگاه را بهصورت ناهمگام مقداردهی اولیه کنید (اگر بااستفاده ازsetDeviceVolumeControlEnabledفعال شده باشد). این مقادیر بلافاصله پسازExoPlayer.Builder.build()دردسترس نیستند وPlayer.Listenerتغییرات را ازطریقonDeviceInfoChangedوonDeviceVolumeChangedاطلاع میدهد. - شناسه جلسه صوتی اولیه دیگر بلافاصله پساز ایجاد پخشکننده دردسترس نیست. درصورت نیاز، میتوانید از
AnalyticsListener.onAudioSessionIdChangedبرای گوش دادن به بهروزرسانی اولیه استفاده کنید. - هنگام انتخاب قطعه ویدیو، زبان را درنظر بگیرید. بهطور پیشفرض، قطعه ویدیویی «اصلی» را انتخاب کنید که با زبان قطعه صوتی انتخابشده مطابقت داشته باشد (درصورت وجود). اولویتهای صریح زبان ویدیو را میتوان با
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)بیان کرد. - پارامتر
selectedAudioLanguageرا به روشDefaultTrackSelector.selectVideoTrack()اضافه کنید. - پارامتر
retryCountرا بهMediaSourceEventListener.onLoadStartedو روشهایMediaSourceEventListener.EventDispatcherمربوطه اضافه کنید. - رفع اشکالی که در آن موارد فهرست پخش یا دورهها در جاریسازیهای DASH چنددورهای با مدتهایی که با محتوای واقعی مطابقت ندارند میتوانند باعث توقف فریم در پایان مورد شوند (#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به محافظتشده تا برنامهها بتوانند برای مسدود کردن استفاده از سطوح جایبان لغو کنند (#۱۹۰۵). - افزودن تجزیه وابستگی نمونه آزمایشی
ExoPlayerAV1 برای افزایش سرعت جستجو. آن را باDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI جدید فعال کنید. - افزودن
ExoPlayerAPI آزمایشی برای حذف میانگیرهای ورودی رمزگشایMediaCodecVideoRendererدیرهنگام که به آنها وابسته نیست. آن را باDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUsفعال کنید. * رفع مشکلی که در آن پخشکننده بدون سطح فوراً آماده میشد و رمزگشایی قابهای معلق بسیار کند بود (#۱۹۷۳). - دستگاههای Xiaomi و OPPO را از حالت سطح جداشده مستثنی کنید تا از لرزش صفحه جلوگیری شود (#2059).
- تغییر
- نوشتار:
- افزودن پشتیبانی از زیرنویسهای VobSub (#۸۲۶۰).
- بارگیری مشتاقانه همه فایلهای زیرنویس پیکربندیشده با
MediaItem.Builder.setSubtitleConfigurationsمتوقف شد و درعوض فقط یک فایل بارگیری میشود اگر با انتخاب قطعه انتخاب شده باشد (#۱۷۲۱). - TTML: Add support for referencing
tts:originandtts:extentusingstyle(#2953). - مُهرهای زمان WebVTT و SubRip را دقیقاً به ۳ رقم اعشار محدود کنید. قبلاً هر تعداد رقم اعشار را بهاشتباه تجزیه میکردیم اما همیشه فرض میکردیم مقدار برحسب میلیثانیه است، که منجر به مهرهای زمان نادرست میشد (#۱۹۹۷).
- رفع مشکل توقف بازپخش وقتی فهرست پخش حاوی موارد برشخورده با زیرنویس ناشنوایان 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-CODECStag 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).
- MP3: وقتی فهرست مطالب قاب
- ویدیو:
- Rollback of using
MediaCodecAdaptersupplied pixel aspect ratio values when provided while processingonOutputFormatChanged(#1371).
- Rollback of using
- نوشتار:
- رفع اشکال در
ReplacingCuesResolver.discardCuesBeforeTimeUsکه در آن نشانه فعال درtimeUs(قبلاً شروع شده اما هنوز پایان نیافته است) بهاشتباه نادیده گرفته میشد (#۱۹۳۹).
- رفع اشکال در
- فراداده:
- Extract disc/track numbering and genre from Vorbis comments into
MediaMetadata(#1958).
- Extract disc/track numbering and genre from Vorbis comments into
نسخه ۱.۵.۰
۲۷ نوامبر ۲۰۲۴
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
onLoadErrorcallbacks. - در مدیریت زیرنویس قدیمی (درطول پرداز زدن)، فقط خطاهای بارگیری مرتبط ازطریق فراخوانیهای برگشتی
onLoadErrorمنتشر میشوند، درحالیکه خطاهای تجزیه بدون اطلاع نادیده گرفته میشوند (این رفتار ازقبل وجود داشته است).
- In new subtitle handling (during extraction), associated parse (e.g.
invalid subtitle data) and load errors (e.g. HTTP 404) are emitted
via
- رفع اشکالی که در آن موارد فهرست پخش یا دورهها در جاریسازیهای DASH چنددورهای با مدتهایی که با محتوای واقعی مطابقت ندارند میتوانند باعث توقف فریم در پایان مورد شوند (#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
mdhdbox of MP4 files to handle-1values (#1819). - افزودن پشتیبانی برای شناسایی جعبه
h263در فایلهای MP4 برای ویدیو H.263 (#۱۸۲۱). - افزودن پشتیبانی از قالب فایل رسانه پایه AC-4 Level-4 ISO (#1265).
- به
- منبع داده:
-
HttpEngineDataSourceرا بهروز کنید تا استفاده از نسخه S افزونه ۷ بهجای سطح میانای برنامهسازی کاربردی ۳۴ مجاز شود (#۱۲۶۲). -
DataSourceContractTest: تأیید کنید کهDataSource.getUri()شناسه منبع یکسان حلشده را برمیگرداند (همانطور که مستند شده است). در مواردی که این با شناسه منبع یکسان درخواستشده متفاوت است، آزمایشها میتوانند این موضوع را بااستفاده از روش جدیدDataSourceContractTest.TestResource.Builder.setResolvedUri()نشان دهند. DataSourceContractTest: Assert thatDataSource.getUri()andgetResponseHeaders()return their 'open' value after a failed call toopen()(due to a 'not found' resource) and before a subsequentclose()call.- Overriding
DataSourceContractTest.getNotFoundResources()allows test sub-classes to provide multiple 'not found' resources, and to provide any expected headers too. این کار امکان تشخیص بین HTTP 404 (با سرصفحه) و «سرور پیدا نشد» (بدون سرصفحه) را فراهم میکند.
- Overriding
-
- صدا:
- پیکربندی خودکار فراداده بلندی صدای CTA-2075 در کدک درصورت وجود در رسانه.
- مطمئن شوید که هنگام جستجو، صدا بهآرامی کاهش مییابد.
- رفع صدای پاپ که ممکن است درطول جستجو رخ دهد.
- رفع انباشت خطای کوتاه کردن برای الگوریتم تغییر گام/کشش زمانی Sonic.
- رفع اشکال در
SpeedChangingAudioProcessorکه باعث ازدست رفتن فریمهای خروجی میشود.
- ویدیو:
-
MediaCodecVideoRendererاز رمزگشایی نمونههایی که نه پرداز شدهاند و نه بهعنوان مرجع توسط نمونههای دیگر استفاده میشوند، اجتناب میکند. - در میانای برنامهسازی کاربردی ۳۵ و بالاتر،
MediaCodecAdapterاکنون میتواندnullSurfaceرا درconfigureدریافت کند و با روش جدیدdetachOutputSurfaceتماس بگیرد تاSurfaceازپیش تنظیمشده را درصورت پشتیبانی کدک از آن بردارد (MediaCodecInfo.detachedSurfaceSupported). - هنگام پردازش
onOutputFormatChanged، از مقادیر نسبت ابعادی پیکسل ارائهشدهMediaCodecAdapterاستفاده کنید (#۱۳۷۱). - افزودن راهحل برای مشکل دستگاه در Galaxy Tab S7 FE که باعث میشود جاریسازیهای H264 امن با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#۱۶۱۹).
- افزودن راهحل برای کدکهایی که بعداز آخرین نمونه بدون برگرداندن سیگنال پایان جاریسازی گیر میکنند.
-
- نوشتار:
- افزودن
VoiceSpanسفارشی و پر کردن آن برای بخشهای صدای WebVTT (#۱۶۳۲). - Ensure WebVTT in HLS with very large subtitle timestamps (which overflow
a 64-bit
longwhen represented as microseconds and multiplied by the90,000MPEG 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
IllegalArgumentExceptionthrown by devices of certain manufacturers when setting the broadcast receiver for media button intents (#1730). - دکمههای فرمان را برای فایلهای رسانهای اضافه کنید. این کار Media3 API را برای آنچه
با کتابخانه قدیمی با
MediaBrowserCompatبهعنوانCustom browse actionsشناخته میشد اضافه میکند. توجه داشته باشید که با Media3، دکمههای فرمان برای موارد رسانهای هم برایMediaBrowserو هم برایMediaControllerدردسترس است. پیادهسازی کنشهای مرور سفارشی را ببینید. * رفع اشکالی که در آن کنترلکننده Media3 گاهی نمیتوانست به برنامه جلسه اجازه دهد پساز درخواستplay()، سرویس پیشزمینهای را شروع کند. -
CommandButton.Builder.setIconUriرا محدود کنید تا فقط شناسه منبع یکسان محتوا را بپذیرد. - Pass connection hints of a Media3 browser to the initial
MediaBrowserCompatwhen connecting to a legacyMediaBrowserCompat. سرویس میتواند اشارههای اتصال را که بهعنوان اشارههای ریشه با اولین تماس بهonGetRoot()ارسال شده است دریافت کند. - رفع اشکالی که در آن
MediaBrowserمتصل به سرویس مرورگر قدیمی، خطای ارسالشده توسط سرویس را پساز مشترک شدن مرورگر درparentidدریافت نمیکرد. - بهبود رفتار همکنشپذیری، بهطوریکه مرورگر Media3 که به
MediaBrowserServiceقدیمی متصل است، هنگام مشترک شدن در والد، فرزندانparentIdرا دو بار درخواست نکند.
- رابط کاربری:
- Make the stretched/cropped video in
PlayerView-in-Compose-AndroidViewworkaround opt-in, due to issues with XML-based shared transitions. برنامههایی که ازPlayerViewدرAndroidViewاستفاده میکنند بایدPlayerView.setEnableComposeSurfaceSyncWorkaroundرا فراخوانی کنند تا موافقت کنند (#1237، #1594). -
setFullscreenButtonStateرا بهPlayerViewاضافه کنید تا بهروزرسانیهای نماد دکمه تمامصفحه درصورت درخواست مجاز شود، یعنی بهصورت خارج از باند و نه واکنشی به تعامل کلیک (#1590، #184). - رفع اشکالی که در آن گزینه «هیچکدام» در انتخاب نوشتار کار نمیکند، اگر اولویتهای انتخاب قطعه نوشتاری تعریفشده توسط برنامه وجود داشته باشد.
- Make the stretched/cropped video in
- افزونه DASH:
- افزودن پشتیبانی برای دورههایی که در وسط بخش شروع میشوند (#۱۴۴۰).
- افزونه جاریسازی روان:
- رفع خطای
Bad magic number for Bundleهنگام پخش جاریسازیهای SmoothStreaming با قطعههای نوشتاری (#۱۷۷۹).
- رفع خطای
- افزونه RTSP:
- افزونههای رمزگشا (FFmpeg، VP9، AV1، و غیره):
- افزودن پیمانه رمزگشای IAMF که از بازپخش فایلهای MP4 حاوی قطعههای IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی میکند.
- بازپخش با چیدمان استریو و همچنین 5.1 با فضاسازی بههمراه ردیابی سر اختیاری فعال است، اما پشتیبانی از بازپخش دوگوشی درحالحاضر دردسترس نیست.
- افزودن پشتیبانی از صفحه ۱۶ کیلوبایتی برای افزونههای رمزگشا در Android 15 (#1685).
- افزودن پیمانه رمزگشای IAMF که از بازپخش فایلهای MP4 حاوی قطعههای IAMF بااستفاده از کتابخانه بومی libiamf برای ترکیب صدا پشتیبانی میکند.
- افزونه Cast:
- پاک کردن خط زمان را پساز قطع اتصال CastSession متوقف میکند، که به برنامه فرستنده امکان میدهد بازپخش را پساز قطع اتصال بهصورت محلی ازسر بگیرد.
- وقتی
Contextارائه شد،DeviceInfoCastPlayer را پر کنید. این امکان پیوند دادن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:
- استخراجکنندهها:
- MP3: رفع خطای
Searched too many bytesبا نادیده گرفتن صحیح دادههای غیرMP3 دنبالهدار براساس فیلد طول در قابInfo(#1480).
- MP3: رفع خطای
- نوشتار:
- TTML: رفع مشکل مدیریت مقادیر درصد
tts:fontSizeبرای اطمینان از اینکه بهدرستی از گرههای والد با مقادیر درصدtts:fontSizeبه ارث برده میشوند. - رفع
IndexOutOfBoundsExceptionدرLegacySubtitleUtilبهدلیل مدیریت نادرست موردی که زمان شروع خروجی درخواستی بزرگتر یا مساوی زمان رویداد نهایی درSubtitleاست (#۱۵۱۶).
- TTML: رفع مشکل مدیریت مقادیر درصد
- مدیریت حقوق دیجیتال:
- رفع خطای
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEدر دستگاههای دارای میانای برنامهسازی کاربردی ۳۱+ که محتوای L1 Widevine پخش میکنند. این خطا بهدلیل اجرای ناقص روش چارچوبMediaDrm.requiresSecureDecoder(#۱۶۰۳) ایجاد شده است.
- رفع خطای
- جلوه:
- روش
release()را بهGlObjectsProviderاضافه کنید.
- روش
- جلسه:
- افزونه RTSP:
- رد شدن از «شرحهای رسانه» نامعتبر در تجزیه SDP (#1087).
نسخه ۱.۴.۰
۲۵ ژوئیه ۲۰۲۴
androidx.media3:media3-*:1.4.0 منتشر شده است. نسخه ۱.۴.۰ شامل این
ثبتها است.
- کتابخانه مشترک:
- بهجای نادیده گرفتن تماسهای جستجوی بدون عملیات احتمالی، آنها را به روشهای محافظتشده
BasePlayer.seekTo()وSimpleBasePlayer.handleSeek()بازارسال کنید. اگر این روشها را در پخشکننده سفارشی پیادهسازی میکنید، ممکن است لازم باشد این تماسهای اضافی را باmediaItemIndex == C.INDEX_UNSETمدیریت کنید. - برداشتن وابستگی کامپایل در شکرزدایی Java 8 بهبودیافته (#۱۳۱۲).
- Ensure the duration passed to
MediaItem.Builder.setImageDurationMs()is ignored for a non-imageMediaItem(as documented). Format.customDataرا برای ذخیره اطلاعات سفارشی ارائهشده توسط برنامه درباره نمونههایFormatاضافه کنید.
- بهجای نادیده گرفتن تماسهای جستجوی بدون عملیات احتمالی، آنها را به روشهای محافظتشده
- ExoPlayer:
BasePreloadManagerرا اضافه کنید که پیشبارگیری را برای چندین منبع براساس اولویتهای تعریفشده توسطrankingDataآنها هماهنگ میکند. سفارشیسازی با گسترش این کلاس امکانپذیر است. افزودنDefaultPreloadManagerکه ازPreloadMediaSourceبرای پیشبارگذاری نمونههای رسانه منابع در حافظه استفاده میکند، و از عدد صحیحrankingDataاستفاده میکند که نمایه موردی را در میانای کاربری نشان میدهد.PlayerIdرا به اکثر روشهایLoadControlاضافه کنید تا پیادهسازیهایLoadControlبتوانند از چند بازیکن پشتیبانی کنند.- برداشتن
Buffer.isDecodeOnly()وC.BUFFER_FLAG_DECODE_ONLY. نیازی به تنظیم این پرچم نیست زیرا پردازنده گرافیکی و رمزگشاها براساس مُهر زمان تصمیم میگیرند میانگیرها را نادیده بگیرند. پیادهسازیهای سفارشی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
Infoframe over the size reported by the underlying stream (e.g. file size, or HTTPContent-Lengthheader). این کار به مستثنی کردن دادههای پیشپرده غیرقابلپخش (مثلاً طرح آلبوم) از محاسبات جستجوی نرخ بیت ثابت کمک میکند و جستجوها را دقیقتر میکند (#۱۳۷۶). - MP3: Use the frame count and other data in an
Infoframe (if present) to compute an average bitrate for constant bitrate seeking, rather than extrapolating from the bitrate of the frame after theInfoframe, which may be artificially small, e.g.PCUTframe (#1376). - رفع مشکل استخراج قالب صوتی PCM در محتواهای AVI.
- صدا:
- رفع مشکل ویژگیهای کدگذاری 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) بهاشتباه به برچسبهای ID3TSO2،TSOA، وTSOPنگاشت میشدند (#۱۳۰۲). - رفع مشکل خواندن برچسبهای عددی
gnre(ژانر) وtmpo(تمپو) MP4 (/iTunes) وقتی مقدار بیشتر از یک بایت باشد. - Propagate ID3
TCONframe toMediaMetadata.genre(#1305).
- رفع نگاشت MP4 به برچسبهای مرتبسازی ID3. قبلاً برچسبهای MP4 «مرتبسازی آلبوم» (
- تصویر:
- افزودن پشتیبانی از شبکههای ریزعکس DASH غیرمربعی (#1300).
- افزودن پشتیبانی از AVIF برای API 34+.
nullرا بهعنوان پارامتر برایExoPlayer.setImageOutput()مجاز کنید تاImageOutputقبلاً تنظیمشده پاک شود.
- منبع داده:
- پشتیبانی از شناسه منبع یکسان منبع خام
android.resource://package/idرا پیادهسازی کنید که در آنpackageبا بسته برنامه فعلی متفاوت است. این مورد قبلاً برای کار کردن مستند نشده بود، اما روشی کارآمدتر برای دسترسی به منابع در بستهای دیگر نسبت به نام است. - Eagerly check
urlis non-null in theDataSpecconstructors. این پارامتر قبلاً بهعنوان غیرتهی حاشیهنویسی شده است. - Allow
ByteArrayDataSourceto resolve a URI to a byte array duringopen(), instead of being hard-coded at construction (#1405).
- پشتیبانی از شناسه منبع یکسان منبع خام
- مدیریت حقوق دیجیتال:
- Allow setting a
LoadErrorHandlingPolicyonDefaultDrmSessionManagerProvider(#1271).
- Allow setting a
- جلوه:
- پشتیبانی از چندین تغییر سرعت در یک
EditedMediaItemیاCompositionدرSpeedChangeEffect. - پشتیبانی از خروجی HLG و PQ از ورودی نقشه بیتی Ultra HDR.
- افزودن پشتیبانی از EGL_GL_COLORSPACE_BT2020_HLG_EXT که خروجی سطح HLG را در ExoPlayer.setVideoEffect و Debug SurfaceView مربوط به Transformer بهبود میبخشد.
- پیادهسازی ماتریس «همپوشانی» را بهروز کنید تا با برگرداندن مقادیر x و y اعمالشده در
setOverlayFrameAnchor()، با مستندات سازگار شود. اگر ازOverlaySettings.Builder.setOverlayFrameAnchor()استفاده میکنید، مقادیر x و y آن را با ضرب کردن در-1برعکس کنید. - رفع اشکال مربوط به ازکار افتادن
TimestampWrapperهنگام استفاده باExoPlayer#setVideoEffects(#821). - فضای کاری رنگ SDR پیشفرض را از رنگهای خطی به ویدیو BT 709 SDR الکتریکی تغییر دهید. همچنین گزینه سومی برای حفظ فضای رنگی اصلی ارائه دهید.
- Allow defining indeterminate z-order of EditedMediaItemSequences (#1055).
- حفظ محدوده درخشندگی ثابت در بخشهای مختلف محتوای HDR (از محدوده HLG استفاده میکند).
- پشتیبانی از همپوشانیهای Ultra HDR (نقشه بیتی) در محتوای HDR را اضافه کنید.
- اجازه دادن به استفاده از جلوههای
SeparableConvolutionقبلاز میانای برنامهسازی کاربردی ۲۶. 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
NullPointerExceptionwhen usingdata://ad tag URIs (#700).
- جلسه:
- پیشفرض
CommandButton.enabledرا بهtrueتغییر دهید و مطمئن شوید که مقدار میتواند برای کنترلکنندهها نادرست باقی بماند، حتی اگر فرمان منسوب دردسترس باشد. - ثابتهای نماد را برای
CommandButtonاضافه کنید که باید بهجای منابع نماد سفارشی استفاده شود. -
MediaSessionService.isPlaybackOngoing()اضافه شد تا برنامهها بتوانند پرسوجو کنند که آیا سرویس باید درonTaskRemoved()متوقف شود یا نه (#۱۲۱۹). MediaSessionService.pauseAllPlayersAndStopSelf()را اضافه کنید که بهراحتی امکان توقف موقت بازپخش همه جلسهها را فراهم میکند وstopSelf()را فراخوانی کنید تا چرخه حیاتMediaSessionServiceرا خاتمه دهد.-
MediaSessionService.onTaskRemoved(Intent)را لغو کنید تا پیادهسازی پیشفرض ایمنی ارائه شود که اگر بازپخش درحال انجام باشد، سرویس را در پیشزمینه درحال اجرا نگه میدارد و درغیراینصورت سرویس را متوقف میکند. - پنهان کردن نوار جستجو در اعلان رسانه برای جاریسازیهای زنده با تنظیم نکردن مدت در فراداده جلسه پلاتفرم (#۱۲۵۶).
- تبدیل
MediaMetadataبهMediaDescriptionCompatرا تراز کنید تا هنگام انتخاب ویژگیهای فراداده، از همان ترتیب و منطق ترجیحی استفاده شود که در media1 استفاده میشود. MediaSession.sendError()را اضافه کنید که امکان ارسال خطاهای غیرمهلک به کنترلکننده Media3 را فراهم میکند. When using the notification controller (seeMediaSession.getMediaNotificationControllerInfo()), the custom error is used to update thePlaybackStateof the platform session to an error state with the given error information (#543).MediaSession.Callback.onPlayerInteractionFinished()را اضافه کنید تا به جلسهها اطلاع دهد که مجموعهای از تعاملات بازیکن از یک کنترلکننده خاص به پایان رسیده است.SessionErrorرا اضافه کنید و بهجای کد خطا از آن درSessionResultوLibraryResultاستفاده کنید تا اطلاعات بیشتری درباره خطا و نحوه حلوفصل آن (درصورت امکان) ارائه دهید.- کد برنامه آزمایشی کنترلکننده media3 را منتشر کنید که میتواند برای آزمایش تعامل با برنامههایی که جلسه رسانه منتشر میکنند استفاده شود.
- انتشار موارد اضافی منتقلشده به
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در ComposeAndroidViewدر API 34 میشد (#1237).
- افزودن پشتیبانی از نمایش تصویر به
- بارگیریها:
- مطمئن شوید که
DownloadHelperنمونههای منتشرنشدهRendererرا لو نمیدهد، که درنهایت میتواند منجر به ازکار افتادن برنامه باIllegalStateException: Too many receivers, total of 1000, registered for pid(#۱۲۲۴) شود.
- مطمئن شوید که
- افزونه Cronet:
SocketTimeoutExceptionرا درCronetDataSourceبرطرف کنید. در برخیاز نسخههای Cronet، درخواست ارائهشده توسط callback همیشه یکسان نیست. این امر منجر به تکمیل نشدن فراخوانی برگشتی و اتمام مهلت درخواست میشود (https://issuetracker.google.com/328442628).
- افزونه HLS:
- رفع اشکالی که در آن نمونههای EMSG معلق درانتظار ناپیوستگی
با انحراف نادرست در
HlsSampleStreamWrapperواگذار میشدند و باعثIndexOutOfBoundsExceptionیاIllegalArgumentExceptionمیشدند (#1002). - رفع اشکالی که در آن فهرستهای پخش غیر اصلی برای جاریسازیهای LL-HLS مدام بارگیری مجدد میشوند (#1240).
- رفع اشکالی که در آن فعال کردن CMCD برای HLS با بخشهای مقداردهی اولیه
منجر به
Source ErrorوIllegalArgumentExceptionمیشد. - رفع اشکالی که در آن فهرستهای پخش غیر اصلی درحال پخش درطول بازپخش زنده بازآوری نمیشوند (#۱۲۴۰).
- رفع اشکالی که در آن فعال کردن CMCD برای جاریسازیهای زنده HLS باعث
ArrayIndexOutOfBoundsExceptionمیشود (#1395).
- رفع اشکالی که در آن نمونههای EMSG معلق درانتظار ناپیوستگی
با انحراف نادرست در
- افزونه DASH:
- افزونه Cast:
- رفع اشکالی که عنوان آلبوم
MediaQueueItemرا به هنرمند در فایل رسانهای Media3 تبدیل میکرد (#1255).
- رفع اشکالی که عنوان آلبوم
- ابزارهای آزمایشی:
-
onInit()وonRelease()را درFakeRendererپیادهسازی کنید. - روشهای
TestPlayerRunHelper.runUntil()/playUntil()را تغییر دهید تا درصورت بروز خطاهای غیرمهلک (مثلاً خطاهای گزارششده بهAnalyticsListener.onVideoCodecError()) ناموفق شوند. برای غیرفعال کردن این رفتار، از زنجیره روش جدیدTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()استفاده کنید.
-
- برنامه نمایشی:
- از
DefaultPreloadManagerدر برنامه نمایشی کوتاه استفاده کنید. - اجازه دادن به تنظیم حالت تکرار با آرگومانهای
Intentاز خط فرمان (#۱۲۶۶). - وقتی دستگاه از
HttpEngineDataSourceپشتیبانی میکند، از آن بهعنوانHttpDataSourceاستفاده کنید.
- از
- برداشتن نمادهای منسوخشده:
- برداشتن
CronetDataSourceFactory. درعوض ازCronetDataSource.Factoryاستفاده کنید. - برخیاز سازندگان
DataSpecرا بردارید. درعوض ازDataSpec.Builderاستفاده کنید. - روش
setContentTypePredicate(Predicate)را ازDefaultHttpDataSource،OkHttpDataSource، وCronetDataSourceبردارید. درعوض، از روش معادل در هرXXXDataSource.Factoryاستفاده کنید. OkHttpDataSourceسازنده وOkHttpDataSourceFactoryرا بردارید. درعوض ازOkHttpDataSource.Factoryاستفاده کنید.- برداشتن
PlayerMessage.setHandler(Handler). درعوض ازsetLooper(Looper)استفاده کنید. - برداشتن فیلد
Timeline.Window.isLive. بهجای آن از روشisLive()استفاده کنید. -
DefaultHttpDataSourceسازنده را بردارید. درعوض ازDefaultHttpDataSource.Factoryاستفاده کنید. - برداشتن
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. درعوض ازDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSاستفاده کنید. - برداشتن
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). درعوض ازMediaCodecInfo.canReuseCodec(Format, Format)استفاده کنید. - روش
DrmSessionManager.DUMMYوgetDummyDrmSessionManager()را بردارید. درعوض ازDrmSessionManager.DRM_UNSUPPORTEDاستفاده کنید. - برداشتن
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)،AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)،AudioRendererEventListener.onAudioInputFormatChanged(Format)،VideoRendererEventListener.onVideoInputFormatChanged(Format). درعوض از سربارگذاریهایی استفاده کنید کهDecoderReuseEvaluationمیگیرند. - ثابتهای
RendererSupport.FormatSupportIntDef و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
CuesWithTiminginstances fromWebvttParser.parse(#1177).
- WebVTT: Prevent directly consecutive cues from creating spurious
additional
- مدیریت حقوق دیجیتال:
- Work around a
NoSuchMethodErrorwhich can be thrown by theMediaDrmframework instead ofResourceBusyExceptionorNotProvisionedExceptionon some Android 14 devices (#1145).
- Work around a
- جلوه:
- نگاشت رنگمایه PQ به SDR با تبدیل فضاهای رنگی بهبود یافته است.
- جلسه:
- رابط کاربری:
- اگر
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
artworkUriandartworkDatainMediaMetadata.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.onPositionDiscontinuityevent 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.Factoryused 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 و نگاشت آنها به پرچمهای نقش، به کاربران امکان میدهد انتخابهای آگاهانهتری برای قطعه صوتی داشته باشند (#۹۷۳).
- افزودن تجزیه AV1C اضافی به استخراجکننده MP4 برای بازیابی
مقادیر
- صدا:
- ویدیو:
- سازنده
MediaCodecVideoRendererرا که آرگومانVideoFrameProcessor.Factoryمیگیرد تغییر دهید و آن را با سازندهای که آرگومانVideoSinkProviderمیگیرد جایگزین کنید. برنامههایی که میخواهندVideoFrameProcessor.Factoryسفارشی تزریق کنند میتوانندCompositingVideoSinkProviderرا که ازVideoFrameProcessor.Factoryسفارشی استفاده میکند نمونهسازی کنند و ارائهدهنده سینک ویدیو را بهMediaCodecVideoRendererارسال کنند.
- سازنده
- نوشتار:
- رفع مشکل سریالسازی نشانههای بیتمپ برای حل خطای
Tried to marshall a Parcel that contained Binder objectsهنگام استفاده ازDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: مقدار
rowLockنادیده گرفته شود. مشخصات CEA-708-E S-2023 بیان میکند کهrowLockوcolumnLockهر دو باید درست فرض شوند، صرفنظر از مقادیر موجود در جاریسازی (پشتیبانیcolumnLockپیادهسازی نشده است، بنابراین عملاً همیشه نادرست فرض میشود).
- رفع مشکل سریالسازی نشانههای بیتمپ برای حل خطای
- تصویر:
- پشتیبانی از ریزعکسهای DASH را اضافه کنید. تصاویر شبکهای برش داده میشوند و ریزعکسهای تکی نزدیک به زمان ارائه به
ImageOutputارائه میشوند.
- پشتیبانی از ریزعکسهای DASH را اضافه کنید. تصاویر شبکهای برش داده میشوند و ریزعکسهای تکی نزدیک به زمان ارائه به
- مدیریت حقوق دیجیتال:
- نمونههای رمزگذارینشده «پیشنمونه واضح» را در محتوای DRM بلافاصله بهطور پیشفرض پخش کنید، حتی اگر کلیدهای نمونههای رمزگذاریشده بعدی هنوز آماده نباشند. اگر کلیدها هنوز آماده نباشند، این امر ممکن است منجر به توقف در اواسط بازپخش شود
وقتی موقعیت بازپخش به نمونههای رمزگذاریشده میرسد (اما قبلاً
بازپخش اصلاً تا این نقطه شروع نشده بود). این رفتار را میتوان
با
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyیاDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysغیرفعال کرد.- افزونه IMA:
- رفع مشکلی که در آن آگهیهای DASH و HLS بدون پسوند فایل مناسب پخش نمیشوند.
- نمونههای رمزگذارینشده «پیشنمونه واضح» را در محتوای DRM بلافاصله بهطور پیشفرض پخش کنید، حتی اگر کلیدهای نمونههای رمزگذاریشده بعدی هنوز آماده نباشند. اگر کلیدها هنوز آماده نباشند، این امر ممکن است منجر به توقف در اواسط بازپخش شود
وقتی موقعیت بازپخش به نمونههای رمزگذاریشده میرسد (اما قبلاً
بازپخش اصلاً تا این نقطه شروع نشده بود). این رفتار را میتوان
با
- جلسه:
- غیرفعال کردن تشخیص دوکلیک برای برنامههای تلویزیون (#962).
- رفع مشکل عدم انتقال
MediaItem.RequestMetadataبا موارد اضافی غیرتهی بین کنترلکنندههای رسانه و جلسهها. - سازنده را به
MediaLibrarySession.Builderاضافه کنید که فقطContextرا بهجایMediaLibraryServiceمیگیرد.
- افزونه HLS:
HlsMediaPeriodرا به رؤیتپذیری بسته-خصوصی کاهش دهید. این نوع نباید مستقیماً از خارج از بسته HLS وابسته باشد.- Resolve seeks to beginning of a segment more efficiently (#1031).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، MIDI، و غیره):
- رمزگشای MIDI: نادیده گرفتن پیامهای رویداد SysEx (#۷۱۰).
- ابزارهای آزمایشی:
- بازپخش را در
TestPlayerRunHelper.playUntilPositionموقتاً متوقف نکن. آزمایش بازپخش را در حالت پخش نگه میدارد، اما پیشرفت را تا زمانی که آزمایش بتواند ادعاها و اقدامات بیشتری اضافه کند، تعلیق میکند.
- بازپخش را در
- برنامه نمایشی:
- افزودن یک ماژول نمایشی کوتاه برای نمایش استفاده از
PreloadMediaSourceبا مورد استفاده محتوای کوتاه.
- افزودن یک ماژول نمایشی کوتاه برای نمایش استفاده از
نسخه 1.3.0-rc01
۲۲ فوریه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه 1.3.0-beta01
۷ فوریه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه 1.3.0-alpha01
۱۵ ژانویه ۲۰۲۴
از نسخه پایدار ۱.۳.۰ استفاده کنید.
نسخه ۱.۲.۰
نسخه ۱.۲.۱
۹ ژانویه ۲۰۲۴
- ExoPlayer:
- رفع مشکل مربوط به جستجوی دستی خارج از محدوده
LiveConfiguration.min/maxOffsetکه باعث میشد افست بهmin/maxOffsetبرگردد. - رفع مشکل اشتباه بودن طرحبندی کانال OPUS و VORBIS برای کانالهای ۳، ۵، ۶، ۷، و ۸ (#۸۳۹۶).
- رفع مشکل مربوط به انتخاب قطعه پساز جستجو تا صفر در جاریسازی زنده که بهاشتباه اجازه میداد جاریسازی از موقعیت پیشفرض خود شروع شود (#۹۳۴۷).
- رفع مشکل دریافت مقادیر منفی برای
bufferedDurationUsاز منابع تکهای توسط نمونههای جدیدCmcdData.Factoryکه منجر بهIllegalArgumentExceptionمیشد (#۸۸۸).
- رفع مشکل مربوط به جستجوی دستی خارج از محدوده
- ترانسفورماتور:
- مشکلی را که در آن کدبند بهدلیل تنظیم نرخ عملیاتی بالا در زمان پیکربندی خطا میداد، برطرف کنید.
- استخراجکنندهها:
- قطعههای HEVC ثانویه (غیرقابلپخش) در عکسهای حرکتی JPEG را بهعنوان
ROLE_FLAG_ALTERNATEعلامتگذاری کنید تا بهدلیل وضوح بالاترشان بهطور خودکار برای بازپخش انتخاب نشوند. - رفع مشکل تشخیص قاب کلیدی اشتباه برای جاریسازیهای TS H264 (#864).
- برآورد مدتزمان جاریسازیهای TS که طولانیتر از ۴۷۷۲۱ ثانیه هستند اصلاح شد (#۸۵۵).
- قطعههای HEVC ثانویه (غیرقابلپخش) در عکسهای حرکتی JPEG را بهعنوان
- صدا:
- Fix handling of EOS for
SilenceSkippingAudioProcessorwhen called multiple times (#712).
- Fix handling of EOS for
- ویدیو:
- افزودن راهحل برای مشکل دستگاه در Galaxy Tab S7 FE، Chromecast با Google TV، و Lenovo M10 FHD Plus که باعث میشود جاریسازیهای AVC با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#693).
- فراداده:
- رفع اشکالی که در آن
MediaMetadataفقط از نظرات Vorbis با کلیدهای حروف بزرگ پر میشد (#876). - Catch
OutOfMemoryErrorwhen parsing very large ID3 frames, meaning playback can continue without the tag info instead of playback failing completely.
- رفع اشکالی که در آن
- مدیریت حقوق دیجیتال:
- Extend workaround for spurious ClearKey
https://default.urllicense URL to API 33+ (previously the workaround only applied on API 33 exactly) (#837). - رفع
ERROR_DRM_SESSION_NOT_OPENEDهنگام جابهجایی از محتوای رمزگذاریشده به محتوای واضح بدون سطح متصل به پخشکننده. خطا بهدلیل استفاده نادرست از رمزگشای ایمن برای پخش محتوای واضح بود.
- Extend workaround for spurious ClearKey
- جلسه:
- کلیدها و مقادیر سفارشی را در
MediaMetadataCompatبهMediaMetadata.extrasوMediaMetadata.extrasبهMediaMetadataCompatقرار دهید (#756، #802). - رفع مشکل همهفرستی
notifyChildrenChangedبرای کنترلکنندههای قدیمی (#644). - اشکالی که در آن تنظیم زمان منفی برای زمانسنج غیرفعالشده
setWhenاعلان باعث ازکارافتادن برخیاز دستگاهها میشد برطرف شد (#903). - رفع مشکل
IllegalStateExceptionزمانی که کنترلکننده اعلان رسانه اتصال را هنگام درخواست اولین بهروزرسانی اعلان تکمیل نکرده است (#917).
- کلیدها و مقادیر سفارشی را در
- رابط کاربری:
- افزونه DASH:
- تجزیه «f800» بهعنوان تعداد کانال ۵ برای Dolby در مانیفست DASH (#688).
- افزونههای رمزگشا (FFmpeg، VP9، AV1، MIDI، و غیره):
- افزونه Cast:
- Sanitize creation of a
Timelineto not crash the app when loading media fails on the cast device (#708).
- Sanitize creation of a
نسخه ۱.۲.۰
۱۵ نوامبر ۲۰۲۳
- کتابخانه مشترک:
- پارامتر
@Nullable Throwableرا به روشهای موجود در میانایLog.Loggerاضافه کنید. پارامترmessageبرای این روشها دیگر حاوی هیچ اطلاعاتی دربارهThrowableکه به روشهایLog.{d,i,w,e}()ارسال شده است نیست، بنابراین پیادهسازیها باید درصورت تمایل این اطلاعات را بهصورت دستی اضافه کنند (احتمالاً بااستفاده ازLogger.appendThrowableString(String, Throwable)). - مشکل سازگاری Kotlin را که در آن پارامترهای نوع عمومی قابلتهی
و انواع عنصر آرایه قابلتهی بهعنوان قابلتهی شناسایی نمیشوند برطرف کنید. نمونهها
پارامترهای روش
TrackSelectorResultوSimpleDecoderهستند (#6792). - تغییر رابط کاربری پیشفرض و رفتار اعلان در
Util.shouldShowPlayButtonبرای نشان دادن دکمه «پخش» درحالیکه بازپخش موقتاً متوقف شده است (مثلاً بهدلیل ازدست رفتن موقت تمرکز صوتی). بااستفاده ازPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)یاMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213) میتوان رفتار قدیمی را حفظ کرد. - برای رفع مشکل،
androidx.annotation:annotation-experimentalرا به1.3.1ارتقا دهید https://issuetracker.google.com/251172715. ExoPlayer.setAudioAttributesرا به میانایPlayerمنتقل کنید.
- پارامتر
- ExoPlayer:
- رفع مشکلات جستجو در جاریسازیهای AC4 که بهدلیل عدم شناسایی صحیح نمونههای فقط رمزگشایی ایجاد میشد (#۱۱۰۰۰).
- Add suppression of playback on unsuitable audio output devices (e.g. the
built-in speaker on Wear OS devices) when this feature is enabled via
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. اگر هنگام تلاش برای بازپخش، خروجی صوتی مناسبی دردسترس نباشد یا اگر همه خروجیهای مناسب درطول بازپخش قطع شوند، دلیل توقف بازپخش بهصورتPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTبهروزرسانی خواهد شد. وقتی خروجی مناسبی متصل شود، دلیل توقف برداشته خواهد شد. MediaSource.canUpdateMediaItemوMediaSource.updateMediaItemرا اضافه کنید تا بهروزرسانیهایMediaItemرا پساز ایجاد ازطریقPlayer.replaceMediaItem(s)بپذیرید.- بهروزرسانیهای
MediaItemبرای همه کلاسهایMediaSourceارائهشده توسط کتابخانه ازطریقPlayer.replaceMediaItem(s)مجاز شد (#۳۳، #۹۹۷۸). - نام
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وdurationUsSampleConsumer.queueInputBitmapبهTimestampIteratorتغییر کرد.
- انتخاب قطعه:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessرا اضافه کنید تا بهطور صریح سازگاری غیریکپارچه را مجاز یا غیرمجاز کنید. پیشفرض روی رفتار فعلیtrueباقی میماند.
- استخراجکنندهها:
- MPEG-TS: با ارسال آخرین واحد دسترسی جاریسازی به صف نمونه، مطمئن شوید که آخرین فریم رندر شده است (#۷۹۰۹).
- Fix typo when determining
rotationDegrees.projectionPosePitchبهprojectionPoseRollتغییر کرد (#۴۶۱). - این فرض را که نمونههای
Extractorرا میتوان مستقیماً باinstanceofبازرسی کرد بردارید. اگر میخواهید به جزئیات پیادهسازیExtractorدسترسی زمان اجرا داشته باشید، ابتدا بایدExtractor.getUnderlyingInstanceرا فراخوانی کنید. -
BmpExtractorاضافه کنید. -
WebpExtractorاضافه کنید. -
HeifExtractorاضافه کنید. - پشتیبانی از QuickTime classic
به
Mp4Extractorاضافه شد.
- صدا:
- افزودن پشتیبانی از PCM با ترتیب بایتهای باارزش ۲۴/۳۲ بیتی در MP4 و Matroska، و تجزیه کردن
کدبندی PCM برای
lpcmدر MP4. - پشتیبانی از استخراج صدای Vorbis در MP4 اضافه شد.
AudioSink.getFormatOffloadSupport(Format)را اضافه کنید که سطح پشتیبانی از بارگذاری را که سینک میتواند برای قالب ازطریقDefaultAudioOffloadSupportProviderارائه دهد بازیابی میکند.AudioOffloadSupportجدیدی را برمیگرداند که حاویisFormatSupported،isGaplessSupported، وisSpeedChangeSupportedاست.AudioSink.setOffloadMode()را که پیکربندی تخلیه بار در سینک صوتی ازطریق آن پیکربندی میشود اضافه کنید. پیشفرضAudioSink.OFFLOAD_MODE_DISABLEDاست.- میتوانید «انتقال بار» را ازطریق
setAudioOffloadPreferenceدرTrackSelectionParametersفعال کنید. اگر اولویت تنظیمشده فعال باشد، دستگاه از باربرداری برای قالب پشتیبانی کند، و انتخاب قطعه یک قطعه صوتی تکی باشد، باربرداری صوتی فعال خواهد شد. - اگر
audioOffloadModePreferenceرویAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDتنظیم شده باشد،DefaultTrackSelectorفقط یک قطعه صوتی را انتخاب میکند و تنها درصورتیکه قالب آن قطعه در باربرداری پشتیبانی شود. اگر هیچ قطعه صوتیای در حالت باربرداری پشتیبانی نشود، هیچ قطعهای انتخاب نخواهد شد. - Disabling gapless support for offload when pre-API level 33 due to playback position issue after track transition.
- پارامتر
enableOffloadرا از امضای روشDefaultRenderersFactory.buildAudioSinkبردارید. - برداشتن روش
DefaultAudioSink.Builder.setOffloadMode. - برداشتن مقدار intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - پشتیبانی از فراداده بدون وقفه Opus درطول بازپخش بارگذاری اضافه میشود.
- Allow renderer recovery by disabling offload if failed at first write (#627).
- «زمانبندی انتقال بار» را بهطور پیشفرض برای بازپخش انتقال بار فقط-صوتی فعال کنید.
- حذف
ExoPlayer.experimentalSetOffloadSchedulingEnabledوAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - نام
onExperimentalSleepingForOffloadChangedبهonSleepingForOffloadChangedو نامonExperimentalOffloadedPlaybackبهonOffloadedPlaybackتغییر کرد. - واسطها و تعاریف مربوط به حالت تخلیه بار صوتی
TrackSelectionParametersرا به کلاس داخلیAudioOffloadPreferencesمنتقل کنید. - افزودن تماسهای برگشتی
onAudioTrackInitializedوonAudioTrackReleasedبهAnalyticsListener،AudioRendererEventListenerوAudioSink.Listener. - رفع مشکل سرریز منفی میانگیر صوتی DTS Express (#650).
- رفع اشکال مربوط به بررسی قابلیتهای E-AC3-JOC که
IllegalArgumentException(#677) را ایجاد میکند.
- افزودن پشتیبانی از PCM با ترتیب بایتهای باارزش ۲۴/۳۲ بیتی در MP4 و Matroska، و تجزیه کردن
کدبندی PCM برای
- ویدیو:
- به
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وdurationUsVideoFrameProcessor.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» فعالنگهدارنده استفاده کنید (#۶۶۲).
- رفع شرایط رقابتی که ممکن بود هنگام بازگشت به TCP منجر به
- افزونههای رمزگشا (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_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- افزودن روشهای سربارگذاریشده به Player که به کاربران اجازه میدهد پرچمهای میزان صدا را مشخص کنند:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
Builderرا برایDeviceInfoاضافه کنید و سازنده موجود را منسوخ کنید.DeviceInfo.routingControllerIdرا اضافه کنید تا شناسه کنترلکننده مسیریابی را برای بازپخشهای ازراهدور مشخص کنید.-
Player.replaceMediaItem(s)را بهعنوان میانبری برای افزودن و برداشتن موارد در همان موقعیت اضافه کنید (#۸۰۴۶).
- ExoPlayer:
- Allow ExoPlayer to have control of device volume methods only if
explicitly opted in. از
ExoPlayer.Builder.setDeviceVolumeControlEnabledبرای دسترسی به موارد زیر استفاده کنید:getDeviceVolume()isDeviceMuted()-
setDeviceVolume(int)وsetDeviceVolume(int, int) -
increaseDeviceVolume(int)وincreaseDeviceVolume(int, int) -
decreaseDeviceVolume(int)وdecreaseDeviceVolume(int, int)
FilteringMediaSourceرا اضافه کنید که امکان فیلتر کردن انواع قطعههای دردسترس ازMediaSourceرا فراهم میکند.- پشتیبانی از گنجاندن «دادههای مشترک کارخواه رسانه» (CMCD) در درخواستهای خروجی قالبهای جاریسازی تطبیقی DASH، HLS، و SmoothStreaming را اضافه کنید. فیلدهای زیر،
br،bl،cid،rtp، وsid، گنجانده شدهاند (#۸۶۹۹). ساختار میانای برنامهسازی کاربردی و روشهای میانای برنامهسازی کاربردی:- ثبت CMCD بهطور پیشفرض غیرفعال است، از
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)برای فعال کردن آن استفاده کنید. - همه کلیدها بهطور پیشفرض فعال هستند،
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)را لغو کنید تا کلیدهای ثبتشده را فیلتر کنید. - برای فعال کردن ثبت گزارش کلید سفارشی،
CmcdConfiguration.RequestConfig.getCustomData()را لغو کنید.
- ثبت CMCD بهطور پیشفرض غیرفعال است، از
- افزودن کنش اضافی به مانیفست نسخه نمایشی اصلی برای آسانتر کردن
شروع برنامه نسخه نمایشی با فایل
*.exolist.jsonسفارشی (#۴۳۹). - برای استفاده از
Effectدرطول بازپخش ویدیو،ExoPlayer.setVideoEffects()را اضافه کنید. -
SampleQueueرا بهروز کنید تاsourceIdرا بهجایintبهعنوانlongذخیره کند. این کار امضاهای روشهای عمومیSampleQueue.sourceIdوSampleQueue.peekSourceIdرا تغییر میدهد. - پارامترهایی به روشهای
LoadControlshouldStartPlaybackوonTracksSelectedاضافه کنید که امکان مرتبط کردن این روشها را باMediaPeriodمربوطه فراهم کند. - امضای
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)را با افزودن پارامتر خط زمان که حاوی دورههایی با شناسههای کاربری یکتا است و بهعنوان کلید در نقشه استفاده میشود تغییر دهید. این کار برای جلوگیری از مشکلات همزمانی در جاریسازیهای زنده چنددورهای لازم است. - منسوخ کردن
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)وBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). بهجای آن، میتوان گونه روشهای بدونmediaTimeOffsetUsرا فراخوانی کرد. توجه داشته باشید که حتی برای انواع منسوخشده، آفست دیگر بهstartTimeUsوendTimeUsاشیاءMediaLoadDataکه توسط توزیعکننده ارسال میشوند اضافه نمیشود. - نام
ExoTrackSelection.blacklistرا بهexcludeTrackوisBlacklistedرا بهisTrackExcludedتغییر دهید. - رفع رفتار ناسازگار بین
ExoPlayer.setMediaItem(s)وaddMediaItem(s)هنگام فراخوانی در فهرست پخش خالی.
- Allow ExoPlayer to have control of device volume methods only if
explicitly opted in. از
- ترانسفورماتور:
- برداشتن
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). درعوض ازExoPlayerAssetLoader.Factory(MediaSource.Factory)وTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)استفاده کنید. - برداشتن
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - اشکالی برطرف شد که در آن اگر پایان جاریسازی ویدیو در لحظهای که فریم ورودی درانتظار پردازش بود علامتگذاری میشد، تبدیل ممکن بود گیر کند (و منجر به وقفه زمانی در همفرست شود).
- برای گسترش پشتیبانی، کدکها را بهجای استفاده از ابزارهای کمکی
findDecoder/EncoderForFormat، ازطریقMediaCodecListپُرسمان کنید. - پیکربندی قاب B را در
DefaultEncoderFactoryبردارید چون در برخی دستگاهها کار نمیکند.
- برداشتن
- انتخاب قطعه:
- افزودن
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeکه بهطور پیشفرض غیرفعال است. وقتی فعال باشد،DefaultTrackSelectorدرصورت تغییر قابلیتهای پردازشکننده، انتخاب قطعه جدیدی را راهاندازی میکند.
- افزودن
- استخراجکنندهها:
- صدا:
- رفع اشکالی که در آن برخیاز بازپخشها هنگام فعال بودن تونلسازی و
AudioProcessorsناموفق بودند، مثلاً برای برش بدون وقفه (#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.onVideoSizeChangedis called accordingly whenPlayer.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را برای نوشتن عناصر میانای کاربر سفارشی با دکمه پخش/مکث اضافه کنید.
- روشهای Util
- افزونه RTSP:
- افزونه DASH:
- برای جاریسازیهای DASH چنددورهای، جابهجایی زمانی رسانه را از
MediaLoadData.startTimeMsوMediaLoadData.endTimeMsبردارید. - رفع اشکالی که در آن آمادهسازی مجدد منبع رسانه Dash زنده چنددورهای
IndexOutOfBoundsExceptionتولید میکرد (#۱۰۸۳۸).
- برای جاریسازیهای DASH چنددورهای، جابهجایی زمانی رسانه را از
- افزونه HLS:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)را اضافه کنید تا زمان وقفه برای رشته بارگیری تنظیم شود تا منتظر بماندTimestampAdjusterمقداردهی اولیه شود. اگر مقداردهی اولیه قبلاز اتمام مهلت تکمیل نشود،PlaybackExceptionایجاد میشود تا از توقف بیپایان بازپخش جلوگیری شود. زمان اتمام بهطور پیشفرض روی صفر تنظیم شده است (#323).
- ابزارهای آزمایشی:
- بررسی عدم حساسیت به بزرگی و کوچکی حروف طرحواره URI در
DataSourceContractTest.
- بررسی عدم حساسیت به بزرگی و کوچکی حروف طرحواره URI در
- برداشتن نمادهای منسوخشده:
- سازندههای
DefaultAudioSinkرا بردارید، درعوض ازDefaultAudioSink.Builderاستفاده کنید. HlsMasterPlaylistرا بردارید، درعوض ازHlsMultivariantPlaylistاستفاده کنید.- برداشتن
Player.stop(boolean). درعوض ازPlayer.stop()وPlayer.clearMediaItems()(اگرresettrueاست) استفاده کنید. - دو سازنده
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ممکن است باعث شودMediaControllerIllegalStateExceptionرا صادر کند.
- مشکلی که باعث میشد
نسخه ۱.۰.۱
۱۸ آوریل ۲۰۲۳
androidx.media3:media3-*:1.0.1 منتشر شده است. نسخه ۱.۰.۱ حاوی این
ثبتها است.
این نسخه با نسخه ExoPlayer 2.18.6 مطابقت دارد.
- کتابخانه اصلی:
- بازنشانی کردن لغو جاریسازی زنده هدف هنگام جستجوی موقعیت پیشفرض (#11051).
- رفع اشکالی که در آن جاریسازیهای نمونه خالی در رسانه میتوانست باعث توقف بازپخش شود.
- جلسه:
- رفع اشکالی که در آن چند مورد صف یکسان منتشرشده توسط یک
MediaSessionCompatقدیمی منجر به استثنا درMediaControllerمیشود (#۲۹۰). - افزودن بازارسال مفقود
MediaSession.broadcastCustomCommandبهMediaControllerCompat.Callback.onSessionEventقدیمی (#۲۹۳). - رفع اشکالی که در آن فراخوانی
MediaSession.setPlayerفرمانهای دردسترس را بهروز نمیکند. - رفع مشکل نادیده گرفته شدن نمونههای
TrackSelectionOverrideارسالشده ازMediaControllerدرصورت ارجاع به گروهی باFormat.metadata(#۲۹۶). - مشکلی را برطرف کنید که در آن
Player.COMMAND_GET_CURRENT_MEDIA_ITEMباید برای دسترسی به فراداده ازطریقMediaSessionCompatقدیمی دردسترس باشد. - رفع مشکل مربوط به نمونههای
MediaSessionدر رشته پسزمینه که باعث ازکارافتادن هنگام استفاده درMediaSessionServiceمیشود (#۳۱۸). - رفع مشکلی که در آن گیرنده دکمه رسانه توسط کتابخانه اعلام میشد بدون اینکه برنامه چنین قصدی داشته باشد (#۳۱۴).
- رفع اشکالی که در آن چند مورد صف یکسان منتشرشده توسط یک
- DASH:
- رفع مشکل مدیریت خطوط زمانی بخشهای خالی (#11014).
- RTSP:
- اگر «راهاندازی RTSP» با UDP بهدلیل «خطای RTSP ۴۶۱» UnsupportedTransport ناموفق بود، با TCP دوباره امتحان کنید (#۱۱۰۶۹).
نسخه ۱.۰.۰
۲۲ مارس ۲۰۲۳
androidx.media3:media3-*:1.0.0 منتشر شده است. نسخه ۱.۰.۰ حاوی این
ثبتها است.
این نسخه با نسخه ExoPlayer 2.18.5 مطابقت دارد.
هیچ تغییری نسبتبه نسخه 1.0.0-rc02 وجود ندارد.
نسخه 1.0.0-rc02
۲ مارس ۲۰۲۳
androidx.media3:media3-*:1.0.0-rc02 منتشر شده است. نسخه 1.0.0-rc02 حاوی
این commitها است.
این نسخه با نسخه ExoPlayer 2.18.4 مطابقت دارد.
- کتابخانه اصلی:
- بارگیریها:
- Make the maximum difference of the start time of two segments to be
merged configurable in
SegmentDownloaderand subclasses (#248).
- Make the maximum difference of the start time of two segments to be
merged configurable in
- صدا:
- ویدیو:
- قالب HEVC HDR10 را بهجای
HEVCProfileMain10بهHEVCProfileMain10HDR10نگاشت کنید. - افزودن راهحل برای مشکل دستگاه در Chromecast با Google TV و Lenovo M10 FHD Plus که باعث میشود جاریسازیهای AVC با نرخ ۶۰ فریم در ثانیه بهعنوان پشتیبانینشده علامتگذاری شوند (#۱۰۸۹۸).
- رفع مشکلات عملکرد انتشار فریم هنگام پخش رسانه با نرخ فریم بسیار بالاتر از نرخ بازآوری صفحهنمایش.
- قالب HEVC HDR10 را بهجای
- بازیگران:
- Fix transient
STATE_IDLEwhen transitioning between media items (#245).
- Fix transient
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- جلسه:
- اشکالی که باعث میشد دکمه پخش/توقف اعلان با وضعیت پخشکننده بهروز نشود برطرف شد (#۱۹۲).
- افزونه IMA:
- رفع اشکالی که مانع از شروع جاریسازیهای DAI بدون آگهی میشد
زیرا اولین رویداد
LOADED(و در موارد بدون آگهی، تنها رویداد) دریافت نمیشد.
- رفع اشکالی که مانع از شروع جاریسازیهای DAI بدون آگهی میشد
زیرا اولین رویداد
نسخه 1.0.0-rc01
۱۶ فوریه ۲۰۲۳
androidx.media3:media3-*:1.0.0-rc01 منتشر شده است. نسخه 1.0.0-rc01 حاوی
این commitها است.
این نسخه با نسخه ExoPlayer 2.18.3 مطابقت دارد.
- کتابخانه اصلی:
- منطق ترتیب رمزگشای پردازنده را تغییر دهید تا اولویتهای
MediaCodecSelectorحفظ شود، حتی اگر رمزگشایی گزارش دهد که ممکن است نتواند رسانه را بهطور کارآمد پخش کند. برای مثال، با انتخابگر پیشفرض، رمزگشای سختافزاری که فقط پشتیبانی عملکردی دارد بر رمزگشای نرمافزاری که بهطور کامل از قالب پشتیبانی میکند ترجیح داده میشود (#۱۰۶۰۴). 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).
- اگر جدول نمونه (stbl) هنگام تجزیه اتمهای trak فاقد شرح نمونه (stsd) الزامی است، بهجای
- صدا:
- از نرخ بیت قالب صوتی فشردهشده برای محاسبه حداقل اندازه میانگیر
برای
AudioTrackدر بازپخشهای مستقیم (گذر مستقیم) استفاده کنید.
- از نرخ بیت قالب صوتی فشردهشده برای محاسبه حداقل اندازه میانگیر
برای
- نوشتار:
- رفع مشکل
TextRendererکه درصورت عدم وجود نشانه در فایل زیرنویس، نمایه نامعتبر (منفی) را بهSubtitle.getEventTimeارسال میکرد. - SubRip: پشتیبانی از فایلهای UTF-16 را درصورتیکه با علامت ترتیب بایت شروع شوند اضافه کنید.
- رفع مشکل
- فراداده:
- تجزیه چند مقدار جداشده با تهی از قابهای ID3، طبق مجوز ID3 v2.4.
MediaMetadata.mediaTypeرا اضافه کنید تا نوع محتوا یا نوع پوشه شرحدادهشده توسط فراداده را مشخص کنید.MediaMetadata.isBrowsableرا بهعنوان جایگزینMediaMetadata.folderTypeاضافه کنید. نوع پوشه در نسخه پخش بعدی منسوخ خواهد شد.
- DASH:
- تجزیه کامل برای مجموعههای اقتباس تصویر، ازجمله تعداد کاشیها اضافه شد (#۳۷۵۲).
- رابط کاربری:
- جلسه:
SimpleBasePlayerانتزاعی را برای کمک به پیادهسازی میانایPlayerبرای پخشکنندههای سفارشی اضافه کنید.- Add helper method to convert platform session token to Media3
SessionToken(#171). - از
onMediaMetadataChangedبرای راهاندازی بهروزرسانیهای جلسه رسانه پلاتفرم (#۲۱۹) استفاده کنید. - جلسه رسانه را بهعنوان آرگومان
getMediaButtons()ازDefaultMediaNotificationProviderاضافه کنید و برای شفافیت از فهرستهای تغییرناپذیر استفاده کنید (#۲۱۶). - Add
onSetMediaItemscallback listener to provide means to modify/setMediaItemlist, starting index and position by session before setting onto Player (#156). - Avoid double tap detection for non-Bluetooth media button events (#233).
- Make
QueueTimelinemore robust in case of a shady legacy session state (#241).
- فراداده:
- تجزیه چند مقدار جداشده با تهی از قابهای ID3، طبق مجوز ID3 v2.4.
MediaMetadata.mediaTypeرا اضافه کنید تا نوع محتوا یا نوع پوشه شرحدادهشده توسط فراداده را مشخص کنید.MediaMetadata.isBrowsableرا بهعنوان جایگزینMediaMetadata.folderTypeاضافه کنید. نوع پوشه در نسخه پخش بعدی منسوخ خواهد شد.
- افزونه Cast:
- ارتقای نسخه Cast SDK به ۲۱.۲.۰.
- افزونه IMA:
- برای جلوگیری از مشکلات رشتهبندی، شنونده پخشکننده
ImaServerSideAdInsertionMediaSourceرا در رشته برنامه بردارید. - ویژگی
focusSkipButtonWhenAvailableرا بهImaServerSideAdInsertionMediaSource.AdsLoader.Builderاضافه کنید تا تمرکز روی دکمه رد شدن در دستگاههای تلویزیون درخواست شود و آن را بهطور پیشفرض روی true تنظیم کنید. - روش
focusSkipButton()را بهImaServerSideAdInsertionMediaSource.AdsLoaderاضافه کنید تا بهصورت برنامهنویسیشده درخواست کنید که دکمه رد شدن در کانون توجه قرار گیرد. - Bump IMA SDK version to 3.29.0.
- برای جلوگیری از مشکلات رشتهبندی، شنونده پخشکننده
- برنامه نمایشی:
- درخواست اجازه اعلان برای اعلانهای بارگیری در زمان اجرا (#۱۰۸۸۴).
نسخه 1.0.0-beta03
۲۲ نوامبر ۲۰۲۲
androidx.media3:media3-*:1.0.0-beta03 منتشر شده است. نسخه 1.0.0-beta03
حاوی این 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).
- بارگیریها:
- ویدیو:
- اگر نمایشگر از 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
MediaControllerto seek over an ad in a period (#122). - وقتی بازپخش تمام میشود،
MediaSessionServiceاز پیشزمینه متوقف میشود و اعلانی برای بازراهاندازی بازپخش آخرین فایل رسانهای پخششده نشان داده میشود (#112). - سرویس پیشزمینهای را با قصد معوق برای مکث شروع نکنید (#۱۶۷).
- پنهان کردن دستی «نشان» مرتبط با اعلان ایجادشده توسط
DefaultNotificationProviderدر میانای برنامهسازی کاربردی ۲۶ و میانای برنامهسازی کاربردی ۲۷ (نشان بهطور خودکار در میانای برنامهسازی کاربردی ۲۸ و بالاتر پنهان میشود) (#۱۳۱). - رفع اشکالی که در آن اتصال دومین binder از MediaSession قدیمی به Media3 MediaController باعث ایجاد IllegalStateExceptions میشود (#۴۹).
- RTSP:
- 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که در برخی موارد کار نمیکرد اصلاح شد (#۱۱۶).
- مطمئن شوید که تغییر دادن
- استخراجکنندهها:
- DASH:
- تجزیه نشانی وب پروانه ClearKey از مانیفستها (#10246).
- رابط کاربری:
- Ensure TalkBack announces the currently active speed option in the playback controls menu (#10298).
- RTSP:
- افزودن مدیریت بسته تکهتکهشده VP8 (#110).
- افزونه Leanback:
- به تغییرات
playWhenReadyدرLeanbackAdapterگوش دهید (۱۰۴۲۰).
- به تغییرات
- بازیگران:
نسخه 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را اضافه کنید تا بازیکنان بتوانند یک مورد را تنظیم کنند.
- فعال کردن پشتیبانی از عیبیابی پلاتفرم Android ازطریق
- انتخاب قطعه:
- کلاس
TrackSelectionOverridesرا درTrackSelectionParametersادغام کنید، وTrackSelectionOverrideرا به کلاس سطح بالا ارتقا دهید. - نام
TracksInfoرا بهTracksو نامTracksInfo.TrackGroupInfoرا بهTracks.Groupتغییر دهید. نامPlayer.getCurrentTracksInfoوPlayer.Listener.onTracksInfoChangedنیز بهPlayer.getCurrentTracksوPlayer.Listener.onTracksChangedتغییر کرده است. این شامل «لغو منسوخ شدن» نام روشPlayer.Listener.onTracksChangedاما با انواع پارامترهای متفاوت است. DefaultTrackSelector.buildUponParametersوDefaultTrackSelector.Parameters.buildUponرا تغییر دهید تا بهجایDefaultTrackSelector.ParametersBuilderمنسوخشده،DefaultTrackSelector.Parameters.Builderرا برگرداند.- افزودن
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesکه بهطور پیشفرض فعال است. وقتی فعال باشد،DefaultTrackSelectorقطعههای صوتیای را ترجیح میدهد که تعداد کانالهای آنها از قابلیتهای خروجی دستگاه فراتر نرود. در دستگاههای دستی،DefaultTrackSelectorقالبهای استریو/مونو را به قالبهای صوتی چندکاناله ترجیح میدهد، مگراینکه قالب چندکاناله بتواند فراگیر شود (Android 12L+) یا قالب صدای فراگیر Dolby باشد. علاوهبراین، در دستگاههایی که از فضاییسازی صدا پشتیبانی میکنند،DefaultTrackSelectorتغییرات در ویژگیهای فضاییساز را پایش میکند و براساس آنها انتخاب قطعه جدید را راهاندازی میکند. دستگاههای دارایtelevisionحالت رابط کاربری از این محدودیتها مستثنی هستند و قالب با بالاترین تعداد کانال ترجیح داده خواهد شد. برای فعال کردن این ویژگی، نمونهDefaultTrackSelectorباید باContextساخته شود.
- کلاس
- ویدیو:
- نام
DummySurfaceرا بهPlaceholderSurfaceتغییر دهید. - افزودن پشتیبانی AV1 به
MediaCodecVideoRenderer.getCodecMaxInputSize.
- نام
- صدا:
- از رمزگشای صوتی LG AC3 که نوع MIME غیرمعیار را تبلیغ میکند استفاده کنید.
- نوع پاسخ
AudioAttributes.getAudioAttributesV21()را ازandroid.media.AudioAttributesبه کلاس پوشانندهAudioAttributesV21جدید تغییر دهید تا از درستیسنجی کند ART در میانای برنامهسازی کاربردی < ۲۱ جلوگیری شود. - پرسوجو از پلاتفرم (API 29+) یا فرض کردن تعداد کانال کدبندی صدا برای گذر صدا وقتی تعداد کانال صدای قالب تنظیم نشده باشد، که با آمادهسازی بدون تکه HLS رخ میدهد (۱۰۲۰۴).
- اگر رمزگشا صدای PCM با ۱۲ کانال را خروجی میدهد،
AudioTrackرا با ماسک کانالAudioFormat.CHANNEL_OUT_7POINT1POINT4پیکربندی کنید (#۱۰۳۲۲.
- مدیریت حقوق دیجیتال
- مطمئن شوید که جلسه DRM همیشه بهدرستی بهروز میشود وقتی که بلافاصله پساز تغییر قالب، جستجو انجام میشود (۱۰۲۷۴).
- نوشتار:
Player.getCurrentCues()را تغییر دهید تا بهجایList<Cue>،CueGroupرا برگرداند.- SSA: Support
OutlineColourstyle setting whenBorderStyle == 3(i.e.OutlineColoursets the background of the cue) (#8435). - CEA-708: دادهها را به چندین بلوک سرویس تجزیه کنید و بلوکهایی را که با شماره سرویس انتخابشده فعلی مرتبط نیستند نادیده بگیرید.
RawCcExtractorرا بردارید، که فقط برای مدیریت قالب زیرنویس داخلی Google استفاده میشد.
- استخراجکنندهها:
- رابط کاربری:
- Fix delivery of events to
OnClickListeners set onPlayerViewin the case thatuseController=false(#9605). همچنین ارسال رویدادها بهOnLongClickListenerرا برای همه پیکربندیهای نما اصلاح کنید. - Fix incorrectly treating a sequence of touch events that exit the bounds
of
PlayerViewbeforeACTION_UPas a click (#9861). - Fix
PlayerViewaccessibility issue where tapping might toggle playback rather than hiding the controls (#8627). -
TrackSelectionViewوTrackSelectionDialogBuilderرا بازنویسی کن تا بهجایExoPlayerبا میانایPlayerکار کنند. این کار امکان استفاده از نماها را با دیگر پیادهسازیهایPlayerفراهم میکند و وابستگی را از واحد واسط کاربر به واحد ExoPlayer برمیدارد. این یک تغییر ناسازگار است. - Don't show forced text tracks in the
PlayerViewtrack selector, and keep a suitable forced text track selected if "None" is selected (#9432).
- Fix delivery of events to
- DASH:
- Parse channel count from DTS
AudioChannelConfigurationelements. این گذرگاه صوتی را برای جاریسازیهای DTS دوباره فعال میکند (#۱۰۱۵۹). - ارسال
nullبهDashMediaSource.Factory.setCompositeSequenceableLoaderFactoryمجاز نیست. درصورت نیاز، نمونههایDefaultCompositeSequenceableLoaderFactoryرا میتوان بهطور صریح منتقل کرد.
- Parse channel count from DTS
- HLS:
- اگر ویژگی CODECS فهرست پخش حاوی کدک صوتی نباشد، به آمادهسازی تکهای برمیگردد (#10065).
- انتقال
nullبهHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory،HlsMediaSource.Factory.setPlaylistParserFactory، وHlsMediaSource.Factory.setPlaylistTrackerFactoryمجاز نیست. درصورت نیاز، نمونههایDefaultCompositeSequenceableLoaderFactory،DefaultHlsPlaylistParserFactory، یا ارجاع بهDefaultHlsPlaylistTracker.FACTORYرا میتوان بهطور صریح ارسال کرد.
- جاریسازی یکدست:
- ارسال
nullبهSsMediaSource.Factory.setCompositeSequenceableLoaderFactoryمجاز نیست. درصورت نیاز، نمونههایDefaultCompositeSequenceableLoaderFactoryرا میتوان بهطور صریح منتقل کرد.
- ارسال
- RTSP:
- افزودن خواننده RTP برای H263 (#63).
- افزودن خواننده RTP برای MPEG4 (#35).
- افزودن خواننده RTP برای HEVC (#36).
- افزودن خواننده RTP برای AMR. درحالحاضر فقط از جاریسازیهای AMR تککاناله و غیردرهمبافته پشتیبانی میشود. بار مفید AMR RTP مرکب پشتیبانی نمیشود. (#46)
- افزودن خواننده RTP برای VP8 (#۴۷).
- افزودن خواننده RTP برای WAV (#۵۶).
- رفع مشکل سرایند مجوز پایه 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).
- نسخه CMake را به
- برداشتن نمادهای منسوخشده:
- برداشتن
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). درعوض ازPlayer.Listener.onTracksChanged(Tracks)استفاده کنید. - برداشتن
Player.getCurrentTrackGroupsوPlayer.getCurrentTrackSelections. درعوض ازPlayer.getCurrentTracksاستفاده کنید. همچنین میتوانید به استفاده ازExoPlayer.getCurrentTrackGroupsوExoPlayer.getCurrentTrackSelectionsادامه دهید، هرچند این روشها همچنان منسوخشده باقی میمانند. - برداشتن
DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTوDEFAULT_TRACK_SELECTOR_PARAMETERSثابت. درصورت امکان، ازgetDefaultTrackSelectorParameters(Context)استفاده کنید، و درغیراینصورت ازDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTاستفاده کنید. - برداشتن سازنده
DefaultTrackSelector(ExoTrackSelection.Factory). درعوض ازDefaultTrackSelector(Context, ExoTrackSelection.Factory)استفاده کنید. - برداشتن
Transformer.Builder.setContext.Contextباید بهجای آن به سازندهTransformer.Builderمنتقل شود.
- برداشتن
نسخه 1.0.0-alpha03
۱۴ مارس ۲۰۲۲
androidx.media3:media3-*:1.0.0-alpha03 منتشر شده است. نسخه 1.0.0-alpha03
حاوی این
commitها است.
این مورد با نسخه ۲.۱۷.۱ ExoPlayer مطابقت دارد.
- صدا:
- رفع خطا در بررسی قابلیتهای صوتی Dolby Atmos (E-AC3-JOC) در HLS.
- استخراجکنندهها:
- FMP4: رفع مشکل مربوط به اینکه فراداده نمونه emsg ممکن است به ترتیب اشتباهی برای جاریسازیهای حاوی اتمهای emsg نسخه ۰ و نسخه ۱ خروجی داده شود (#۹۹۹۶).
- نوشتار:
- تعامل
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 anidin theTrackGroupconstructor. این بهروزرسانی خرابیای را برطرف میکند که هنگام ازسرگیری بازپخش پساز انتقال برنامه به پسزمینه با لغو قطعه فعال رخ میداد (#9718). - منطق در
AdaptiveTrackSelectionاصلاح شد تا درصورت کافی بودن پهنای باند شبکه، افزایش کیفیت مجاز باشد، حتی اگر بازپخش بسیار نزدیک به لبه زنده باشد (#9784).
- ویدیو:
- منطق جایگزین رمزگشا برای Dolby Vision را اصلاح کنید تا درصورت نیاز از رمزگشای سازگار H264/H265 استفاده کند.
- صدا:
- منطق بازگشت رمزگشا برای Dolby Atmos (E-AC3-JOC) اصلاح شد تا درصورت نیاز از رمزگشای سازگار E-AC3 استفاده شود.
- میاناهای برنامهسازی کاربردی
AudioCapabilitiesرا تغییر دهید تا بهجایnull،AudioCapabilities.DEFAULT_AUDIO_CAPABILITIESرا بهطور صریح ارسال کنند. - Allow customization of the
AudioTrackbuffer size calculation by injecting anAudioTrackBufferSizeProvidertoDefaultAudioSink. (#8891). - اگر اندازه میانگیر درخواستی بیشتر از ۱ مگابایت بود، ایجاد
AudioTrackرا دوباره امتحان کنید. (#9712).
- استخراجکنندهها:
- نوشتار:
- مدیریت حقوق دیجیتال:
playbackLooperازDrmSessionManager.(pre)acquireSessionحذف میشود. وقتیDrmSessionManagerتوسط برنامهای درMediaSourceسفارشی استفاده میشود،playbackLooperباید بهجای آن بهDrmSessionManager.setPlayerمنتقل شود.
- بازپخش آگهی / IMA:
- افزودن پشتیبانی برای درج آگهی پویا (DAI) در IMA (#8213).
- افزودن روشی به
AdPlaybackStateبرای امکان بازنشانی گروه آگهی بهطوریکه بتوان آن را دوباره پخش کرد (#۹۶۱۵). - Enforce playback speed of 1.0 during ad playback (#9018).
- رفع مشکلی که در آن گروه آگهیای که بار نشد باعث بازنشانی فوری بازپخش شد (#9929).
- رابط کاربری:
- DASH:
- افزودن ویژگیهای ضروری و تکمیلی تجزیهشده به
Representation(#9579). - پشتیبانی از نقش قطعه
forced-subtitle(#9727). - تفسیر نقش قطعه
mainبهعنوانC.SELECTION_FLAG_DEFAULTمتوقف شود. - منطق مستثنا کردن نشانی وب پایه برای مانیفستهایی که فضای نام DVB را اعلام نمیکنند اصلاح شد (#9856).
- پشتیبانی از نشانیهای وب نسبی
MPD.Location(#۹۹۳۹).
- افزودن ویژگیهای ضروری و تکمیلی تجزیهشده به
- HLS:
Format.labelرا برای جاریسازیهای HLS فقط صوتی بهدرستی پر کنید (#9608).- برای بهبود زمان راهاندازی، بهطور پیشفرض از آمادهسازی بدون قطعه استفاده کنید. اگر
نسخههای شما حاوی قطعههای زیرنویس ناشنوایان درهمگذاریشدهای است که در فهرست پخش اصلی اعلام
نشدهاند، باید آنها را به فهرست پخش اصلی اضافه کنید تا
برای بازپخش دردسترس باشند، یا آمادهسازی بدونتکه را با
HlsMediaSource.Factory.setAllowChunklessPreparation(false)خاموش کنید. - پشتیبانی از جستجوی دقیق قاب کلیدی در HLS (#۲۸۸۲).
- RTSP:
- ترانسفورماتور:
- حداقل نسخه میانای برنامهسازی کاربردی موردنیاز را به ۲۱ افزایش دهید.
- اکنون از
TransformationExceptionبرای توصیف خطاهایی که درطول تبدیل رخ میدهد استفاده میشود. TransformationRequestرا برای مشخص کردن گزینههای تبدیل اضافه کنید.- اجازه دهید چندین شنونده ثبت شوند.
- رفع مشکل گیر کردن Transformer وقتی خروجی کدک بهطور جزئی خوانده میشود.
- رفع NPE احتمالی در
Transformer.getProgressهنگام انتشار muxer throws. - برنامه نمایشی برای اعمال تبدیلها اضافه کنید.
- افزونه MediaSession:
- بهطور پیشفرض،
MediaSessionConnectorاکنون فهرست پخش را هنگام توقف پاک میکند. برنامههایی که میخواهند فهرست پخش حفظ شود میتوانندsetClearMediaItemsOnStop(false)را در اتصالدهنده فراخوانی کنند.
- بهطور پیشفرض،
- افزونه Cast:
- افزونه FFmpeg:
- وابسته کردن
build_ffmpeg.shبه ابزارهای bin متعلق به LLVM بهجای GNU (#9933).
- وابسته کردن
- سازگاری با Android 12:
- افزونه Cast را ارتقا دهید تا به
com.google.android.gms:play-services-cast-framework:20.1.0وابسته شود. نسخههای قبلیplay-services-cast-frameworkبا برنامههایی که Android 12 را هدف قرار میدهند سازگار نیستند و هنگام ایجادPendingIntentباIllegalArgumentExceptionازکار میافتند (#9528).
- افزونه Cast را ارتقا دهید تا به
- برداشتن نمادهای منسوخشده:
- برداشتن
Player.EventListener. درعوض ازPlayer.Listenerاستفاده کنید. - برداشتن
MediaSourceFactory#setDrmSessionManager،MediaSourceFactory#setDrmHttpDataSourceFactory، وMediaSourceFactory#setDrmUserAgent. درعوض ازMediaSourceFactory#setDrmSessionManagerProviderاستفاده کنید. - برداشتن
MediaSourceFactory#setStreamKeys. درعوض ازMediaItem.Builder#setStreamKeysاستفاده کنید. - برداشتن
MediaSourceFactory#createMediaSource(Uri). درعوض ازMediaSourceFactory#createMediaSource(MediaItem)استفاده کنید. setTagازDashMediaSource،HlsMediaSource، وSsMediaSourceبرداشته میشود. درعوض ازMediaItem.Builder#setTagاستفاده کنید.- برداشتن
DashMediaSource#setLivePresentationDelayMs(long, boolean). ازMediaItem.Builder#setLiveConfigurationوMediaItem.LiveConfiguration.Builder#setTargetOffsetMsبرای لغو کردن مانیفست، یا ازDashMediaSource#setFallbackTargetLiveOffsetMsبرای ارائه مقدار بازگشتی استفاده کنید. - برداشتن
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. دیگر امکان انصراف از اجرای رشته وجود ندارد. - برداشتن
ActionFileوActionFileUpgradeUtil. از ExoPlayer نسخه ۲.۱۶.۱ یا قبلاز آن برای استفاده ازActionFileUpgradeUtilبرای ادغام فایلهای کنش قدیمی درDefaultDownloadIndexاستفاده کنید. - برداشتن
ProgressiveMediaSource#setExtractorsFactory. درعوض از سازندهProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)استفاده کنید. ProgressiveMediaSource.Factory#setTagوProgressiveMediaSource.Factory#setCustomCacheKeyرا بردارید. درعوض ازMediaItem.Builder#setTagوMediaItem.Builder#setCustomCacheKeyاستفاده کنید.- سازندههای
DefaultRenderersFactory(Context, @ExtensionRendererMode int)وDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)برداشته شود. درعوض از سازندهDefaultRenderersFactory(Context)،DefaultRenderersFactory#setExtensionRendererMode، وDefaultRenderersFactory#setAllowedVideoJoiningTimeMsاستفاده کنید. - همه سازندههای عمومی
CronetDataSourceرا بردارید. درعوض ازCronetDataSource.Factoryاستفاده کنید.
- برداشتن
IntDefsزیر را فقط به@Target(TYPE_USE)تغییر دهید. این کار ممکن است کامپایل کردن کاربردها در Kotlin را خراب کند، که میتوان آن را با انتقال حاشیهنویسی برای حاشیهنویسی کردن نوع (Int) برطرف کرد.@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(در بستهcom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(در بستهcom.google.android.exoplayer2.extractor.flac)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
نسخه 1.0.0-alpha01
۲۷ اکتبر ۲۰۲۱
androidx.media3:media3-*:1.0.0-alpha01 منتشر شده است. نسخه 1.0.0-alpha01
حاوی این
ثبتها است.
ویژگیهای جدید
Media3 خانه جدیدی برای کتابخانههای پشتیبانی رسانه، ازجمله ExoPlayer، است. اولین نسخه آلفا شامل پیادهسازیهای اولیه و کاربردی کتابخانهها برای پیادهسازی موارد استفاده از رسانه است، ازجمله:
- ExoPlayer، پخشکننده رسانه در سطح برنامه برای Android که سفارشیسازی و گسترش آن آسان است.
- عملکرد جلسه رسانه، برای نمایش و کنترل بازپخشها. این
واحد جلسه جدید از همان میانای
PlayerExoPlayer استفاده میکند. - مؤلفههای میانای کاربر برای ساختن میانای کاربر بازپخش رسانه.
- ماژولهایی که عملکرد را در کتابخانههای دیگر برای استفاده با ExoPlayer بستهبندی میکنند، برای مثال، درج آگهی ازطریق IMA SDK.
برای اطلاعات بیشتر، به پروژه Media3 GitHub مراجعه کنید.
ExoPlayer قبلاً در پروژه ExoPlayer GitHub جداگانهای میزبانی میشد. در Media3، نام بسته آن
androidx.media3.exoplayer است. قصد داریم برای مدتی به نگهداری و انتشار پروژه ExoPlayer GitHub ادامه دهیم تا برنامهها فرصت داشته باشند به Media3 منتقل شوند.
Media3 برای همه ماژولهای ExoPlayer جایگزین دارد، بهجز افزونههای قدیمی
media2 و mediasession که با ماژول جدید
media3-session جایگزین شدهاند. این کار ادغام مستقیم بین پخشکنندهها و جلسههای رسانه را بدون نیاز به استفاده از کلاس آداپتور/رابط فراهم میکند.