Media3
| העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
|---|---|---|---|---|
| 5 באוגוסט 2026 | 1.11.0 | - | - | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Media3, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:
מגניב
dependencies { def media3_version = "1.11.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For 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" }
Kotlin
dependencies { val media3_version = "1.11.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For 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") }
מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ב-build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. אתם יכולים להשתמש בכלי למעקב אחרי בעיות ב-Media3 כדי למצוא תשובות לשאלות, בעיות מוכרות ובקשות להוספת תכונות, ולדווח על בעיות חדשות.
גרסה 1.11.0
גרסה 1.11.0
5 באוגוסט 2026
- ספרייה משותפת:
- מוסיפים
Format.channelMaskכדי לייצג באופן מפורש את מסכת ערוץ האודיו, ומוסיפים עומס יתר חדש שלUtil.getAudioTrackChannelConfig(Format)כדי לפתור את הבעיה בצורה בטוחה. - שדרוג Kotlin מגרסה 2.0.20 לגרסה 2.2.0.
- מוסיפים
- ExoPlayer:
- תוקן באג של בו-זמניות שתלוי בתזמון, שיכול לגרום ל-
IllegalStateExceptionאו ל-IndexOutOfBoundsExceptionב-ExoPlayer. - הפחתת ההגבלות על מספר קבוצות המודעות ב-
AdsMediaSourceכדי לאפשר את הקטנת מספר קבוצות המודעות כשקבוצת מודעות עוברת עיבוד מלא (hasUnplayedAds()הואfalse), וכך להתאים את הגודל של קבוצות מודעות דינמיות במהלך תהליכי עבודה של איפוס. - מוסיפים את
getFlags()ואתFLAG_STRICT_DURATIONאלSampleStreamכדי לאפשר לסטרימינג לדווח על סימונים, ומעדכנים את רכיבי ה-Renderer כדי לבדוק את הסימונים האלה באופן דינמי. - אם פורמטי הסטרימינג לא מספקים ערך תקין, המערכת מחשבת את קצב ההפעלה של הקודק על סמך הערכת קצב הפריימים ב-
MediaCodecVideoRendererופורמט הפלט של הקודק ב-MediaCodecAudioRenderer, כדי למנוע איפוסים מיותרים של הקודק. - הסרת חיתוך של תוכן במודעות שמוכנסות בצד הלקוח בנגן הליבה. במקום זאת,
AdsMediaSourceמטפל בלוגיקה של החיתוך. צריך לעדכן מקורות מותאמים אישית של מודעות שמוטמעות בצד הלקוח כדי להטמיע את חיתוך התוכן באופן פנימי. - מסמנים טראקים עם פרופיל או רמה של קודק בפורמט תקין אבל לא מוכר כ-
supported=NO_EXCEEDS_CAPABILITIESבמקום כ-supported=YES(כך מסומנים טראקים עם מידע חסר או בפורמט שגוי לגבי הפרופיל או הרמה). כך מוודאים שהרצועות האלה (שסביר להניח שהמכשיר לא תומך בהן) לא ייבחרו אם יש חלופות טובות יותר שנתמכות. - מוסיפים את
DefaultPreloadManager.SimpleRankingDataComparator, שהואRankingDataComparatorשמשווה את הדירוגים של קובצי המדיה על סמך המרחקים שלהם לאינדקס של קובץ המדיה שמופעל כרגע. אפליקציות יכולות לבטל את השיטהcompare(Integer, Integer)אם נדרשת לוגיקת השוואה מדויקת יותר. אפשר להחדיר אתSimpleRankingDataComparatorהמותאם אישית באמצעות בנאי חדש שלDefaultPreloadManager.Builder. - כדי להקטין את הסיכון לחריגה מזיכרון (OOM) של
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כדי להחזיר את ההקצאות של קבוצות המדינות כערך שלם (integer) בגודל 32 ביט במקום כמערך. כך מקטינים את גודל הקוד ונמנעים מהקצאות. - תיקנו כשלים בהפעלת
AudioTrackבמכשירים מסוימים. כדי לעשות זאת, דאגנו שהלוגיקה של הניסיון החוזר תנסה תמיד להשתמש בגודל מאגר של שנייה אחת לפחות, אם ניסיונות חוזרים אחרים (שבהם גודל המאגר קטן בחצי) לא יצליחו (#3207). - תיקון בעיה ב-codec במכשירים מסוימים שבהם ה-codec בלע את כל הדגימות אם הוא רוקן לפני קבלת מאגרי קלט.
- מוסיפים את התג הניסיוני
ExoPlayer.Builder.enablePerStreamMediaProgression()כדי לאפשר קידום של עיבוד מדיה על בסיס כל סטרימינג בנפרד. כך מצמצמים את זמן האחזור של ההפעלה בין פריטים בפלייליסט, ומונעים מצב שבו ההפעלה 'נתקעת' בתוכן קצר מאוד (#3122). - תוקנה בעיית מרוץ תהליכים שקשורה לשימוש במזהה של סשן אודיו, שבה נעשה שימוש במזהה הראשוני של סשן אודיו שנוצר אוטומטית על ידי
ExoPlayerבמקום בערך שהוגדר על ידיsetAudioSessionId(#3241). - הוספנו תמיכה ניסיונית בהפעלה של מטא-נתונים מתוזמנים של HAGC (ST 2094-50) למדיה מתקדמת (למשל MP4, Matroska). הנגן ממזג באופן אוטומטי רצועות של מטא-נתונים של HAGC עם רצועת הווידאו המשויכת, ומעביר את המטא-נתונים מחוץ לפס אל המפענח במכשירים עם API 37 ומעלה. אפשר להשבית את ההתנהגות הזו באמצעות
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - הוספת
Format.selectionPriorityשמייצג את ההעדפה היחסית שלFormatבבחירת רצועה (#3236). - תוקנה בעיה פוטנציאלית במצב ההזזה שגרמה להזזה להיעצר כשמנסים להגיע ל 'סוף השידור'.
- תוקן באג של בו-זמניות שתלוי בתזמון, שיכול לגרום ל-
- CompositionPlayer:
- תוקנה בעיה שבה מופעי
TrackSelectorלא שוחררו.
- תוקנה בעיה שבה מופעי
- Transformer:
- תוקנה בעיה שבה יכול להיות שערך המדד
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 וגם סימניות של YouTube, המערכת תעדיף את הסימניות של QuickTime. פרטי הפרקים שחולצו מוצגים כ
Chapterרשומות בתוך רצועתMetadata, וכך מאפשרים ניווט מקורי בין פרקים בקובצי MP4, M4A ו-M4B (כמו ספרי אודיו ופודקאסטים) (#2803). - WAV, Matroska ו-MP4: נוספה תמיכה באודיו PCM בנקודה צפה של 64 ביט (#3090).
- Matroska: משתמשים במטא-נתונים של קודק bitstream כדי לאכלס את
ColorInfoבצורה מדויקת. - MP4: נוספה תמיכה בחיפוש בקובצי MP4 מפוצלים באמצעות תיבת
mfraכשתיבתsidxלא קיימת. כדי להפעיל את האפשרות הזו, צריך לספק אתFLAG_READ_MFRA_FOR_SEEK_MAPאלFragmentedMp4Extractor, מה שנעשה עכשיו כברירת מחדל ב-DefaultExtractorsFactory(#3088). - התעלמות מנתוני
av1Cעם גרסה לא נתמכת. - MP4: הוספנו תמיכה ב-PCM של נקודה צפה בפורמט big-endian בתיבות
fpcm. - Matroska: ניתוח מידע על פרקים לרשומות
Chapterב- של טראקMetadata. - MPEG-TS: שיפור החילוץ של נתוני הזרמה של DTS-HD ו-DTS Express על ידי שילוב של Core ו-Extension Substream לדגימה אחת, תיקון בעיות בהפעלה שבהן שני הנתונים האלה הופקו בעבר כדגימות נפרדות (#3147).
- MP4: מניעת לולאות אינסופיות וקריאות מחוץ לגבולות במהלך ניתוח של פריטי תג מטא-נתונים ריקים
ilst(#3191). - MPEG-TS: מוודאים שהפריים האחרון עובר רינדור בסטרימינג שבו אורך חבילת ה-PES האחרונה ידוע (#3206).
- MP3: תיקון דיווח קצב העברת הנתונים (bitrate) בקבצים עם כותרת Xing ו-VBRI.
- Matroska: טיפול בטראקים שמוגדרים באשכול האחרון (#3250).
- Matroska: נוספה תמיכה ב-ALAC (#3268).
- MP4: אפשר להשתמש בתיבות
sgpdבאורך משתנה בקובצי MP4 מפוצלים (#3243). - AVI: תוקנה בעיה שבה הפעלת קבצים ללא סימון של מסגרות מפתח במסלולי אודיו גרמה לאובדן אודיו ול-
OutOfMemoryError. - MP3: שימוש במשכי זמן עם מודעות לרווחים מהכותרות של Xing/Info (#3183).
- MP3: התאמת השהיית המקודד LAME/Xing ומטא-נתוני הריפוד כך שיתאימו לחיתוך של PCM מפוענח (#3200).
- MP4, MP3 ו-FLAC: נוספה האפשרות
- אודיו:
- הוספת תקופת חסד של 100 אלפיות השנייה לרכיבי העיבוד של האודיו ב-ExoPlayer כשעוברים ממצב מוכן למצב לא מוכן, כדי למנוע מצבים של חוסר נתונים זמני וכדי למנוע מצבי אחסון בזיכרון מטמון לא צפויים במהלך הפעלה פעילה (#3210).
- שינוי הלוגיקה של גודל ברירת המחדל של מאגר PCM ב-
DefaultAudioTrackBufferSizeProviderכדי להשתמש במאגר קבוע של 500ms, כדי להקטין את התלות במכשיר. - צריך לעדכן את
MediaCodecAudioRendererכדי לחלץ את ה-channelMask המרחבי מהמפענח של הפלטפורמה, וכך לאפשר ל-DefaultAudioSinkלהשתמש במסכה המפורשת הזו במקום להסיק מסכה מספירת הערוצים. - המרת פרמטרים של
AudioSink.configureלמחלקת נתונים. צריך להעביר את ההגדרות המותאמות אישית שלForwardingAudioSink.configureלחתימת השיטה החדשה. - נוספה תמיכה בשמירה על גובה הצליל כשמבצעים מתיחה בזמן של זרם אודיו באמצעות
EditedMediaItem.Builder#setSpeed(SpeedParameters). - שיפור
ToFloatPcmAudioProcessorכדי לתמוך בהמרה של PCM עם 8 ביט, PCM עם 16 ביט בשיטת Big-endian ו-PCM עם 64 ביט בנקודה צפה ל-PCM עם 32 ביט בנקודה צפה (#3090). - שינוי ערך ההחזרה של
DecoderAudioRenderer.getChannelMappingל-ImmutableIntArray. - תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.
- מעבירים את
Timelineואת מזהה התקופה אלAudioSink.configureואלAudioProcessor.StreamMetadataכדי לספק הקשר של הפלייליסט למעבדי האודיו (#418). - צריך להגדיר את הערך הנכון של
AudioProcessor.StreamMetadata.positionOffsetUsכדי לאפשר עיבוד אודיו מבוסס-זמן (#418). - הוספת תמיכה ב-PCM של נקודה צפה (floating point) בפורמט big endian ב-32 ביט וב-64 ביט.
- הוסר נתיב חלופי של EAC3-JOC ל-EAC3 להפעלה במכשירי Google Pixel, כי מפענחי ה-EAC3 הרגילים שלהם לא יכולים לפענח זרמי EAC3-JOC (#3257).
- סרטון:
- תיקון הלוגיקה של הצטרפות לסרטון כדי לספור את מאגרי הנתונים הזמניים שהושמטו במהלך ההצטרפות כמאגרי נתונים זמניים שדילגו עליהם במקום כמאגרי נתונים זמניים שהושמטו.
- תיקון של החלטת רינדור מיידית כשמגדירים משטח חדש כדי למנוע ירידה במספר הפריימים לשנייה במכשירים שלא תומכים במשטחי placeholder.
- תיקנו את הערכת קצב הפריימים ב-
MediaCodecVideoRendererכדי שתהיה מדויקת יותר, על ידי הוספת פריימים שהושמטו או שדילגו עליהם. - הגדרה שמאפשרת לקבוע את ערך הסף שמשמש לתזמון מוקדם של פריימים. ערך ברירת המחדל הוא 50ms, אבל אפשר להתאים אישית את הערך באמצעות
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - תוקן באג ב-
VideoFrameReleaseHelperשבו שינויים בתצוגה יכלו להפעיל קריאות חוזרות (callback) מיותרות שלChoreographerוהפעלות מוגזמות של CPU בשרשור הראשי.
- טקסט:
- מטא-נתונים:
- מוסיפים שדה
MediaMetadata.discSubtitleומנתחים אותו מנתוני ID3v2.4TSSTו-VorbisDISCSUBTITLE. - ניתוח מספר הדיסק והספירה מתוך מסגרת ID3
TPOS.
- מוסיפים שדה
- אפקט:
- ניקוי מצב הציור מחדש ב-
FinalShaderProgramWrapperכשמרוקנים את המאגר כדי למנוע את קפיאת הנגן כשמבצעים חיפוש.
- ניקוי מצב הציור מחדש ב-
- Muxers:
- הוספנו תמיכה בהפניות לרצועות (התיבה
tref) ב-Mp4Muxerבאמצעות API חדשaddTrackReference. התג הזה מאפשר ליצור קשרים בין רצועות, למשל לקשר רצועת מטא-נתונים לרצועת הווידאו שהיא מתארת. - מוסיפים את
OggMuxerכדי לאפשר מיזוג של מקורות מדיה מסוגOPUSאוVORBISלפורמט הקובץogg. - מוסיפים
WavMuxerליצירת קובץ WAV (תומך ב-PCM של מספרים שלמים וב-PCM של נקודה צפה). - מוסיפים
setAttemptStreamableOutputEnabledל-InAppMp4Muxer.Factoryכדי לאפשר כתיבה של קבצים קטנים יותר שלא ניתן להזרים בלי מקום שמור. - הוספת תמיכה באודיו בפורמט IAMF ב-
Mp4Muxerוב-FragmentedMp4Muxer.
- הוספנו תמיכה בהפניות לרצועות (התיבה
- תוסף IMA:
- מוסיפים את התג
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotכדי לאפשר הקצאת מיקום מודעה בדף לשימוש במודעות שמופיעות בהשהיה. - תוקן באג שגרם לכך שכשמודעות VAST ניתנות לדילוג ומוצגות ברצף, לחצן הדילוג מוצג מיד במודעה השנייה (#3165).
- מוסיפים את התג
- סשן:
- תיקון של מצבי קיפאון פוטנציאליים וקריסות של
IllegalStateExceptionMediaNotificationManagerכשמשתמשים בסשן עם לולאת נגן של שרשור ברקע. - אכיפה של דרישות מחמירות יותר לגבי שרשורים עבור שיטות
MediaSession. שיטות Void מעכשיו מפרסמות באופן אוטומטי את הביצוע בשרשור של לולאת האפליקציה, ופונקציות גישה למצב (getters) יוצרות באופן מפורשIllegalStateExceptionאם הן מופעלות משרשור אחר מלולאת האפליקציה. - תוקנה קריסה של מיזוג ציר זמן מחוץ לגבולות (
IllegalStateExceptionב-MediaUtils.mergePlayerInfo) באמצעות מעקב אחר עקביות המצב לכל בקר בצד הסשן. - הוספנו את
androidx.media3.session.MediaSessionManagerכדי לספק תמיכה בשאילתות לגבי סשנים פעילים של מדיה ולהחזיר מופעים של Media3SessionToken. - שינוי התנהגות ברירת המחדל של
MediaSession.Callback.onConnectאם השיטה לא מוחלפת כדי לספק גישת קריאה בלבד לבקרים לא מהימנים. - הוספנו תמיכה בהחלפת שם החבילה בזמן יצירת אפליקציה ב-
MediaSessionבאמצעות API חדשMediaSession.Builder#setPackageNameOverride. למתקשר צריכה להיותandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERהרשאה לבטל את שם החבילה של הסשן. - מוסיפים את
MediaSession.Callback.onConnectAsync(). השיטה החדשה מאפשרת לעבד באופן אסינכרוני את ניסיון החיבור של בקר. אפליקציות יכולות להחזירFutureמיידית עםFutures.immediateFuture(ConnectionResult)כדי להשיג את ההתנהגות הקודמת. מומלץ לעבור לשיטה החדשה כיCallback.onConnectעומדת לצאת משימוש. - תוקנה בעיה שבה הגלישה ב-Bluetooth AVRCP לא זיהתה את
MediaLibraryServiceב-API 36 וב-API 37. - תיקון של הקטנת תמונה כפולה של יצירת אמנות ב-
MediaSessionכשהגודל של התמונה קרוב למגבלה של הפלטפורמה, כדי לפתור בעיות של טשטוש בהתראות (#3134). - תוקנה קריסת
ForegroundServiceStartNotAllowedExceptionב-MediaNotificationManagerכשקריאה חוזרת (callback) אסינכרונית לטעינת מפת סיביות של יצירת אומנות מנסה להפעיל את השירות שפועל בחזית בזמן שהאפליקציה פועלת ברקע (#3270). - תוקנה בעיה שבה חסרו מזהי ה-
TimelineUID המקוריים של אובייקטים מסוגPositionInfoשהתקבלו על ידיMediaController. התרגום של מזהי ה-UID האלה מתבצע עכשיו באופן מהימן במהלך עדכוני המצב, והם מועברים בצורה תקינה במהלך הסשן. - כדי לתקן את הקריסה, צריך לטפל בחריגה
ForegroundServiceStartNotAllowedExceptionב-MediaSessionService.stopSelfSafely()(#3310). - תוקנה בעיה שגרמה להפעלה לא צפויה של קריאה חוזרת (callback) של
onMediaItemTransition()ב-MediaControllerכשמבצעים חיפוש בתוך אותו פריט מדיה (#3248).
- תיקון של מצבי קיפאון פוטנציאליים וקריסות של
- UI:
- תיקון של בעיה שגורמת לרינדור של הפריים הראשון בגודל שגוי כשמבצעים קומפוזיציה מחדש של
ContentFrameבאמצע ההפעלה (#3238). - מוסיפים את המחלקה
CurrentMediaItemStateואת ה-Composable המתאיםrememberCurrentMediaItemStateלמודולmedia3-ui-compose. מחזיק המצב הזה משמש ב-demo-composeלהצגת מידע שונה של מטא-נתונים עלMediaItemשמופעל כרגע. - מוסיפים את המחלקה
PlaylistStateואת ה-Composable המתאיםrememberPlaylistStateלמודולmedia3-ui-compose. מאחסן מצב זה משמש ב-demo-composeכדי להציג מידע שונה של מטא-נתונים עלMediaItemsשמוגדר בנגן. - הוספת API להרצה קדימה/הילוך איטי ל-
PlaybackSpeedState. אפשר להשתמש בפונקציה הזו ב-demo-composeכדי להציג את האפשרות להרצה קדימה בלחיצה ארוכה. - מוסיפים את הקומפוזבילי
MiniControllerלמודולmedia3-ui-compose-material3. הוא מספק ממשק קומפקטי לשליטה בPlayer, ומציג את השם, האמן, יצירת האומנות וההתקדמות של פריט המדיה הנוכחי. - מוסיפים את המחלקה
ErrorStateואת ה-Composable המתאיםrememberErrorStateלמודולmedia3-ui-compose. מוסיפים אתErrorTextComposable אלmedia3-ui-compose-material3ומגדירים אותו כשכבת-על שמוצגת כברירת מחדל ב-Player. - פרסום אובייקט
PlayerDefaultsעם קומפוזיציות ל-TopControls,CenterControls,BottomControlsו-ErrorOverlay. - מוסיפים
FocusRequesterל-PlayerComposable ולמשבצות התוכן שלו. - המאפיינים Publish
PlayerPool(common-ktx) ו-rememberPooledPlayer(ui-compose) תומכים בטעינה מראש שלMediaItemsבסביבות של ממשקי משתמש עם חלון הזזה. הדגמה של הפונקציונליות הזו ב-demo-composeבאמצעותShortFormPlayerScreenחדש. - תוקנה באג שקשור לביטול רעשים במצב
PlayerViewובכלי ההלחנהPresentationStateשגרם לקריסות בציר הזמן שלא תומך בחיפוש UID של תקופה (#3264).
- תיקון של בעיה שגורמת לרינדור של הפריים הראשון בגודל שגוי כשמבצעים קומפוזיציה מחדש של
- הורדות:
- פתרון משתני HLS בפלייליסט של מדיה כשמאחזרים אותו להורדה (#3258).
- תוסף Ktor:
- תוסף HLS:
- הוספת תמיכה ב-HLS Content Steering וב-Pathway Cloning (#1689).
- הוספת
setWithAssetListResetאלHlsInterstitialsAdsLoaderכדי לאפשר לאפליקציות לאפס מודעות מעברון ברשימת נכסים שעברו עיבוד מלא, כך שהן לא יהיו זמינות יותר לצורך פתרון בעיות לפי דרישה. - מנתחים את מאפיין
SCOREשלEXT-X-STREAM-INFושלEXT-X-I-FRAME-STREAM-INF, ומאכלסים אותו בערךFormat.selectionPriority(#3236). - תוקן באג שבו פעולות ריענון מתוזמנות של פלייליסטים בפורמט HLS ממשיכות לפעול גם אם הפלייליסט כבר לא ראשי או פעיל (#3254).
- תוקן חישוב ההיסטור של תוכן כשמבצעים רזולוציה של רשימות נכסי מודעות מעבריות (#3322).
- תיקון של אי רציפות בלתי צפויה של חותמות זמן של טראק אודיו כשממשיכים הפעלה בשידור חי עם השהיה נמוכה אחרי כשל בבקשת פלייליסט (#3311).
- תיקון באג ב-
HlsMediaPeriod.getStreamKeys()שבו טראק ID3 בעיבודים של אודיו נחשב ככתוביות (מספר 3333).
- תוסף DASH:
- תוסף RTSP:
- תיקון של השהיות או כשלים זמניים בהפעלה במהלך ההכנה להפעלה של RTSP שנגרמים משגיאות באיגוד של יציאות UDP.
- תוסף Cast:
- הוספת מחלקה חדשה
CastParamsכדי לאפשר הגדרה של Cast על ידי קריאה ל-Cast.initialize(CastParams). - הוספנו אפשרות חדשה
CastParams.getShowSystemOutputSwitcherOnCastIconClick()שמפעילה את הכלי להחלפת פלט של SystemUI במקום את הכלי לבחירת מכשיר ל-Cast בתוך האפליקציה, כשהוא זמין. - הוספנו את
MediaRouteButtonStateואתrememberMediaRouteButtonStateכדי לתמוך בבדיקת מצב החשיפה של הכלי לבחירת נתיב המדיה, והוספנו את הפרמטרstateל-MediaRouteButton(#3172). - תיקון באג שבו
RemoteCastPlayerנתקע באופן קבוע במצב של הסתרת טראק אחרי בחירת טראק, וגרם לו להתעלם מעדכוני טראק עתידיים ממקלט Cast (#3237). - תוקן באג שבו
DefaultMediaItemConverterזורק אתNullPointerExceptionכשמנסים להצטרף להפעלה של Cast שהתחילה משולח שאינו Media3. - מונעים מ-
CastPlayerלהעבירMediaItemsשלא ניתן להפעיל כשמשנים את הנגן הפעיל (#3199). - תוקן באג שגרם לכך ששידורים חיים שלא הוגדרו (
liveConfiguration == UNSET) הוכנסו לתור כ-STREAM_TYPE_BUFFERED(#3318).
- הוספת מחלקה חדשה
- כלי בדיקה:
- מרחיבים את
DataSourceContractTestכדי לכלול תמיכה בבקשותPOSTעם כותרות וגופים, מוסיפים כמה משאביPOSTל-HttpDataSourceTestEnvומוסיפים טענות לגבי שיטת ה-HTTP, הכותרות והגוף הצפויים ב-WebServerDispatcher. - הידוק הטענות ב-
DataSourceContractTestלגבי אורכים שמוחזרים מ-DataSource.open(). במשאבים שעשויים להוביל לC.LENGTH_UNSETצריך לציין זאת באמצעותTestResource.Builder.setMayResolveToUnknownLength(boolean). - הוספת
setPlaybackLooperאלTestExoPlayerBuilder.
- מרחיבים את
- הסרת סמלים שהוצאו משימוש:
- הסרה של
androidx.media3.exoplayer.MetadataRetriever. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.inspector.MetadataRetriever. - הסרה של
androidx.media3.exoplayer.MediaExtractorCompat. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.inspector.MediaExtractorCompat. - הסרה של
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. אפשר להשתמש ב-HeifExtractorכדי לחלץ מטא-נתונים של תמונות עם תנועה מקובצי HEIC. - הסרה של
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.metadata.MotionPhotoMetadata. - הסרה של
androidx.media3.extractor.DummyTrackOutput. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.DiscardingTrackOutput. - הסרה של
androidx.media3.extractor.DummyExtractorOutput. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.NoOpExtractorOutput. - הסרה של
androidx.media3.common.C.generateAudioSessionIdV21. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.common.util.Util.generateAudioSessionId.
- הסרה של
- Build
- עדכנו את ההוראות לשימוש ב-Media3 באופן מקומי ב-
README.mdכדי להשתמש ב-Gradle Composite Builds (includeBuild). הסקריפטcore_settings.gradleהוסר, והמאפייניםandroidxMediaModulePrefixו-androidxMediaEnableMidiModuleלא נמצאים יותר בשימוש.
- עדכנו את ההוראות לשימוש ב-Media3 באופן מקומי ב-
1.11.0-rc01
משתמשים בגרסה יציבה 1.11.0.
1.11.0-beta01
7 ביולי 2026
משתמשים בגרסה יציבה 1.11.0.
1.11.0-alpha01
24 ביוני 2026
משתמשים בגרסה יציבה 1.11.0.
גרסה 1.10.0
1.10.1
12 במאי 2026
- ספרייה משותפת:
- תוקן הטיפול ב-
onAudioSessionIdChangedב-SimpleBasePlayerוב-ForwardingSimpleBasePlayer.
- תוקן הטיפול ב-
- ExoPlayer:
- תיקון מרוץ תהליכים שקשור ליצירת מזהה סשן אודיו שיכול להוביל ל-
IllegalStateExceptionבמצב מנהור. (#3099). - תיקנו קריסות אפשריות של אפליקציות בזמן שחזור משגיאות של מפענח עם חימום מראש של רכיב ה-Renderer.
- תוקנה בעיה שבה נוצרו ארטיפקטים בסרטון בגלל אספקת נתוני אתחול כשמשתמשים ב-codec של Dolby Vision שמבוסס על AV1 (#3153).
- תיקון מרוץ תהליכים שקשור ליצירת מזהה סשן אודיו שיכול להוביל ל-
- בחירת טראק:
- התאמת הלוגיקה של בחירת הרצועה ב-
VideoTrackInfoכדי לפתור סוגי MIME של חזרה לגיבוי והעברת העדפות של HDR וציון קודק להעדפות איכות (#3135).
- התאמת הלוגיקה של בחירת הרצועה ב-
- אמצעי חילוץ:
- MP3: מתעלמים מאורך הנתונים של Xing אם הוא ארוך יותר מאורך הסטרימינג הידוע (#3117).
- תיקון
ArrayIndexOutOfBoundsExceptionב-Mp4ExtractorכשההגדרהFLAG_OMIT_TRACK_SAMPLE_TABLEמוגדרת ולרצועה חסרה דוגמה לסנכרון (stss).
- אודיו:
- תיקון באג שבו יכול להיות שאירועי אודיו לא מנותבים כמו שצריך אם מוסיפים לנגן כמה רכיבי עיבוד של אודיו.
- סרטון:
- התאמת הלוגיקה לשימוש חוזר ב-codec בשינויים בקצב הפריימים ב-API מתחת ל-30 כדי למנוע איפוסים של codec במקרים שבהם הם לא מועילים (#3120).
- השבתת פתרון עקיף לסנכרון מאולץ ב-
queueSecureInputBufferלגרסה API 31 ואילך. הפתרון העקיף היה צוואר בקבוק מלאכותי שאילץ את ההצפנה לפעול באופן סדרתי, וכך מנע שיבוש בסרטון בגלל בעיה במסגרת שהייתה קיימת לפני גרסה API 31.
- תמונה:
- תוקנה בעיה במצב ניקוי שבה עדכוני תמונות נכנסו לתוקף רק כשהמשתמש "הפסיק את הניקוי" (#2815).
- סשן:
- תוקן באג שגרם לכך ש-
ForegroundServiceStartNotAllowedExceptionלא הועבר בין גבולות ה-thread במקרה שה-thread של האפליקציה לא היה ה-thread הראשי (#2499). - תוקן באג שבו
COMMAND_SEEK_TO_MEDIA_ITEMלא זמין ב-MediaControllerכשמתחברים לסשן שמוגבל לפלטפורמה ותומך בדילוג לפריטים אחרים אבל לא בשינויים בפלייליסט. - תוקנה הבעיה שבה
MediaControllerלא יכול להגדיר פריטי מדיה בהפעלות מדיה בפלטפורמה שלא מאפשרות פעולות שלPREPARE_FROM. - תוקן באג שבו התהליך של המשתמש לא סומן ב-
Controller.isTrusted()בגרסה API 27 ומטה כשמתחברים דרך בקרי פלטפורמה.
- תוקן באג שגרם לכך ש-
- תוסף HLS:
- תוסף DASH:
- תיקון קריסה ב-
SampleQueueכשמנסים להגיע לחלק שכרגע מתבצעת בו פעולת ביטול.
- תיקון קריסה ב-
1.10.0
26 במרץ 2026
- ספרייה משותפת:
- קידום של
Player.mute()ושלPlayer.unmute()מ-UnstableApiלגרסה יציבה. - קידום של
Format.pcmEncodingושלC.PcmEncodingמ-UnstableApiלגרסה יציבה. - מוסיפים את
Format.primaryTrackGroupIdכדי לזהות את הקבוצה הראשית של מופעיFormatשמוטמעים (מס' 294).
- קידום של
- ExoPlayer:
- הוספת יכולות חיתוך ל-
AdsMediaSource. - נוספה תמיכה בתזמון דינמי ב-
MediaCodecVideoRendererכדי להתאים טוב יותר את תזמון העבודה ואת מחזורי ההפעלה של המעבד לזמן שבו אפשר לעבד את מסגרות הווידאו. אפשר להפעיל את האפשרות הזו באמצעותexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()ב-DefaultRenderersFactory. - אפשר להגדיר
DataSource.Factoryמותאם אישית ב-DefaultPreloadManager.Builder. - אפשר להשתמש ב-
ExoPlayerכ-mock בלי Robolectric על ידי העברת חלק מהקבועים שמוגדרים כברירת מחדל אלExoPlayer.Builder. בדרך כלל לא מומלץ ליצור מוקאפ לממשק המורכב הזה – רק אם השימוש בו מינימלי, פשוט או מקרי (#2985).- לכן נדרשה העברה של
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSמ-ExoPlayerאלExoPlayer.Builder(ללא הוצאה משימוש).
- לכן נדרשה העברה של
- תוקן באג שבו
ProgressiveMediaSourceמעביר לנגן מידע לא עדכני על ציר הזמן, והתקופות שנוספו לתור מוסרות באופן לא צפוי (#3016). - תוקנה בעיה שגרמה לכך ש-ExoPlayer לא ביקש הרשאת אודיו מושהית כשנשלחה בקשה להפעלה במהלך שיחות טלפון.
- תוקן באג שבו מעברים מתוכן על פי דרישה לתוכן בשידור חי עלולים לגרום לטעינה מחדש של מאגר הנתונים הזמני בסוף התוכן על פי דרישה (#3052).
- הוספת תמיכה ב-Dolby Vision Profile 10 (#2830).
- תוקן באג שבו מודעת pre-roll שלא אותחלה הפיקה את השגיאה
ArrayIndexOutOfBoundsException(#3125).
- הוספת יכולות חיתוך ל-
- CompositionPlayer:
- הוספת תמיכה ב-
EditedMediaItem.removeVideo.
- הוספת תמיכה ב-
- Transformer:
- עכשיו אפשר להגדיר ב-
EditedMediaItem.Builder.setFrameRate()קצב פריימים מקסימלי לפלט של סרטון. זה שימושי במיוחד כשמגבירים את מהירות המדיה באמצעותsetSpeed().
- עכשיו אפשר להגדיר ב-
- בחירת טראק:
- משנים את החתימה של
DefaultTrackSelector.selectAllTracksכך שתכלול את מערך הפלט כפרמטר, עם ערכים שמוגדרים מראש לשינויים בטראקים. - תוקנה בעיה שבה נבחרו טראקים של מטא-נתונים מוטמעים בלי קשר לשאלה אם הטראק הראשי התואם נבחר (#294).
- ייצוב האפשרויות של
TrackSelectionParametersעבורpreferredVideoLanguages, preferredVideoLabels,preferredAudioLabels, preferredTextLabelsו-selectTextByDefault.
- משנים את החתימה של
- אמצעי חילוץ:
- MP4: תמיכה בקבצים עם תיבות גדולות של
uuidלפני תיבות אחרות כמוmoov(מס' 3046). - MP4: נוספה תמיכה בטראקים של Versatile Video Coding (VVC) במאגרי MP4.
- MP4: תמיכה בקבצים עם תיבות גדולות של
- כלי הבדיקה:
- שינוי שעלול לגרום לכשל: הסרה של
FrameExtractor. המשתמשים צריכים להסתמך עכשיו על מודול:media3-inspector-frameהחדש ולעדכן את הייבוא ל-androidx.media3.inspector.frame.FrameExtractor. - הוספנו מודול חדש לחילוץ ולעיבוד של פריימים מפוענחים של סרטונים.
- שינוי שעלול לגרום לכשל: הסרה של
- אודיו:
- שינוי ספריית הפענוח הבסיסית של תוסף הפענוח של IAMF מ-
libiamfל-iamf_tools. - פענוח IAMF תומך בפלט בינאורלי דרך המפענח (כשמשתמשים בתוסף מפענח IAMF) או דרך Android Spatializer.
- הוסרה בצורה נכונה התמיכה ב-
AC4Profile22ובפרופילים אחרים מדור קודם, במהלך הערכת התמיכה במפענח AC-4 בתרחישים של Automotive (מס' 2609). - שיפור הלוגיקה לניסיון נוסף של אתחול
AudioOutputב-DefaultAudioSink(#2905). - כשמפענחים IAMF, צריך לנסות להתאים את פריסת הפלט של הרמקולים (או של Spatializer אם רלוונטי), גם עם תוסף IAMF וגם עם מפענחי קודק מדיה, שנתמכים על ידי שדות ולוגיקה חדשים ב-AudioCapabilities וב-AudioCapabilitiesReceiver.
- תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.
- שינוי ספריית הפענוח הבסיסית של תוסף הפענוח של IAMF מ-
- טקסט:
- VobSub: משתמשים בפקודות הבקרה
STARTו-STOPSPU כדי לקבל את משך האות במקום להשתמש תמיד בברירת המחדל של 5 שניות (מס' 2935).
- VobSub: משתמשים בפקודות הבקרה
- מטא-נתונים:
- הגדלת מספר ברירת המחדל של רכיבי העיבוד של מטא-נתונים לארבעה כדי לכסות את כל רצועות המטא-נתונים הפוטנציאליות שמתפרסמות על ידי וריאציות ועיבודים של HLS (#3043).
- אפקט:
- העברה של
LottieOverlayלמודול:media3-effect-lottieחדש (שכללה גם שינוי שם מ-androidx.media3.effect.LottieOverlayל-androidx.media3.effect.lottie.LottieOverlay).
- העברה של
- Effect Lottie:
- הוספנו מודול חדש
:media3-effect-lottieשמספק פונקציונליות להחלת אפקטים של Lottie על פריים של סרטונים.
- הוספנו מודול חדש
- תוסף IMA:
- כדי לקבל גישה ל-API העדכני של פרטי המדיה של המודעה, צריך לעדכן את גרסת IMA SDK ל-3.39.0.
- תיקנו באג שבו סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שסופק באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות פרטי המדיה של המודעה שסופקו על ידי IMA.
- הוספת
setEnableCustomTabsל-ImaAdsLoaderול-ImaServerSideAdInsertionMediaSource, כדי לאפשר למשתמשים לקבוע אם כתובות URL של מעקב אחרי קליקים על מודעות יופעלו באמצעות כרטיסיות בהתאמה אישית. - מוסיפים את
ImaAdTagUriBuilder, מחלקה שמציעה דרך חלופית ליצירתadTagUri. הוא כולל אתsetPreferredLinearOrientationAPI. זהו API שנמצא בבדיקת אלפא, שיאפשר לכם להגדיר את ההתמצאות המועדפת שלכם למודעות ליניאריות. אם אתם רוצים להצטרף לקבוצת בדיקות האלפא, אתם יכולים לפנות לשותף שאחראי על החשבון שלכם.
- סשן:
- תוקן באג שבו מערכים גדולים ב-
MediaMetadata.artworkDataעלולים לגרום לקריסה של האפליקציה. - משתמשים בסוג int לארגומנט
@Player.CommandבממשקActionFactory(#2933). - הופכים את
MediaSessionServiceואתMediaLibraryServiceל-LifecycleService, כדי לאפשר צירוף של פעולות שמתחשבות במחזור החיים למחזור החיים של השירות (#187). - הפסקת התמיכה בפקודות לשינוי עוצמת הקול במכשירים מ-
MediaControllerומ-MediaBrowserלהפעלות מקומיות. אפליקציות לא אמורות לשנות את עוצמת הקול במכשיר המקומי, ואם נדרש, הן יכולות להשתמש בממשקיAudioManagerAPI למטרה הזו. - זיהוי מקרים של
Intentשהתחילו את השירות כשירות חזיתי. כך נמנעת שגיאהForegroundServiceDidNotStartInTimeExceptionבמערכת. זהו שינוי שובר תאימות ב-API לא יציב באפליקציות שמטמיעותMediaNotification.Providerבהתאמה אישית, כי יש שיטה חדשה שנדרשת. - הוספת קבצים ליצירת מופעים של
PendingIntentלשימוש בווידג'טים במסך הבית (#2933). - הוספת שיטות סטטיות ליצירת מופעים של
Intentלווידג'טים של מסך הבית שמבוססים על Compose (#2933). - תוקן באג שבו המעבר בין פריטי מדיה לא דווח לבקרי המדיה כשבוצע מעבר מהפעלה של פריט מדיה מסוים להפעלה של פריט מדיה אחר עם אותו פריט מדיה, בגלל סיבת אי הרציפות AUTO ו-SEEK (#2997).
- תיקון בעיה שבה פתרון עקיף למיקום לחצנים בממשק המשתמש של המערכת משפיע באופן שלילי על ממשק משתמש אחר, כמו Android Auto, או על יצרנים שלא צריכים את הפתרון העקיף (#3041).
- תוקנה בעיה שבה הגישה למינויים לא סונכרנה (#3056).
- פתרון עקיף לבאג ב-SysUI ב-API 29, שבו יצירת יצירות אמנות של סשן מדיה בגודל מסוים עלולה לגרום לקריסת SysUI ולאלץ את המכשיר להפעלה מחדש (#3118).
- תיקון של שינוי גודל הסמל של יצירת האומנות בהתראות ב-Android Q (#3084).
- תוקן באג שבו מערכים גדולים ב-
- UI:
- הוספת
PlaybackSpeedControlComposable ל-media3-ui-composeכדי להציג ולשנות את מהירות ההפעלה. - מוסיפים
PlaybackSpeedToggleButtonComposable ל-media3-ui-compose-material3כדי לשלוט במהירות ההפעלה. - הוספנו את
ProgressSliderComposable ל-media3-ui-compose-material3כדי להציג את ההתקדמות של הצופה בסרטון ולבצע מעברים באמצעות גרירה והקשה (מס' 2288). - הימנעות ממאגר גדול מחוץ למסך בהנפשה של PlayerControlView.
- מוסיפים את
PlayerComposable ל-media3-ui-compose-material3שמשלבContentFrameעם אמצעי בקרה שניתנים להתאמה אישית ומיושרים לחלק העליון, למרכז ולחלק התחתון. - הסתרת מיקום ההפעלה משירות הנגישות כדי למנוע עדכון רציף של ההודעה כש
PlayerControlViewגלוי.
- הוספת
- תוסף HLS:
- תמיכה ב-X-PLAYOUT-LIMIT עם מודעות מעבר ב-HLS (#2484).
- תמיכה במאפיין
QUERYPARAMעם#EXT-X-DEFINE(#1854). - אופטימיזציה של ניתוח פלייליסטים בפורמט HLS באמצעות שמירת התאמות של ביטויים רגולריים במטמון (#3008).
- חשיפת טראק של מטא-נתונים של ID3 (EMSG) בעיבודים של אודיו (#3043).
- אפשרות להשתמש במיקום חלופי אם מתגלות שגיאות טעינה, אם יש סטרימינג מיותר ממיקומים שונים (#1988).
- תוקן אופן הפעולה של X-SNAP במודעות מעברון בפורמט HLS כדי לחשב נכון את מיקום ההתחלה וההמשך (#3013).
- תוסף DASH:
- תוסף RTSP:
- תוקנה רגרסיה בסטרימינג של H.264 ו-H.265 שגרמה לניתוח שגוי של דוגמאות של אותה יחידת גישה שהתפרסה על פני כמה מנות RTP. התוצאה הייתה ארטיפקטים חזותיים ופגמים בסרטון (#3121).
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- הוספת תמיכה במנהל ממשק משתמש של MPEG-H לתוסף של מפענח MPEG-H (#3066).
- תוסף Cast:
- הוספנו
RemoteCastPlayer.Builder#setTrackSelectorשיטה שמאפשרת הטמעה של בחירת טראקים בהפעלות של Cast.
- הוספנו
- הסרת סמלים שהוצאו משימוש:
- הסרה של
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
25 במרץ 2026
משתמשים בגרסה יציבה 1.10.0.
1.10.0-rc02
16 במרץ 2026
משתמשים בגרסה יציבה 1.10.0.
1.10.0-rc01
10 במרץ 2026
משתמשים בגרסה יציבה 1.10.0.
1.10.0-beta01
25 בפברואר 2026
משתמשים בגרסה יציבה 1.10.0.
1.10.0-alpha01
6 בפברואר 2026
משתמשים בגרסה יציבה 1.10.0.
גרסה 1.9.0
1.9.4
16 במאי 2026
גרסה 1.9.4 מכילה את השמירות הבאות.
- אפקט:
- צריך להגדיר בצורה מפורשת את
GL_DRAW_BUFFERואתGL_READ_BUFFERכשעוברים מהקשר ללא משטח.
- צריך להגדיר בצורה מפורשת את
1.9.3
16 במרץ 2026
גרסה 1.9.3 מכילה את השמירות האלה.
- אודיו:
- תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.
1.9.2
6 בפברואר 2026
גרסה 1.9.2 מכילה את השמירות האלה.
- ExoPlayer:
- תוקן באג שבו
ProgressiveMediaSourceמעביר מידע לא עדכני על ציר הזמן לנגן, והתקופות שנוספו לתור מוסרות באופן לא צפוי (#3016).
- תוקן באג שבו
- סשן:
- תיקון בעיה שבה פתרון עקיף למיקום לחצנים בממשק המשתמש של המערכת משפיע באופן שלילי על ממשק משתמש אחר, כמו Android Auto, או על יצרנים שלא צריכים את הפתרון העקיף (#3041).
- תוסף Cast:
- תוקן באג שגרם לכך שההעברה מ-Cast להפעלה מקומית לא פעלה.
1.9.1
26 בינואר 2026
גרסה 1.9.1 מכילה את השמירות האלה.
- ספרייה משותפת:
- תמיכה במחרוזות של תאריך ושעה עם שעות בלבד בהיסט מאזור הזמן (#2929).
- ExoPlayer:
- אפשר להאט את מרווח הזמן של
doSomeWorkרק אחרי שהשמע מתחיל, כדי לתמוך בסנכרון חלק יותר של אודיו ווידאו בתחילת ההפעלה. - תוקן באג ב-
DefaultLoadErrorHandlingPolicyשבו בוצע ניסיון חוזר מספר פעמים ל-FileNotFoundExceptionולסוגים דומים של חריגים. - תוקן באג בתזמון דינמי שבו הזמן המחושב להפעלה הבאה של
doSomeWorkקוצר בטעות בפרק הזמן שחלף מההפעלה הנוכחית שלdoSomeWork. הטיפול בבעיה הזו אמור להאריך את זמן ההמתנה של המעבד ולחסוך בחשמל. - תוקנה בעיה שבה חלק מההפעלות של קובצי Dolby Vision נכשלות כשמנסים להשתמש בקודק חלופי של AVC או HEVC.
- תוקן באג שבו הטעינה נמשכת אחרי שההפעלה מסתיימת כשמסירים את הפריט שמופעל כרגע מפלייליסט (#2873).
- נמנעו דליפות של
MediaItemמקרים כשמשתמשים שוב ושוב ב-ExoPlayer.replaceMediaItemבאותו פריט (#2993). - מניעת מצבי ANR פוטנציאליים שנגרמים משחרור חסימת מצב שינה במקרה חירום (#2979).
- אפשר להאט את מרווח הזמן של
- אמצעי חילוץ:
- MP3: Parse LAME ReplayGain data (#2840).
- אודיו:
- הוסרה בצורה נכונה התמיכה ב-
AC4Profile22ובפרופילים אחרים מדור קודם, במהלך הערכת התמיכה במפענח AC-4 בתרחישים של Automotive (מס' 2609).
- הוסרה בצורה נכונה התמיכה ב-
- סרטון:
- הסרת קודקים של סרטונים במכשירים עם API מתחת ל-30 כשקצב הפריימים של התוכן משתנה, כדי למנוע גמגום בהפעלה (#2941).
- טקסט:
- VobSub: תוקנו כמה כתוביות חסרות על ידי טיפול נכון ב-SPU שמכילים רק רצף בקרה יחיד, או שיש בהם מידע קריטי שמפוצל בין כמה רצפי בקרה (#2935).
- תוסף IMA:
- תיקון באג: תוקנה בעיה שבה סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שסופק באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות אינדקס רצף המודעות ומיקום מודעה בדף.
- צריך להוסיף בדיקה של ערך null לפני שמתבצעת גישה לתוצאה של
getAdsManager()ושלAdEvent.getAd().
- סשן:
- תוקן באג שגרם לקריסת האפליקציה כשמפסיקים סשן של
MediaControllerשמתחבר לפלטפורמה, אם ההפסקה מתרחשת במהלך הפעלת מודעה (#2948). - הוספת אימותים נוספים במופעי
extrasBundleבכיתות שונות כדי להגן מפני מופעיBundleפגומים שנשלחים מתהליכים אחרים. - תוקנה בעיה שבה פקודות חסרות עבור
COMMAND_SEEK_NEXTאוCOMMAND_SEEK_BACKעלולות לגרום לפערים בהתראה על מדיה במערכת (#2976). - העברת קנה מידה של מפת סיביות לסמל ההתראה מחוץ לשרשור הראשי (#2829).
- תוקן באג שגרם לכך שהשדות author, writer ו-composer לא שימשו כגיבוי כשבוצעה המרה מ-
MediaMetadataCompatומ-MediaDescriptionCompatמדור קודם (#3018).
- תוקן באג שגרם לקריסת האפליקציה כשמפסיקים סשן של
- הורדות:
- תיקון לולאות אינסופיות פוטנציאליות כשמטפלים ב-
PriorityTooLowExceptionבאמצעותSegmentDownloader(עבור DASH, HLS ו-SmoothStreaming). צריך לספק את המשימה שעטופה ב-Supplierכדי ליצור מחדש את ההגדרות שמוגדרות כברירת מחדל ב-SegmentDownloaderבאמצעות השיטה המוגנתexecute(#2931).
- תיקון לולאות אינסופיות פוטנציאליות כשמטפלים ב-
- תוסף HLS:
- מעבירים את מסמך ה-JSON של רשימת הנכסים הגולמית אל פונקציית הקריאה החוזרת
Listener.onAssetListLoadCompleted. זהו שינוי שעלול לשבור את התאימות לאחור ב-API לא יציב, שמחייב אפליקציות שמטמיעות את הקריאה החוזרת הזו להוסיף ארגומנט נוסף מסוגJSONObject(#2950).
- מעבירים את מסמך ה-JSON של רשימת הנכסים הגולמית אל פונקציית הקריאה החוזרת
- תוסף RTSP:
- טיפול נכון בחבילות RTP עם חותמות זמן שחוזרות על עצמן (#2930).
- תוספי פענוח (FFmpeg, VP9, AV1 וכו'):
- תיקון בעיות פוטנציאליות
NullPointerExceptionשיכולות להתרחש כשמבצעים חיפוש לפני העיבוד של פריים הסרטון הראשון (#2965).
- תיקון בעיות פוטנציאליות
- תוסף Cast:
- תוקן באג שמונע עדכון תקין של ציר הזמן
RemoteCastPlayerכשמחליפים את הפלייליסט.
- תוקן באג שמונע עדכון תקין של ציר הזמן
1.9.0
17 בדצמבר 2025
- ספרייה משותפת:
- מעדכנים את
minSdkלגרסה23בהתאם לספריות אחרות של AndroidX. - הוספת
PlayerTransferState, שמסייע בהעברת מצב ההפעלה בין מופעים שלPlayer. - מוסיפים את השיטות
void mute()ו-void unmute()ל-Player כדי לשמור את עוצמת הקול של Player לפני שמגדירים אותה לאפס, וכדי לשחזר אותה אחרי ההגדרה. - פרסום של מחלקות כלי עזר
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerו-StuckPlayerDetectorששימשו בעבר אתExoPlayerבאופן פנימי, כדי לאפשר שימוש חוזר על ידי שחקנים אחרים (מס' 1893). - תוקן טיפול ב-
ForwardingPlayerlistener כשנגן הנציגים הבסיסי משתמש בשוויון הפניה להשוואה בין מופעי listener (#2675). - מוסיפים פונקציית הרחבה של השעיה בספרייה
Player.listenTomedia3-common-ktxשמציינת אתPlayer.Eventsהספציפי שצריך לפעול לגביו. - תוקנה קריסה ב-
BasePlayer.getBufferedPercentageשנגרמה כתוצאה מגלישה של מספר שלם (integer) כשמיקום המאגר המדווח גדול באופן לא סביר בהרבה מהמשך המדווח (מס' 2750). - תיקון הזיהוי האוטומטי של
TrackGrouptrack type על ידי אי התעלמות מסוג MIME מותאם אישית של דוגמה וחזרה לשימוש בסוג track שגוי פוטנציאלי מסוג MIME של קונטיינר (#2860).
- מעדכנים את
- ExoPlayer:
- הוספת זיהוי של נגן תקוע שמפעיל
StuckPlayerExceptionשגיאת נגן אם נראה שהנגן תקוע. זה קורה במקרים הבאים, שבהם אפשר להגדיר כל פסק זמן שמוגדר כברירת מחדל ב-ExoPlayer.Builderאם צריך:- אחרי 10 דקות של
STATE_BUFFERINGבזמן ניסיון ההפעלה, ללא התקדמות בטעינה. - אחרי 10 שניות של
STATE_READYבזמן ניסיון ההפעלה, ללא התקדמות בהפעלה. - אחרי דקה אחת של
STATE_READYמעבר למשך הזמן המוצהר בלי להגיע לסוף הפריט. - אחרי 10 דקות עם סיבה לביטול ההפעלה בזמן ניסיון ההפעלה.
- אחרי 10 דקות של
- הפעלת הטיפול בנעילת ההשכמה כברירת מחדל כדי לפתור בעיות שקשורות לאגירת נתונים במהלך הפעלה ברקע. הפעולה הזו שוות ערך להגדרת
ExoPlayer.Builder.setWakeModeלערךC.WAKE_MODE_LOCAL. - הוספת לוגיקת האזנה לעדכון אוטומטי של מזהה המכשיר הווירטואלי כששינוי מדווח ל-
Contextשהועבר במקור ל-ExoPlayer.Builder. - מוסיפים את
ExoPlayer.setVirtualDeviceIdכדי לעדכן באופן ידני את מזהה המכשיר הווירטואלי שהתקבל מ-Contextשהועבר אלExoPlayer.Builder. - חשוב לוודא שרכיבי העיבוד לא צורכים נתונים מהפריט הבא ברשימת ההשמעה יותר מ-10 שניות לפני סיום הפריט הנוכחי.
- הוספנו את
setSeekBackIncrementMs,setSeekForwardIncrementMsו-setMaxSeekToPreviousPositionMsאלExoPlayerכדי לעדכן את ההגדרות האלה אחרי הבנייה (#2736). - הוספנו פונקציונליות של שמירה מראש במטמון ב-
DefaultPreloadManager. אפליקציות יכולות עכשיו להחזירDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)אוDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)דרךTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)כדי לציין שפריט מדיה צריך להיטען מראש במטמון. - שימוש בפונקציונליות של טעינה מראש מהמטמון של
DefaultPreloadManagerבאפליקציית הדגמה של סרטונים קצרים. - מוסיפים פונקציות setter של
DefaultLoadControl.Builderלהפעלה מקומית ומשנים את ערכי ברירת המחדל שלDefaultLoadControlכדי שהם יתאימו למגוון רחב של קבצים מקומיים. - תוקן באג שבו הגדרת פלייליסט ריק יכולה להשאיר את הנגן במצב
STATE_READYאוSTATE_BUFFERING. - שיפור ממשקי ה-API של מנהל הטעינה מראש:
- מוסיפים את
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)במהלך הפעלה של מודעה בסוף סרטון (#2746). - תיקנו בעיה של גמגום בהפעלת פלייליסטים, שבה פריימים הוגדרו בטעות תמיד כדגימה האחרונה ועברו עיבוד.
- הפעלת נתיב ניסיון חוזר אם הנגן לא מצליח ליצור מזהה של סשן אודיו (#2382, #2678).
- הוספת תמיכה בשליטה בבייטים הכוללים של מאגר הנתונים הזמני של המקורות ב-
DefaultPreloadManagerכדי למנוע מצב שבו הבייטים הכוללים של מאגר הנתונים הזמני לטעינה מראש גדלים באופן שרירותי. כדי להשתמש בלוגיקת הבקרה שמוגדרת כברירת מחדל, אפליקציות יכולות להגדיר את בייטי מאגר היעד לטעינה מראש באמצעותDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)עבורplayerNameשלPlayerId.Preload.name("טעינה מראש"), ולהחדיר אתDefaultLoadControlשנוצר באמצעותDefaultPreloadManager.Builder.setLoadControl(LoadControl). - הוספת
cloneAndSet(int, int)ל-ShuffleOrderעם הטמעה של ברירת מחדל (#2834). - הוספת היסט של חידוש התוכן כשמדלגים על השמעת מודעה אחרי התאמה של מיקום או מעבר אוטומטי (#2484).
- הוספנו API להגדרת פרמטרים של קודק ולמעקב אחריהם עבור רצועות אודיו ווידאו.
התכונה הזו מיושמת עבור רכיבי עיבוד שמבוססים על
MediaCodecונדרשת רמת API 29 ומעלה.- משתמשים ב-
ExoPlayer.setAudioCodecParameters()וב-ExoPlayer.setVideoCodecParameters()כדי להחיל פרמטרים. - משתמשים ב-
ExoPlayer.addAudioCodecParametersChangeListener()וב-ExoPlayer.addVideoCodecParametersChangeListener()כדי להאזין לשינויים. כדי לראות מפתחות ספציפיים לספק, צריך להשתמש ב-API ברמה 31 ומעלה.
- משתמשים ב-
- תיקון
IllegalStateExceptionשנגרם כתוצאה מהגדרה של מקור מדיה ריק אחרי דילוג למיקום שאינו אפס ואז הכנת הנגן עם מקור מדיה לא ריק. - תיקון באג שבו מעבר לפריטי מדיה אחרים במצב ניקוי יכול לגרום ל
IllegalStateException. - תיקון בעיות פוטנציאליות של
NullPointerExceptionב-DefaultPlaybackSessionManager(#2885). - הפעלת שיפורים בביצועי ההרצה קדימה בסרטונים שעומדים בדרישות.
- הפעלה מחדש של השימוש בפענוח אסינכרוני ב-MediaCodec ב-API 36 ומעלה, שבהם תוקנו בעיות של פסק זמן ב-API של הפלטפורמה הזו (#1641).
- משנים את ערך ברירת המחדל של
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsל-15ms ומפעילים השמטה יעילה יותר של פריימים של סרטונים לפני פענוח של סרטונים שעומדים בדרישות. - הוספת מגבלת זיכרון מקסימלית לחישוב הזיכרון האוטומטי ב-
DefaultLoadControl. ההגדרה הזו אמורה לפעול רק אם נבחר מספר מוגזם של טראקים (#2860). - תוקן באג שבו, אם מפעילים פלייליסט או מצב הפעלה חוזרת, חיפוש במצב גלילה ליד הסוף עלול לגרום לחיפוש של פריט המדיה הבא.
- הוספת זיהוי של נגן תקוע שמפעיל
- CompositionPlayer:
- פרסום
CompositionPlayerבהערה חדשה@ExperimentalApiכדי לציין שהתכונה זמינה לניסויים, אבל עדיין נמצאת בפיתוח. יש סיכוי גבוה שחלק מממשקי ה-API ישתנו באופן משמעותי בגרסאות עתידיות, ויש בעיות ומגבלות ידועות בחלק מתרחישי השימוש (חלקן לא מתועדות). - הוספת תמיכה ב-
COMMAND_SET_AUDIO_ATTRIBUTESובטיפול בהרשאת אודיו ב-CompositionPlayer. - הוספת תמיכה בשינוי מהירות ברצפים משניים ב-
CompositionPlayer. - הוספת תמיכה ב-
EditedMediaItem.removeVideo.
- פרסום
- Transformer:
- שימוש ב-
InAppMp4Muxerכברירת מחדל של כלי למיזוג אודיו ווידאו. - הוספה של
EditedMediaItem.Builder#setSpeed()והוצאה משימוש שלEffects#createExperimentalSpeedChangingEffects(). - מחליפים את
forceAudioTrackואתforceVideoTrackב-trackTypesב-EditedMediaItemSequence.
- שימוש ב-
- בחירת טראק:
- מוסיפים
TrackSelectionParameters.selectTextByDefaultכדי להעדיף את הבחירה של כל רצועת טקסט בלי לציין העדפות ספציפיות יותר. - מוסיפים את
preferredVideoLabels, preferredAudioLabelsו-preferredTextLabelsב-TrackSelectionParametersכדי לציין העדפה למסלולים עם תווית ספציפית, למשל אלה שנקראים מתגי NAME של HLS (#1666).
- מוסיפים
- אמצעי חילוץ:
- FLAC: שיפור זיהוי הכותרות כדי להפחית את הסיכוי למצוא כותרות מזויפות בנתוני FLAC המקודדים, וכתוצאה מכך להפחית את הסיכוי לשגיאות בפענוח (#558).
- MP3: מאפשר פערים בין תגי ID3 (ולפני) בתחילת קובצי MP3 (#811, #5718).
- MP3: הגדלת מגבלת החיפוש ל-128kB כדי להתאים למגבלת החיפוש הקיימת לבייט סנכרון (#2713).
- MP3: שינוי
FLAG_ENABLE_INDEX_SEEKINGכך שיועדף חיפוש מידע בכותרות של מטא-נתונים (כמו Xing ו-VBRI) אם הן זמינות, וחזרה לחיפוש מבוסס-אינדקס אם אין מידע אחר לחיפוש. השינוי הזה משפר את הביצועים של קבצים עם מטא-נתונים של חיפוש (#2839). - MP3: שינוי
Mp3Extractorלברירת מחדל של הנחה של קצב העברת נתונים קבוע (CBR) כשלא נמצאים מטא-נתונים של חיפוש (למשל, Xing, VBRI), גם כשמוגדרFLAG_ENABLE_INDEX_SEEKING. ההגדרה הזו מבוססת על היסטוריית המפרט של MP3, שבה CBR היה תקני ו-VBR דרש כותרות מפורשות. השיטה הזו משפרת את האפשרות לחפש מיקום בקבצים ללא מטא-נתונים, אבל עלולה לפגוע בדיוק של קבצים עם VBR בלי כותרות. חיפוש באינדקס משמש עכשיו כגיבוי אם ההנחה לגבי CBR לא ניתנת לחיפוש (למשל, בסטרימינג באורך לא ידוע) (#2848). - MP4: כדי להבחין בין סוגי ה-MIME
audio/mpeg(MP3),audio/mpeg-L1ו-audio/mpeg-L2, צריך להציץ בערך השכבה של הדגימה הראשונה לפני שמוציאים פורמט של טראק מהכלי לחילוץ (#2683). - MP4: שיפור היעילות של סניפינג קבצים גדולים מאוד על ידי הנחה שתיבת
stblגדולה מ-1MB מרמזת שהקובץ לא מפולח (#2650). - MP4: נוספה תמיכה במטא-נתונים של
©mvn(שם התנועה) ושל©mvi(אינדקס התנועה). עכשיו הם מופקים כאובייקטים שלTextInformationFrameב-Format.metadataעם המזהיםMVNMו-MVINבהתאמה (#2754). - MP4: המערכת מתעלמת מטראקים עם תיבת
stsdחסרה (במקום להיכשל בניתוח של הקובץ כולו). - Matroska: נוספה תמיכה בזיהוי DTS-HD (#6225).
- תוקנה בעיה ב-
MatroskaExtractorשבה החיפוש יכול להיות לא מדויק בקבצים עם כמה רצועות. נקודות ה-Cue משויכות עכשיו בצורה נכונה לטראקים המתאימים, מה שמוביל לחיפוש מדויק יותר. - MPEG-TS: תוקנה שגיאה
IllegalArgumentExceptionמתוךReorderingBufferQueueשנגרמה על ידי חבילות PES ללא חותמת זמן (מס' 2764). - הוספנו תמיכה בחילוץ תמונות HEIC בתנועה.
HeifExtractorיכול עכשיו לנתח קובצי HEIC שמכילים טראקים מוטמעים של וידאו ואודיו.
- כלי הבדיקה:
- הוספנו מודול חדש,
:media3-inspector, שמשמש כמרכז ייעודי לכלי בדיקת מדיה. המודול הזה כולל עכשיוandroidx.media3.inspector.MetadataRetrieverחדש, שיספק API מאוחד לחילוץ מטא-נתונים ופריימים. הגרסה הקיימת שלandroidx.media3.exoplayer.MetadataRetrieverהוצאה משימוש, ועכשיו אפשר להשתמש בגרסה החדשה הזו. - השקנו את
androidx.media3.inspector.FrameExtractor, API ציבורי חדש לשליפת פריימים. המחלקות האלהAutoCloseableמספקות דרך לחלץ פריימים עם תמיכה בווידאו HDR, באפקטים של וידאו ובבחירה מותאמת אישית של מפענח. צריך ליצור אותו דרךBuilderעבורMediaItemספציפי. - FrameExtractor: נוספה האפשרות
getThumbnail()לחילוץ פריים מייצג של תמונה ממוזערת מקובץ מדיה בלי שנדרשת חותמת זמן ספציפית. - הוספת
androidx.media3.inspector.MediaExtractorCompat, תחליף מוכן לשימוש ל-android.media.MediaExtractorשל הפלטפורמה, שמספק דרך לחלץ דגימות מדיה גולמיות ומקודדות מקובץ מדיה. השימוש ב-androidx.media3.exoplayer.MediaExtractorCompatהקיים הופסק לטובת הכיתה החדשה הזו.
- הוספנו מודול חדש,
- אודיו:
- הגדרת מודעות של מופעי
AudioProcessorלחיפוש. - מתן הרשאה להטמעת הממשק החדש של
AudioOutputProviderב-DefaultAudioSink.Builderכדי לתמוך בנתיבי פלט אודיו מותאמים אישית. ערך ברירת המחדל הואAudioTrackAudioOutputProvider. - התמודדות עם חיפושים ב-
GainProcessor. - שימוש בפרופיל ובאפשרויות של מפענח AC-4 בהערכת התמיכה בפורמט של רצועת אודיו (#2580).
- נמנעים מעיכובים פוטנציאליים שנגרמים כתוצאה מטיפול בהחזרות (callbacks) של שינויי ניתוב בתחילת ההפעלה (#2646).
- אפשר להשתמש מחדש ב-Codec לפורמטים EAC3, EAC3-JOC ו-AC-4 (#1346).
- הוספנו תמיכה בדגימות PCM צפות ב-
Sonic. - הוספנו תמיכה בדגימות PCM של 16 ביט ב-
ToFloatPcmAudioProcessor.
- הגדרת מודעות של מופעי
- סרטון:
- השבתה של שימוש חוזר ב-codec לתוכן Dolby-Vision עם פרופילים שונים.
- הפעלה מחדש של פתרון עקיף לנקודות ביצועים שדווחו באופן שגוי עבור קודקים מאובטחים (#2856).
- טקסט:
- תוקן ניתוח של כתוביות CEA-6/708 בתוכן Dolby Vision (#2775).
- תמונה:
- תוקנה בעיה ב-ScrubbingMode שבה הנגן נתקע בזמן העברה מהירה של רצועת תמונות ממוזערות של DASH (#2815).
- DRM:
- שינוי סוג ההחזרה של
MediaDrmCallbackmethods מסוגbyte[]ל-type חדש מסוגMediaDrmCallback.Response, כדי לאפשר החזרה של מידע אופציונלי נוסף. זהו שינוי שובר תאימות במקור, אבל אפשר לפתור בקלות את הבעיות שנוצרות ממנו על ידי הוספת הערך הקודם להחזרהbyte[]ל-new Responseלפני ההחזרה. - מוסיפים ל-
AnalyticsListener.onDrmKeysLoaded(#1001) פרטים חשובים על הבקשה, כמו כתובת URL וזמן אחזור. - העברת נתוני בקשת הקצאת הרשאות מפרמטר של כתובת URL לגוף בקשת ה-POST.
- שינוי סוג ההחזרה של
- אפקט:
- מוסיפים
Presentation.copyWithUnsetSideRoundedToכדי לעגל את הפלט של הצד שלא הוגדר כשיוצרים אתPresentationעם אורך צד אחד.
- מוסיפים
- Muxers:
- צריך להוסיף את
MediaMuxerCompat, תחליף מוכן לשימוש ל-frameworkMediaMuxer. - כדי לאפשר יצירת תמונות דינמיות, צריך להוסיף את
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo(). - מוסיפים
WebmMuxerכדי לאפשר מיזוג של זרמי מדיהOPUS,VORBIS,VP8ו-VP9לפורמט קובץwebm.
- צריך להוסיף את
- תוסף IMA:
- הסרנו כללים מותאמים אישית של Proguard, כדי שאפליקציות יוכלו להשתמש באלה שפורסמו בארכיון IMA Android.
- הוספנו את
ImaServerSideAdInsertionUriBuilder.setNetworkCode, API חדש להגדרת קוד הרשת של Google Ad Manager עבור IMA SDK, כדי לטפל במזהי מודעות בהתאם להגדרות של Google Ad Manager. קודים של ערוצים הם אופציונליים, אבל מומלצים לבקשות של סטרימינג של שירות מלא. כדי למצוא את הקוד של הרשת, ראה מאמר זה. - העלאת התלות ב-IMA לגרסה 3.37.0, שדורשת הפעלה של desugaring של ספריית הליבה. גם באפליקציות התלויות צריך להפעיל את ההגדרה הזו. אפשר לעיין בהערות על ההגדרה של IMA. * תמיכה באפשרויות מותאמות אישית של ממשק משתמש ב-IMA DAI בכלי ליצירת URI של SSAI. אפשרויות ממשק משתמש מותאם אישית להוספת מודעות בצד השרת כוללות תמיכה בעיבוד של 'ניתן לדילוג' ו'בנוגע למודעה הזו'. התכונה זמינה כרגע רק לקבוצה נבחרת של בעלי אפליקציות שמופיעים ברשימת ההיתרים. בנוסף, השינוי הזה משדרג את גרסת IMA SDK ל-3.38.0 (הערות על הגרסה) כדי לאפשר גישה ל-API של אפשרויות ממשק משתמש בהתאמה אישית.
- תוקנה הבעיה שבה שגיאה בהכנת תוכן אחרי מודעה דווחה בטעות כשגיאה בהפעלת מודעה (#2656).
- סשן:
- הוספת פרמטר חדש ל-
MediaSession.Callback.onPlaybackResumptionכדי לציין אם השיחה מתבצעת רק כדי לאסוף מידע או כדי להתחיל בהפעלה (#1764). - עדכון של
MediaSession.ControllerInfo.isTrustedכך שיוצהר גם על בקרי גישה מהאפליקציה עצמה כאמינים (מס' 2542). - הוספת
MediaSessionService.triggerNotificationUpdateכדי להפעיל עדכון של ההתראות באופן ידני (מס' 1833). - מוסיפים
ProgressListenerלשיטות של פקודות מותאמות אישית. - משנים את ערך ברירת המחדל של
MediaLibrarySession.Builder.setLibraryErrorReplicationModeלערך שאינו קריטי. - מוסיפים פרמטר
Contextל-MediaButtonReceiver.onForegroundServiceStartNotAllowedException(מס' 2625). - קריאת מזהה בקרת עוצמת הקול מהפלטפורמה
PlaybackInfoבמקום אחזור שלו באמצעות binder. כך אפשר לוודא שסוג ההפעלה ומזהה בקרת עוצמת הקול ייקראו באופן אטומי ויתאימו זה לזה. - תוקן באג שבו
ACTION_UPאירועים מרכזיים סוננו לפני שהועברו לקריאה חוזרת לטיפול מותאם אישית. השינוי הזה יוצר שוויון עם מה ש-media1 עשה ומה שהפלטפורמה עושה (#2637). - תוקן באג שבו הפונקציה
getCurrentTimeline()נקראה על ידיPlayerWrapperגם אם הפקודה לא הייתה זמינה (#2665). - תוקן באג שבו הודעה נשארה בתור ההודעות של ה-looper הראשי, מה שגרם לדליפת זיכרון אחרי שהשירות הסתיים (#2692).
- כשמתחברים לאפליקציה של סשן מדור קודם עם
MediaBrowser, פקודות מותאמות אישית נשלחות לסשן רק אם הפעולה המותאמת אישית מוצגת כפעולה מותאמת אישית ב-PlaybackStateCompatשל הסשן מדור קודם. כל הפעולות המותאמות אישית האחרות נשלחות לשירות. - הוטמעה
onAudioSessionIdChangedכדי להודיע לבקרי המדיה כשמזהה סשן אודיו מוגדר על ידי הסשן (מס' 244). - תוקן באג שגרם לכך שהנגן לא הופעל כשאירוע של מקש מדיה
Intentהגיע ל-onStartCommand()אחרי שבוצע לחיצה עלKEYCODE_HEADSETHOOK. הבעיה הזו נפתרה על ידי טיפול ב-KEYCODE_HEADSETHOOK כמו ב-KEYCODE_MEDIA_PLAY_PAUSE(#2816). - תיקנו באג שבו גודל ה-Surface לא הועבר בין הסשן לבין הבקר, ולכן לא ניתן היה להחיל אפקטים של סרטונים בסשן ההדגמה. אם אתם משתמשים בשלט רחוק, יכול להיות שזה שינוי שובר אם הנגן שלכם לא יכול לטפל בקריאה של
setVideoSurfaceHolder. - תיקון ההפצה של ערכי מטא-נתונים שאינם
StringCharSequence, כמו מחרוזות עם תגי span (#2853). - מוסיפים
CommandButton.executeActionכדי שהבקרים יוכלו להפעיל בקלות רבה יותר את הפעולה הרצויה. בנוסף, אפשר לציין פרמטרים לחלק מהפקודות של הנגן והסשן כדי להגדיר איזו פעולה תופעל. - הוספת תאימות לאחור למופעים של
CommandButtonבאמצעותPlayer.CommandאוSessionCommandלא מותאם אישית כדי להגדיר את הפעולה שלהם. הם מוצגים עכשיו בצורה נכונה בסשנים של מדיה בפלטפורמה, למשל בממשק המשתמש של המערכת או ב-Android Auto. - תוקנה בעיה שבה אותו
Bitmapנדחס כמה פעמים כשמחבריםMediaControllerלסשן מדיה בפלטפורמה.
- הוספת פרמטר חדש ל-
- UI:
- מוסיפים את המחלקה
ProgressStateWithTickIntervalואת ה-Composable המתאיםrememberProgressStateWithTickIntervalלמודולmedia3-ui-compose. מחזיק המצב הזה משמש ב-demo-composeלהצגת המיקום והמשך הנוכחיים בפורמט טקסט. - מוסיפים
MuteButtonStateל-ui-composeשמטפל בהשתקה של עוצמת הקולPlayer. מאחסן מצב זה משמש ב-demo-composeלהצגת לחצן להשתקה או לביטול ההשתקה. - מוסיפים את המחלקות
ProgressStateWithTickCountואת ה-Composable המתאיםrememberProgressStateWithTickCountל-media3-ui-composemodule. מחזיק המצב הזה משמש ב-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).
- משתמשים בחיפוש בינארי כדי למצוא את אינדקס הפלח של מיקום נתון בפלייליסט (#2826).
- מוסיפים את
HlsInterstitialsAdsLoader.skipCurrentAd()ואתskipCurrentAdGroup()ואת השיטות המתאימות כדי לדלג על מודעות ועל קבוצות של מודעות לפי אינדקס. - הוספת
HlsInterstitialsAdsLoader.Listener.onAdStartedכדי לדווח על תחילת תקופת הצגת מודעה (מס' 2859). - אפשר להשתמש ברווח כמפריד בין תאריך לשעה במחרוזות של תאריך ושעה בפורמט ISO 8601.
- טיפול נכון באחזור של הנתח הבא עבור
HlsMediaPlaylistללא פלחים (#2821). - שימוש במיקום ההתחלה שמוגדר כברירת מחדל למודעות לפני סרטון בשידורים חיים.
- תוסף DASH:
- תוקנה בעיה שקשורה ל-
UnsupportedOperationExceptionכשמפעילים סטרימינג של DASH עם מניפסט URIdata:לא היררכי (#2688). - הערך של
LiveConfigurationמתאפס לערך שסופק על ידיMediaItemשלDashMediaSourceכשהוא יוצא לאור וכאשר המשתמש מעדכן את פריט המדיה (#2606). - נמנעות קריסות שנגרמות מעדכוני מניפסט לא תקינים שלא דווחו כשגיאות בנגן (#2805).
- תוקנה בעיה שקשורה ל-
- תוסף RTSP:
- טיפול בשגיאה של חבילות RTP חסרות במהלך עיבוד של יחידות NAL מפוצלות עבור H264 ו-H265 (#2613).
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- תוסף AV1: מפענח התוכנה AV1 משתמש עכשיו בספריית
dav1dבעלת הביצועים הגבוהים, במקום בהטמעה הקודמת שלlibgav1, כדי לשפר את מהירות הפענוח. - תוסף FFmpeg: תוקנה בעיה שמנעה הפעלה של קובצי FLAC מסוימים. הבעיה נפתרה על ידי הבטחה שבלוק
STREAMINFOינותח בצורה נכונה ויועבר למפענח (#2887).
- תוסף AV1: מפענח התוכנה AV1 משתמש עכשיו בספריית
- תוסף Cast:
- מוסיפים את
CastPlayer.Builder, וכך מאפשרים ל-CastPlayerלהפעיל תוכן מקומי וגם להפעיל תוכן ב-Cast. כדי לשמור על ההתנהגות הישנה שלCastPlayer, שבה נתמכת רק הפעלה ב-Cast, אפשר להשתמש ב-RemoteCastPlayer. הקונסטרקטורים הקיימיםCastPlayerשומרים על ההתנהגות הקודמת שלהם, אבל הם הוצאו משימוש. במקומם, מומלץ להשתמש בבוניCastPlayerאוRemoteCastPlayer. - הפסקת האכיפה של סוג mime שאינו null ב-
DefaultMediaItemConverter. - אם יש אפשרות, משתמשים ב-
MediaItem.mediaMetadata.mediaTypeכדי להסיק את ה-MEDIA_TYPE של Cast לשימוש ב-DefaultCastOptionsProvider#toMediaQueueItem. - מפעילים העברות מרחוק למקומיות ב-
DefaultCastOptionsProvider. - הוספת תמיכה ב-Cast בהדגמה של הפעילות.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה בממשק משתמש שניתן להרכבה.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה בתפריט של סרגל פעולות.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה כממשק משתמש של תצוגה.
- מוסיפים את
- כלי בדיקה:
- הוספת הפרש זמן מקסימלי להתנהגות של מעבר אוטומטי ב-
FakeClock. ערך ברירת המחדל הוא שנייה אחת, אבל אפשר להגדיר אותו באמצעותFakeClock.Builder. - הוספת הפרש הזמן המקסימלי בין הודעות עבור
RobolectricUtil.runMainLooperUntil(ו-runLooperUntil). ברירת המחדל היא שנייה אחת, אבל אפשר להגדיר את זה באמצעות עומסים חדשים של השיטות האלה. - העברת
CapturingRenderersFactoryמ-test-utilsאלtest-utils-robolectric.
- הוספת הפרש זמן מקסימלי להתנהגות של מעבר אוטומטי ב-
- הסרת סמלים שהוצאו משימוש:
- הסרת ה-constructor
DefaultPreloadManagerשיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultPreloadManager.Builder. - הוסרו קונסטרוקטורים
EditedMediaItemSequenceשהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItemSequence.Builder. - הסרה של
BitmapFactoryImageDecoder.BitmapDecoder. במקום זאת, אתם צריכים להשתמש ב-ExternallyLoadedImageDecoder. - הסרת
ShadowMediaCodecConfig.forAllSupportedMimeTypes()שיצא משימוש. במקומה צריך להשתמש במדיניותShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - הסרת
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-ShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- הסרת ה-constructor
1.9.0-rc01
1 בדצמבר 2025
משתמשים בגרסה יציבה 1.9.0.
1.9.0-beta01
20 בנובמבר 2025
משתמשים בגרסה יציבה 1.9.0.
1.9.0-alpha01
22 באוקטובר 2025
משתמשים בגרסה יציבה 1.9.0.
גרסה 1.8.0
1.8.1
21 במאי 2026
גרסה 1.8.1 מכילה את השמירות האלה.
- אפקט:
- צריך להגדיר בצורה מפורשת את
GL_DRAW_BUFFERואתGL_READ_BUFFERכשעוברים מהקשר ללא משטח.
- צריך להגדיר בצורה מפורשת את
גרסה 1.8.0
30 ביולי 2025
גרסה 1.8.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- הוספת תמיכה בהחלפת הנגן ב-
ForwardingSimpleBasePlayer.
- הוספת תמיכה בהחלפת הנגן ב-
- ExoPlayer:
- הוספת getter למצב הפעלה אקראית לממשק
ExoPlayer(#2522). - הוספנו הבהרה לגבי השגיאה שמוחזרת אם מתבצעת גישה אל
DefaultAudioSinkמכמה שרשורים. אם זה קורה בגלל קריאה ל-RendererCapabilities.getFormatSupportמחוץ לנגן, צריך לוודא שקוראים לשיטה הזו באותו השרשור כמו שרשור ההפעלה של ExoPlayer, או להשתמש במופע אחר מזה שמשמש להפעלה (#1191). - תוקן באג שבו פורמטים של אודיו שאינם סטריאו בטלוויזיות עשויים להיות מסומנים כלא נתמכים על ידי
DefaultTrackSelector. - כשמשתמשים בדגל
DECODE_ONLYשל MediaCodec (שמופעל כברירת מחדל במצב ניקוי), צריך לוודא שהפריים האחרון מוצג בצורה תקינה. - הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-
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עם הטמעה שמוגדרת כברירת מחדל (מס' 2226). - שינוי התנהגות ברירת המחדל של
Renderer.getMinDurationToProgressUsכך שיחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render. - תוקן באג שגרם לכך שתזמון פנימי עיכב את הפריים האחרון כשמנסים להגיע לסוף בזמן שההפעלה מושהית. בשלב הזה, תיקון הבאג יפעל רק אם ההגדרה
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledמופעלת. - מוסיפים את אמצעי התשלום
ExoPlayer.setScrubbingModeEnabled(boolean). כך מתבצעת אופטימיזציה של הנגן לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל ההתקדמות). אפשר להתאים אישית את אופן הפעולה של מצב ההזזה באמצעותsetScrubbingModeParameters(..)ב-ExoPlayerוב-ExoPlayer.Builder. - אפשרות להתאים אישית את סף הטעות של חיפוש חלקי במצב ניקוי.
- הגדלת קצב ההפעלה של קודק במצב ניקוי.
- תוקן באג שבו יכול להיות ששגיאות בהכנה בתוכן של
AdsMediaSourceלא דווחו אף פעם (#2337). - תיקון דליפת זיכרון ב-
MergingMediaSource, למשל בשימוש בהעלאת כתוביות (#2338). - אפשר ל-
CmcdConfiguration.Factoryלהחזיר אתnullכדי להשבית את הרישום ביומן של CMCD עבור פריטי מדיה ספציפיים (#2386). - הגדלת גודל ברירת המחדל של שטח אחסון זמני לתמונות מ-128kB (טעות בהעתקה והדבקה מתוך רצועות טקסט) ל-26MB, שזה מספיק גדול לתמונות Ultra HDR של 50MP (#2417).
- הוספת
PreCacheHelperשמאפשרת לאפליקציות לשמור מראש במטמון מדיה אחת עם מיקום התחלה ומשך מוגדרים. - הוספנו תמיכה בטעינה מראש ממיקום שצוין ב-
DefaultPreloadManager.
- הוספת getter למצב הפעלה אקראית לממשק
- Transformer:
- מוסיפים את
CodecDbLiteכדי להפעיל אופטימיזציות ספציפיות לערכת השבבים של הגדרות קידוד הווידאו. - מוסיפים את הדגל
setEnableCodecDbLiteל-DefaultEncoderFactoryכדי להפעיל אופטימיזציה של ההגדרות של CodecDB Lite. כברירת מחדל, הערך של הדגל הזה הוא False. - כדי למלא פער ראשוני (שנוסף באמצעות
addGap()) באודיו שקט, צריך עכשיו להגדיר במפורש אתexperimentalSetForceAudioTrack(true)ב-EditedMediaItemSequence.Builder. אם הפער הוא באמצע הרצף, לא צריך להשתמש בדגל הזה. - העברת ממשק
Muxerמ-media3-transformerאלmedia3-muxer. - הגדרת
MediaItem.Builder().setImageDuration(long)כחובה לייבוא פריט מדיה כתמונה. - מוסיפים
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)שכולל רשימת עריכה של MP4 כשחיתוך מתבצע כדי להנחות את השחקנים להתעלם מדגימות בין מסגרת המפתח לפני נקודת ההתחלה של החיתוך לבין נקודת ההתחלה של החיתוך. - מעדכנים את אפליקציית ההדגמה של Composition כך שתשתמש ב-Kotlin וב-Jetpack Compose, ומוסיפים
VideoCompositorSettingsמותאם אישית כדי לסדר רצפים בפריסה של 2x2 או בפריסת תמונה בתוך תמונה (PiP).
- מוסיפים את
- אמצעי חילוץ:
- ניתוח מטא-נתונים מקובצי MP4 מפוצלים (#2084).
- JPEG: תמיכה בתמונות בתנועה שאין להן פלח Exif בהתחלה (#2552).
- הוספת תמיכה בחיפוש ב-MP4 מפוצל עם כמה אטומי
sidx. אפשר להפעיל את ההתנהגות הזו באמצעות הדגלFLAG_MERGE_FRAGMENTED_SIDXב-FragmentedMp4Extractor(מספר 9373). - התעלמות מטבלאות ריקות של מיקום בקובצי FLAC (כולל כאלה שמכילות רק נקודות מיקום של placeholder), וחזרה לחיפוש בינארי של מיקום אם משך הקובץ ידוע (#2327).
- תוקן ניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
- מעדכנים את
WavExtractorכך שישתמש בנתוני SubFormat של תוסף הכותרת עבור פורמט האודיו כשמנתחים קובץ מסוגWAVE_FORMAT_EXTENSIBLE. - MP4: נוספה תמיכה בתיבות
ipcmו-fpcmשמגדירות רצועות אודיו של PCM גולמי (אין תמיכה ב-PCM של נקודה צפה ב-64 ביט). - MP4: טיפול בחלק הסיבוב של
tkhdמטריצות טרנספורמציה שמסובבות ומשקפות את הסרטון. כך אפשר לוודא שהסרטונים המשתקפים שצולמו במצלמה הקדמית של האייפון יוצגו בכיוון הנכון, אבל ההשתקפות שלהם בציר ה-Y לא יהיו נכונות (#2012). - MP3: שימוש במשך ובגודל הנתונים מ-Xing, VBRI ומטא-נתונים דומים של קצב העברת נתונים משתנה שלא ניתן לחיפוש, כשחוזרים לחיפוש של קצב העברת נתונים קבוע בגלל
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- אודיו:
- תוקן באג שגרם לכך שהפונקציה
AnalyticsListener.onAudioPositionAdvancingלא נקראה כשהפעלת האודיו התחילה קרוב מאוד לסוף המדיה. - הוספנו תמיכה בכל פורמטי הדגימות של PCM ליניארי ב-
ChannelMappingAudioProcessorוב-TrimmingAudioProcessor. - הוספנו תמיכה בפערים באודיו ב-
CompositionPlayer. - הסרת שיחה שגויה אל
BaseAudioProcessor#flush()מ-BaseAudioProcessor#reset(). - אפשרות להמרה קבועה של אודיו לסטריאו או להפך ב-DefaultAudioMixer.
- הגדרת
ChannelMappingAudioProcessor, TrimmingAudioProcessorו-ToFloatPcmAudioProcessorכציבוריים (מס' 2339). - כדי לזהות חוסרים ב-
DefaultAudioSinkבמקום להסתמך על הערכה מיטבית, צריך להשתמש ב-AudioTrack#getUnderrunCount()ב-AudioTrackPositionTracker. - שיפור ההחלקה של חותמות הזמן של האודיו במקרה של סחיפה לא צפויה במיקום ממכשיר פלט האודיו.
- תיקון באג שגורם לכך שהסנכרון בין האודיו לווידאו לא תקין במשך 10 השניות הראשונות אחרי שממשיכים הפעלה מהשהיה כשמחוברים למכשירי Bluetooth.
- תיקון באג שגרם לכך ש-
AnalyticsListener.onAudioPositionAdvancingלא דיווח על הזמן שבו האודיו התחיל להתקדם, אלא על הזמן של המדידה הראשונה. - תוקנה בעיה שקשורה לשחזור אודיו רב-ערוצי אחרי חזרה לאודיו סטריאו במכשירים מסוימים (#2258).
- תוקן באג שגרם לכך שהפונקציה
- סרטון:
- הוספת פתרון עקיפה לבעיה של משטחים מנותקים למכשירי Lenovo ו-Motorola (#2059).
- שיפור השחרור של פריים וידאו חלק בהפעלה כשדגימות האודיו לא מתחילות בדיוק במיקום המבוקש.
- הוספת פתרון עקיף לבעיה של משטחים מנותקים למכשירי realme (#2059).
- מוסיפים את ה-API הניסיוני
ExoPlayerכדי לכלול את הדגלMediaCodec.BUFFER_FLAG_DECODE_ONLYכשמכניסים למאגרים קלט של פענוח בלבד. הדגל הזה יאותת למפענח לדלג על מאגרי הנתונים הזמניים של פענוח בלבד, וכך יתקצר הזמן של מעבר למיקום אחר בסרטון. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * שיפור הבדיקות של ביצועי קודקים לקודקים של וידאו בתוכנה. יכול להיות שבעקבות זאת, חלק מהטראקים הנוספים יסומנו כEXCEEDS_CAPABILITIES. - תיקון שגיאות הפעלה של VP9 Widevine במכשירים מסוימים (#2408).
- טקסט:
- הוספת תמיכה בטראקים של VobSub בקובצי MP4 (#2510).
- תיקון של מצב שבו ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה אבל נטען בהמשך, ואחריו מופיעים כמה קטעים ריקים של כתוביות (#2517).
- תוקנו בעיות ב-SSA וב-SubRip שגרמו להצגת רמזים במהלך הפעלת כתוביות (#2309).
- תוקנה בעיה שגורמת להיתקעות של ההפעלה כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם טראק כתוביות ריק (#2328).
- תיקון של כתוביות מבולבלות בפורמט CEA-608 בהפעלת סטרימינג בפורמט H.262 שמכיל B-frames (מס' 2372).
- הוספת תמיכה בכתוביות SSA עם
CodecId = S_TEXT/SSAבקובצי Matroska. בעבר,MatroskaExtractorתמך רק ב-CodecId = S_TEXT/ASS, שמייצג את הווריאציה 'מתקדמת' (גרסה 4 ומעלה) של כתוביות SubStation Alpha (אבל לוגיקת הניתוח של ExoPlayer זהה בשתי הווריאציות) (מס' 2384). - נוספה תמיכה במאפיין
layerבקובצי כתוביות של SubStation Alpha (SSA), שמשמש להגדרת סדר השכבות של רמזים כשמוצגים יותר מרמז אחד על המסך בו-זמנית (#2124).
- מטא-נתונים:
- הוספנו תמיכה באחזור משך המדיה ו-
TimelineאלMetadataRetrieverוהעברנו אותו אלAutoCloseableAPI מבוסס-מופע. משתמשים ב-Builderהחדש כדי ליצור מופע בשבילMediaItem, ואז קוראים ל-retrieveTrackGroups(), ל-retrieveTimeline()ול-retrieveDurationUs()כדי לקבלListenableFutureבשביל המטא-נתונים. ה-methods הסטטיות הקודמות הוצאו משימוש (#2462).
- הוספנו תמיכה באחזור משך המדיה ו-
- תמונה:
- כדי למנוע קריסה של אפליקציה עם
Canvas: trying to draw too large bitmap.מ-PlayerViewכשמנסים להציג תמונות גדולות מאוד (למשל 50MP), צריך להגביל את מפות הסיביות המפוענחות לגודל התצוגה ב-BitmapFactoryImageDecoder. - משנים את החתימה של
DefaultRenderersFactory.getImageDecoderFactory()כך שתקבל פרמטרContext. - צריך להתאים את גודל הפלט המקסימלי של מפת הסיביות שמשמש ב-
CompositionPlayerלגודל שכבר משמש ב-Transformer(כלומר,CompositionPlayerלא מתחשב בגודל התצוגה כשמפענחים מפות סיביות, בניגוד ל-ExoPlayer).
- כדי למנוע קריסה של אפליקציה עם
- DRM:
- הוספת עומס יתר חדש של
OfflineLicenseHelper.newWidevineInstanceשמקבלMediaItem.DrmConfigurationכדי שאפשר יהיה להחיל את כותרות בקשות ה-HTTP בצורה נכונה (#2169).
- הוספת עומס יתר חדש של
- אפקט:
- מוסיפים
Presentation.createForShortSide(int)שיוצרPresentationשמבטיח שהצד הקצר ביותר תמיד יתאים לערך שצוין, ללא קשר לכיוון הקלט.
- מוסיפים
- Muxers:
- תוקן באג שבו דגמי אודיו ב-MP4 מפוצל לא קיבלו את דגלי הדגימה הנכונים.
-
writeSampleData()API משתמש עכשיו במחלקהBufferInfoהספציפית ל-muxer במקוםMediaCodec.BufferInfo. - מוסיפים את
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, שערך ברירת המחדל שלו הוא false.
- תוסף IMA:
- תיקון באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
- תוקן באג שגרם לכך שההפעלה של קבוצות מודעות אחרי סיום חלון ה-VOD נתקעה.
קבוצות של מודעות עם זמן התחלה אחרי חלון הזמן לא מתווספות יותר לתור (מס' 2215).
MediaPeriodQueue
- סשן:
- תיקון באג שבו המערכת מתעלמת מחיבורים של Media3 controllers לא מורשים של צד שלישי.
- הסרת הבדיקה של פקודות זמינות כששולחים פקודות מותאמות אישית ל-
MediaBrowserServiceCompatמדור קודם. ההתנהגות הזו זהה להתנהגות של בקרי דור קודם או דפדפנים מדור קודם שמחוברים לאפליקציה מדור קודם. - תוקן באג שגרם לכך שהשגיאה הראשונה בהפעלה של נגן מסוים טופלה באופן שגוי כחריגה מותאמת אישית מתמשכת. כך האפליקציה לא תוכל להתאושש.
- תיקון באג שבו שינויים מסוימים בבקר שלא מטופלים על ידי הסשן עלולים לגרום ל-
IllegalStateExceptions. - תוקן באג שבו פעולות של בקר שלא מטופלות על ידי הסשן עלולות להשאיר את הבקר במצב לא תקין.
- תיקון אזהרת הפרה של הפעלה לא בטוחה ב-StrictMode (#2330).
- תוקן באג שבו קריאה ל-
setSessionExtrasמהשרשור הראשי בזמן הפעלת הנגן משרשור אפליקציה אחר, שאינו השרשור הראשי, גרמה ל-IllegalStateException(מס' 2265). - לא להציג באופן אוטומטי התראה אם הנגן מוגדר עם פריטי מדיה בלי להכין או להפעיל אותם
(#2423https://github.com/androidx/media/issues/2423). אפשר להגדיר את ההתנהגות הזו דרך
MediaSessionService.setShowNotificationForIdlePlayer. - הוספת
PlaybackExceptionמותאם אישית לכל הבקרים או לבקרים נבחרים. - תוקן באג שבו חיפוש בשידור חי ב-
MediaControllerעלול לגרום ל-IllegalArgumentException. - בשידורים חיים, הפסקנו לפרסם את מיקום ההפעלה ואת האפשרות להעביר את הפריט הנוכחי בבקרי המדיה של הפלטפורמה, כדי למנוע הצגת מיקום לא מדויק בממשק המשתמש של Android Auto (ובבקרים אחרים שמשתמשים במידע הזה מתוך סשן המדיה של הפלטפורמה) (#1758).
- תוקן באג שבו העברת ערך null אל
getLibraryRootשלMediaBrowserשמחובר אלMediaBrowserServiceCompatמדור קודם הפיקהNullPointerException. - תוקן באג שבו שליחת פעולות בהתאמה אישית, תוצאת חיפוש או בקשת getItem
גרמה לקריסת אפליקציית הסשן מדור קודם עם
ClassNotFoundException. - תוקן באג שגרם לכך ש
MediaItem.LocalConfiguration.uriשותף לMediaMetadataשל סשנים בפלטפורמה. כדי לשתף בכוונה URI כדי לאפשר לבקרי גישה לשלוח מחדש בקשה למדיה, צריך להגדיר אתMediaItem.RequestMetadata.mediaUri.
- UI:
- תוקן באג שבו
PlayerSurfaceבתוך רכיבים לשימוש חוזר כמוLazyColumnלא עבד בצורה תקינה (#2493). - תוקן באג ב-Compose שגרם לפער בין הגדרת מצבי הלחצנים הראשוניים לבין השינוי במצב (למשל צורות הסמלים או ההפעלה). שינויים שבוצעו בנגן מחוץ לתקופת הצפייה נלקחים בחשבון (#2313).
- מוסיפים מחזיקי מצב ורכיבים קומפוזביליים למודול
media3-ui-composeעבורSeekBackButtonStateו-SeekForwardButtonState. - הוספנו תמיכה במצב ניקוי של ExoPlayer ל-
PlayerControlView. אם האפשרות הזו מופעלת, הנגן עובר למצב גרירה כשהמשתמש מתחיל לגרור את סרגל הגרירה, שולח קריאה ל-player.seekToלכל תנועה ואז יוצא ממצב הגרירה כשהמשתמש מפסיק לגעת במסך. אפשר להפעיל את השילוב הזה באמצעותtime_bar_scrubbing_enabled = trueב-XML או באמצעות השיטהsetTimeBarScrubbingEnabled(boolean)מ-Java/Kotlin. - תגרום ל-
PlayerSurfaceלקבל ארגומנטPlayerשניתן להקצאה ל-null.
- תוקן באג שבו
- הורדות:
- הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין סטרימינג מתקדם עם
DownloadHelperולבקשDownloadRequestמהעוזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכלול. התגובהDownloadRequestמכילה את טווח הבייטים שפוענח, שאפשר ליצור איתוProgressiveDownloaderולהוריד את התוכן בהתאם. - מוסיפים את
DownloadHelper.Factoryשבו מחליפים את השיטות הסטטיותDownloadHelper.forMediaItem(). - מוסיפים
Factoryלהטמעות שלSegmentDownloader. - הוספת תמיכה בהורדה חלקית של סטרימינג אדפטיבי. אפליקציות יכולות להכין סטרימינג אדפטיבי עם
DownloadHelperולבקשDownloadRequestמהעוזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכסות. הערך שמוחזרDownloadRequestמכיל את טווח הזמן שנקבע, שאיתו אפשר ליצורSegmentDownloaderספציפי ולהוריד את התוכן בהתאם.
- הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין סטרימינג מתקדם עם
- תוסף Cronet:
- הוספת טיפול אוטומטי בקובצי Cookie (#5975).
- תוסף HLS:
- תוקן באג שבו
HlsSampleStreamWrapperמנסה לחפש בתוך המאגר הזמני כשאין נתונים זמינים במאגר הזמני #2598. - תוקן באג שבו בחירת רצועה משתנה אחרי טעינה של חלקים עם השהיה נמוכה, ורמזים לטעינה מראש עלולים לגרום להפעלה להיתקע או לקפוא (#2299).
- כדי למנוע טעינות מחדש מוגזמות, המערכת ממתינה למשך מחצית מהמשך המטרה אם השרת לא מכבד את
CAN-BLOCK-RELOAD=YES(#2317). - תוקן באג שגרם להשהיית ההפעלה כשמתחילים סטרימינג של מודעות מעבר לפני מודעה באמצע הסרטון, ונעשה ניסיון לפתור בעיה ברשימת נכסים עבור המודעה הלא נכונה (מס' 2558).
- תוקן ניתוח של פלייליסטים כדי לאפשר שימוש ב-
\f(הזנת טופס) בערכי מאפיינים של מחרוזות במירכאות (מס' 2420). - תמיכה בעדכון מודעות אינטרסטיטיאל עם אותו מזהה (מס' 2427).
- תוקן באג שבו לפעמים שגיאות בטעינת רשימת השירים לא מועברות אחרי שנגמרים הפלחים לטעינה בשידור חי (#2401https://github.com/androidx/media/issues/2401).
- קיבוץ של רכיבי משנה של כתוביות לפי תג NAME, בדומה לקיבוץ של רכיבי משנה של אודיו (#1666).
- תמיכה ב-X-ASSET-LIST ובשידורים חיים באמצעות
HlsInterstitialsAdsLoader.
- תוקן באג שבו
- תוסף DASH:
- תוקנה בעיה שבה קבוצת ההתאמות של הפעלת טריק-פליי מוזגה עם קבוצת ההתאמות הראשית שלה כדי ליצור
TrackGroupלא תקין (#2148). - תוקן באג שבו קיצור משך הזמן של תקופת DASH יכול לגרום לחריגה אם הדגימות מעבר למשך הזמן החדש כבר נקראו על ידי צינור העיבוד של הרינדור (#2440).
- תוקן באג שבו לא בוצעה הפניה לכתובת אחרת כשנעשה שימוש בפרמטרים של שאילתת CMCD (מס' 2475).
- תוקנה בעיה שבה קבוצת ההתאמות של הפעלת טריק-פליי מוזגה עם קבוצת ההתאמות הראשית שלה כדי ליצור
- תוסף RTSP:
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- תוקן באג שבו
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeלא משפיע על תוספים של מפענחי אודיו (#2258).
- תוקן באג שבו
- תוסף 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 בשמות של רכיבי codec שדווחו על ידי
ShadowMediaCodecConfig.
- מוסיפים את
- הסרת סמלים שהוצאו משימוש:
- הוסר ה-constructor
SegmentDownloaderשהוצא משימושSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)וה-constructors התואמים במחלקות המשנה שלו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. - הסרת ה-constructor
MediaCodecVideoRendererשיצא משימושMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- הוסר ה-constructor
גרסה 1.8.0-rc02
24 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-rc01
16 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-beta01
2 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-alpha01
19 במאי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.7.0
גרסה 1.7.1
16 במאי 2025
הגרסה הזו כוללת את אותו קוד כמו גרסה 1.6.1, והיא מתפרסמת כדי להבטיח שהיא תופיע כגרסה 'חדשה יותר' מגרסה 1.7.0, שהייתה גרסת אלפא שתויגה בטעות כגרסה יציבה (ראו בהמשך).
גרסה 1.7.0
16 במאי 2025
הגרסה הזו הייתה אמורה להיות 1.7.0-alpha01, אבל היא תויגה בטעות כ-
1.7.0 (כלומר, יציבה) בכתובת maven.google.com. אל תשתמשו בה. להישאר בגרסה 1.6.1 או לשדרג לגרסה 1.7.1 (שכוללת את אותו קוד כמו גרסה 1.6.1).
גרסה 1.6.0
1.6.1
14 באפריל 2025
androidx.media3:media3-*:1.6.1 מופץ. גרסה 1.6.1 מכילה את השמירות האלה.
- ספרייה משותפת:
- הוספנו את השיטה
PlaybackParameters.withPitch(float)כדי להקל על העתקה שלPlaybackParametersעם ערך חדש שלpitch(מס' 2257).
- הוספנו את השיטה
- ExoPlayer:
- תוקנה בעיה שגרמה לכך שהמעבר בין פריטי מדיה נכשל בגלל שגיאת רכיב עיבוד שניתן לשחזר במהלך האתחול של פריט המדיה הבא (#2229).
- תוקנה בעיה שבה
ProgressiveMediaPeriodמחזיר את השגיאהIllegalStateExceptionכש-PreloadMediaSourceמנסה להתקשר אלgetBufferedDurationUs()לפני שהוא מוכן (#2315). - תוקנה בעיה בשליחת
CmcdDataבבקשות למניפסט עבור DASH, HLS ו-SmoothStreaming (#2253). - מוודאים שאפשר להשתמש ב-
AdPlaybackState.withAdDurationsUs(long[][])אחרי הסרת קבוצות המודעות. המשתמש עדיין צריך להעביר מערך של משכי זמן לקבוצות של מודעות שהוסרו, שיכול להיות ריק או null (#2267).
- אמצעי חילוץ:
- MP4: צריך לנתח את
alternate_groupמהתיבהtkhdולהציג אותו כרשומהMp4AlternateGroupDataבכל רצועהFormat.metadata(מספר 2242).
- MP4: צריך לנתח את
- אודיו:
- תוקנה בעיה בהפחתת עומס שבה המיקום עלול להיתקע כשמפעילים רשימת השמעה של תוכן קצר (#1920).
- סשן:
- הורדת הזמן הקצוב לתפוגה של צבירה עבור קריאות חוזרות (callback) של פלטפורמה
MediaSessionמ-500 ל-100 מילישניות, והוספת הגדרת ניסוי כדי לאפשר לאפליקציות להגדיר את הערך הזה. - תוקנה בעיה שבה התראות הופיעו מחדש אחרי שהמשתמש סגר אותן (#2302).
- תוקן באג שבו הסשן החזיר ציר זמן עם פריט יחיד כשהנגן העוטף ריק. המצב הזה קורה כשאין
COMMAND_GET_TIMELINEבנגן העוטף, אבל ישCOMMAND_GET_CURRENT_MEDIA_ITEM, והנגן העוטף ריק (#2320). - תוקן באג שבו קריאה ל-
MediaSessionService.setMediaNotificationProviderמתעלמת בשקט אחרי אינטראקציות אחרות עם השירות כמוsetForegroundServiceTimeoutMs(#2305).
- הורדת הזמן הקצוב לתפוגה של צבירה עבור קריאות חוזרות (callback) של פלטפורמה
- UI:
- מפעילים את
PlayerSurfaceכדי לעבוד עםExoPlayer.setVideoEffectsועםCompositionPlayer. - תוקן באג שבו אי אפשר היה להרכיב מחדש
PlayerSurfaceעםPlayerחדש.
- מפעילים את
- תוסף HLS:
- תוקנה בעיה שבה משך הזמן של חלקי המדיה לא הוגדר ב-
CmcdDataעבור מדיה בפורמט HLS, מה שגרם לכשל באימות כשמעבדים פלחים של מדיה מוצפנת (#2312).
- תוקנה בעיה שבה משך הזמן של חלקי המדיה לא הוגדר ב-
- תוסף RTSP:
- הוספת תמיכה ב-URI עם סכימת RTSPT כדרך להגדיר את סשן ה-RTSP לשימוש ב-TCP (#1484).
- תוסף Cast:
- הוספת תמיכה במטא-נתונים של פלייליסטים (#2235).
1.6.0
26 במרץ 2025
androidx.media3:media3-*:1.6.0 מופץ. גרסה 1.6.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- מוסיפים את
AudioManagerCompatו-AudioFocusRequestCompatכדי להחליף את הכיתות המקבילות ב-androidx.media. - שדרוג של Kotlin מגרסה 1.9.20 לגרסה 2.0.20 ושימוש בפלאגין Compose Compiler Gradle. שדרוג ספריית KotlinX Coroutines מגרסה 1.8.1 לגרסה 1.9.0.
- צריך להסיר את השיטה
Format.toBundle(boolean excludeMetadata)ולהשתמש ב-Format.toBundle()במקומה. - תוקנה באג ב-
SimpleBasePlayerשבו הגדרה שלcurrentMediaItemIndexחדש ב-StateאחריsetPlaylistעםnullMediaMetadataלא מעריכה מחדש את המטא-נתונים (#1940). - שינוי הגישה ל-
SimpleBasePlayer.Stateממוגנת לציבורית כדי להקל על הטיפול בעדכונים בכיתות אחרות (מס' 2128).
- מוסיפים את
- ExoPlayer:
- הוספנו את
MediaExtractorCompat, מחלקה חדשה שמספקת תכונות שוות ערך לפלטפורמהMediaExtractor. - הוספנו תמיכה ניסיונית בחימום מראש של ExoPlayer להפעלה באמצעות
MediaCodecVideoRenderer. אתם יכולים להגדיר אתDefaultRenderersFactoryדרךexperimentalSetEnableMediaCodecVideoRendererPrewarmingכדי לספקMediaCodecVideoRendererמשני ל-ExoPlayer. אם האפשרות הזו מופעלת,ExoPlayerהסרטון של פריטי מדיה עוקבים עובר עיבוד מראש במהלך ההפעלה כדי לקצר את זמן הטעינה של המעבר בין פריטי המדיה. - צריך להקטין את ערכי ברירת המחדל של
bufferForPlaybackMsושלbufferForPlaybackAfterRebufferMsב-DefaultLoadControlל-1,000 ו-2,000 אלפיות השנייה בהתאמה. - מאתחלים את
DeviceInfoואת עוצמת הקול במכשיר באופן אסינכרוני (אם ההגדרה מופעלת באמצעותsetDeviceVolumeControlEnabled). הערכים האלה לא זמינים באופן מיידי אחריExoPlayer.Builder.build(), ו-Player.Listenerמודיע על שינויים באמצעותonDeviceInfoChangedו-onDeviceVolumeChanged. - מזהה סשן האודיו הראשוני כבר לא זמין מיד אחרי יצירת נגן. אם צריך, אפשר להשתמש בלחצן
AnalyticsListener.onAudioSessionIdChangedכדי להאזין לעדכון הראשוני. - חשוב לבחור את שפת הסרטון כשבוחרים טראק וידאו. כברירת מחדל, נבחר טראק וידאו 'ראשי' שתואם לשפה של טראק האודיו שנבחר, אם הוא זמין. אפשר לציין העדפות שפה לסרטון באמצעות התג
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - מוסיפים את הפרמטר
selectedAudioLanguageלשיטהDefaultTrackSelector.selectVideoTrack(). - מוסיפים את הפרמטר
retryCountל-MediaSourceEventListener.onLoadStartedול-methods המתאימיםMediaSourceEventListener.EventDispatcher. - תוקן באג שבו פריטים או תקופות בפלייליסטים בסטרימינג בפורמט DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- העברה של
BasePreloadManager.Listenerלרמה העליונהPreloadManagerListener. - אפשר להטמיע את
RenderersFactory.createSecondaryRendererכדי לספק מעבדים משניים לחימום מראש. חימום מראש מאפשר מעברים מהירים יותר בין פריטי מדיה במהלך ההפעלה. - הפעלת שליחת
CmcdDataלבקשות מניפסט בפורמטים של סטרימינג אדפטיבי DASH, HLS ו-SmoothStreaming (מס' 1951). - צריך לספק
MediaCodecInfoשל הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec(#1963). - משנים את
AdsMediaSourceכדי לאפשר ל-AdPlaybackStatesלגדול על ידי הוספת קבוצות של מודעות. המערכת מזהה שינויים לא תקינים וזורקת חריגה. - תוקנה בעיה שבה יכול להיות שיוצגו פריימים נוספים של פענוח בלבד ברצף מהיר כשעוברים לתוכן מדיה אחרי מודעה באמצע סרטון.
- מגדירים את
DefaultRenderersFactoryכך שיוסיף שני מופעים שלMetadataRendererכדי לאפשר לאפליקציות לקבל כברירת מחדל שתי סכימות שונות של מטא-נתונים. - הערכה מחדש של השאלה אם צריך לבטל את הטעינה המתמשכת של מקטע כשההפעלה מושהית (#1785).
- הוספת אפשרות ל-
ClippingMediaSourceלאפשר חיתוך במדיה שלא ניתן להעביר בה קדימה או אחורה. - תוקן באג שבו חיפוש עם חימום מראש יכול לחסום מעבר לפריט מדיה הבא.
- תוקן באג שגרם לכך שהסטטוס
ExoPlayer.isLoading()נשארtrueגם אחרי שהסטטוס השתנה ל-STATE_IDLEאו ל-STATE_ENDED(#2133). - הוספה של
lastRebufferRealtimeMsאלLoadControl.Parameter(#2113).
- הוספנו את
- Transformer:
- הוספת תמיכה בהעברה (transmuxing) לפורמטים חלופיים שתואמים לאחור.
- נוספה תמיכה בהמרת קידוד ובהמרת פורמט של Dolby Vision (פרופיל 8).
- עדכון הפרמטרים של
VideoFrameProcessor.registerInputStreamושלVideoFrameProcessor.Listener.onInputStreamRegisteredלשימוש ב-Format. - יצירת מטא-נתונים סטטיים של HDR כשמשתמשים ב-
DefaultEncoderFactory. - כדי להפעיל תמיכה באבחון של פלטפורמת Android, משתמשים ב-
MediaMetricsManager. הכלי Transformer מעביר אירועי עריכה ונתוני ביצועים לפלטפורמה, וכך מספק מידע על ביצועי המערכת ומידע על תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את שיתוף דפוסי שימוש וביצועים. אפליקציות יכולות לבטל את ההסכמה לשיתוף נתונים לצורך אבחון פלטפורמה עבור Transformer באמצעותTransformer.Builder.setUsePlatformDiagnostics(false). - פיצול של
InAppMuxerל-InAppMp4Muxerול-InAppFragmentedMp4Muxer. משתמשים ב-InAppMp4Muxerכדי ליצור קובץ MP4 לא מקוטע, וב-InAppFragmentedMp4Muxerכדי ליצור קובץ MP4 מקוטע. - העברת ממשק
Muxerמ-media3-muxerאלmedia3-transformer. - להוסיף את
MediaProjectionAssetLoader, שמספק מדיה מMediaProjectionלהקלטת מסך, ולהוסיף תמיכה בהקלטת מסך לאפליקציית ההדגמה של Transformer. - הוספת
#getInputFormat()לממשקCodec. - להעביר את האחריות לשחרור
GlObjectsProviderלמתקשר ב-DefaultVideoFrameProcessorוב-DefaultVideoCompositorכשזה אפשרי.
- אמצעי חילוץ:
- AVI: תוקן הטיפול בקבצים עם אודיו דחוס בקצב העברת נתונים קבוע, שבו כותרת הזרם מאחסנת את מספר הבייטים במקום את מספר המקטעים.
- תיקון הטיפול ביחידות NAL עם אורכים שמבוטאים בבייט אחד או ב-2 בייטים (במקום ב-4).
- תוקנה בעיה שקשורה ל-
ArrayIndexOutOfBoundsExceptionברשימות עריכה של MP4, כשברשימת העריכה מתחילים בפריים שלא מסונכרן ללא פריים מסונכרן קודם (#2062). - תוקנה בעיה שבה סטרימינג של TS יכול להיתקע במכשירים מסוימים (#2069).
- FLAC: נוספה תמיכה בקובצי FLAC בפורמט 32 ביט. בעבר, הפעלת התכונות האלה נכשלה עם
IllegalStateException: Playback stuck buffering and not loading(מספר 2197).
- אודיו:
- הפונקציה
onAudioPositionAdvancingנקראת עכשיו כשההפעלה מתחדשת (בעבר היא נקראה כשההפעלה הושהתה). - לא לעקוף את
SonicAudioProcessorכש-SpeedChangingAudioProcessorמוגדר עם פרמטרים שמוגדרים כברירת מחדל. - תוקנה בעיית חוסר קיבולת ב-
Sonic#getOutputSize()שיכולה לגרום להשהיה שלDefaultAudioSink. - צריך לתקן את
MediaCodecAudioRenderer.getDurationToProgressUs()ואתDecoderAudioRenderer.getDurationToProgressUs()כדי שהחיפוש יאפס את משכי הזמן שצוינו בצורה נכונה. - הפיכת המספר
androidx.media3.common.audio.SonicAudioProcessorלקבוע. - הוספת תמיכה ב-PCM עם נקודה צפה ל-
ChannelMappingAudioProcessorול-TrimmingAudioProcessor.
- הפונקציה
- סרטון:
- משנים את
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceל-protected כדי שאפליקציות יוכלו לבטל את ההגדרה ולחסום את השימוש באזורים של placeholder (#1905). - הוספה של ניתוח תלות בדגימה של
ExoPlayerAV1 כדי להאיץ את החיפוש. מפעילים אותו באמצעות ה-API החדש שלDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - הוספנו API ניסיוני
ExoPlayerכדי להשליך מאגרי קלט של מפענחMediaCodecVideoRendererבאיחור שלא תלויים בהם. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * תוקנה הבעיה שבה נגן ללא משטח היה מוכן באופן מיידי והפענוח של כל הפריימים בהמתנה היה איטי מאוד (#1973). - החרגה של מכשירי Xiaomi ו-OPPO ממצב משטח מנותק כדי למנוע הבהוב במסך (#2059).
- משנים את
- טקסט:
- הוספת תמיכה בכתוביות VobSub (#8260).
- הפסקנו את הטעינה המוקדמת של כל קובצי הכתוביות שהוגדרו באמצעות
MediaItem.Builder.setSubtitleConfigurations, ועכשיו נטען רק קובץ אחד אם הוא נבחר על ידי בחירת הטראק (#1721). - TTML: נוספה תמיכה בהפניה אל
tts:originו-tts:extentבאמצעותstyle(#2953). - חותמות הזמן בפורמטים WebVTT ו-SubRip צריכות לכלול בדיוק 3 ספרות אחרי הנקודה העשרונית. בעבר, המערכת ניתחה באופן שגוי כל מספר של מקומות אחרי הנקודה העשרונית, אבל תמיד הניחה שהערך הוא באלפיות השנייה, מה שהוביל לחותמות זמן שגויות (#1997).
- תוקנה בעיה שגורמת להפסקת ההפעלה כשפלייליסט מכיל פריטים שנחתכו עם כתוביות CEA-608 או CEA-708.
- תוקן באג
IllegalStateExceptionשקורה כשקובץ SSA מכיל רמז עם משך אפס (זמן התחלה וזמן סיום זהים) (#2052). - הסתרת שגיאות בניתוח כתוביות (ורישום שלהן ביומן) כשהכתוביות משולבות באותו קובץ עם אודיו ווידאו (#2052).
- תוקן הטיפול בתווי UTF-8 מרובי-בייטים בקובצי WebVTT באמצעות סיומי שורה CR (#2167).
- DRM:
- תוקנה שגיאה
MediaCodec$CryptoException: Operation not supported in this configurationבהפעלת תוכן ClearKey במכשירים עם API בגרסה < 27 (#1732).
- תוקנה שגיאה
- אפקט:
- הפונקציונליות של
OverlaySettingsהועברה אלStaticOverlaySettings. OverlaySettingsאפשר ליצור מחלקת משנה כדי לאפשר הגדרות דינמיות של שכבת-על.
- הפונקציונליות של
- Muxers:
- העברנו את
MuxerExceptionמחוץ לממשקMuxerכדי למנוע שם מוגדר במלואו ארוך מאוד. - השם של השיטה
setSampleCopyEnabled()השתנה ל-setSampleCopyingEnabled()ב-Mp4Muxer.Builderוב-FragmentedMp4Muxer.Builder. - הפונקציות
Mp4Muxer.addTrack()ו-FragmentedMp4Muxer.addTrack()מחזירות עכשיו מזהה של רצועתintבמקוםTrackToken. - האפשרויות
Mp4Muxerו-FragmentedMp4Muxerלא מטמיעות יותר את הממשקMuxer. - השבתה של
Mp4Muxerאריזת דגימות והעתקה כברירת מחדל. - תיקון באג ב-
FragmentedMp4Muxerשגורם ליצירה של הרבה פרגמנטים כשנכתב רק טראק אודיו.
- העברנו את
- סשן:
- שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצובה הזו בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להשתמש רק בקריאה ל-
player.pause()כדי לעצור את השירות שפועל בחזית לפניstopSelf()כשמבטלים אתonTaskRemoved. במקום זאת, צריך להשתמש ב-MediaSessionService.pauseAllPlayersAndStopSelf(). - ההתראה תישאר גלויה אם ההפעלה תעבור למצב שגיאה או למצב עצירה. ההתראה מוסרת רק אם הפלייליסט נמחק או אם הנגן נסגר.
- שיפור הטיפול בפעולות MediaSession של פלטפורמת Android ACTION_PLAY ו-ACTION_PAUSE, כך שרק אחת מהן מוגדרת בהתאם לפקודות הזמינות, וגם אם רק אחת מהן מוגדרת, היא מתקבלת.
- מוסיפים את
Contextכפרמטר ל-MediaButtonReceiver.shouldStartForegroundService(מס' 1887). - תוקנה באג שבו קריאה לשיטה
PlayerבחיבורMediaControllerלמסגרת זמן מדור קודם גרמה להסרת שינויים מעדכון בהמתנה. - Make
MediaSession.setSessionActivity(PendingIntent)accept null (#2109). - תוקן באג שגרם לכך שהתראה לא עדכנית נשארה גלויה כשפלייליסט נוקה (#2211).
- שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצובה הזו בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להשתמש רק בקריאה ל-
- UI:
- מוסיפים מחזיקי מצב ופונקציות Composable למודול
media3-ui-composeעבורPlayerSurface, PresentationState, PlayPauseButtonState,NextButtonState, PreviousButtonState, RepeatButtonState,ShuffleButtonStateו-PlaybackSpeedState.
- מוסיפים מחזיקי מצב ופונקציות Composable למודול
- הורדות:
- תיקון באג ב-
CacheWriterשגורם למקורות נתונים להישאר פתוחים ולאזורי מטמון להינעל אם מקור הנתונים מחזירExceptionשונה מ-IOException(#9760).
- תיקון באג ב-
- תוסף HLS:
- הוספת גרסה ראשונה של
HlsInterstitialsAdsLoader. הכלי להעלאת מודעות קורא את מודעות המעברון בפורמט HLS של רשימת השמעה של מדיה בפורמט HLS וממפה אותן ל-AdPlaybackStateשמועבר ל-AdsMediaSource. הגרסה הראשונית הזו תומכת רק בסטרימינג של HLS VOD עם מאפייניX-ASSET-URI. - מוסיפים את
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. אפליקציות יכולות להשתמש בו כדי ליצורAdsMediaSourceמופעים שמשתמשים ב-HlsInterstitialsAdsLoaderבצורה נוחה ובטוחה. - ניתוח של תג
SUPPLEMENTAL-CODECSמרשימת השמעה בפורמט HLS כדי לזהות פורמטים של Dolby Vision (מס' 1785). - הקלה על התנאי לחיפוש לסנכרון מיקומים בשידור HLS (#2209).
- הוספת גרסה ראשונה של
- תוסף DASH:
- נוספה תמיכה בפורמט AC-4 Level-4 ל-DASH (#1898).
- תוקנה בעיה בחישוב מרווח העדכון להוספת מודעות בשידורים חיים עם כמה תקופות (#1698).
- ניתוח מאפיין
scte214:supplementalCodecsממניפסט DASH כדי לזהות פורמטים של Dolby Vision (#1785). - שיפרנו את הטיפול במעברים בין תקופות בשידורים חיים שבהם התקופה מכילה דוגמאות של מדיה מעבר למשך התקופה המוצהר (#1698).
- תוקנה הבעיה שבה קבוצות התאמה שסומנו ב-
adaptation-set-switchingאבל בשפות שונות או בדגלי תפקיד שונים מוזגו יחד (#2222).
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- נוסף מודול לפענוח MPEG-H שמשתמש בפענוח MPEG-H מובנה כדי לפענח אודיו MPEG-H (#1826).
- תוסף MIDI:
- העברת מופעים מותאמים אישית של
AudioSinkושלAudioRendererEventListenerאלMidiRenderer.
- העברת מופעים מותאמים אישית של
- תוסף Cast:
- העלאת התלות של
play-services-cast-frameworkלגרסה 21.5.0 כדי לתקן קריסה שלFLAG_MUTABLEבאפליקציות שמטרגטות API מגרסה 34 ומעלה במכשירים שבהם Google Play Services מותקן אבל מושבת (#2178).
- העלאת התלות של
- אפליקציית הדגמה:
- הרחבת
demo-composeבאמצעות לחצנים נוספים ושיפור השילוב שלPlayerSurfaceעם תמיכה בהתאמת גודל ובהפעלת הצמצם.
- הרחבת
- הסרת סמלים שהוצאו משימוש:
- הסרת השיטה
AudioMixer.create()שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultAudioMixer.Factory().create(). - מסירים את ה-methods הבאות שהוצאו משימוש ב-
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().
- במקומה יש להשתמש ב-
- מסירים את ה-methods הבאות שהוצאו משימוש ב-
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. - הוסרו ה-methods הבאות שהוצאו משימוש ב-
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
19 במרץ 2025
משתמשים בגרסה יציבה 1.6.0.
1.6.0-rc01
12 במרץ 2025
משתמשים בגרסה יציבה 1.6.0.
1.6.0-beta01
26 בפברואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha03
6 בפברואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha02
30 בינואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha01
20 בדצמבר 2024
משתמשים בגרסה יציבה 1.6.0.
גירסה 1.5
גירסה 1.5.1
19 בדצמבר 2024
androidx.media3:media3-*:1.5.1 מופץ. גרסה 1.5.1 מכילה את השמירות האלה.
- ExoPlayer:
- השבתה של שימוש בפענוח אסינכרוני ב-MediaCodec כדי למנוע בעיות של זמן קצוב לתפוגה בקודק שדווחו ב-API של הפלטפורמה הזו (#1641).
- אמצעי חילוץ:
- MP3: הפעלת קובץ לא תיפסק לפני הזמן אם תוכן העניינים של מסגרת
VBRIלא כולל את כל נתוני ה-MP3 בקובץ (#1904).
- MP3: הפעלת קובץ לא תיפסק לפני הזמן אם תוכן העניינים של מסגרת
- סרטון:
- החזרת השימוש בערכי יחס גובה-רוחב של פיקסלים שסופקו
MediaCodecAdapterכשמספקים אותם במהלך העיבוד שלonOutputFormatChanged(#1371).
- החזרת השימוש בערכי יחס גובה-רוחב של פיקסלים שסופקו
- טקסט:
- תוקן באג ב-
ReplacingCuesResolver.discardCuesBeforeTimeUsשבו רמז פעיל ב-timeUs(התחיל לפני אבל עדיין לא הסתיים) נפסל באופן שגוי (#1939).
- תוקן באג ב-
- מטא-נתונים:
- חילוץ מספרי הדיסק והטראק וז'אנר מתגובות Vorbis אל
MediaMetadata(#1958).
- חילוץ מספרי הדיסק והטראק וז'אנר מתגובות Vorbis אל
גרסה 1.5.0
27 בנובמבר 2024
androidx.media3:media3-*:1.5.0 מופץ. גרסה 1.5.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- הוספת
ForwardingSimpleBasePlayerשמאפשרת העברה לנגן אחר עם שינויים קלים, תוך שמירה על עקביות מלאה וטיפול במאזינים (#1183). - מחליפים את
SimpleBasePlayer.State.playlistבשיטהgetPlaylist(). - הוספת שינוי ברירת המחדל ל-
SimpleBasePlayer.State.Builder.setPlaylist()כדי לציין ישירותTimelineוTracksנוכחיים וMetadataבמקום ליצור מבנה של פלייליסט. - הגדלת
minSdkל-21 (Android Lollipop). ההתנהגות הזו תואמת לכל שאר ספריות AndroidX. - הוספת ארטיפקט
androidx.media3:media3-common-ktxשמספק פונקציונליות ספציפית ל-Kotlin שנבנתה על בסיס הספרייה Common - הוסף
Player.listenפונקציית הרחבה להשעיה כדי להפעיל שגרת המשך (coroutine) להאזנה ל-Player.Eventsבספרייהmedia3-common-ktx. - הסרת הערות
@DoNotInlineממחלקות פנימיות שהוצאו ידנית מהשורה כדי למנוע כשלים באימות מחלקות בזמן ריצה. בגרסאות האחרונות של R8 השיחות האלה מוצאות אוטומטית מחוץ לשורה כדי למנוע כשלים בזמן הריצה (כך שאין יותר צורך בהוצאה ידנית מחוץ לשורה). כל המשתמשים בספרייה ב-Gradle צריכים כבר להשתמש בגרסה של Android Gradle Plugin שמשתמשת בגרסה של R8 שעושה את זה, בגללcompileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle יצטרכו לוודא ששלב הכיווץ/ההסתרה המקביל ל-R8 מבצע תהליך דומה של הוצאה אוטומטית של קוד מחוץ לשורות, כדי למנוע כשלים באימות של מחלקות בזמן הריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
- הוספת
- ExoPlayer:
- עכשיו אפשר להתקשר אל
MediaCodecRenderer.onProcessedStreamChange()לגבי כל פריט מדיה. בעבר, לא הייתה קריאה ל-callback הראשון. כדי להפעיל את האפשרות הזו, צריך להשתמש ב-MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart(). - מוסיפים את
PreloadMediaSource.PreloadControl.onPreloadErrorכדי לאפשר הטמעות שלPreloadMediaSource.PreloadControlלבצע פעולות כשמתרחשת שגיאה. - מוסיפים את
BasePreloadManager.Listenerכדי להפיץ אירועי טעינה מראש לאפליקציות. - אפשרות לשנות את הזמן הקצוב לתפוגה של לקוח SNTP ולנסות שוב כתובות חלופיות אם חלף הזמן הקצוב לתפוגה (#1540).
- הסרת השדה
MediaCodecAdapter.Configuration.flagsכי הערך שלו תמיד היה אפס. - המשתמש יכול לבחור את הרמקול המובנה להשמעה ב-Wear OS API 35 ומעלה (אם המכשיר תומך בכך).
- דחיית חסימת השיחה אל
Context.getSystemService(Context.AUDIO_SERVICE)עד להפעלת הטיפול במיקוד האודיו. כך אפשר לוודא שהשיחה החוסמת לא תתבצע אם הטיפול במיקוד האודיו לא מופעל (#1616). - אפשרות להפעלה ללא קשר למשך הזמן שבו הנתונים נשמרו במאגר, אם הטעינה נכשלת (#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שמעבירה את כל הקריאות לשיטות אל רכיב עיבוד אחר (1703). - הוספת טעינה מראש של הפריט הבא בפלייליסט. אפליקציות יכולות להפעיל טעינה מראש על ידי קריאה ל-
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, אם בחרתם להשתמש בתכונה הזו,DefaultLoadControlמגביל את הטעינה מראש כך שהיא תתחיל ותימשך רק כשהנגן לא נטען לצורך הפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה שלLoadControl.shouldContinuePreloading()בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl). הטמעת ברירת המחדל שלLoadControlמשביתה את הטעינה מראש אם אפליקציה משתמשת בהטמעה מותאמת אישית שלLoadControl. - נוספה שיטה
MediaSourceEventListener.EventDispatcher.dispatchEvent()כדי לאפשר הפעלה של אירועים של פונקציות event listener מסוג subclass (1736). - מוסיפים
DefaultPreloadManager.Builderשיוצר את המופעיםDefaultPreloadManagerו-ExoPlayerעם הגדרות משותפות באופן עקבי. - צריך להסיר את הפרמטר
Renderer[]מ-LoadControl.onTracksSelected()כי ההטמעה שלDefaultLoadControlיכולה לאחזר את סוגי הסטרימינג מ-ExoTrackSelection[]. - הוצאנו משימוש את
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])וסימנו את השיטה כסופית כדי למנוע ביטולים. במקומה, צריך להשתמש ב-DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). - דיווח על אירועי
MediaSourceEventListenerממקורות משניים ב-MergingMediaSource. התוצאה היא שאירועים של התחלת טעינה, שגיאה, ביטול או השלמה מדווחים על כתוביות שהועלו (כאלה שנוספו באמצעותMediaItem.LocalConfiguration.subtitleConfigurations), ויכול להיות שהם יופיעו כאירועי טעינה כפולים שנשלחו מ-AnalyticsListener. - למנוע מצב שבו שגיאות בכתוביות ובמטא-נתונים יגרמו להפסקת ההפעלה.
במקום זאת, הרצועה הבעייתית מושבתת וההפעלה של הרצועות הנותרות נמשכת (#1722).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
onLoadError. - בטיפול מדור קודם בכתוביות (במהלך רינדור), רק שגיאות טעינה משויכות מועברות באמצעות קריאות חוזרות (callback) של
onLoadError, ושגיאות ניתוח מתעלמים מהן בשקט (זו התנהגות שהייתה קיימת קודם).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
- תוקן באג שבו פריטים או תקופות בפלייליסטים בסטרימינג בפורמט DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- הוספנו setter ל-
SntpClientכדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (#1794).
- עכשיו אפשר להתקשר אל
- Transformer:
- הוספנו את
SurfaceAssetLoader, שתומך בהוספת נתוני סרטונים לתור של Transformer באמצעותSurface. -
ImageAssetLoaderמדווח על קלט לא נתמך באמצעותAssetLoader.onErrorבמקום להציגIllegalStateException. - הופכים את הגדרת משך הזמן של התמונה באמצעות
MediaItem.Builder.setImageDurationMsלחובה לייצוא תמונות. - הוספת תמיכה בייצוא של פערים ברצפים של פריטי מדיה מסוג EditedMediaItem של אודיו.
- הוספנו את
- בחירת טראק:
-
DefaultTrackSelector: עדיף להשתמש באודיו מבוסס-אובייקט ולא באודיו מבוסס-ערוץ, אם שאר הגורמים זהים.
-
- אמצעי חילוץ:
- מתן הרשאה ל-
Mp4Extractorול-FragmentedMp4Extractorלזהות דגימות H264 שלא נעשה בהן שימוש כהפניה לדגימות הבאות. - הוספנו אפשרות להפעיל חיפוש מבוסס-אינדקס ב-
AmrExtractor. - קבצי MP3 עם יותר מ-128kB בין מסגרות תקינות נחשבים לקטומים (במקום לא תקינים). המשמעות היא שקבצים עם נתונים שאינם MP3 בסוף, ללא מטא-נתונים אחרים שמציינים את אורך הבייטים של ה-MP3, מפסיקים עכשיו את ההפעלה בסוף הנתונים של ה-MP3 במקום להיכשל עם
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - תוקנה בעיה שקשורה לטיפול בדוגמאות של מודעות לפני הסרטון במיקומי התחלה של מדיה שאינם פריימים מרכזיים, כשמעבדים רשימות עריכה בקובצי MP4 (#1659).
- שיפור החישוב של קצב הפריימים באמצעות משך המדיה מהתיבה
mdhdב-Mp4Extractorוב-FragmentedMp4Extractor(מס' 1531). - תיקון קנה מידה שגוי של
media_timeברשימות עריכה של MP4. הערךsegment_durationכבר עבר שינוי קנה מידה נכון באמצעות קנה המידה של הסרט, אבל הערךmedia_timeעכשיו עובר שינוי קנה מידה נכון באמצעות קנה המידה של הרצועה, כפי שצוין בתקן של פורמט MP4 (#1792). - טיפול בפריימים לא מסודרים בחישוב
endIndicesעבור MP4 עם רשימת עריכה (#1797). - תוקן ניתוח של משך המדיה בתיבה
mdhdשל קובצי MP4 כדי לטפל בערכים-1(#1819). - נוספה תמיכה בזיהוי תיבת
h263בקובצי MP4 עבור סרטון H.263 (מס' 1821). - הוספת תמיכה בפורמט קובץ מדיה בסיסי ISO AC-4 ברמה 4 (#1265).
- מתן הרשאה ל-
- DataSource:
- בוצע עדכון של
HttpEngineDataSourceכדי לאפשר שימוש החל מגרסה S extension 7 במקום רמת API 34 (#1262). -
DataSourceContractTest: מוודאים ש-DataSource.getUri()מחזיר את ה-URI שפוענח (כפי שמתואר במסמכים). אם ה-URI שונה מה-URI שצוין בבקשה, אפשר לציין את זה בבדיקות באמצעות השיטה החדשהDataSourceContractTest.TestResource.Builder.setResolvedUri(). -
DataSourceContractTest: מוודאים שהערך 'open' מוחזר מ-DataSource.getUri()ומ-getResponseHeaders()אחרי קריאה שנכשלה ל-open()(בגלל משאב שלא נמצא) ולפני קריאה עוקבת ל-close().- החלפת
DataSourceContractTest.getNotFoundResources()מאפשרת למחלקות משנה של בדיקות לספק כמה משאבים מסוג 'לא נמצא', וגם לספק כותרות צפויות. כך אפשר להבחין בין שגיאת HTTP 404 (עם כותרות) לבין השגיאה 'השרת לא נמצא' (ללא כותרות).
- החלפת
- בוצע עדכון של
- אודיו:
- הגדרת מטא-נתונים של עוצמת הקול לפי תקן CTA-2075 באופן אוטומטי ב-Codec אם הם קיימים במדיה.
- הנמכה חלקה של עוצמת הקול כשמחפשים מיקום מסוים בסרטון.
- איך לפתור בעיות שקשורות לצלילי פופ שיכולים להופיע במהלך חיפוש.
- תיקון שגיאות הצטברות של חיתוך באלגוריתם של Sonic לשינוי מהירות/גובה הצליל.
- תוקן באג ב-
SpeedChangingAudioProcessorשגורם להשמטת פריים של פלט.
- סרטון:
-
MediaCodecVideoRendererלא מפענח דגימות שלא מוצגות ולא משמשות כהפניה לדגימות אחרות. - ב-API 35 ומעלה, יכול להיות שעכשיו
MediaCodecAdapterיקבלnullSurfaceב-configureוקריאות לשיטה חדשהdetachOutputSurfaceכדי להסירSurfaceשהוגדר בעבר אם רכיב ה-Codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported). - שימוש
MediaCodecAdapterבערכי יחס הגובה-רוחב של הפיקסלים שסופקו, אם יש כאלה, במהלך העיבוד שלonOutputFormatChanged(#1371). - הוספנו פתרון עקיף לבעיה במכשיר Galaxy Tab S7 FE שגורמת לכך שסטרימינג מאובטח של H264 ב-60fps מסומן כלא נתמך (#1619).
- נוספה דרך לעקיפת הבעיה ב-Codec שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות של סוף הסטרימינג.
-
- טקסט:
- מוסיפים תג מותאם אישית
VoiceSpanומאכלסים אותו בטווחים של קול ב-WebVTT (#1632). - מוודאים שקובצי WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שגורמות להצפה של
longב-64 ביט כשמייצגים אותן כמיקרו-שניות ומכפילים אותן בבסיס הזמן של MPEG90,000) מוצגים (#1763). - תמיכה בכתוביות CEA-608 בתוכן Dolby Vision (#1820).
- תוקנה בעיה שגורמת להשהיית ההפעלה בשידורי DASH מרובי תקופות כשהכתוביות בפורמט CEA-608 מופעלות (#1863).
- מוסיפים תג מותאם אישית
- מטא-נתונים:
- מקצים את הסוג
C.TRACK_TYPE_METADATAלטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
- מקצים את הסוג
- תמונה:
- הוספת
ExternallyLoadedImageDecoderלשילוב פשוט עם ספריות חיצוניות לטעינת תמונות כמו Glide או Coil.
- הוספת
- DataSource:
- הוספת
FileDescriptorDataSource,DataSourceחדש שאפשר להשתמש בו כדי לקרוא מFileDescriptor(מספר 3757).
- הוספת
- אפקט:
- הוספת פתרון עקיף לבעיה
DefaultVideoFrameProcessorשל שינוי קנה מידה קלSurfaceTextureSurfaceTextureעשוי לכלול שינוי קנה מידה קטן שחותך שוליים של 1-טקסל מסביב לקצה של מאגר חתוך. הטיפול בבעיה הזו מתבצע עכשיו כך שהפלט קרוב יותר למה שצפוי. - האצה
DefaultVideoFrameProcessor.queueInputBitmap(). כתוצאה מכך, אפשר לייצא תמונות לסרטונים עםTransformerמהר יותר.
- הוספת פתרון עקיף לבעיה
- תוסף IMA:
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
ArrayIndexOutOfBoundsExceptionב-ImaServerSideAdInsertionMediaSource. - תוקן באג שבו סטרימינג של DAI עם הוספה בצד השרת ללא פרסומת לפני הסרטון עלול לגרום ל-
ArrayIndexOutOfBoundsExceptionכשממשיכים להפעיל אחרי הפרסומת האחרונה באמצע הסרטון (#1741).
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
- סשן:
- כדאי להוסיף את
MediaButtonReceiver.shouldStartForegroundService(Intent)כדי לאפשר לאפליקציות לבטל פקודת הפעלה שמגיעה להמשך ההפעלה על ידי החלפת השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר להפסיק את ההפעלה שלו בלי שהמערכת תקרוס בגלל השירות עםForegroundServiceDidNotStartInTimeException(#1528). - תוקן באג שגרם לכך שפקודות מותאמות אישית שנשלחו מ-
MediaBrowserהועברו אלMediaSessionCompat.Callbackבמקום אל הגרסהMediaBrowserServiceCompatשל השיטה, כשהיה חיבור לשירות מדור קודם. כתוצאה מכך,MediaBrowserלא קיבל את ערך ההחזרה בפועל שנשלח על ידי השירות מדור קודם (#1474). - טיפלנו בחריגה
IllegalArgumentExceptionשמופעלת על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור לכוונות של לחצן מדיה (#1730). - להוסיף כפתורי פקודות לפריטי מדיה. הפעולה הזו מוסיפה את Media3 API למה שהיה ידוע בתור
Custom browse actionsעם ספריית הישנה עםMediaBrowserCompat. שימו לב: כפתורי פקודות של Media3 לפריטי מדיה זמינים גם ב-MediaBrowserוגם ב-MediaController. איך מטמיעים פעולות מותאמות אישית לגלישה * תוקן באג שבו לפעמים בקר Media3 לא הצליח לאפשר לאפליקציית סשן להפעיל שירות בחזית אחרי שליחת בקשה שלplay(). - הגבלת
CommandButton.Builder.setIconUriלקבלת כתובות URI של תוכן בלבד. - העברת רמזים לחיבור של דפדפן Media3 ל-
MediaBrowserCompatהראשוני כשמתחברים ל-MediaBrowserCompatמדור קודם. השירות יכול לקבל את רמזי החיבור שמועברים כרמזי שורש עם הקריאה הראשונה ל-onGetRoot(). - תוקן באג שבו
MediaBrowserשמחובר לשירות דפדפן מדור קודם, לא קיבל שגיאה שנשלחה על ידי השירות אחרי שהדפדפן נרשם ל-parentid. - שיפור ההתנהגות של יכולת הפעולה ההדדית, כך שדפדפן Media3 שמחובר ל-
MediaBrowserServiceמדור קודם לא יבקש את הצאצאים שלparentIdפעמיים כשנרשמים למינוי של הורה.
- כדאי להוסיף את
- UI:
- הפעלנו את הפתרון העקיף לבעיה של סרטונים מתוחים או חתוכים ב-
PlayerView-in-Compose-AndroidView, בגלל בעיות במעברים משותפים מבוססי XML. אפליקציות שמשתמשות ב-PlayerViewבתוךAndroidViewצריכות לשלוח קריאה ל-PlayerView.setEnableComposeSurfaceSyncWorkaroundכדי להביע הסכמה (מס' 1237, מס' 1594). - הוספנו את
setFullscreenButtonStateל-PlayerViewכדי לאפשר עדכונים של סמל הלחצן למסך מלא לפי דרישה, כלומר מחוץ לפס הרגיל ולא בתגובה לאינטראקציה של לחיצה (#1590, #184). - תיקון באג שבו האפשרות 'ללא' בבחירת הטקסט לא פועלת אם יש העדפות לבחירת רצועת טקסט שהוגדרו באפליקציה.
- הפעלנו את הפתרון העקיף לבעיה של סרטונים מתוחים או חתוכים ב-
- תוסף DASH:
- הוספנו תמיכה בתקופות שמתחילות באמצע פלח (#1440).
- תוסף Smooth Streaming:
- תוקנה שגיאה
Bad magic number for Bundleבהפעלת סטרימינג של SmoothStreaming עם טראקים של טקסט (#1779).
- תוקנה שגיאה
- תוסף RTSP:
- תוספי פענוח (FFmpeg, VP9, AV1 וכו'):
- מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות ספריית Native libiamf לסינתוז אודיו.
- ההפעלה מופעלת עם פריסת סטריאו וגם עם 5.1 עם מרחביות, יחד עם מעקב ראש אופציונלי, אבל כרגע אין תמיכה בהפעלה בינאורלית.
- נוספה תמיכה בדפים בגודל 16KB לתוספי פענוח ב-Android 15 (#1685).
- מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות ספריית Native libiamf לסינתוז אודיו.
- תוסף Cast:
- הפסקת ניקוי ציר הזמן אחרי ניתוק CastSession, שמאפשר לאפליקציית השולח להמשיך את ההפעלה באופן מקומי אחרי הניתוק.
- מאכלסים את
DeviceInfoשל CastPlayer כשמספקיםContext. הפעולה הזו מאפשרת לקשר אתMediaSessionאלRoutingSession, וזה הכרחי לשילוב של הכלי להחלפת פלט (#1056).
- כלי בדיקה:
DataSourceContractTestכולל עכשיו בדיקות לאימות:- מקור הנתונים
read positionעודכן. - מאגר הפלט
offsetמוחל בצורה נכונה.
- מקור הנתונים
- אפליקציית הדגמה
- פתרון בעיות של דליפות זיכרון באפליקציית הדגמה של תוכן קצר (מספר 1839).
- הסרת סמלים שהוצאו משימוש:
- הסרת
Player.hasPreviousשהוצא משימוש,Player.hasPreviousWindow(). במקום זאת, אתם צריכים להשתמש ב-Player.hasPreviousMediaItem(). - הסרת השיטה
Player.previous()שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem(). - הסרת השיטה
DrmSessionEventListener.onDrmSessionAcquiredשיצאה משימוש. - הסרה של קונסטרוקטורים
DefaultEncoderFactoryשיצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultEncoderFactory.Builder.
- הסרת
גרסה 1.5.0-rc02
19 בנובמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-rc01
13 בנובמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-beta01
30 באוקטובר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-alpha01
10 בספטמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.4.0
גרסה 1.4.1
27 באוגוסט 2024
androidx.media3:media3-*:1.4.1 מופץ. גרסה 1.4.1 מכילה את השמירות האלה.
- ExoPlayer:
- אמצעי חילוץ:
- MP3: תוקנה שגיאה
Searched too many bytesעל ידי התעלמות נכונה מנתונים לא רלוונטיים בסוף קובץ ה-MP3, בהתבסס על שדה האורך בפרייםInfo(מס' 1480).
- MP3: תוקנה שגיאה
- טקסט:
- TTML: תוקן הטיפול בערכי אחוזים
tts:fontSizeכדי להבטיח שהם יקבלו בירושה בצורה נכונה מצמתי אב עם ערכי אחוזיםtts:fontSize. - תיקון
IndexOutOfBoundsExceptionב-LegacySubtitleUtilעקב טיפול לא תקין במקרה שבו שעת ההתחלה של הפלט המבוקש גדולה משעת הסיום של האירוע ב-Subtitleאו שווה לה (מס' 1516).
- TTML: תוקן הטיפול בערכי אחוזים
- DRM:
- תיקון שגיאה
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEבמכשירי API 31 ומעלה שמופעל בהם תוכן L1 Widevine. השגיאה הזו נגרמת בגלל הטמעה לא מלאה של שיטתMediaDrm.requiresSecureDecoder(#1603) ב-framework.
- תיקון שגיאה
- אפקט:
- מוסיפים אמצעי תשלום
release()ל-GlObjectsProvider.
- מוסיפים אמצעי תשלום
- סשן:
- תוסף RTSP:
- דילוג על תיאורי מדיה לא תקינים בניתוח SDP (#1087).
גרסה 1.4.0
25 ביולי 2024
androidx.media3:media3-*:1.4.0 מופץ. גרסה 1.4.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- במקום להתעלם משיחות חיפוש שמוגדרות כ-no-op, צריך להעביר אותן לשיטות המוגנות
BasePlayer.seekTo()וSimpleBasePlayer.handleSeek(). אם אתם מטמיעים את השיטות האלה בנגן בהתאמה אישית, יכול להיות שתצטרכו לטפל בקריאות הנוספות האלה באמצעותmediaItemIndex == C.INDEX_UNSET. - הוסרה תלות בהידור של ביטול סוכר משופר ב-Java 8 (#1312).
- חשוב לוודא שהמשך שהועבר אל
MediaItem.Builder.setImageDurationMs()לא מושפע מMediaItemשאינו תמונה (כפי שמתואר במסמכים). - הוספת
Format.customDataלאחסון מידע מותאם אישית שסופק על ידי האפליקציה לגבי מופעים שלFormat.
- במקום להתעלם משיחות חיפוש שמוגדרות כ-no-op, צריך להעביר אותן לשיטות המוגנות
- ExoPlayer:
- מוסיפים את
BasePreloadManagerשמתאם את הטעינה מראש של כמה מקורות על סמך סדרי העדיפויות שמוגדרים על ידיrankingData. אפשר להרחיב את המחלקה הזו כדי לבצע התאמה אישית. AddDefaultPreloadManagerשמשתמש ב-PreloadMediaSourceכדי לטעון מראש דגימות מדיה של המקורות לזיכרון, ומשתמש במספר שלםrankingDataשמציין את האינדקס של פריט בממשק המשתמש. - מוסיפים
PlayerIdלרוב השיטות שלLoadControlכדי לאפשר הטמעות שלLoadControlשתומכות בכמה שחקנים. - הסרה של
Buffer.isDecodeOnly()ושלC.BUFFER_FLAG_DECODE_ONLY. אין צורך להגדיר את הדגל הזה, כי רכיבי ה-renderer והמפענחים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. ביישומים מותאמים אישית שלRendererצריך לבדוק אם זמן ההשהיה הוא לפחותBaseRenderer.getLastResetPositionUs()כדי להחליט אם להציג דוגמה. הטמעות מותאמות אישית שלSimpleDecoderיכולות לבדוקisAtLeastOutputStartTimeUs()את המאגרים אם צריך, או לסמן מאגרים אחרים באמצעותDecoderOutputBuffer.shouldBeSkippedכדי לדלג עליהם. - הפונקציה מאפשרת להחזיר ערך ריק (null) של
TargetPreloadStatusControl.getTargetPreloadStatus(T)כדי לציין שלא צריך לטעון מראשMediaSourceעם הערךrankingDataשצוין. - הוספת
remove(MediaSource)אלBasePreloadManager. - מוסיפים את
reset()אלBasePreloadManagerכדי לבטל את ההחזקה של כל המקורות תוך שמירה על מופע של הכלי לניהול טעינה מראש. - מוסיפים את
ExoPlayer.setPriority()(ואתBuilder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManagerואת חשיבות MediaCodec מ-API 35. - תוקנה בעיה בעדכון של זמן האגירה מחדש האחרון, שגרמה למפתח
bs(buffer starvation) שגוי ב-CMCD (#1124). - מוסיפים את התג
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)כדי לציין שהמקור נטען עד הסוף. ההרשאה הזו מאפשרת להטמעות שלDefaultPreloadManagerושלPreloadMediaSource.PreloadControlלטעון מראש את המקור הבא או לבצע פעולות אחרות. - תוקן באג שבו דילוג על השתקה בסוף פריטים יכול להפעיל חריגה בהפעלה.
- כדי לבטל את תקופת הטעינה מראש, מוסיפים את
clearאלPreloadMediaSource. - הוספת קוד שגיאה חדש
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDשמשמש כאשר משאבי codec מוחזרים למשימות בעדיפות גבוהה יותר. - מאפשרים ל-
AdsMediaSourceלטעון מודעות לפני הסרטון לפני השלמת ההכנה של תוכן המדיה הראשוני (#1358). - תוקן באג שבו ההפעלה עברה אל
STATE_ENDEDכשמכינים מחדש שידור חי בפורמט DASH עם כמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט. - שינוי השם של
onTimelineRefreshed()ל-onSourcePrepared()ושלonPrepared()ל-onTracksSelected()ב-PreloadMediaSource.PreloadControl. כמו כן, צריך לשנות את השם של IntDefs ב-DefaultPreloadManager.Stageבהתאם. - הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההתעוררות של המעבד, ולדחות את ההתעוררות עד שהרכיבים הגרפיים יוכלו להתקדם.
אפשר להפעיל את ההגדרה הזו באמצעות
experimentalSetDynamicSchedulingEnabled()כשמגדירים את מופע ExoPlayer. - מוסיפים את
Renderer.getDurationToProgressUs(). Rendererיכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שצריך להעביר את ההפעלה כדי שהרכיב Renderer יתקדם. אםExoPlayerמוגדר עםexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerיקרא לשיטה הזו כשהוא יחשב את הזמן לתזמון של משימת העבודה שלו. - מוסיפים את
MediaCodecAdapter#OnBufferAvailableListenerכדי לקבל התראה כשמאגרי הקלט והפלט זמינים לשימוש על ידיMediaCodecRenderer. MediaCodecRendererישלח אות ל-ExoPlayerכשהוא יקבל את הקריאות החוזרות האלה, ואםExoPlayerמוגדר עםexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerיתזמן את לולאת העבודה שלו כדי שהרכיבים המעבדים יוכלו להתקדם. - שימוש במחלקת נתונים עבור שיטות
LoadControlבמקום בפרמטרים נפרדים. - מוסיפים את
ExoPlayer.isReleased()כדי לבדוק אם בוצעה קריאה ל-Exoplayer.release(). - הוספת
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()כדי להגדיר את המיקום המקסימלי שבוseekToPrevious()מחפש את הפריט הקודם (#1425). - תוקנו כמה אי-התאמות במיקוד האודיו, למשל אי-דיווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
- תיקון בעיות פוטנציאליות
IndexOutOfBoundsExceptionשנגרמות בגלל דוחות של כלי החילוץ על רצועות נוספות אחרי שלב ההכנה הראשוני (#1476). -
Effectsב-ExoPlayer.setVideoEffect()יקבלו את חותמות הזמן עם ההיסט של הרנדרר שהוסר (#1098). - תוקנה בעיה פוטנציאלית
IllegalArgumentExceptionבטיפול בשגיאת הפעלה שהתרחשה במהלך קריאה מראש של פריט אחר בפלייליסט (#1483).
- מוסיפים את
- Transformer:
- מוסיפים את התגים
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 מסכימות של מזהי URI של תוכן. (#1373).
- משנים את משך טראק האודיו ב-
AudioGraphInputכדי לשפר את הסנכרון בין האודיו לווידאו. - הסרת השדה
ExportResult.processedInputs. אם אתם משתמשים בשדה הזה לפרטי קודק, אתם צריכים להשתמש בשדהDefaultDecoderFactory.listenerבמקום. במקרה של חריגה ב-codec, פרטי ה-codec יהיו זמינים ב-ExportException.codecInfo.
- מוסיפים את התגים
- אמצעי חילוץ:
- MPEG-TS: מעבירים את השינוי קדימה כדי לוודא שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909). שילוב תיקונים לפתרון הבעיות שצצו בשידורי HLS עם I-frame בלבד(#1150) ובשידורי HLS עם H.262 (#1126).
- MP3: עדיף להשתמש בגודל הנתונים מתוך מסגרת
Infoבמקום בגודל שמופיע בזרם הבסיסי (למשל גודל הקובץ או כותרת ה-HTTPContent-Length). כך אפשר להחריג נתונים של טריילרים שלא ניתן להפעיל (למשל, עטיפות של אלבומים) מחישובים של חיפוש קצב העברת נתונים קבוע, וכך החיפושים מדויקים יותר (#1376). - MP3: כדי לחשב קצב סיביות ממוצע לחיפוש קצב סיביות קבוע, צריך להשתמש במספר הפריימים ובנתונים אחרים בפריים
Info(אם יש כזה), ולא להסיק מהקצב של הפריים אחרי פרייםInfo, כי הוא עלול להיות קטן באופן מלאכותי, למשל פרייםPCUT(מס' 1376). - תיקון חילוץ של פורמט אודיו PCM במאגרי AVI.
- אודיו:
- תיקון מאפייני הקידוד של DTS:X Profile 2 להפעלה בשיטת passthrough (#1299).
- במקרה של הפעלה שהועברה, צריך לאפס את שדה המעקב של השלמת הסטרימינג ב-
DefaultAudioSinkלפני הקריאה ל-AudioTrack.stop(), כדי ש-AudioTrack.StreamEventCallback#onPresentationEndedיזהה בצורה נכונה מתי כל הנתונים בהמתנה הופעלו. - תוקן באג ב-
SilenceSkippingAudioProcessorשבו מעברים בין פורמטים שונים של אודיו (לדוגמה, מסטריאו למונו) עלולים לגרום למעבד להחזיר חריגה (#1352). - מטמיעים את
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כמדד צבע, במקום כערך צבע מילולי (#1367). - CEA-708: התעלמות מהערך
rowLock. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגםrowLockוגםcolumnLockהם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLockלא מיושמת, ולכן למעשה מניחים שהוא תמיד false).- השינוי הזה נכלל במקור בהערות לגרסה
1.3.0-alpha01, אבל הוא בוטל בטעות לפני פרסום גרסה1.3.0-rc01. הבעיה תוקנה, והשינוי מופיע שוב.
- השינוי הזה נכלל במקור בהערות לגרסה
- CEA-708: נמנעת הוספה של שורות חדשות כפולות בגלל טיפול לא יעיל של ExoPlayer בפקודה 'הגדרת מיקום העט' (#1315).
- תיקון
IllegalArgumentExceptionמ-LegacySubtitleUtilכשדוגמה של כתוביות בפורמט WebVTT לא מכילה רמזים, למשל כחלק מזרם DASH (#1516).
- מטא-נתונים:
- תיקון המיפוי של MP4 לתגי מיון ID3. בעבר, תגי MP4 של 'מיון אלבומים' (
soal), 'מיון אומנים' (soar) ו 'מיון אומנים באלבום' (soaa) מופו באופן שגוי לתגי ID3 שלTSO2,TSOAו-TSOP(#1302). - תוקן קריאת תגי MP4 (/iTunes) מספריים
gnre(ז'אנר) ו-tmpo(קצב) אם הערך ארוך מבייט אחד. - העברת מסגרת ID3
TCONאלMediaMetadata.genre(מס' 1305).
- תיקון המיפוי של MP4 לתגי מיון ID3. בעבר, תגי MP4 של 'מיון אלבומים' (
- תמונה:
- הוספת תמיכה ברשתות של תמונות ממוזערות בפורמט DASH שאינן ריבועיות (#1300).
- הוספנו תמיכה ב-AVIF ל-API מגרסה 34 ואילך.
- כדי לנקות
ImageOutputשהוגדר בעבר, מאשרים אתnullכפרמטר שלExoPlayer.setImageOutput().
- DataSource:
- הטמעת תמיכה בכתובות URI של משאבים גולמיים ב-
android.resource://package/id, כאשרpackageשונה מהחבילה של האפליקציה הנוכחית. בעבר לא היה תיעוד לכך שהשיטה הזו עובדת, אבל היא דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם. - בודקים אם
urlהוא לא null בבוניDataSpec. הפרמטר הזה כבר סומן כפרמטר שלא יכול להיות null. - האפשרות מאפשרת ל-
ByteArrayDataSourceלפתור URI למערך בייטים במהלךopen(), במקום להיות מקודד באופן קשיח במהלך הבנייה (#1405).
- הטמעת תמיכה בכתובות URI של משאבים גולמיים ב-
- DRM:
- הרשאה להגדרת
LoadErrorHandlingPolicyב-DefaultDrmSessionManagerProvider(מס' 1271).
- הרשאה להגדרת
- אפקט:
- תמיכה בכמה שינויי מהירות באותו תג
EditedMediaItemאוCompositionב-SpeedChangeEffect. - תמיכה בפלט HLG ו-PQ מקלט של מפת סיביות Ultra HDR.
- הוספנו תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפר את פלט פני השטח של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
- מעדכנים את ההטמעה של מטריצת שכבת העל כך שתהיה עקבית עם התיעוד, על ידי היפוך הערכים של x ו-y שמוחלים ב-
setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את ערכי ה-x וה-y על ידי הכפלתם ב--1. - תוקן באג שגורם לקריסה של
TimestampWrapperכשמשתמשים בו עםExoPlayer#setVideoEffects(מספר 821). - שינוי מרחב העבודה של צבעי SDR שמוגדר כברירת מחדל מצבעים ליניאריים לסרטון SDR חשמלי בתקן BT 709. צריך גם לספק אפשרות שלישית לשמירה של מרחב הצבעים המקורי.
- אפשרות להגדיר סדר z לא קבוע של EditedMediaItemSequences (#1055).
- שמירה על טווח בהירות עקבי בין פריטי תוכן שונים ב-HDR (השימוש הוא בטווח HLG).
- הוספנו תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
- אפשר להשתמש באפקטים של
SeparableConvolutionלפני API 26. - מסירים את
OverlaySettings.useHdrשלא בשימוש כי הטווח הדינמי של שכבת העל והמסגרת חייב להיות זהה. - הוספת תמיכה ב-HDR ל-
TextOverlay. אפשר לשנות את בהירות שכבת-העל של הטקסט באמצעותOverlaySettings.Builder.setHdrLuminanceMultiplier().
- תמיכה בכמה שינויי מהירות באותו תג
- תוסף IMA:
- קידום API שנדרש לאפליקציות כדי להפעיל סטרימינג של מודעות DAI לגרסה יציבה.
- מוסיפים
replaceAdTagParameters(Map <String, String>)ל-ImaServerSideAdInsertionMediaSource.AdLoaderשמאפשר להחליף פרמטרים של תג מודעה בזמן ריצה. - תוקן באג שגרם לכך שהפונקציה
VideoAdPlayer.VideoAdPlayerCallback.onError()לא נקראה כששגיאת הפעלה התרחשה במהלך הפעלת מודעה (#1334). - העלינו את גרסת IMA SDK ל-3.33.0 כדי לתקן
NullPointerExceptionכשמשתמשים בכתובות URI של תגי מודעותdata://(מספר 700).
- סשן:
- משנים את ברירת המחדל של
CommandButton.enabledל-trueומוודאים שהערך יכול להישאר false לבקרים גם אם הפקודה המשויכת זמינה. - הוספת קבועי סמלים ל-
CommandButtonשצריך להשתמש בהם במקום במשאבי סמלים מותאמים אישית. - הוספנו את
MediaSessionService.isPlaybackOngoing()כדי לאפשר לאפליקציות לשלוח שאילתות לגבי הצורך בהפסקת השירות ב-onTaskRemoved()(#1219). - הוספנו את
MediaSessionService.pauseAllPlayersAndStopSelf()שמאפשר להשהות את ההפעלה של כל הסשנים ולקרוא ל-stopSelf()כדי לסיים את מחזור החיים שלMediaSessionService. - אפשר להגדיר את הערך
MediaSessionService.onTaskRemoved(Intent)כדי לספק הטמעה בטוחה כברירת מחדל, שתשאיר את השירות פועל בחזית אם ההפעלה נמשכת, או תפסיק את השירות אחרת. - כדי להסתיר את סרגל ההתקדמות בהתראה על מדיה לשידורים חיים, לא צריך להגדיר את משך הזמן במטא-נתונים של סשן הפלטפורמה (#1256).
- התאמת ההמרה של
MediaMetadataל-MediaDescriptionCompat, כדי להשתמש באותו סדר מועדף ובאותה לוגיקה כשבוחרים מאפייני מטא-נתונים כמו ב-media1. - הוספת
MediaSession.sendError()שמאפשרת שליחת שגיאות לא קריטיות אל הבקר Media3. כשמשתמשים בבקר ההתראות (ראוMediaSession.getMediaNotificationControllerInfo()), השגיאה המותאמת אישית משמשת לעדכוןPlaybackStateשל סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (#543). - הוספת
MediaSession.Callback.onPlayerInteractionFinished()כדי להודיע על סיום סדרה של אינטראקציות של שחקן משלט מסוים במהלך סשנים. - מוסיפים את
SessionErrorומשתמשים בו ב-SessionResultוב-LibraryResultבמקום קוד השגיאה כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר. - פרסום הקוד של אפליקציית הבדיקה של בקר media3 שאפשר להשתמש בה כדי לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
- העברת נתוני extras שהועברו אל
MediaSession[Builder].setSessionExtras()של media3 אלPlaybackStateCompat.getExtras()של media1. - מיפוי שגיאות חמורות ושגיאות לא קריטיות אל הסשן בפלטפורמה וממנו. A
PlaybackExceptionממופה למצב שגיאה קריטית שלPlaybackStateCompat. הודעהSessionErrorשנשלחת לבקר של הודעת המדיה עםMediaSession.sendError(ControllerInfo, SessionError)ממופה לשגיאה לא קריטית ב-PlaybackStateCompat, כלומר קוד השגיאה וההודעה מוגדרים אבל מצב הפעלת הפלטפורמה נשאר שונה מ-STATE_ERROR. - ההרשאה מאפשרת להגדיר את פעילות הסשן לכל בקר כדי לבטל את פעילות הסשן הגלובלית. אפשר להגדיר את הפעילות בסשן לבקר בזמן החיבור על ידי יצירת
ConnectionResultעםAcceptedResultBuilder.setSessionActivivty(PendingIntent). אחרי ההתחברות, אפשר לעדכן את פעילות הסשן באמצעותMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - שיפור השכפול של שגיאות בשיחות אל
MediaLibrarySession.Callback. מעכשיו אפשר להגדיר שכפול שגיאות באמצעותMediaLibrarySession.Builder.setLibraryErrorReplicationMode()כדי לבחור את סוג השגיאה או לבטל את שכפול השגיאות, שמופעל כברירת מחדל.
- משנים את ברירת המחדל של
- UI:
- הוספת תמיכה בהצגת תמונות ל-
PlayerViewכשהוא מחובר ל-ExoPlayer(#1144). - הוספנו אפשרות להתאמה אישית של סמלים שונים ב-
PlayerControlViewבאמצעות מאפייני xml כדי לאפשר שימוש בנכסי drawable שונים לכל מופע שלPlayerView, במקום להשתמש בהחלפות גלובליות (#1200). - פתרון לבעיה בפלטפורמה שגורמת למתיחה או לחיתוך של סרטון כשמשתמשים ב-
SurfaceViewבתוך ComposeAndroidViewב-API 34 (#1237).
- הוספת תמיכה בהצגת תמונות ל-
- הורדות:
- מוודאים ש-
DownloadHelperלא גורם לדליפה של מופעיRendererשלא פורסמו, מה שעלול לגרום בסופו של דבר לקריסת האפליקציה עםIllegalStateException: Too many receivers, total of 1000, registered for pid(מספר 1224).
- מוודאים ש-
- תוסף Cronet:
- תיקון של
SocketTimeoutExceptionבCronetDataSource. בגרסאות מסוימות של Cronet, הבקשה שמועברת על ידי הקריאה החוזרת לא תמיד זהה. הבעיה הזו גורמת לכך שהקריאה החוזרת לא מסתיימת והבקשה עוברת פסק זמן (https://issuetracker.google.com/328442628).
- תיקון של
- תוסף HLS:
- תוקן באג שבו דגימות EMSG בהמתנה שחיכו לנקודת אי-רציפות הועברו ב-
HlsSampleStreamWrapperעם היסט שגוי שגרם ל-IndexOutOfBoundsExceptionאו ל-IllegalArgumentException(#1002). - תוקן באג שבו פלייליסטים לא ראשיים נטענים מחדש בשידורים בפרוטוקול LL-HLS (#1240).
- נפתרה באג שבו הפעלת CMCD עבור HLS עם פלחי אתחול
הובילה ל-
Source Errorול-IllegalArgumentException. - תוקן באג שגרם לכך שפלייליסטים שמופעלים ולא מוגדרים כראשיים לא רעננו במהלך הפעלה בשידור חי (#1240).
- תוקן באג שבו הפעלת CMCD לשידורים חיים ב-HLS גורמת לבעיה
ArrayIndexOutOfBoundsException(#1395).
- תוקן באג שבו דגימות EMSG בהמתנה שחיכו לנקודת אי-רציפות הועברו ב-
- תוסף DASH:
- תוסף Cast:
- תוקן באג שהמיר את שם האלבום של
MediaQueueItemלאומן בפריט מדיה Media3 (#1255).
- תוקן באג שהמיר את שם האלבום של
- כלי בדיקה:
- מטמיעים את
onInit()ואתonRelease()ב-FakeRenderer. - משנים את שיטות
TestPlayerRunHelper.runUntil()/playUntil()כך שיכשלו בשגיאות לא קריטיות (לדוגמה, שגיאות שדווחו ל-AnalyticsListener.onVideoCodecError()). משתמשים בשרשרת השיטות החדשהTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()כדי להשבית את ההתנהגות הזו.
- מטמיעים את
- אפליקציית הדגמה:
- אפשר להשתמש ב-
DefaultPreloadManagerבאפליקציית ההדגמה של סרטונים קצרים. - אפשר להגדיר מצב הפעלה חוזרת עם ארגומנטים של
Intentמשורת הפקודה (מס' 1266). - אפשר להשתמש ב-
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
10 ביולי 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-beta01
26 ביוני 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-alpha02
7 ביוני 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-alpha01
17 באפריל 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.3.0
גרסה 1.3.1
11 באפריל 2024
androidx.media3:media3-*:1.3.1 מופץ. גרסה 1.3.1 מכילה את השמירות האלה.
- ספרייה משותפת:
- מוסיפים
Format.labelsכדי לאפשר תוויות חלופיות או תוויות בשפות אחרות.
- מוסיפים
- ExoPlayer:
- תוקנה בעיה שגרמה לכך שלא ניתן היה לשמור את הסטרימינג כשבוצעה טעינה מראש של
PreloadMediaPeriodשוב. - צריך להחיל את
TrackSelectionResultהמתאים לתקופת ההפעלה בבחירה מחדש של טראקים. - הפעלת רכיבי עיבוד עם הפעלה מוקדמת רק אחרי מעבר לתקופת ההפעלה כשמתבצע מעבר בין פריטי מדיה (#1017).
- הוספת סוג החזרה חסר לכלל proguard
-keepclasseswithmembersעבורDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- תוקנה בעיה שגרמה לכך שלא ניתן היה לשמור את הסטרימינג כשבוצעה טעינה מראש של
- Transformer:
- הוספת פתרון עקיף לחריג שנוצר בגלל ש-
MediaMuxerלא תומך בחותמות זמן שליליות של הצגה לפני API 30.
- הוספת פתרון עקיף לחריג שנוצר בגלל ש-
- בחירת טראק:
-
DefaultTrackSelector: מעדיף רצועות וידאו עם קצב פריימים 'סביר' (>=10fps) על פני רצועות עם קצב פריימים נמוך יותר או לא מוגדר. כך נמנע מצב שבו הנגן בוחר את רצועת הווידאו 'האמיתית' בקובצי MP4 שחולצו מתמונות דינמיות, שיכולות להכיל שתי רצועות HEVC, שאחת מהן היא ברזולוציה גבוהה יותר אבל עם מספר קטן מאוד של פריימים (#1051).
-
- אמצעי חילוץ:
- תוקנה בעיה שבה לא הייתה דילוג על ריפוד בקריאת נתחים בגודל אי-זוגי מקובצי WAV (#1117).
- MP3: מאכלסים את
Format.averageBitrateמתוך מסגרות של מטא-נתונים כמוXINGו-VBRI. - MPEG-TS: שינוי שנועד להבטיח שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909). הסיבה לכך היא שהשינוי גורם לבעיות חדשות בזרמי HLS של I-frame בלבד (#1150) ובזרמי HLS של H.262 (#1126).
- אודיו:
- מתן אפשרות לשחזור של רכיב ה-Renderer על ידי השבתת הפחתת העומס אם לא ניתן לאתחל את טראק האודיו במצב הפחתת העומס.
- סרטון:
- נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE, Chromecast עם Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון סטרימינג של H265 ב-60fps כלא נתמך
- נוספה דרך לעקיפת הבעיה כדי להבטיח שהפריים הראשון תמיד יעבור רינדור בזמן המנהור, גם אם המכשיר לא עושה זאת באופן אוטומטי כנדרש על ידי ה-API (#1169). (#966).
- תוקנה בעיה שבה טיפול בפרטי צבע HDR גורם להתנהגות לא תקינה של קודק ומונע מעברים בין פורמטים של רצועות וידאו SDR (מס' 1158).
- טקסט:
- WebVTT: מניעה של יצירת מופעים נוספים של
CuesWithTimingמ-WebvttParser.parseעל ידי רמזים עוקבים ישירות (מס' 1177).
- WebVTT: מניעה של יצירת מופעים נוספים של
- DRM:
- פתרון לבעיה
NoSuchMethodErrorשיכולה להתרחש ב-MediaDrmבמקום ב-ResourceBusyExceptionאו ב-NotProvisionedExceptionבחלק ממכשירי Android 14 (#1145).
- פתרון לבעיה
- אפקט:
- שיפור המיפוי של גוונים מ-PQ ל-SDR על ידי המרת מרחבי צבעים.
- סשן:
- UI:
- אם אי אפשר לזהות שם תצוגה של
Locale, המערכת תשתמש בשם השפה של טראק האודיו (#988).
- אם אי אפשר לזהות שם תצוגה של
- תוסף DASH:
- מאכלסים את כל רכיבי
Labelמהמניפסט ב-Format.labels(#1054).
- מאכלסים את כל רכיבי
- תוסף RTSP:
- דילוג על ערכים ריקים של פרטי סשן (תגי i) בניתוח SDP (#1087).
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- ההשבתה של תוסף ה-MIDI כהסתמכות מקומית היא ברירת המחדל, כי צריך להגדיר מאגר Maven נוסף. משתמשים שצריכים את המודול הזה כתלות מקומית יכולים להפעיל אותו מחדש.
גרסה 1.3.0
6 במרץ 2024
androidx.media3:media3-*:1.3.0 מופץ. גרסה 1.3.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- הטמעת תמיכה בכתובות URI של משאבים גולמיים של
android.resource://package/[type/]name, כאשרpackageשונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו תמיד הייתה מתועדת כפועלת, אבל עד עכשיו היא לא הוטמעה בצורה נכונה. - נרמול של סוגי MIME שמוגדרים על ידי קוד האפליקציה או נקראים ממדיה, כך שיהיו באותיות קטנות בלבד.
- מגדירים מודעות עם
MediaItemמלא במקום עםUriאחד ב-AdPlaybackState. - הגדלת הערך של
minSdkל-19 (Android KitKat). הדרישה הזו תואמת לכל הספריות האחרות של AndroidX, והיא נדרשת כדי שנוכל לשדרג לגרסאות האחרונות של התלויות שלנו ב-AndroidX. - מאכלסים את שני השדות
artworkUriו-artworkDataב-MediaMetadata.Builder.populate(MediaMetadata)אם לפחות אחד מהם לא ריק (#964).
- הטמעת תמיכה בכתובות URI של משאבים גולמיים של
- ExoPlayer:
- מוסיפים את
PreloadMediaSourceו-PreloadMediaPeriodשמאפשרים לאפליקציות לטעון מראש מקור מדיה של תוכן במיקום התחלה ספציפי לפני ההפעלה. PreloadMediaSourceדואג להכין את מקור המדיה של התוכן לקבלתTimeline, להכין את התקופה ולשמור אותה במטמון במיקום ההתחלה הנתון, לבחור רצועות ולטעון נתוני מדיה לתקופה. האפליקציות שולטות בהתקדמות הטעינה מראש באמצעות הטמעה שלPreloadMediaSource.PreloadControlומגדירות את המקור שנטען מראש בנגן להפעלה. - הוספת
ExoPlayer.setImageOutputשמאפשרת לאפליקציות להגדיר אתImageRenderer.ImageOutput. -
DefaultRenderersFactoryמספק עכשיוImageRendererלשחקן כברירת מחדל עםImageOutputו-ImageDecoder.Factory.DEFAULTשהערך שלהם הוא null. - פליטת אירוע
Player.Listener.onPositionDiscontinuityכשמדלגים על השתקה (#765). - הוספנו תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את ההגדרה הזו באמצעות
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - תמיכה במקורות מדיה דינמיים באמצעות
PreloadMediaSource. - מטמיעים את
HttpEngineDataSource, שהואHttpDataSourceבאמצעות ה-API של HttpEngine. - מניעת יצירת מחלקות משנה
CompositeSequenceableLoader. הרכיב הזה היה ניתן להרחבה בעבר, אבל אף פעם לא נוצר ממנו מחלקת משנה בספרייה. אפשר לבצע התאמות אישיות על ידי עטיפת מופע באמצעות תבנית מעצב ויישום שלCompositeSequenceableLoaderFactoryמותאם אישית. - תוקנה בעיה שבה חזרה על אותה שעה גורמת לניקוי המטא-נתונים של הפריט (#1007).
- שינוי השם של methods מסוג
experimentalSetSubtitleParserFactoryב-BundledChunkExtractor.Factoryוב-DefaultHlsExtractorFactoryל-setSubtitleParserFactoryוביטול האפשרות להעבירnull. אפשר להשתמש בשיטות החדשותexperimentalParseSubtitlesDuringExtraction(boolean)כדי לשלוט בהתנהגות הניתוח. - הוספת תמיכה בהתאמה אישית של
SubtitleParser.Factoryשמשמש במהלך החילוץ. אפשר לעשות זאת באמצעותMediaSource.Factory.setSubtitleParserFactory(). - הוספת קידומת מקור לכל השדות
Format.idשנוצרו מ-MergingMediaSource. כך אפשר לזהות איזה מקור הפיקFormat(#883). - תיקון הביטוי הרגולרי שמשמש לאימות שמות של מפתחות מותאמים אישית של נתוני Common Media Client (CMCD) על ידי שינוי הביטוי כך שיבדוק רק מקפים (#1028).
- הפסקת קידוד כפול של פרמטרים של שאילתות CMCD (#1075).
- מוסיפים את
- Transformer:
- הוספת תמיכה בהשטחה של סרטוני הילוך איטי בפורמט H.265/HEVC SEF.
- הגדלת מהירות ההמרה, במיוחד בעריכות של 'הסרת סרטון'.
- מוסיפים API כדי לוודא שקובץ הפלט מתחיל בפריים של סרטון. כך הפלט של פעולות החיתוך יהיה תואם יותר להטמעות של נגנים שלא מציגים את הפריים הראשון של הסרטון עד לחותמת הזמן של ההצגה שלו (#829).
- הוספנו תמיכה באופטימיזציה של פעולות חיתוך של נכסי MP4 בודדים.
- מוסיפים תמיכה כדי לוודא שלפריים של סרטון יש את חותמת הזמן הראשונה בקובץ הפלט. תוקן באפליקציה באג שגרם לכך שקובצי פלט התחילו עם מסגרת שחורה בנגנים מבוססי iOS (#829).
- בחירת טראק:
- מוסיפים
DefaultTrackSelector.selectImageTrackכדי להפעיל את האפשרות לבחירת רצועת תמונה. - מוסיפים
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledכדי לקבוע אם לבחור טראק של תמונה אם זמינים גם טראק של תמונה וגם טראק של סרטון. ערך ברירת המחדל הואfalse, כלומר העדיפות היא לבחירת רצועת וידאו.
- מוסיפים
- אמצעי חילוץ:
- הוספת ניתוח AV1C נוסף לחילוץ MP4 כדי לאחזר את הערכים
ColorInfo.colorSpace,ColorInfo.colorTransferו-ColorInfo.colorRange(#692). - MP3: משתמשים בחיפוש קצב העברת נתונים קבוע (CBR) בקבצים עם כותרת
Info(המקבילה של CBR לכותרתXing). בעבר השתמשנו בטבלת המיקום מהכותרתInfo, אבל זה הוביל למיקום פחות מדויק מאשר אם היינו מתעלמים ממנה ומניחים שהקובץ הוא CBR. - MPEG2-TS: נוספה תמיכה ב-DTS, DTS-LBR ו-DTS:X Profile2 (#275).
- חילוץ סוגי אודיו מתיאורי TS ומיפוי שלהם לדגלי תפקידים, כדי לאפשר למשתמשים לבחור טראקי אודיו בצורה מושכלת יותר (מס' 973).
- הוספת ניתוח AV1C נוסף לחילוץ MP4 כדי לאחזר את הערכים
- אודיו:
- סרטון:
- משנים את ה-constructor
MediaCodecVideoRendererשמקבל ארגומנטVideoFrameProcessor.Factoryומחליפים אותו ב-constructor שמקבל ארגומנטVideoSinkProvider. אפליקציות שרוצות להוסיףVideoFrameProcessor.Factoryמותאם אישית יכולות ליצור מופע שלCompositingVideoSinkProviderשמשתמש ב-VideoFrameProcessor.Factoryהמותאם אישית ולהעביר את ספק יעד הווידאו אלMediaCodecVideoRenderer.
- משנים את ה-constructor
- טקסט:
- תיקון סריאליזציה של רמזים של מפת סיביות כדי לפתור את השגיאה
Tried to marshall a Parcel that contained Binder objectsכשמשתמשים ב-DefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: התעלמות מהערך
rowLock. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגםrowLockוגםcolumnLockהם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLockלא מיושמת, ולכן למעשה מניחים שהוא תמיד false).
- תיקון סריאליזציה של רמזים של מפת סיביות כדי לפתור את השגיאה
- תמונה:
- הוספת תמיכה בתמונות ממוזערות של DASH. תמונות הרשת נחתכות ומוצגות כתמונות ממוזערות בודדות
ImageOutputקרוב לזמני ההצגה שלהן.
- הוספת תמיכה בתמונות ממוזערות של DASH. תמונות הרשת נחתכות ומוצגות כתמונות ממוזערות בודדות
- DRM:
- הפעלת דוגמאות לא מוצפנות של 'clear lead' בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשהמיקום בהפעלה מגיע לדגימות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyאוDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- תוסף IMA:
- תוקנה בעיה שגרמה לכך שלא ניתן היה להפעיל מודעות בפורמטים DASH ו-HLS ללא סיומת הקובץ המתאימה.
- הפעלת דוגמאות לא מוצפנות של 'clear lead' בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשהמיקום בהפעלה מגיע לדגימות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות
- סשן:
- השבתת זיהוי לחיצה כפולה באפליקציות לטלוויזיה (#962).
- תוקנה הבעיה שבה
MediaItem.RequestMetadataעם תוספים שאינם null לא מועבר בין בקרי מדיה לסשנים. - תוסיף קונסטרוקטור ל-
MediaLibrarySession.Builderשמקבל רקContextבמקוםMediaLibraryService.
- תוסף HLS:
- הפחתת רמת החשיפה של
HlsMediaPeriodל-package-private. לא מומלץ להסתמך על הסוג הזה ישירות מחוץ לחבילת HLS. - שיפור היעילות של מעבר לתחילת קטע (#1031).
- הפחתת רמת החשיפה של
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- MIDI decoder: Ignore SysEx event messages (#710).
- כלי בדיקה:
- לא להשהות את ההפעלה ב-
TestPlayerRunHelper.playUntilPosition. הבדיקה שומרת על מצב ההפעלה, אבל היא מושהית עד שהבדיקה תוכל להוסיף טענות ופעולות נוספות.
- לא להשהות את ההפעלה ב-
- אפליקציית הדגמה:
- מוסיפים מודול הדגמה של סרטון קצר כדי להדגים את השימוש ב-
PreloadMediaSourceבמקרה השימוש של תוכן קצר.
- מוסיפים מודול הדגמה של סרטון קצר כדי להדגים את השימוש ב-
גרסה 1.3.0-rc01
22 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-beta01
7 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-alpha01
15 בינואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.2.0
גרסה 1.2.1
9 בינואר 2024
- ExoPlayer:
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
LiveConfiguration.min/maxOffsetממשיכים לשנות את ההיסט בחזרה ל-min/maxOffset. - תוקנה בעיה שבה פריסות הערוצים של OPUS ו-VORBIS היו שגויות עבור 3, 5, 6, 7 ו-8 ערוצים (#8396).
- נפתרה בעיה שגרמה לכך שכשבוחרים רצועות אחרי מעבר למיקום אפס בשידור חי, השידור מתחיל במיקום ברירת המחדל שלו (#9347).
- הבעיה שבה מופעים חדשים של
CmcdData.Factoryקיבלו ערכים שליליים שלbufferedDurationUsממקורות של נתחי נתונים, וכתוצאה מכך התקבלה שגיאהIllegalArgumentException(מספר 888).
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
- Transformer:
- פתרון לבעיה שבה המקודד היה מקפיץ הודעת שגיאה בזמן ההגדרה בגלל הגדרה של קצב הפעלה גבוה.
- אמצעי חילוץ:
- אודיו:
- תוקן הטיפול ב-EOS עבור
SilenceSkippingAudioProcessorכשמתבצעות כמה קריאות (#712).
- תוקן הטיפול ב-EOS עבור
- סרטון:
- נוספו פתרונות עקיפים לבעיה במכשירים Galaxy Tab S7 FE, Chromecast with Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג ב-AVC בקצב של 60fps כסטרימינג שלא נתמך (#693).
- מטא-נתונים:
- תוקן באג שבו
MediaMetadataאוכלס רק מתגובות Vorbis עם מפתחות באותיות רישיות (#876). - הבאג הזה מתרחש
OutOfMemoryErrorכשמנתחים פריימים גדולים מאוד של ID3, כלומר ההפעלה יכולה להימשך בלי פרטי התג במקום להיכשל לחלוטין.
- תוקן באג שבו
- DRM:
- הארכנו את הפתרון לעקיפת הבעיה של כתובת URL שגויה של רישיון ClearKey
https://default.urlל-API 33 ומעלה (בעבר הפתרון לעקיפת הבעיה חל רק על API 33 בדיוק) (#837). - תיקון
ERROR_DRM_SESSION_NOT_OPENEDכשעוברים מתוכן מוצפן לתוכן לא מוצפן בלי שמחובר נגן למשטח. השגיאה נגרמה כתוצאה משימוש לא נכון במפענח מאובטח להפעלת תוכן לא מוצפן.
- הארכנו את הפתרון לעקיפת הבעיה של כתובת URL שגויה של רישיון ClearKey
- סשן:
- מציבים את המפתחות והערכים המותאמים אישית ב-
MediaMetadataCompatעדMediaMetadata.extrasוב-MediaMetadata.extrasעדMediaMetadataCompat(#756, #802). - תיקון שידור
notifyChildrenChangedלבקרים מדור קודם (#644). - תוקן באג שגרם לקריסה במכשירים מסוימים כשניסו להגדיר זמן שלילי לטיימר של
setWhenשהושבת בהתראה (#903). - תוקן באג ב-
IllegalStateExceptionשגורם לכך שבקשת העדכון הראשונה של ההתראה מתקבלת לפני שהחיבור של אמצעי הבקרה של ההתראה על הפעלת מדיה מסתיים (#917).
- מציבים את המפתחות והערכים המותאמים אישית ב-
- UI:
- תוסף DASH:
- ניתוח המחרוזת f800 כספירת ערוצים של 5 עבור Dolby במניפסט DASH (#688).
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- תוסף Cast:
- הוסרה אפשרות ליצור
Timelineכדי למנוע קריסה של האפליקציה כשטעינת המדיה נכשלת במכשיר Cast (#708).
- הוסרה אפשרות ליצור
גרסה 1.2.0
15 בנובמבר 2023
- ספרייה משותפת:
- מוסיפים פרמטר
@Nullable Throwableלשיטות בממשקLog.Logger. הפרמטרmessageבשיטות האלה לא מכיל יותר מידע עלThrowableשמועבר לשיטותLog.{d,i,w,e}(), ולכן אם רוצים לכלול את המידע הזה, צריך להוסיף אותו באופן ידני (אפשר להשתמש ב-Logger.appendThrowableString(String, Throwable)). - תוקנה בעיית תאימות של Kotlin שבה פרמטרים של סוג גנרי שניתן להגדיר כ-nullable וסוגים של רכיבי מערך שניתן להגדיר כ-nullable לא מזוהים כ-nullable. דוגמאות: פרמטרים של שיטות
TrackSelectorResultו-SimpleDecoder(מספר 6792). - שינוי התנהגות ברירת המחדל של ממשק המשתמש וההתראות ב-
Util.shouldShowPlayButtonכדי להציג לחצן 'הפעלה' בזמן שההפעלה מושהית באופן זמני (למשל, בגלל אובדן זמני של מיקוד האודיו). אפשר לשמור על ההתנהגות הקודמת באמצעותPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)אוMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - שדרוג
androidx.annotation:annotation-experimentalל-1.3.1כדי לתקן את https://issuetracker.google.com/251172715. - מעבירים את
ExoPlayer.setAudioAttributesלממשקPlayer.
- מוסיפים פרמטר
- ExoPlayer:
- תוקנו בעיות בהזזה בשידורי AC4 שנגרמו בגלל זיהוי לא נכון של דגימות של פענוח בלבד (#11000).
- הוספנו השתקה של ההפעלה במכשירי פלט אודיו לא מתאימים (למשל, הרמקול המובנה במכשירי Wear OS) כשהתכונה הזו מופעלת דרך
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. סיבת ההשבתה של ההפעלה תתעדכן ל-Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTאם תתבצע פעולת הפעלה כשאין פלט אודיו מתאים, או אם כל הפלטים המתאימים ינותקו במהלך ההפעלה. סיבת ההשבתה תוסר כשמחברים פלט מתאים. - מוסיפים את התגים
MediaSource.canUpdateMediaItemו-MediaSource.updateMediaItemכדי לאשר עדכונים שלMediaItemאחרי היצירה דרךPlayer.replaceMediaItem(s). - אפשר לעדכן את כל המחלקות
MediaSourceשסופקו על ידי הספרייהMediaItemבאמצעותPlayer.replaceMediaItem(s)(מס' 33, מס' 9978). - שינוי השם של
MimeTypes.TEXT_EXOPLAYER_CUESלMimeTypes.APPLICATION_MEDIA3_CUES. - מוסיפים
PngExtractorששולח וקורא קובץ PNG שלם לתוךTrackOutputכדוגמה אחת. - שיפור של method
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). - הוספה של שדות נוספים לרישום ביומן של נתוני Common Media Client Data (CMCD): buffer starvation (
bs), deadline (dl), מהירות ההפעלה (pr) ו-startup (su) (#8699). - הוספת עומק סיביות של בהירות ושל צבע ל-
ColorInfo(#491). - הוספת שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (CMCD): בקשת האובייקט הבא (
nor) ובקשת הטווח הבאה (nrr) (מספר 8699). - הוספת פונקציונליות להעברת נתונים של Common Media Client Data (CMCD) באמצעות פרמטרים של שאילתות (#553).
- תיקון
ConcurrentModificationExceptionב-ExperimentalBandwidthMeter(#612). - מוסיפים את הפרמטר
MediaPeriodIdאלCompositeMediaSource.getMediaTimeForChildMediaTime. - תמיכה ב-
ClippingMediaSource(ובמקורות אחרים עם היסטים של תקופות/חלונות זמן) ב-ConcatenatingMediaSource2(#11226). - משנים את
BaseRenderer.onStreamChanged()כך שיקבל גם ארגומנטMediaPeriodId.
- Transformer:
- ניתוח נתוני סיבוב של EXIF עבור קלט של תמונות.
- מסירים את סוג ההערה
TransformationRequest.HdrModeואת הקבועים המשויכים אליו. במקום זאת, צריך להשתמש ב-Composition.HdrModeובקבועים שמשויכים אליו. - כדי לפתור בעיות שקשורות לסיבוב, צריך לפשט את
OverlaySettings. - הפרמטרים
frameRateו-durationUsשלSampleConsumer.queueInputBitmapהשתנו ל-TimestampIterator.
- בחירת טראק:
- מוסיפים
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessכדי לאפשר או לא לאפשר באופן מפורש התאמה לא חלקה. ברירת המחדל נשארת כפי שהיא כרגע,true.
- מוסיפים
- אמצעי חילוץ:
- MPEG-TS: כדי לוודא שהפריים האחרון עובר רינדור, צריך להעביר את יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909).
- תיקון שגיאת הקלדה בקביעת
rotationDegrees. השתנהprojectionPosePitchל-projectionPoseRoll(#461). - הסרת ההנחה שאפשר לבדוק ישירות מופעים של
Extractorבאמצעותinstanceof. אם רוצים גישה בזמן ריצה לפרטי ההטמעה שלExtractor, צריך קודם להתקשר אלExtractor.getUnderlyingInstance. - מוסיפים את
BmpExtractor. - מוסיפים את
WebpExtractor. - מוסיפים את
HeifExtractor. - הוספת תמיכה ב-QuickTime classic ל-
Mp4Extractor.
- אודיו:
- הוספנו תמיכה ב-PCM בפורמט big-endian (24/32 ביט) ב-MP4 וב-Matroska, וניתוח של קידוד PCM עבור
lpcmב-MP4. - הוספת תמיכה בחילוץ אודיו בפורמט Vorbis ב-MP4.
- הוספת
AudioSink.getFormatOffloadSupport(Format)שמחלץ את רמת התמיכה בהפחתת עומס שהיעד יכול לספק לפורמט באמצעותDefaultAudioOffloadSupportProvider. הפונקציה מחזירה אתAudioOffloadSupportהחדש שמכיל אתisFormatSupported,isGaplessSupportedו-isSpeedChangeSupported. - מוסיפים את
AudioSink.setOffloadMode()שדרכו מוגדרת ההגדרה של העברת העומס למעבד ב-audio sink. ברירת המחדל היאAudioSink.OFFLOAD_MODE_DISABLED. - אפשר להפעיל את הפחתת העומס דרך
setAudioOffloadPreferenceבTrackSelectionParameters. אם ההעדפה שנקבעה היא הפעלה, המכשיר תומך בהפחתת עומס עבור הפורמט, ובחירת הרצועה היא טראק אודיו יחיד, אז הפחתת עומס האודיו תופעל. - אם
audioOffloadModePreferenceמוגדר ל-AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, אזDefaultTrackSelectorיבחר רק טראק אודיו, ורק אם הפורמט של הטראק הזה נתמך בהפחתת עומס. אם אין תמיכה בטראק אודיו בהפחתת עומס, לא ייבחר טראק. - השבתת התמיכה בהעברה ללא הפסקה כשמשתמשים בגרסאות שקודמות לרמת API 33, בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
- הסרת הפרמטר
enableOffloadמחתימת השיטהDefaultRenderersFactory.buildAudioSink. - הסרת אמצעי התשלום
DefaultAudioSink.Builder.setOffloadMode. - הסרת הערך intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - הוספנו תמיכה במטא-נתונים של Opus gapless במהלך הפעלת offload.
- אפשרות לשחזור של רכיב ה-Renderer על ידי השבתת ההעברה אם היא נכשלה בכתיבה הראשונה (#627).
- הפעלת תזמון העברת נתונים כברירת מחדל להפעלת אודיו בלבד בהעברת נתונים.
- מוחקים את
ExoPlayer.experimentalSetOffloadSchedulingEnabledואתAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - השם של
onExperimentalSleepingForOffloadChangedשונה ל-onSleepingForOffloadChangedושלonExperimentalOffloadedPlaybackל-onOffloadedPlayback. - העברת ממשקי
TrackSelectionParametersוהגדרות שקשורים למצב העברת אודיו ל-offload אל מחלקה פנימיתAudioOffloadPreferences. - הוספת קריאות חוזרות (callback) של
onAudioTrackInitializedושלonAudioTrackReleasedאלAnalyticsListener, אלAudioRendererEventListenerואלAudioSink.Listener. - תיקון בעיה של חוסר נתונים בזיכרון המטמון של אודיו ב-DTS Express (#650).
- תוקן באג שבו בדיקת היכולות של E-AC3-JOC מחזירה את השגיאה
IllegalArgumentException(#677).
- הוספנו תמיכה ב-PCM בפורמט big-endian (24/32 ביט) ב-MP4 וב-Matroska, וניתוח של קידוד PCM עבור
- סרטון:
- מתן הרשאה ל-
MediaCodecVideoRendererלהשתמש ב-VideoFrameProcessor.Factoryמותאם אישית. - תוקן באג שגרם לכך שלא היתה אפשרות לעבד את הפריימים הראשונים אם שידור האודיו התחיל עם חותמות זמן שליליות (#291).
- מתן הרשאה ל-
- טקסט:
- הסרה של
ExoplayerCuesDecoder. טראקים של טקסט עםsampleMimeType = application/x-media3-cuesמטופלים עכשיו ישירות על ידיTextRendererבלי צורך במופעSubtitleDecoder.
- הסרה של
- מטא-נתונים:
MetadataDecoder.decodeלא יופעל יותר עבור דוגמאות של 'פענוח בלבד' כי ההטמעה ממילא צריכה להחזיר ערך null.
- אפקט:
- הוספה של
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)queuing bitmap input by timestamp. - משנים את
VideoFrameProcessor.registerInputStream()כך שלא יחסום. באפליקציות צריך להטמיע אתVideoFrameProcessor.Listener#onInputStreamRegistered(). - הפרמטרים
frameRateו-durationUsשלVideoFrameProcessor.queueInputBitmapהשתנו ל-TimestampIterator.
- הוספה של
- תוסף IMA:
- תוקנה באג שבו שידור חי בפורמט DASH עם כמה תקופות שלא מופיע כפריט הראשון בפלייליסט יכול להחזיר חריגה (#571).
- צריך להפעיל את StreamManager לפני שמתקשרים אל
AdsLoader.destroy() - העלאה של גרסת IMA SDK ל-3.31.0.
- סשן:
- מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך
FOREGROUND_SERVICE_IMMEDIATEב-DefaultMediaNotificationProvider(מספר 167). - כדי להימנע מבעיות ב-API שהוצא משימוש במכשירי Samsung, צריך להשתמש רק ב-
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()מעל API 31 (#167). - אפשר להשתמש בבקר ההתראות על מדיה כשרת proxy כדי להגדיר פקודות זמינות ופריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
- המרת אירועים של לחצני מדיה שמתקבלים על ידי
MediaSessionService.onStartCommand()בתוך Media3 במקום לנתב אותם לסשן בפלטפורמה ובחזרה ל-Media3. כך, בקר השיחה הוא תמיד בקר ההתראות על מדיה, ואפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות. - תוקן באג שגרם לכך ש-
MediaController.getCurrentPosition()לא התקדם כשחיברו אותו ל-MediaSessionCompatמדור קודם. - מוסיפים את
MediaLibrarySession.getSubscribedControllers(mediaId)לנוחות. - מחליפים את
MediaLibrarySession.Callback.onSubscribe()כדי להצהיר על הזמינות של מזהה ההורה שאליו הבקר רשום. אם הפעולה מצליחה, המינוי מתקבל והפונקציהnotifyChildrenChanged()מופעלת באופן מיידי כדי לעדכן את הדפדפן (מספר 561). - הוספת מודול הדגמה של סשן ל-Automotive OS והפעלת הדגמה של סשן ל-Android Auto.
- אל תגדירו את התור של סשן המסגרת אם
COMMAND_GET_TIMELINEלא זמין לבקר של התראת המדיה. כש-Android Auto משמש כבקר לקוח שקורא מהסשן של המסגרת, התוצאה היא שכפתורqueueבממשק המשתמש של Android Auto לא מוצג (#339). - שימוש ב-
DataSourceBitmapLoaderכברירת מחדל במקום ב-SimpleBitmapLoader(מס' 271, מס' 327). - הוספה של
MediaSession.Callback.onMediaButtonEvent(Intent)שמאפשר לאפליקציות לבטל את הטיפול באירועים של לחצני מדיה שמוגדר כברירת מחדל.
- מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך
- UI:
- הוספנו הטמעה של
Player.Listenerלמכשירי Wear OS שמטפלת בהשבתת ההפעלה בגללPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTעל ידי הפעלת תיבת דו-שיח במערכת שמאפשרת למשתמש לחבר פלט שמע מתאים (למשל אוזניות Bluetooth). ההשמעה של המאזין תתחדש אוטומטית אם מכשיר מתאים יתחבר תוך פסק זמן שניתן להגדרה (ברירת המחדל היא 5 דקות).
- הוספנו הטמעה של
- הורדות:
- הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור
DownloadServiceלצורך תאימות ל-Android 14. במהלך השימוש בשירות הזה, האפליקציה צריכה גם להוסיף אתdataSyncכ-foregroundServiceTypeבמניפסט ולהוסיף את ההרשאהFOREGROUND_SERVICE_DATA_SYNC(#11239).
- הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור
- תוסף HLS:
- רענון של פלייליסט HLS לשידור חי במרווח זמן שמחושב לפי שעת ההתחלה של הטעינה האחרונה ולא לפי שעת הסיום של הטעינה האחרונה (מס' 663).
- תוסף DASH:
- אפשר להשתמש בכמה מזהים זהים של DASH בכתובת URL של תבנית פלח.
- הוספנו תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. השיפור הזה כולל תמיכה טובה יותר במיזוג של כתוביות חופפות, כולל פתרון של הבהובים במעבר בין מקטעי כתוביות. אפשר להפעיל את ההגדרה הזו באמצעות
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(מספר 288).
- תוסף RTSP:
- תיקון מרוץ תהליכים שעלול לגרום ל-
IndexOutOfBoundsExceptionכשמתבצעת חזרה ל-TCP, או להשהיית ההפעלה במצבים מסוימים. - בדיקת המצב בהגדרת RTSP כשמחזירים את מצב הטעינה של
RtspMediaPeriod(#577). - המערכת מתעלמת משיטות מותאמות אישית של בקשות Rtsp בכותרת הציבורית של תגובת האפשרויות (#613).
- שימוש בערך הזמן הקצוב לתגובה של RTSP Setup במרווח הזמן של שליחת בקשות RTSP Options של הודעת keep-alive (#662).
- תיקון מרוץ תהליכים שעלול לגרום ל-
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- שחרור מודול מפענח MIDI, שמספק תמיכה בהשמעה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסינתוז אודיו.
- מוסיפים
DecoderOutputBuffer.shouldBeSkippedכדי לסמן ישירות מאגרי פלט שלא צריך להציג. האפשרות הזו עדיפה עלC.BUFFER_FLAG_DECODE_ONLY, שתוצא משימוש. - מוסיפים את
Decoder.setOutputStartTimeUsואתSimpleDecoder.isAtLeastOutputStartTimeUsכדי לאפשר למפענחים להשמיט דוגמאות של פענוח בלבד לפני שעת ההתחלה. השיטה הזו מועדפת על פניBuffer.isDecodeOnly, שתוצא משימוש. - תוקן באג שגרם לבעיה בפרסום ארטיפקט של פענוח MIDI במאגר Maven. שם הארטיפקט שונה ל-
media3-exoplayer-midi(מס' 734).
- תוסף Leanback:
- תוקן באג שבו השבתה של משטח עלולה לגרום לשגיאה
ArithmeticExceptionבקוד Leanback (מס' 617).
- תוקן באג שבו השבתה של משטח עלולה לגרום לשגיאה
- כלי בדיקה:
- להפוך את
TestExoPlayerBuilderו-FakeClockלתואמים לבדיקות ממשק משתמש של Espresso ולבדיקות ממשק משתמש של Compose. התיקון הזה פותר באג שגורם להתקדמות ההפעלה באופן לא דטרמיניסטי במהלך אינטראקציות עם תצוגת Espresso או Compose.
- להפוך את
- הסרת סמלים שהוצאו משימוש:
- הסרה של
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)ושלTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). במקום זאת, צריך להשתמש ב-Composition.Builder.setHdrMode(int)ולהעביר אתCompositionאלTransformer.start(Composition, String). - הסרת השיטה
DownloadNotificationHelper.buildProgressNotificationשהיא הוצאה משימוש. במקומה, צריך להשתמש בשיטה שלא הוצאה משימוש שמקבלת פרמטרnotMetRequirements.
- הסרה של
גרסה 1.2.0-rc01
1 בנובמבר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-beta01
19 באוקטובר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-alpha02
29 בספטמבר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-alpha01
17 באוגוסט 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.1.0
גרסה 1.1.1
16 באוגוסט 2023
- ספרייה משותפת:
- הסרה של תלות
multidexשנוספה בטעות מכל המודולים (#499).
- הסרה של תלות
- ExoPlayer:
- תיקון בעיה ב-
PlaybackStatsListenerשבה נוצרים ערכים פיקטיביים שלPlaybackStatsאחרי שהפלייליסט נמחק. - הוספת שדות נוספים לרישום ביומן של נתוני Common Media Client Data (CMCD): פורמט סטרימינג (sf), סוג סטרימינג (st), גרסה (v), קצב העברת נתונים עליון (tb), משך האובייקט (d), קצב העברת נתונים שנמדד (mtp) וסוג האובייקט (ot) (#8699).
- תיקון בעיה ב-
- אודיו:
- תוקן באג שגרם לכך שהמצב
Player.getState()לא עבר אף פעם למצבSTATE_ENDEDבזמן הפעלת קבצים קצרים מאוד (#538).
- תוקן באג שגרם לכך שהמצב
- הפחתת עומס אודיו:
- מוסיפים לפני ביטסטרים את דפי הכותרת של מזהה Ogg ואת דפי הכותרת של התגובה להפעלת Opus שהועברה בהתאם ל-RFC 7845.
- סרטון:
- H.265/HEVC: תיקון ניתוח של פרטי תמונת עזר לטווח קצר וארוך של SPS.
- טקסט:
- CEA-608: שינוי הלוגיקה של חיתוך רמזים כך שרק טקסט גלוי ייחשב. בעבר, ההזחה וההיסט של תווי ה-Tab נכללו כשמגבילים את אורך הרמז ל-32 תווים (מה שהיה נכון מבחינה טכנית לפי המפרט) (#11019).
- תוסף IMA:
- העלאה של גרסת IMA SDK ל-3.30.3.
- סשן:
- מוסיפים פריסה בהתאמה אישית למצב של בקר ומספקים getter כדי לגשת אליה. כשהפריסה המותאמת אישית משתנה, מופעלת הפונקציה
MediaController.Listener.onCustomLayoutChanged. אפליקציות שרוצות לשלוח פריסות מותאמות אישית שונות לבקרים שונים של Media3 יכולות לעשות זאת ב-MediaSession.Callback.onConnectבאמצעותAcceptedResultBuilderכדי לוודא שהפריסה המותאמת אישית זמינה לבקר כשהחיבור מסתיים. - תוקנו מקרים שבהם
MediaLibraryServiceLegacyStubשלח שגיאה אלResultשלא תמך בכך, מה שיצרUnsupportedOperationException(מספר 78). - תיקון האופן שבו
PlayerWrapperיוצרVolumeProviderCompatעל ידי קביעתvolumeControlTypeבאמצעות פקודות מדור קודם (COMMAND_ADJUST_DEVICE_VOLUMEו-COMMAND_SET_DEVICE_VOLUME) ופקודות חדשות (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSו-COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- מוסיפים פריסה בהתאמה אישית למצב של בקר ומספקים getter כדי לגשת אליה. כשהפריסה המותאמת אישית משתנה, מופעלת הפונקציה
גרסה 1.1.0
5 ביולי 2023
- ספרייה משותפת:
- Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
- הוספת פקודות ל-Player:
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)כקיצור דרך להוספה ולהסרה של פריטים באותו מיקום (#8046).
- ExoPlayer:
- אפשר לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת. משתמשים ב
ExoPlayer.Builder.setDeviceVolumeControlEnabledכדי לקבל גישה אל:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)וגםsetDeviceVolume(int, int)increaseDeviceVolume(int)וגםincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)וגםdecreaseDeviceVolume(int, int)
- הוספת
FilteringMediaSourceשמאפשרת לסנן את סוגי הטראקים הזמינים מתוךMediaSource. - הוספנו תמיכה בהכללת נתוני לקוח מדיה משותפים (CMCD) בבקשות היוצאות של פורמטים של סטרימינג אדפטיבי DASH, HLS ו-SmoothStreaming. השדות הבאים,
br,bl,cid,rtpוגםsid, שולבו (מספר 8699). מבנה ה-API ושיטות ה-API:- רישום ביומן של CMCD מושבת כברירת מחדל. כדי להפעיל אותו, משתמשים ב-
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory). - כל המקשים מופעלים כברירת מחדל. אפשר להחליף את הערך של
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)כדי לסנן את המקשים שמתועדים. - מחליפים את
CmcdConfiguration.RequestConfig.getCustomData()כדי להפעיל רישום מותאם אישית ביומן.
- רישום ביומן של CMCD מושבת כברירת מחדל. כדי להפעיל אותו, משתמשים ב-
- הוספנו פעולה נוספת למניפסט של ההדגמה הראשית כדי להקל על הפעלת אפליקציית ההדגמה עם קובץ
*.exolist.jsonמותאם אישית (מס' 439). - הוספת
ExoPlayer.setVideoEffects()לשימוש ב-Effectבמהלך הפעלת סרטון. - צריך לעדכן את
SampleQueueכדי לאחסן אתsourceIdכ-longולא כ-int. הפעולה הזו משנה את החתימות של שיטות ציבוריותSampleQueue.sourceIdו-SampleQueue.peekSourceId. - מוסיפים פרמטרים לשיטות
LoadControlshouldStartPlaybackו-onTracksSelectedשמאפשרים לשייך את השיטות האלה לMediaPeriodהרלוונטי. - משנים את החתימה של
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID שמשמשים כמפתחות במפה. הפעולה הזו נדרשת כדי למנוע בעיות של גישה בו-זמנית בשידורים חיים עם כמה תקופות. - הוצאה משימוש של
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)ושלBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). אפשר לקרוא לגרסה של השיטות בליmediaTimeOffsetUs. שימו לב שגם בווריאציות שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUsול-endTimeUsשל אובייקטיםMediaLoadDataשנשלחים על ידי ה-dispatcher. - שינוי השם של
ExoTrackSelection.blacklistל-excludeTrackושלisBlacklistedל-isTrackExcluded. - תיקון התנהגות לא עקבית בין
ExoPlayer.setMediaItem(s)לביןaddMediaItem(s)כשמפעילים אותן בפלייליסט ריק.
- אפשר לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת. משתמשים ב
- Transformer:
- הסרה של
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). במקומה, צריך להשתמש ב-ExoPlayerAssetLoader.Factory(MediaSource.Factory)וב-Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - הסרה של
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - תוקן באג שגרם לכך שהטרנספורמציה נתקעה (מה שהוביל לפסק זמן של muxer ) אם סוף הווידאו בסטרימינג סומן ברגע שפריים קלט המתין לעיבוד.
- כדי להרחיב את התמיכה, אפשר להשתמש ב-
MediaCodecListכדי לשלוח שאילתות לגבי רכיבי codec במקום להשתמש בכלי השירותfindDecoder/EncoderForFormat. - צריך להסיר את ההגדרה של B-frame ב-
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כדי להחיל שינוי גודל או מיקס על ערוצי אודיו. - הוספת ערך int חדש
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEל-DecoderDiscardReasonsכדי לבטל את קידוד האודיו כשמצב מעקף אפשרי אחרי שינוי ביכולות האודיו. - הוספת תמיכה בהפעלה ישירה של DTS Express ו-DTS:X (#335).
- תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל ו
- סרטון:
-
MediaCodecVideoRendererידווח עלVideoSizeעם רוחב וגובה של 0 כשהרכיב לרינדור מושבת. הפונקציהPlayer.Listener.onVideoSizeChangedנקראת בהתאם כשערך המשתנהPlayer.getVideoSize()משתנה. בעקבות השינוי הזה, גודל הווידאו של ExoPlayer עםMediaCodecVideoRendererהוא 0 ברוחב ובגובה אםPlayer.getCurrentTracksלא תומך בווידאו, או אם גודל טראק הווידאו הנתמך עדיין לא נקבע.
-
- DRM:
- צריך לצמצם את הנראות של כמה שיטות פנימיות בלבד ב-
DefaultDrmSessionשלא צפויות להיקרא מחוץ לחבילת ה-DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- צריך לצמצם את הנראות של כמה שיטות פנימיות בלבד ב-
- Muxer:
- הוספה של ספריית muxer חדשה שאפשר להשתמש בה כדי ליצור קובץ מאגר MP4.
- תוסף IMA:
- הפעלת שידורים חיים בפורמט DASH עם כמה תקופות לצורך DAI. שימו לב: ההטמעה הנוכחית עדיין לא תומכת בהרצה קדימה ואחורה בשידורים חיים (#10912).
- תוקנה באג שגרם להוספה של קבוצת מודעות חדשה לשידורים חיים כי מיקום התוכן המחושב בציר זמן רצוף השתנה מעט.
- סשן:
- הוספת שיטת העזרה
MediaSession.getControllerForCurrentRequestכדי לקבל מידע על בקר שקורא כרגע לשיטהPlayer. - מוסיפים את
androidx.media3.session.MediaButtonReceiverכדי לאפשר לאפליקציות להטמיע הפעלה חוזרת באמצעות אירועים של לחצני מדיה שנשלחים, למשל, מאוזניות Bluetooth (#167). - הוספת הטמעת ברירת מחדל ל-
MediaSession.Callback.onAddMediaItemsכדי לאפשר העברה שלMediaItemsשנדרש אלPlayerאם יש להםLocalConfiguration(למשל URI) (#282). - הוספנו כברירת מחדל לחצני פקודה 'מעבר למיקום הקודם' ו'מעבר למיקום הבא' בתצוגה של התראות מדיה קומפקטיות ב-Android מגרסה 12 ומטה (#410).
- הוספת הטמעת ברירת מחדל ל-
MediaSession.Callback.onAddMediaItemsכדי לאפשר העברה שלMediaItemsשנדרשו אלPlayerאם יש להםLocalConfiguration(למשל URI) (#282). - הוספנו כברירת מחדל לחצני פקודה של 'דילוג לקטע הקודם' ו'דילוג לקטע הבא' בתצוגה של התראות מדיה קומפקטיות ב-Android מגרסה 12 ומטה (#410).
- הוספת שיטת העזרה
- UI:
- מוסיפים את השיטות Util
shouldShowPlayButtonו-handlePlayPauseButtonActionכדי לכתוב רכיבי ממשק משתמש מותאמים אישית עם לחצן הפעלה/השהיה.
- מוסיפים את השיטות Util
- תוסף RTSP:
- תוסף DASH:
- מסירים את ההיסט של הזמן של המדיה מהתגים
MediaLoadData.startTimeMsו-MediaLoadData.endTimeMsעבור זרמי DASH עם כמה תקופות. - תוקן באג שגרם לכך שהכנה מחדש של מקור מדיה בשידור חי בפורמט Dash עם כמה תקופות יצרה
IndexOutOfBoundsException(#10838).
- מסירים את ההיסט של הזמן של המדיה מהתגים
- תוסף HLS:
- Add
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)כדי להגדיר זמן קצוב לתפוגה לטעינת השרשור להמתנה לאתחול שלTimestampAdjuster. אם האתחול לא מסתיים לפני תום הזמן הקצוב לתפוגה, מוצגPlaybackExceptionכדי למנוע מצב של הפעלה תקועה ללא סוף. ערך ברירת המחדל של הזמן הקצוב לתפוגה הוא אפס (#323).
- Add
- כלי בדיקה:
- בודקים אם סכמת ה-URI לא תלויה באותיות רישיות ב-
DataSourceContractTest.
- בודקים אם סכמת ה-URI לא תלויה באותיות רישיות ב-
- הסרת סמלים שהוצאו משימוש:
- מסירים את ה-
DefaultAudioSinkconstructors ומשתמשים ב-DefaultAudioSink.Builderבמקום. - מסירים את
HlsMasterPlaylistומשתמשים ב-HlsMultivariantPlaylistבמקומה. - הסרה של
Player.stop(boolean). במקומה, צריך להשתמש ב-Player.stop()וב-Player.clearMediaItems()(אםresetהואtrue). - כדי לשפר את הביצועים, מסירים שני constructors של
SimpleCacheשיצאו משימוש ומשתמשים ב-constructor שלא יצא משימוש שמקבלDatabaseProviderבמקום זאת. - מסירים את הבונה
DefaultBandwidthMeterומשתמשים ב-DefaultBandwidthMeter.Builderבמקומו. - מסירים את ה-constructors של
DefaultDrmSessionManagerומשתמשים ב-DefaultDrmSessionManager.Builderבמקום זאת. - הסרנו שני קונסטרוקטורים שיצאו משימוש
HttpDataSource.InvalidResponseCodeExceptionוהשתמשנו בקונסטרוקטור שלא יצא משימוש שמקבל שדות נוספים(cause,responseBody) כדי לשפר את רישום השגיאות. - הסרה של
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashו-DownloadHelper.forSmoothStreaming, שימוש ב-DownloadHelper.forMediaItemבמקום. - מסירים את ה-constructor
DownloadServiceשהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטרchannelDescriptionResourceId. - הסרה של קבועי מחרוזות שהוצאו משימוש עבור ערכות תווים (
ASCII_NAME,UTF8_NAME, ISO88591_NAME, UTF16_NAMEו-UTF16LE_NAME), שימוש בערכות תווים של Kotlin מהחבילהkotlin.text, ב-java.nio.charset.StandardCharsetsאו ב-com.google.common.base.Charsetsבמקום זאת. - מסירים את ה-constructor
WorkManagerSchedulerשהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטרContextבמקום זאת. - הוסרו השיטות שהוצאו משימוש
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatו-createSampleFormat, ששימשו ליצירת מופע של המחלקהFormat. במקום זאת, משתמשים ב-Format.Builderכדי ליצור מופעים שלFormat. - מסירים את השיטות שהוצאו משימוש:
copyWithMaxInputSize,copyWithSubsampleOffsetUs, copyWithLabel,copyWithManifestFormatInfo, copyWithGaplessInfo,copyWithFrameRate, copyWithDrmInitData, copyWithMetadata,copyWithBitrateו-copyWithVideoSize, ומשתמשים במקומן ב-Format.buildUpon()ובשיטות setter. - מסירים את
ExoPlayer.retry()שהוצא משימוש ומשתמשים ב-prepare()במקומו. - הוסר בנאי
DefaultTrackSelectorעם אפס ארגומנטים שהוצא משימוש. במקומו צריך להשתמש ב-DefaultTrackSelector(Context). - מסירים את הבונה
OfflineLicenseHelperשהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)במקומו. - מסירים את ה-constructor
DownloadManagerשהוצא משימוש ומשתמשים ב-constructor שמקבלExecutorבמקום זאת. - מסירים את ה-constructors
Cueשהוצאו משימוש ומשתמשים ב-Cue.Builderבמקומם. - מסירים את הבונה
OfflineLicenseHelperשהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)במקומו. - הסרה של ארבע שיטות
AnalyticsListenerשיצאו משימוש:onDecoderEnabled, אפשר להשתמש ב-onAudioEnabledו/או ב-onVideoEnabledבמקום זאת.onDecoderInitialized, במקומה יש להשתמש ב-onAudioDecoderInitializedו/או ב-onVideoDecoderInitialized.onDecoderInputFormatChanged, אפשר להשתמש במקום זאת ב-onAudioInputFormatChangedו/או ב-onVideoInputFormatChanged.onDecoderDisabled, אפשר להשתמש ב-onAudioDisabledו/או ב-onVideoDisabledבמקום זאת.
- מסירים את
Player.Listener.onSeekProcessedו-AnalyticsListener.onSeekProcessedשהוצאו משימוש, ומשתמשים ב-onPositionDiscontinuityעםDISCONTINUITY_REASON_SEEKבמקום זאת. - מסירים את
ExoPlayer.setHandleWakeLock(boolean)ומשתמשים ב-setWakeMode(int)במקומה. - צריך להסיר את
DefaultLoadControl.Builder.createDefaultLoadControl()שהוצא משימוש ולהשתמש ב-build()במקום זאת. - צריך להסיר את
MediaItem.PlaybackPropertiesשהוצא משימוש ולהשתמש ב-MediaItem.LocalConfigurationבמקום זאת. השדה שיצא משימושMediaItem.playbackPropertiesהוא עכשיו מסוגMediaItem.LocalConfiguration.
- מסירים את ה-
גרסה 1.1.0-rc01
21 ביוני 2023
משתמשים בגרסה יציבה 1.1.0.
גרסה 1.1.0-beta01
7 ביוני 2023
משתמשים בגרסה יציבה 1.1.0.
גרסה 1.1.0-alpha01
10 במאי 2023
משתמשים בגרסה יציבה 1.1.0.
גרסה 1.0.0
גרסה 1.0.2
18 במאי 2023
androidx.media3:media3-*:1.0.2 מופץ. גרסה 1.0.2 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.7 של ExoPlayer.
הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.0.1:
- ספריית ליבה:
- מוסיפים את התג
Buffer.isLastSample()שמציין אם התגBufferמכיל את הדגלC.BUFFER_FLAG_LAST_SAMPLE. - תוקנה הבעיה שבה יכול להיות שהפריים האחרון לא יעבור רינדור אם הדגימה האחרונה עם frames מוצאת מהתור בלי לקרוא את הדגימה 'סוף הזרם'. (#11079).
- מוסיפים את התג
- אמצעי חילוץ:
- תוקן ניתוח של H.265 SPS בקובצי MPEG-TS על ידי שימוש חוזר בלוגיקת הניתוח שכבר נמצאת בשימוש בכלי החילוץ של RTSP ו-MP4 (#303).
- טקסט:
- SSA: נוספה תמיכה בקובצי UTF-16 אם הם מתחילים בסימן סדר בתים (#319).
- סשן:
- תוקנה בעיה שגרמה לכך ש-
MediaControllerלא עדכן את הפקודות הזמינות שלו כשחיבור נוצר ל-MediaSessionCompatמדור קודם שעדכן את הפעולות שלו. - תוקן באג שמנע מ-
MediaLibraryServiceלהחזיר null עבור קריאה מ-ממשק המשתמש של המערכת אלCallback.onGetLibraryRootעםparams.isRecent == trueב-API 30 (#355). - תיקון דליפת זיכרון של
MediaSessionServiceאוMediaLibraryService(#346). - תוקן באג שבו עדכון משולב של
Timelineומיקום ב-MediaSessionעלול לגרום ל-MediaControllerלהקפיץ הודעת שגיאה (throw)IllegalStateException.
- תוקנה בעיה שגרמה לכך ש-
גרסה 1.0.1
18 באפריל 2023
androidx.media3:media3-*:1.0.1 מופץ. גרסה 1.0.1 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.6 של ExoPlayer.
- ספריית ליבה:
- איפוס של שינוי ברירת המחדל של השידור החי כשמבצעים חיפוש למיקום ברירת המחדל (#11051).
- תוקן באג שבו זרמי דגימות ריקים במדיה עלולים לגרום להפעלה להיתקע.
- סשן:
- תוקן באג שבו כמה פריטים זהים בתור שפורסמו על ידי
MediaSessionCompatמדור קודם גרמו לחריגה ב-MediaController(#290). - הוספת העברה חסרה של
MediaSession.broadcastCustomCommandאלMediaControllerCompat.Callback.onSessionEventמדור קודם (#293). - תוקן באג שבו קריאה לפונקציה
MediaSession.setPlayerלא מעדכנת את הפקודות הזמינות. - תוקנה בעיה שבה מופעים של
TrackSelectionOverrideשנשלחו מ-MediaControllerנדחים אם הם מפנים לקבוצה עםFormat.metadata(#296). - פתרון בעיה שבה
Player.COMMAND_GET_CURRENT_MEDIA_ITEMצריך להיות זמין כדי לגשת למטא-נתונים דרךMediaSessionCompatמהדור הקודם. - תוקנה בעיה שבה מופעים של
MediaSessionבשרשור ברקע גורמים לקריסות כשמשתמשים בהם ב-MediaSessionService(#318). - תוקנה בעיה שבה ספרייה הכריזה על מקלט של לחצן מדיה בלי שהאפליקציה התכוונה לכך (#314).
- תוקן באג שבו כמה פריטים זהים בתור שפורסמו על ידי
- DASH:
- תוקן הטיפול בציר זמן של קטע ריק (#11014).
- RTSP:
- אם הגדרת RTSP עם UDP נכשלת עם שגיאת RTSP מספר 461 UnsupportedTransport (#11069), צריך לנסות שוב עם TCP.
גרסה 1.0.0
22 במרץ 2023
androidx.media3:media3-*:1.0.0 מופץ. גרסה 1.0.0 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.5.
לא בוצעו שינויים מאז גרסה 1.0.0-rc02.
גרסה 1.0.0-rc02
2 במרץ 2023
androidx.media3:media3-*:1.0.0-rc02 מופץ. גרסה 1.0.0-rc02 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.4.
- ספריית ליבה:
- הורדות:
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
SegmentDownloaderובמחלקות משנה (#248).
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
- אודיו:
- סרטון:
- מיפוי של פורמט HEVC HDR10 אל
HEVCProfileMain10HDR10במקום אלHEVCProfileMain10. - נוספה דרך לעקיפת בעיה במכשיר Chromecast with Google TV וב-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג של AVC ב-60fps כלא נתמך (#10898).
- תיקון בעיות בביצועים של שחרור פריימים בהפעלת מדיה עם קצב פריימים גבוה בהרבה מקצב הרענון של המסך.
- מיפוי של פורמט HEVC HDR10 אל
- הפעלת Cast:
- תוקנה בעיה זמנית של
STATE_IDLEבמעבר בין פריטי מדיה (#245).
- תוקנה בעיה זמנית של
- RTSP:
- תיקון של IllegalArgumentException שמופיע בניתוח של הודעות תגובה לא תקינות של RTSP Describe (#10971).
- סשן:
- תוקן באג שבו לחצן ההפעלה/ההשהיה של ההתראה לא מתעדכן בהתאם למצב הנגן (#192).
- תוסף IMA:
- תוקן באג שמנע הפעלה של סטרימינג של DAI ללא מודעות, כי לא התקבל אירוע
LOADEDהראשון (ובמקרה של סטרימינג ללא מודעות, האירוע היחיד).
- תוקן באג שמנע הפעלה של סטרימינג של DAI ללא מודעות, כי לא התקבל אירוע
גרסה 1.0.0-rc01
16 בפברואר 2023
androidx.media3:media3-*:1.0.0-rc01 מופץ. גרסה 1.0.0-rc01 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.3.
- ספריית ליבה:
- שינוי הלוגיקה של סדר הפענוח של רכיב הרינדור כדי לשמור על ההעדפות של
MediaCodecSelector, גם אם רכיב פענוח מדווח שהוא לא יוכל להפעיל את המדיה בצורה יעילה. לדוגמה, עם ברירת המחדל של בורר, מקודד חומרה עם תמיכה פונקציונלית בלבד יועדף על פני מקודד תוכנה שתומך באופן מלא בפורמט (#10604). - מוסיפים את
ExoPlayer.Builder.setPlaybackLooperשמגדיר שרשור הפעלה קיים מראש למופע חדש של ExoPlayer. - אפשר לנקות את העוזרים של מנהל ההורדות (#10776).
- הוספת פרמטר ל-
BasePlayer.seekToכדי לציין גם את הפקודה שמשמשת לחיפוש. - שימוש בעיצוב כשמעלים drawables ב-API 21 ומעלה (#220).
- הוספנו
ConcatenatingMediaSource2שמאפשרת לשלב כמה פריטי מדיה בחלון אחד (מס' 247).
- שינוי הלוגיקה של סדר הפענוח של רכיב הרינדור כדי לשמור על ההעדפות של
- אמצעי חילוץ:
- מחריגים
ParserExceptionבמקוםNullPointerExceptionאם חסר תיאור מדגם נדרש (stsd) בטבלת המדגם (stbl) כשמנתחים אטומי trak. - דילוג נכון על דוגמאות כשמבצעים חיפוש ישירות לפריים של סנכרון ב-fMP4 (#10941).
- מחריגים
- אודיו:
- משתמשים בקצב העברת הנתונים בפורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי עבור
AudioTrackבהשמעות ישירות (passthrough).
- משתמשים בקצב העברת הנתונים בפורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי עבור
- טקסט:
- צריך לתקן את
TextRendererעל ידי העברת אינדקס לא תקין (שלילי) אלSubtitle.getEventTimeאם קובץ הכתוביות לא מכיל רמזים. - SubRip: הוספנו תמיכה בקובצי UTF-16 אם הם מתחילים בסימן של סדר בתים (byte order) .
- צריך לתקן את
- מטא-נתונים:
- ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
- מוסיפים את הערך
MediaMetadata.mediaTypeכדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsableכתחליף ל-MediaMetadata.folderType. סוג התיקייה הזה יוצא משימוש בגרסה הבאה.
- DASH:
- הוספת ניתוח מלא של קבוצות להתאמת תמונות, כולל מספר המשבצות (#3752).
- UI:
- סשן:
- הוספת מחלקה מופשטת
SimpleBasePlayerכדי לעזור בהטמעה של הממשקPlayerעבור נגנים בהתאמה אישית. - הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3
SessionToken(#171). - משתמשים ב-
onMediaMetadataChangedכדי להפעיל עדכונים של סשן המדיה בפלטפורמה (מס' 219). - הוספת סשן המדיה כארגומנט של
getMediaButtons()שלDefaultMediaNotificationProviderושימוש ברשימות שלא ניתן לשנות לשם הבהרה (#216). - הוספת
onSetMediaItemscallback listener כדי לספק אמצעים לשינוי/הגדרה שלMediaItemרשימה, אינדקס התחלתי ומיקום לפי סשן לפני ההגדרה ב-Player (#156). - הימנעות מזיהוי הקשה כפולה לאירועים של לחצני מדיה שאינם Bluetooth (#233).
- שיפור של
QueueTimelineבמקרה של מצב סשן מפוקפק מדור קודם (#241).
- הוספת מחלקה מופשטת
- מטא-נתונים:
- ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
- מוסיפים את הערך
MediaMetadata.mediaTypeכדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsableכתחליף ל-MediaMetadata.folderType. סוג התיקייה הזה יוצא משימוש בגרסה הבאה.
- תוסף Cast:
- העלאת גרסת Cast SDK ל-21.2.0.
- תוסף IMA:
- כדי למנוע בעיות שקשורות לשרשור, צריך להסיר את מאזין הנגן של
ImaServerSideAdInsertionMediaSourceבשרשור האפליקציה. - מוסיפים מאפיין
focusSkipButtonWhenAvailableל-ImaServerSideAdInsertionMediaSource.AdsLoader.Builderכדי לבקש להדגיש את לחצן הדילוג במכשירי טלוויזיה, ומגדירים אותו כ-true כברירת מחדל. - מוסיפים שיטה
focusSkipButton()ל-ImaServerSideAdInsertionMediaSource.AdsLoaderכדי לבקש באופן פרוגרמטי להתמקד בלחצן הדילוג. - העלאת גרסת IMA SDK ל-3.29.0.
- כדי למנוע בעיות שקשורות לשרשור, צריך להסיר את מאזין הנגן של
- אפליקציית הדגמה:
- בקשת הרשאה לשליחת התראות לגבי התראות על הורדות בזמן ריצה (#10884).
גרסה 1.0.0-beta03
22 בנובמבר 2022
androidx.media3:media3-*:1.0.0-beta03 מופץ. גרסה 1.0.0-beta03
מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.2 של ExoPlayer.
- ספריית ליבה:
- הוספנו את
ExoPlayer.isTunnelingEnabledכדי לבדוק אם מנהור מופעל עבור הרצועות שנבחרו כרגע (#2518). - נוספה האפשרות
WrappingMediaSourceכדי לפשט את הגלישה שלMediaSourceאחד (#7279). - המאגר הזמני של הדף הקודם נמחק לפני שההפעלה נתקעת בגלל חוסר בזיכרון.
- סוגרים את הבלוק Tracing doSomeWork כשהעברת העומס מופעלת.
- תיקון בעיה במעקב אחר סשנים עם חיפושים מהירים ב-
PlaybackStatsListener(#180). - שליחת קריאה חוזרת חסרה
onMediaItemTransitionכשמתקשרים אלseekToNextאו אלseekToPreviousבפלייליסט עם פריט אחד (מס' 10667). - מוסיפים את
Player.getSurfaceSizeשמחזיר את הגודל של הפלטפורמה שבה הסרטון מוצג. - תוקן באג שבו הסרה של מאזינים במהלך שחרור הנגן עלולה לגרום ל-
IllegalStateException(#10758).
- הוספנו את
- גרסת Build:
- הגדרת מינימום של
compileSdkVersionכדי למנוע שגיאות קומפילציה (#10684). - הימנעות מפרסום חסימה כשהיא כלולה ב-build אחר של Gradle.
- הגדרת מינימום של
- בחירת טראק:
- עדיף להשתמש בטראקים אחרים במקום ב-Dolby Vision אם התצוגה לא תומכת בפורמט הזה. (#8944).
- הורדות:
- סרטון:
- אם התצוגה לא תומכת ב-Dolby Vision, כדאי לנסות להשתמש במפענח חלופי. (#9794).
- אודיו:
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית (#10057), צריך להשתמש ב-
SingleThreadExecutorכדי לבטל את ההקצאה של מופעיAudioTrack. - מוסיף את
AudioOffloadListener.onExperimentalOffloadedPlaybackלמצב הפחתת העומס של AudioTrack. (#134). - הגדרת
AudioTrackBufferSizeProviderכממשק שגלוי לכולם. - מוסיפים
ExoPlayer.setPreferredAudioDeviceכדי להגדיר את מכשיר פלט האודיו המועדף (#135). - שינוי השם של
androidx.media3.exoplayer.audio.AudioProcessorלandroidx.media3.common.audio.AudioProcessor. - מיפוי של אודיו עם 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל הגרסאות של Android (#10701).
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית (#10057), צריך להשתמש ב-
- מטא-נתונים:
- אפשר להגדיר עכשיו את
MetadataRendererכך שיציג מטא נתונים ברגע שהם זמינים. יוצרים מכונה עםMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)כדי לציין אם הרכיב לעיבוד התוכן יוציא מטא-נתונים מוקדמים או בסנכרון עם מיקום הנגן.
- אפשר להגדיר עכשיו את
- DRM:
- פתרון עקיף לבאג בהטמעה של ClearKey ב-Android 13 שמחזיר כתובת URL של רישיון שהיא לא ריקה אבל לא תקינה.
- פתרון השגיאה
setMediaDrmSession failed: session not openedכשעוברים בין תוכניות DRM בפלייליסט (למשל מ-Widevine ל-ClearKey).
- טקסט:
- CEA-608: מוודאים שהפקודות להחלפת שירות בשדה 2 מטופלות בצורה נכונה (#10666).
- DASH:
- תנתח את
EventStream.presentationTimeOffsetמהמניפסטים (#10460).
- תנתח את
- UI:
- הגדרת ההחלפות הנוכחיות של הנגן כהגדרות קבועות מראש ב-
TrackSelectionDialogBuilder(#10429).
- הגדרת ההחלפות הנוכחיות של הנגן כהגדרות קבועות מראש ב-
- סשן:
- מוודאים שהפקודות תמיד מופעלות בסדר הנכון, גם אם חלקן דורשות פתרון אסינכרוני (#85).
- מוסיפים
DefaultMediaNotificationProvider.Builderכדי ליצור מופעים שלDefaultMediaNotificationProvider. הכלי לבניית התראות יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראות ואת שם ערוץ ההתראות שמשמשים את הספק. בנוסף, מוסיפים את methodDefaultMediaNotificationProvider.setSmallIcon(int)כדי להגדיר את הסמל הקטן של ההתראות. (#104). - מוודאים שהפקודות שנשלחו לפני
MediaController.release()לא נפסלות (מס' 99). -
SimpleBitmapLoaderיכול לטעון מפת סיביות מכתובות URI שלfile://(מס' 108). - תוקנה טענה שמונעת מ-
MediaControllerלדלג על מודעה בתקופה מסוימת (#122). - כשההפעלה מסתיימת,
MediaSessionServiceמופסק מהחזית ומוצגת התראה להפעלה מחדש של פריט המדיה האחרון שהופעל (#112). - אל תפעילו שירות שפועל בחזית עם intent בהמתנה להשהיה (#167).
- הסתרה ידנית של ה 'תג' שמשויך להתראה שנוצרה על ידי
DefaultNotificationProviderב-API 26 וב-API 27 (התג מוסתר באופן אוטומטי ב-API 28 ומעלה) (#131). - תוקן באג שבו חיבור שני של Binder מ-MediaSession מדור קודם ל-MediaController של Media3 גורם ל-IllegalStateExceptions (#49).
- RTSP:
- IMA:
- תוסף FFmpeg:
- נוספו דגלים חדשים שנדרשים לקישור ספריות FFmpeg ל-NDK 23.1.7779620 ומעלה (#9933).
- תוסף AV1:
- עדכון גרסת CMake כדי למנוע בעיות תאימות עם הגרסאות האחרונות של Android Studio (#9933).
- תוסף Cast:
- צריך להטמיע את
getDeviceInfo()כדי לזהות אתCastPlayerכשמפעילים את ההפעלה באמצעותMediaController(#142).
- צריך להטמיע את
- Transformer:
- הוספת טיימר watchdog של muxer כדי לזהות מקרים שבהם יצירת דגימת פלט איטית מדי.
- הסרת סמלים שהוצאו משימוש:
- הסרה של
Transformer.Builder.setOutputMimeType(String). התכונה הזו הוסרה. סוג ה-MIME תמיד יהיה MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.
- הסרה של
גרסה 1.0.0-beta02
21 ביולי 2022
androidx.media3:media3-*:1.0.0-beta02 מופץ. גרסה 1.0.0-beta02
מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.1 של ExoPlayer.
- ספריית ליבה:
- מוודאים ששינוי
ShuffleOrderל-ExoPlayer.setShuffleOrderיוביל לקריאה ל-Player.Listener#onTimelineChangedעםreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889). - במקרה של מדיה פרוגרסיבית, רק טראקים נבחרים נכללים במיקום בזיכרון המטמון (#10361).
- אפשר להשתמש ב-logger מותאם אישית לכל פלט היומן של ExoPlayer (#9752).
- תיקון ההטמעה של
setDataSourceFactoryב-DefaultMediaSourceFactory, שלא פעלה במקרים מסוימים (#116).
- מוודאים ששינוי
- אמצעי חילוץ:
- DASH:
- ניתוח כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
- UI:
- מוודאים ש-TalkBack מכריז על אפשרות המהירות שמופעלת כרגע בתפריט של אמצעי הבקרה להפעלה (#10298).
- RTSP:
- הוספת טיפול בחבילות מקוטעות של VP8 (#110).
- תוסף Leanback:
- האזנה לשינויים ב-
playWhenReadyב-LeanbackAdapter(10420).
- האזנה לשינויים ב-
- הפעלת Cast:
גרסה 1.0.0-beta01
16 ביוני 2022
androidx.media3:media3-*:1.0.0-beta01 מופץ. גרסה 1.0.0-beta01
כוללת את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.0.
- ספריית ליבה:
- הפעלת התמיכה באבחון של פלטפורמת Android דרך
MediaMetricsManager. ExoPlayer יעביר אירועי הפעלה ונתוני ביצועים לפלטפורמה, מה שיעזור לספק מידע על ביצועי המערכת ומידע על תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את שיתוף דפוסי שימוש וביצועים. אפליקציות יכולות לבחור שלא לתרום לאבחון הפלטפורמה עבור ExoPlayer באמצעותExoPlayer.Builder.setUsePlatformDiagnostics(false). - תוקן באג שגורם לאיפוס של רצועות לעיתים קרובות מדי כשמשתמשים ב-
MergingMediaSource, למשל כשמעלים כתוביות באופן צדדי ומשנים את הכתוביות שנבחרו באמצע ההפעלה (מס' 10248). - הפסקנו לזהות את סוג הרשת 5G-NSA ב-API 29 וב-API 30. ההשמעה תתבצע ברשת 4G.
- ללא הרשאה להעברת
nullאלMediaSource.Factory.setDrmSessionManagerProviderואלMediaSource.Factory.setLoadErrorHandlingPolicy. אפשר להעביר באופן מפורש מקרים שלDefaultDrmSessionManagerProviderושלDefaultLoadErrorHandlingPolicyאם נדרש. - מוסיפים את
MediaItem.RequestMetadataכדי לייצג מטא-נתונים שנדרשים להפעלת מדיה כשלא ידוע מהו הערך המדויק שלLocalConfiguration. צריך גם להסיר אתMediaMetadata.mediaUrlכי הוא כלול עכשיו ב-RequestMetadata. - מוסיפים
Player.Command.COMMAND_SET_MEDIA_ITEMכדי לאפשר לשחקנים להגדיר פריט בודד.
- הפעלת התמיכה באבחון של פלטפורמת Android דרך
- בחירת טראק:
- השטחת הכיתה
TrackSelectionOverridesלכיתהTrackSelectionParameters, והעלאת הכיתהTrackSelectionOverrideלרמה העליונה. - שינוי השם של
TracksInfoל-TracksושלTracksInfo.TrackGroupInfoל-Tracks.Group. גם השמות שלPlayer.getCurrentTracksInfoושלPlayer.Listener.onTracksInfoChangedהשתנו ל-Player.getCurrentTracksול-Player.Listener.onTracksChanged. זה כולל את ביטול ההוצאה משימוש של שם השיטהPlayer.Listener.onTracksChanged, אבל עם סוגים שונים של פרמטרים. - צריך לשנות את
DefaultTrackSelector.buildUponParametersואתDefaultTrackSelector.Parameters.buildUponכדי להחזיר אתDefaultTrackSelector.Parameters.Builderבמקום אתDefaultTrackSelector.ParametersBuilderשהוצא משימוש. - הוספה
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesשמופעלת כברירת מחדל. כשההגדרה הזו מופעלת, המערכתDefaultTrackSelectorמעדיפה רצועות אודיו שמספר הערוצים שלהן לא חורג מהיכולות של פלט המכשיר. במכשירים ניידים, המערכתDefaultTrackSelectorתעדיף פורמטים של אודיו סטריאו או מונו על פני פורמטים של אודיו רב-ערוצי, אלא אם הפורמט הרב-ערוצי יכול להיות מרחבי (Android 12L ואילך) או שהוא פורמט של צליל סראונד של Dolby. בנוסף, במכשירים שתומכים בהפרדה מרחבית של אודיו,DefaultTrackSelectorיבדוק אם יש שינויים במאפיינים של Spatializer ויפעיל בחירה של טראק חדש אם יתגלו שינויים כאלה. מכשירים עם מצב ממשק משתמשtelevisionלא נכללים במגבלות האלה, והפורמט עם מספר הערוצים הגבוה ביותר יועדף. כדי להפעיל את התכונה הזו, צריך ליצור את מופעDefaultTrackSelectorעםContext.
- השטחת הכיתה
- סרטון:
- שינוי השם של
DummySurfaceל-PlaceholderSurface. - הוספנו תמיכה ב-AV1 ל-
MediaCodecVideoRenderer.getCodecMaxInputSize.
- שינוי השם של
- אודיו:
- שימוש במפענח אודיו LG AC3 לפרסום סוג MIME לא סטנדרטי.
- כדי למנוע אימות איטי של ART ב-API בגרסה < 21, צריך לשנות את סוג ההחזרה של
AudioAttributes.getAudioAttributesV21()מ-android.media.AudioAttributesלמחלקת wrapper חדשה שלAudioAttributesV21. - שליחת שאילתה לפלטפורמה (API 29 ומעלה) או הנחה של מספר הערוצים של קידוד האודיו להעברת אודיו, כשמספר ערוצי האודיו של הפורמט לא מוגדר. זה קורה בהכנה של HLS ללא חלוקה לחלקים (10204).
- הגדרת
AudioTrackעם מסכת ערוציםAudioFormat.CHANNEL_OUT_7POINT1POINT4אם הפלט של המפענח הוא אודיו PCM עם 12 ערוצים (#10322.
- DRM
- מוודאים שהסשן של DRM מתעדכן תמיד בצורה נכונה כשמבצעים חיפוש מיד אחרי שינוי בפורמט (10274).
- טקסט:
- צריך לשנות את
Player.getCurrentCues()כך שיחזירCueGroupבמקוםList<Cue>. - SSA: תמיכה בהגדרת סגנון
OutlineColourכש-BorderStyle == 3(כלומר,OutlineColourמגדיר את הרקע של רמז הזמן) (#8435). - CEA-708: ניתוח הנתונים לבלוקים של שירותים שונים והתעלמות מבלוקים שלא משויכים למספר השירות שנבחר כרגע.
- הסרה של
RawCcExtractor, שהיה בשימוש רק לטיפול בפורמט כתוביות פנימי של Google.
- צריך לשנות את
- אמצעי חילוץ:
- UI:
- תיקון של העברת אירועים אל
OnClickListeners שהוגדרו ב-PlayerViewבמקרה ש-useController=false(#9605). בנוסף, תוקן הדיווח של אירועים אלOnLongClickListenerבכל הגדרות התצוגה. - תוקנה בעיה שבה רצף של אירועי מגע שיוצאים מגבולות
PlayerViewלפניACTION_UPנחשב בטעות לקליק (#9861). - תיקון בעיית נגישות
PlayerViewשבה הקשה על המסך עשויה להפעיל או להשהות את ההפעלה במקום להסתיר את אמצעי הבקרה (#8627). - שכתב את
TrackSelectionViewואתTrackSelectionDialogBuilderכך שיפעלו עם הממשקPlayerולא עםExoPlayer. כך אפשר להשתמש בתצוגות עם הטמעות אחרות שלPlayer, והתלות במודול ExoPlayer מוסרת ממודול ממשק המשתמש. זהו שינוי שעלול לגרום לבעיות. - לא להציג כתוביות חובה ב
PlayerViewכלי לבחירת כתוביות, ולשמור על כתוביות חובה מתאימות אם נבחרה האפשרות 'ללא' (#9432).
- תיקון של העברת אירועים אל
- DASH:
- ניתוח מספר הערוצים מרכיבי DTS
AudioChannelConfiguration. העדכון הזה מפעיל מחדש את מעבר האודיו לשידורי DTS (#10159). - ללא הרשאה להעברת
nullאלDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. אם נדרש, אפשר להעביר מקרים שלDefaultCompositeSequenceableLoaderFactoryבאופן מפורש.
- ניתוח מספר הערוצים מרכיבי DTS
- HLS:
- חזרה להכנה עם חלוקה לחלקים אם מאפיין ה-CODECS של רשימת ההשמעה לא מכיל את קודק האודיו (#10065).
- ללא הרשאה להעברת
nullאלHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryוגם אלHlsMediaSource.Factory.setPlaylistTrackerFactory. אם צריך, אפשר להעביר באופן מפורש מקרים שלDefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactoryאו הפניה אלDefaultHlsPlaylistTracker.FACTORY.
- סטרימינג חלק:
- ללא הרשאה להעברת
nullאלSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. במקרה הצורך, אפשר להעביר באופן מפורש מופעים שלDefaultCompositeSequenceableLoaderFactory.
- ללא הרשאה להעברת
- RTSP:
- הוספת קורא RTP ל-H263 (#63).
- הוספת קורא RTP ל-MPEG4 (#35).
- הוספת קורא RTP ל-HEVC (#36).
- הוספת קורא RTP ל-AMR. בשלב הזה יש תמיכה רק בזרמי AMR לא משולבים עם ערוץ מונו. אין תמיכה במטען ייעודי (payload) של AMR RTP מורכב. (#46)
- הוספת קורא RTP ל-VP8 (#47).
- הוספת קורא RTP ל-WAV (#56).
- תיקון כותרת אימות בסיסי של 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. - Fix NPE in
MediaControllerImplLegacy(#59). - עדכון פרטי המיקום של הסשן בציר הזמן שינוי(#51).
- תוקנה שגיאת NPE ב-
MediaControllerImplBaseאחרי שחרור הבקר (#74).
- מחליפים את
- הפעלת מודעה / IMA:
- הקטנת קצב הסקר של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, כדי להתאים להמלצות של המועצה לדירוג מדיה (MRC).
- תוסף FFmpeg:
- כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio ייכשל, צריך לעדכן את גרסת CMake ל-
3.21.0+(מס' 9933).
- כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio ייכשל, צריך לעדכן את גרסת 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
14 במרץ 2022
androidx.media3:media3-*:1.0.0-alpha03 מופץ. גרסה 1.0.0-alpha03 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.17.1.
- אודיו:
- תיקון שגיאה בבדיקת יכולות האודיו של Dolby Atmos (E-AC3-JOC) ב-HLS.
- אמצעי חילוץ:
- FMP4: תוקנה בעיה שבה מטא-נתונים של דוגמאות emsg יכלו להיות מופקים בסדר שגוי לסטרימינג שמכיל אטומי emsg v0 ו-v1 (#9996).
- טקסט:
- צריך לתקן את האינטראקציה בין
SingleSampleMediaSource.Factory.setTrackIdלביןMediaItem.SubtitleConfiguration.Builder.setIdכדי לתת עדיפות לשדהSubtitleConfigurationולחזור לערךFactoryאם הוא לא מוגדר (#10016).
- צריך לתקן את האינטראקציה בין
- הפעלת המודעה:
- תיקון של חוסרים באודיו בין תקופות של מודעות בשידורים חיים בפורמט HLS SSAI.
גרסה 1.0.0-alpha02
2 במרץ 2022
androidx.media3:media3-*:1.0.0-alpha02 מופץ. גרסה 1.0.0-alpha02 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.17.0.
- ספריית ליבה:
- מוסיפים שיטה מוגנת
DefaultRenderersFactory.getCodecAdapterFactory()כדי שמחלקות משנה שלDefaultRenderersFactoryשמבטלות אתbuildVideoRenderers()או אתbuildAudioRenderers()יוכלו לגשת לפקטורי (factory) של מתאם קודק ולהעביר אותו למופעים שלMediaCodecRendererשהן יוצרות. - העברת שדות הכותרת ICY
nameו-genreאלMediaMetadata.stationו-MediaMetadata.genreבהתאמה, כדי שהם יגיעו לאפליקציה דרךPlayer.Listener.onMediaMetadataChanged()(#9677). - הסרת מפתחות null מ-
DefaultHttpDataSource#getResponseHeaders. - השהיה וניסיון חוזר אם יצירת מופע של
MediaCodecנכשלת. התיקון הזה נועד לפתור בעיה שמתרחשת בחלק מהמכשירים כשמעבירים משטח מ-codec מאובטח ל-codec אחר (#8696). - מוסיפים את
MediaCodecAdapter.getMetrics()כדי לאפשר למשתמשים לקבל נתוני מדדים מ-MediaCodec. (#9766). - תיקון של פתרון תלות ב-Maven (#8353).
- השבתה של התאמת מהירות אוטומטית לשידורים חיים שאין להם תכונות של השהיה נמוכה או הגדרה של בקשת משתמש להגדרת המהירות (#9329).
- שינוי השם של
DecoderCounters#inputBufferCountל-queuedInputBufferCount. - הגדרת
SimpleExoPlayer.renderersכפרטיים. אפשר לגשת לרכיבי ה-Renderer דרךExoPlayer.getRenderer. - עדכנו חלק מהערכים הקבועים של
AnalyticsListener.EventFlagsכך שיתאימו לערכים ב-Player.EventFlags. - מפצלים את
AnalyticsCollectorלממשק ולהטמעה שמוגדרת כברירת מחדל כדי לאפשר ל-R8 להסיר אותו אם הוא לא נדרש לאפליקציה.
- מוסיפים שיטה מוגנת
- בחירת טראק:
- תמיכה בדגלים של תפקידי וידאו מועדפים בבחירת טראקים (#9402).
- עדכון הלוגיקה של בחירת רצועות וידאו כך שתתחשב בסוגי MIME מועדפים ובסימון תפקידים כשבוחרים כמה רצועות וידאו להתאמה (#9519).
- עדכון הלוגיקה של בחירת טראק אודיו ווידאו כך שייבחרו רק פורמטים לבחירות דינמיות שיש להם את אותה רמה של תמיכה במפענח ובחומרה (#9565).
- עדכון הלוגיקה לבחירת רצועת וידאו כדי להעדיף קודקים יעילים יותר אם כמה קודקים נתמכים על ידי מפענחים ראשיים עם שיפור מהירות באמצעות חומרה (#4835).
- העדפות תוכן אודיו (לדוגמה, טראק האודיו 'ברירת המחדל' או טראק שתואם לשפת המקום במערכת) עדיפות על מגבלות טכניות לבחירת טראק (לדוגמה, סוג MIME מועדף או מספר ערוצים מקסימלי).
- תוקנה בעיה בבחירת טראקים שבה ביטול של קבוצת טראקים אחת לא השבית קבוצות אחרות מאותו סוג (#9675).
- תוקנה בעיה בבחירת רצועות שבה לא מוחל בצורה נכונה שילוב של החלפות של רצועות לא ריקות וריקות (#9649).
- איסור על כפילויות של
TrackGroupבתוךTrackGroupArray.TrackGroupתמיד אפשר להבחין בין על ידי הגדרתidבבונהTrackGroup. הבעיה הזו גרמה לקריסה כשממשיכים את ההפעלה אחרי שהאפליקציה עברה לרקע עם החלפה פעילה של רצועת שמע (#9718). - שינוי הלוגיקה ב-
AdaptiveTrackSelectionכדי לאפשר שיפור באיכות אם רוחב הפס של הרשת מספיק, גם אם הנגינה קרובה מאוד לקצה של השידור החי (#9784).
- סרטון:
- תיקון הלוגיקה של חזרה למפענח הקודם ב-Dolby Vision כדי להשתמש במפענח תואם של H264/H265 אם צריך.
- אודיו:
- תיקון הלוגיקה של חזרה למפענח חלופי עבור Dolby Atmos (E-AC3-JOC) כדי להשתמש במפענח E-AC3 תואם אם צריך.
- שינוי בממשקי ה-API של
AudioCapabilitiesכך שנדרש להעביר במפורשAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESבמקוםnull. - אפשר להתאים אישית את החישוב של שטח האחסון הזמני
AudioTrackעל ידי הוספתAudioTrackBufferSizeProviderל-DefaultAudioSink. (#8891). - מנסים ליצור מחדש את מאגר הנתונים הזמני
AudioTrackאם גודל שטח האחסון הזמני המבוקש גדול מ-1MB. (#9712).
- אמצעי חילוץ:
- טקסט:
- DRM:
- הסרת
playbackLooperמהחשבוןDrmSessionManager.(pre)acquireSession. כשמשתמשים ב-DrmSessionManagerבאפליקציה ב-MediaSourceמותאם אישית, צריך להעביר אתplaybackLooperאלDrmSessionManager.setPlayerבמקום זאת.
- הסרת
- הפעלת מודעה / IMA:
- הוספת תמיכה בהטמעת מודעות דינמיות (DAI) ב-IMA (#8213).
- הוספת שיטה ל-
AdPlaybackStateכדי לאפשר איפוס של קבוצת מודעות כך שאפשר יהיה להפעיל אותה שוב (#9615). - אכיפת מהירות הפעלה של 1.0 במהלך הפעלת מודעות (#9018).
- תוקנה בעיה שבה קבוצת מודעות שלא נטענה גרמה לאיפוס מיידי של ההפעלה (#9929).
- UI:
- DASH:
- מוסיפים את המאפיינים החיוניים והמשלימים שנותחו אל
Representation(#9579). - תמיכה בתפקיד בטראק
forced-subtitle(#9727). - הפסקת ההתייחסות לתפקיד של רצועת
mainכאלC.SELECTION_FLAG_DEFAULT. - תיקון הלוגיקה של החרגת כתובת URL בסיסית במניפסטים שלא מצהירים על מרחב השמות של DVB (#9856).
- תמיכה בכתובות URL יחסיות
MPD.Location(מספר 9939).
- מוסיפים את המאפיינים החיוניים והמשלימים שנותחו אל
- HLS:
- מילוי נכון של
Format.labelלשידורי HLS עם אודיו בלבד (#9608). - כדי לשפר את זמן ההפעלה, מומלץ להשתמש בהכנה ללא חלוקה לחלקים כברירת מחדל. אם העיבודים מחדש מכילים טראקים של כתוביות משולבות שלא הוגדרו בפלייליסט הראשי, צריך להוסיף אותם לפלייליסט הראשי כדי שיהיו זמינים להפעלה, או להשבית את ההכנה ללא חלוקה לחלקים באמצעות
HlsMediaSource.Factory.setAllowChunklessPreparation(false). - תמיכה בחיפוש מדויק של פריימים מרכזיים ב-HLS (#2882).
- מילוי נכון של
- RTSP:
- Transformer:
- הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
TransformationExceptionמשמש עכשיו לתיאור שגיאות שמתרחשות במהלך טרנספורמציה.- מוסיפים
TransformationRequestכדי לציין את אפשרויות הטרנספורמציה. - אפשר לרשום מספר מאזינים.
- תוקנה בעיה שבה הטרנספורמר נתקע כשפלט ה-codec נקרא באופן חלקי.
- תיקון NPE פוטנציאלי ב-
Transformer.getProgressכששחרור ה-muxer גורם לשגיאה. - הוספת אפליקציה לדוגמה להחלת טרנספורמציות.
- תוסף 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, והן יקרסו עםIllegalArgumentExceptionכשיוצריםPendingIntents (#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. כדי להשתמש ב-ActionFileUpgradeUtilכדי למזג קובצי פעולה מדור קודם לתוךDefaultDownloadIndex, צריך להשתמש ב-ExoPlayer 2.16.1 או בגרסה קודמת. - הסרה של
ProgressiveMediaSource#setExtractorsFactory. במקום זאת, צריך להשתמש בבונהProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). - הסרה של
ProgressiveMediaSource.Factory#setTagושלProgressiveMediaSource.Factory#setCustomCacheKey. במקום זאת, צריך להשתמש ב-MediaItem.Builder#setTagוב-MediaItem.Builder#setCustomCacheKey. - מסירים את הקונסטרוקטורים
DefaultRenderersFactory(Context, @ExtensionRendererMode int)ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). במקום זאת, צריך להשתמש בבונהDefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererModeוב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - הסרת כל הבונה
CronetDataSourceהציבורי. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
- הסרה של
- משנים את
IntDefsל-@Target(TYPE_USE)בלבד. יכול להיות שהדבר ישבור את הקומפילציה של השימושים ב-Kotlin, ואפשר לתקן את זה על ידי העברת ההערה לציון הסוג (Int).@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type-
@FlacExtractor.Flags(במארזcom.google.android.exoplayer2.ext.flac) -
@FlacExtractor.Flags(בתוך חבילתcom.google.android.exoplayer2.extractor.flac) @FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
גרסה 1.0.0-alpha01
27 באוקטובר 2021
androidx.media3:media3-*:1.0.0-alpha01 מופץ. גרסה 1.0.0-alpha01 מכילה את השמירות האלה.
תכונות חדשות
Media3 הוא המקום החדש לספריות תמיכה במדיה, כולל ExoPlayer. גרסת האלפא הראשונה מכילה הטמעות מוקדמות ופונקציונליות של ספריות להטמעה של תרחישי שימוש במדיה, כולל:
- ExoPlayer, נגן מדיה ברמת האפליקציה ל-Android שקל להתאים אישית ולהרחיב.
- פונקציונליות של סשן מדיה, לחשיפה ולשליטה בהפעלות. מודול הסשן החדש הזה משתמש באותו ממשק
Playerכמו ExoPlayer. - רכיבי ממשק משתמש לבניית ממשקי משתמש להפעלת מדיה.
- מודולים שעוטפים פונקציונליות בספריות אחרות לשימוש עם ExoPlayer, לדוגמה, הוספת מודעות באמצעות IMA SDK.
מידע נוסף זמין בפרויקט Media3 ב-GitHub.
בעבר, ExoPlayer התארח בפרויקט ExoPlayer GitHub נפרד. ב-Media3, שם החבילה הוא androidx.media3.exoplayer. אנחנו מתכננים להמשיך לתחזק ולפרסם את פרויקט ExoPlayer ב-GitHub למשך זמן מה, כדי לתת לאפליקציות זמן לעבור ל-Media3.
ב-Media3 יש תחליפים לכל המודולים של ExoPlayer, חוץ מהתוספים media2 ו-mediasession מהדור הקודם, שהוחלפו במודול media3-session החדש. השילוב הזה מאפשר אינטגרציה ישירה בין נגנים לבין סשנים של מדיה, בלי צורך להשתמש במתאם או במחבר.