Media3
| העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
|---|---|---|---|---|
| 11 בנובמבר 2026 | 1.11.1 | - | 1.12.0-beta01 | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Media3, צריך להוסיף לפרויקט את מאגר Maven של Google. מידע נוסף זמין במאמר מאגר ה-Maven של Google.
אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:
מגניב
dependencies { def media3_version = "1.11.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
מידע נוסף זמין במאמר הוספת יחסי תלות ב-build.
משוב
המשוב שלכם עוזר לנו לשפר את Jetpack. אתם יכולים להשתמש בכלי למעקב אחר בעיות ב-Media3 כדי למצוא תשובות לשאלות, בעיות ידועות ובקשות להוספת תכונות, וגם כדי לדווח על בעיות חדשות.
גרסה 1.12.0
גרסה 1.12.0-beta01
11 בנובמבר 2026
גרסה 1.12.0-beta01 כוללת את ה-commits הבאים.
- ספרייה משותפת:
- מפחיתים את
C.DEFAULT_BUFFER_SEGMENT_SIZEמ-65536ל-65520כדי שכל הקצאת מאגר נתונים זמני (כולל כותרת האובייקטbyte[]) תתאים לדפי מערכת הפעלה שלמים במרחב האובייקטים הגדול של ART. כך השימוש בזיכרון של מאגר הנתונים הזמני לדגימה יופחת בכ-6% במכשירים עם דפים בגודל 4KiB ובכ-20% במכשירים עם דפים בגודל 16KiB. - מחליפים את
androidx.media3.common.util.NullableTypeב-JSpecifyorg.jspecify.annotations.Nullable. - הסרת
androidx.media3.common.util.UnknownNullלטובת הערות nullness של JSpecify. במחלקות משנה שלRunnableFutureTaskב-Kotlin עם סוג תוצאה שיכול להיות null (כמוVoid?), צריך לציין ארגומנט מסוג שיכול להיות null (לדוגמה,RunnableFutureTask<Void?, Exception>). - מוסיפים את
AdViewProvider.getAdVideoView()כדי לספק את מאגר הסרטוניםViewשאפשר לשנות את הגודל שלו במהלך הפעלת המודעה. - מיפוי מחרוזת הקודק
mlpaRFC 6381 ל-MimeTypes.AUDIO_TRUEHDב-MimeTypes.getMediaMimeType, תיקון טראקים חסרים של אודיו Dolby TrueHD שעברו ריבוב במהלך הכנת HLS ללא מקטעים (#3485). - צריך לתקן את
AdPlaybackState.withAdDurationsUsכדי להעתיק את המערך שהועבר ואתAdPlaybackState.fromAdPlaybackStateכדי להעתיק את כל שדות המערך של קבוצות המודעות, כך שלא יהיה אפשר לשנות מופע באמצעות מערכים שמורים או משותפים. - תיקון של
IllegalStateException("הגישה לנגן מתבצעת בשרשור הלא נכון") כש-Player.listenאוPlayer.listenToמבוטלים משרשור שהוא לא שרשור האפליקציה של הנגן (לדוגמה, במהלך פירוק של בדיקת ממשק משתמש ב-Compose) (#3005).
- מפחיתים את
- ExoPlayer:
- תוקנה בעיה שבה רכיב רינדור שהופעל מוקדם לתקופת מדיה קרובה יכול להתחיל ברינדור לפני שההפעלה עוברת לתקופה הזו.
- במחלקות משנה של
CompositeMediaSourceב-Kotlin שמשתמשות במזהי מקורות צאצאים שיכולים להיות null (כמוVoid?), צריך לציין ארגומנט מסוג שיכול להיות null (לדוגמה,CompositeMediaSource<Void?>). - צריך לוודא ב-
AdsMediaSourceשהערך שלAdPlaybackState.removedAdGroupCountלא יורד בעדכונים שלAdPlaybackState. - תוקנה בעיה שבה מעבר בין תקופות מדיה שמשתמשות במנועי רינדור שונים עלול להפעיל בטרם עת את מנוע הרינדור הנכנס לפני שמנוע הרינדור היוצא סיים את הרינדור (לדוגמה, הפעלת
IllegalStateException("Multiple renderer media clocks enabled.")) כש-Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONמופעל. - תוקנה בעיה שבה מעבר למודעה במהירות הפעלה מותאמת אישית עלול לעכב את ההתקדמות של כל רכיבי הרינדור לתקופת המודעה כש-
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONמופעל. - תיקון בעיות בחימום מראש של רכיבי רינדור במהלך מעברים בין תקופות מדיה ובחירה מחדש של טראקים.
- הוספת
MediaPeriod.supportsStreamPrerollFlags()(ברירת המחדל היאfalse) כדי שהטמעות מותאמות אישית שלMediaPeriodיוכלו להביע הסכמה לדיווח על חוסר רציפות ראשוני באמצעותSampleStream.getFlags(), חזרה אלMediaPeriod.readDiscontinuity()כשאין תמיכה ו-Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONמופעל. - תוקנה בעיה שבה דילוג על מודעה שאחריה מופיעה מודעה אחרת באותה קבוצת מודעות דווח עם
DISCONTINUITY_REASON_AUTO_TRANSITIONבמקוםDISCONTINUITY_REASON_SKIP, או לא דווח בכלל כש-AdsMediaSourceמשתמש בהכנה עצלה של מקור תוכן.
- Transformer:
- הוספת CodecDB (
androidx.media3.transformer.codecdb), שממליץ על הגדרות של מקודד וידאו (קודק, הגדרות מקודד וקצב העברת נתונים) למכשיר הנוכחי, על סמך נתוני איכות המקודד שנמדדו.
- הוספת CodecDB (
- מחלצים:
- ADTS: תיקון של
AdtsExtractorשנגרם כתוצאה מהפקת פורמט האודיו ממילת סנכרון שגויה במטען הייעודי (payload) של פריים ראשון חלקי, מה שעלול לגרום לכשל או לעיכוב בהפעלה של שידורי AAC חיים שהצטרפו באמצע הפריים (#3464). - תיקון של
ArrayIndexOutOfBoundsExceptionב-FragmentedMp4Extractorכשקטע מכיל תיבתtrunללא דגימות (#3471). - ADTS: מוסיפים את
FLAG_DISABLE_ID3_METADATAאלAdtsExtractorכדי למנוע פלט של נתוני ID3 בסטרימינג כטראקapplication/id3. - MP4: תיקון של הפעלה ללא הפסקות של טראקים בפורמט AAC שה-muxer שלהם (כמו FFmpeg) מקצר את הרשומה האחרונה של
sttsכדי להחריג את הריפוד של המקודד, מה שגרם לריפוד להיות מופק כ-0 מרשימת העריכה שלelstולסוף של הפריים האחרון להיות מופעל (#3489). - תיקון הקצאות גדולות של מאגר נתונים זמני (buffer) להצצה מראש ו-
OutOfMemoryErrorכשמריחים קבצים פגומים או קבצים שאינם קובצי מדיה שמתחילים ב-ID3(מספר 3502).
- ADTS: תיקון של
- Inspector:
- תוקנה בעיה שבה ביטול ה-future שהוחזר על ידי
MetadataRetriever.retrieveDurationUs()מנע מ-close()לשחרר את ה-MediaSourceהבסיסי (#3468). - צריך לתקן את
MediaExtractorCompatכך שיחזיר אתMediaFormat.KEY_FRAME_RATEכמספר שלם, בהתאם לפלטפורמהMediaExtractor.
- תוקנה בעיה שבה ביטול ה-future שהוחזר על ידי
- אודיו:
- תוקנה בעיה שבה שתיקה שדילגו עליה במאגר נכללה ב-
AudioSink.getCurrentPositionUs(boolean)ודווחה באמצעותAudioSink.Listener.onSilenceSkipped()לפני שההפעלה הגיעה לאזור שדילגו עליו (#3472). - מגדירים את מקור הקודק באמצעות
AudioTrack.Builder.setCodecProvenanceב-API מגרסה 37 ואילך כשמפעילים אודיו PCM מרחבי עם כמה ערוצים, שפוענח מפורמט דחוס. - תוקן דילוג על ניסיונות חוזרים של אתחול
AudioTrackכששנייה אחת של אודיו גדולה לפחות כמו גודל שטח האחסון הזמני הראשוני, מה שגרם לכשל בהעברת DTS-HD במכשירים עם זיכרון אודיו מוגבל (#3487).
- תוקנה בעיה שבה שתיקה שדילגו עליה במאגר נכללה ב-
- סרטון:
- אפשר לחזור למפענח H.265/HEVC בשידורי Dolby Vision Profile 7 שתואמים לדורות קודמים, ולא לחזור למפענח AV1 בשידורי Profile 10 שהשכבה הבסיסית שלהם מאותתת על טווח מלא עם מאפייני העברה לא מוגדרים (#3486).
- תוקנה בחירת המפענח ב-
MediaCodecUtilכדי למנוע בחירה של מפענחים ראשיים שלא תומכים באופן פונקציונלי בפרופיל של הפורמט (כמו מפענח Dolby Vision לפרופיל אחר) כשאין מפענח שתומך באופן מלא בפורמט (#3486).
- טקסט:
- צמצום השימוש בזיכרון ב-
DvbParserעל ידי עיבוד אזורי כתוביות ישירות למפות סיביות בגודל האזור, במקום לשמור מפת סיביות זמנית במסך מלא.
- צמצום השימוש בזיכרון ב-
- ההשפעה:
- מכשירי Mux:
- אימות הטראק
Formatכשמוסיפים טראק ל-Mp4Muxerאו ל-FragmentedMp4Muxer, במקום להיכשל מאוחר יותר כשכותבים דוגמיות או סוגרים את ה-muxer. - הגדרת קריאות חוזרות ל-
Muxer.close()כפעולות ללא השפעה בכל ההטמעות של הספרייהMuxer, והתייחסות ל-muxer כסגור גם אםclose()זורק שגיאה. קריאה לכל שיטה אחרת אחריclose()גורמת עכשיו להצגתIllegalStateException.
- אימות הטראק
- תוסף IMA:
- תמיכה בממשק
ResizablePlayerשל IMA SDK כדי לאפשר למודעות אינטראקטיביות לשנות את הגודל והמיקום של תצוגת נגן הווידאו בתוך מאגר המודעות, והוספתImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)(הוצאה משימוש שלImaAdsLoader.requestAds(DataSpec, Object, ViewGroup)).
- תמיכה בממשק
- סשן:
- ייצוב ממשקי ה-API של ההעדפות של כפתורי המדיה.
- הפחתת השימוש בזיכרון על ידי הפסקת השמירה של נתוני גרפיקה דחוסים ב-
CacheBitmapLoader. - הימנעות מקריאות מיותרות ל-
MediaSession.setQueue(null)בעדכונים של ציר הזמן כשתור הסשנים של הפלטפורמה כברnull(לדוגמה, כש-Player.COMMAND_GET_TIMELINEלא זמין). - תוקנה בעיה שבה
MediaSessionServiceלא אפשר להטמעת שירות את האפשרות לשחזר כמו שצריך, כי הוא לא ניסה ליצור סשן חדש (#3490). - דיווח על
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATEבמקום עלPlayer.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDכשעדכון מטא-נתונים מדור קודם שלMediaSessionCompatמשנה את המטא-נתונים או את משך הזמן של הפריט הפעיל בתור בלי לשנות את התור. - תיקון של גרפיקה חסרה בסשנים מדור קודם שמוגדר בהם
nullMETADATA_KEY_DISPLAY_ICON(או URI של גרפיקה) לצדMETADATA_KEY_ALBUM_ARTתקין: ערכי גרפיקה מסוג null נמחקים עכשיו כשממירים מטא-נתונים מדור קודם.
- ממשק המשתמש:
- הוספת משבצת
subtitlesComposable ל-ContentFrameול-Player, עם תמיכה בברירת מחדל ב-media3-ui-compose-material3לעיבוד של מפת סיביות (bitmap) ורמזים לכתוביות טקסט אופקיות. - הוספת
SubtitleView.setTextDirectionHeuristicכדי לאפשר התאמה אישית של היוריסטיקת כיוון הטקסט שמשמשת לגלישת טקסט דו-כיוונית של כתוביות (#3454). - להוסיף אנימציה לכל משבצות הפקדים ב-
Playerב-media3-ui-compose-material3, כולל המשבצות בהתאמה אישית, ולהסיר את הפרמטרvisibleמ-PlayerDefaults.TopControls, מ-CenterControlsומ-BottomControls. זהו שינוי תוכנה שעלול לגרום לכשל ב-API לא יציב. - תמיכה ב-
AdViewProvider.getAdVideoView()ב-PlayerViewעל ידי גלישתexo_content_frameב-exo_content_frame_container. - הפחתת השימוש בזיכרון ב-
SubtitleViewעל ידי שחרור פריסות טקסט ומפות סיביות של כתוביות שנשמרו במטמון כשמנקים את האותות, ותיקון בעיה שבה טקסט כתוביות ישן יכול להישאר גלוי כשהרוחב של האות לא מספיק לפריסה.
- הוספת משבצת
- תוסף HLS:
- תוקנו בעיות שבהן טעינה מחדש של מקטע מדיה HLS שנכשל או בוטל יכולה לשמור דגימות שנטענו חלקית במאגר בלי למחוק או לחבר אותן, או לאפס את מיקום הטעינה למיקום חיפוש מיושן (#3362).
- תיקון של
IllegalStateExceptionכשמנסים להגיע לתחילת קטע שנשמר במאגר אחרי מעבר בין טראקים דינמיים. - תוקנו כמה בעיות הפעלה שקשורות למעבר בין נתיבים באמצעות HLS Content Steering (#3465).
- תוסף DASH:
- תיקון כתוביות CEA-608 כפולות או משובשות כשיש בשידור כמה רצועות כתוביות מוטמעות (#887).
- תוסף Cast:
- תוקנה בעיה שבה בקשות טעינה של
RemoteCastPlayerנדחו על ידי מקלטי Android TV (#3462). - מעדכנים את התלות של
com.google.android.gms:play-services-cast-frameworkל-23.0.0. - הוספת
CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)כדי לקבוע אם מכשירי Cast יופיעו במתג הפלט של המערכת בלי לדרוש הצהרה עלMediaTransferReceiverב-AndroidManifest.xml, ולהפעיל את מתג הפלט של המערכת כברירת מחדל לאפליקציות שמטרגטות ל-API 37 ואילך במכשירים עם API 37 ואילך. - תמיכה בשדות Cast
MediaMetadataמוגדרים מראש ב-DefaultMediaItemConverterעל ידי מיפוי שדות ללא מאפייןMediaItem.mediaMetadataייעודי אלMediaItem.mediaMetadata.extrasוממנו, ושמירה על תוספות בהתאמה אישית ב-MediaInfo.customData. - הפסקת ההצגה של חריגות ב-
DefaultMediaItemConverterכשחסר URI להפעלה או כשההמרה נכשלת, ושמירה על מזהה המדיה והמטא-נתונים בציר הזמן שלCastPlayerלפריטים בתור של Cast בלי URI להפעלה. - צריך להוסיף את
SessionAvailabilityListener.onCastSessionAvailable(boolean)כדי לציין אם סשן Cast זמין הופעל באמצעות Intent to Join, ולשמור על מצב ההפעלה מרחוק במקום להחליף אותו במצב הנגן המקומי כשמצטרפים לסשן Cast באמצעות Intent to Join ב-CastPlayer. - מאכלסים את משכי הזמן של
MediaInfoושל ציר הזמן מ-MediaMetadata.durationMsלפריטים שהם לא בשידור חי ב-DefaultMediaItemConverterוב-RemoteCastPlayer, ושומרים את משכי הזמן שנקבעו על ידי המקלט ואת הסטטוס של השידור החי בחיפושים בתור.
- תוקנה בעיה שבה בקשות טעינה של
- אפליקציית הדגמה:
- אפשר לשנות את הסדר של הפריטים בפלייליסט על ידי גרירה באפליקציית ההדגמה של הסשן.
- הסרת סמלים שהוצאו משימוש:
- הסרה של
androidx.media3.transformer.TextureAssetLoader. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.transformer.RawAssetLoader. - הסרת constructors ציבוריים מסוג
DefaultDecoderFactory. במקום זאת, אתם צריכים להשתמש ב-DefaultDecoderFactory.Builder. - הסרה של
DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MS. במקום זאת, אתם צריכים להשתמש ב-DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MS. - הסרה של
DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean). במקום זאת, אתם צריכים להשתמש ב-VideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATION. - מסירים את
EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)ואתEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean). במקום זאת, אתם צריכים להשתמש ב-EditedMediaItemSequence.Builder(Set). - הסרה של
EditedMediaItemSequence.forceAudioTrack. במקום זאת, אתם צריכים להשתמש ב-trackTypes.contains(C.TRACK_TYPE_AUDIO). - הסרה של
EditedMediaItemSequence.forceVideoTrack. במקום זאת, אתם צריכים להשתמש ב-trackTypes.contains(C.TRACK_TYPE_VIDEO). - הסרה של
ExportResult.durationMsושלExportResult.Builder.setDurationMs. במקום זאת, אתם צריכים להשתמש ב-ExportResult.approximateDurationMsוב-ExportResult.Builder.setApproximateDurationMs. - הסרה של
SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_US. במקום זאת, צריך לציין את התנהגות ההשתקה באמצעותsilenceRetentionRatio. - הסרה של
Timeline.getPeriodPosition(Window, Period, int, long, long). במקום זאת, אתם צריכים להשתמש ב-Timeline.getPeriodPositionUs(Window, Period, int, long, long).
- הסרה של
גרסה 1.12.0-alpha02
26 באוקטובר 2026
גרסה 1.12.0-alpha02 מכילה את ה-commits הבאים.
- השפעה על Play Services:
- הוספת מודול
media3-effect-play-servicesחדש שמספק אפקטים למדיה של Google Play Services, כוללEnhancementSessionDecoratorלשיפור סרטונים ו-StudioSoundAudioProcessorלהפרדת מקורות אודיו.
- הוספת מודול
גרסה 1.12.0-alpha01
21 באוקטובר 2026
גרסה 1.12.0-alpha01 מכילה את ה-commits הבאים.
- ספרייה משותפת:
- מוסיפים את
C.COLOR_SPACE_DISPLAY_P3ותומכים במרחב הצבעים Display P3 במיפוי הצבעים של ISO ב-MediaFormatUtilוב-ColorInfo. - הוספת מרשם
Flagsמרכזי לניהול feature flags ניסיוניים והשקה מדורגת (Flags.setCanaryModeEnabled). העברת הרבה שיטות@ExperimentalApiקיימות לשימוש ב-API החדש של ה-flags. - מוסיפים את
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesו-MediaMetadata.Builder.setCategories(List<String>). - מחליפים את
androidx.media3.common.util.NonNullApiב-JSpecifyorg.jspecify.annotations.NullMarked.
- מוסיפים את
- ExoPlayer:
- תוקנה בעיה שבה הפעלה של DASH עם כמה תקופות נתקעת כשהחלק הראשון של התקופה הבאה לא נטען (#3396).
- דיווח על
wasCanceled = trueב-AnalyticsListener.onLoadErrorוב-MediaSourceEventListener.onLoadErrorכשניסיונות הטעינה החוזרים נגמרים. - תמיכה ברישום של כמה מופעים של
VideoFrameMetadataListenerבאמצעותExoPlayer.addVideoFrameMetadataListenerו-ExoPlayer.removeVideoFrameMetadataListener, והוצאה משימוש שלExoPlayer.setVideoFrameMetadataListenerו-ExoPlayer.clearVideoFrameMetadataListener. - כדי להוסיף תמיכה במודעות בתוכן עם כמה תקופות (למשל, DASH), צריך לפצל ולקזז את
AdPlaybackStateלכל תקופה. - תוקן מרוץ תהליכים ב-
PreCacheHelperשבו ביטול של בקשת הכנה מתמשכת עדיין יכול היה להתחיל הורדות ברקע. - הגבלה של
setLoadOnlySelectedTracks(true)ב-ProgressiveMediaSourceוב-DefaultMediaSourceFactoryכדי לסנן רק טראקים של וידאו ותמונות שלא נבחרו. טראקים של אודיו וטקסט תמיד נטענים כדי לאפשר מעבר חלק בין טראקים בלי טעינה מחדש. - הפעלה של
setLoadOnlySelectedTracks(true)כברירת מחדל ב-ProgressiveMediaSourceוב-DefaultMediaSourceFactory. כך נחסך זיכרון ומתאפשרים חישובים מדויקים יותר של הקצאת מאגר נתונים זמני (buffer) ב-DefaultLoadControlכשלא כל הטראקים נבחרים. חשוב לדעת: אם מפעילים טראקים של וידאו או תמונות שלא נבחרו באמצע ההפעלה, יכול להיות שיהיה צורך בטעינה נוספת. - תוקנה בעיה שבה
Player.getCurrentPosition()יכול להחזיר ערכים לא עדכניים (מתעדכן רק כמה פעמים בשנייה) כשמופעל תזמון דינמי (#3286). - תוקנה בעיה שבה ירידה או איפוס לא צפויים במיקום של ראש ההפעלה של
AudioTrackעלולים להיחשב בטעות כגלישת מספר שלם, מה שגורם להשהיית ההפעלה במהלך אגירת הנתונים (#3407). - הסרת הניסוי
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - מניעת הפעלות מחדש מיותרות של רכיב הרינדור ותקלות כשחוזרים ממודעות מעברון או ממודעות לתוכן שנחתך בסוף (#3371).
- תוקנה בעיה שבה שגיאת עיבוד בפריט הבא בפלייליסט עלולה להפריע להפעלה הנוכחית לפני הזמן כשהאפשרות
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONמופעלת. - תיקון של
NullPointerExceptionשיכול להתרחש אםExoPlayerהעביר את רכיבי הרינדור לתקופת מדיה לא מוכנה כש-Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONמופעל. - תוקנה בעיה שבה פריימים של סרטונים הושמטו או דולגו באופן בלתי צפוי במהלך תזמון דינמי כש-
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSמופעל. - תיקון
ArrayIndexOutOfBoundsExceptionבמאזינים לניתוח נתונים כשעוצרים את ההפעלה במהלך מודעה בשידור חי (#3423). - תוקנה בעיה שבה
PreloadMediaSourceעלול לפרסם באופן בלתי צפוי אירוע טעינה מראש כשלא מתבצעת קריאה ל-preload()(#3408). - תוקנה בעיה שבה המערכת התעלמה מהערך של
Format.subsampleOffsetUsבטראקים של מטא-נתונים, מה שגרם לחותמות זמן שגויות של הפעלה בפקודות splice מפוענחות של SCTE-35 (#3413). - תוקנה דליפת זיכרון ב-
PreloadMediaSourceוב-DefaultPreloadManagerכשמתבצעת קריאה ל-preload()כמה פעמים באותו מקור (#3445). - תיקון של
NullPointerExceptionכשמשחררים אתAdsMediaSourceבזמן שרענון ציר הזמן של התוכן בהמתנה (#3442). - תוקנה בעיה שבה הפעלה של מדיה פרוגרסיבית הייתה יכולה לקפוץ למיקום הלא נכון כשניסיון טעינה אחרי חיפוש (או כשמתחילים הפעלה במיקום שאינו אפס) נכשל ובוצע ניסיון חוזר (#3440).
- הוספת פתרון עקיף למפענח H.264 של Xiaomi TV Stick 4K (MiTV-AYFR0) שקופא בשינויי רזולוציה חלקים (#3457).
- תוקן
NullPointerExceptionב-SteeringManifestTrackerכשמעקב המודעות נעצר לפני שהושלמה טעינה שפורסמה או לפני שהופעל קריאה חוזרת (callback) של שגיאה (#3443). - תמיכה בהפעלה של מטא-נתונים מתוזמנים של HAGC (ST 2094-50) מטראקים של מטא-נתונים בתיבות
mebxבקובצי MP4. - תוקנה בעיה שבה המערכת דילגה על תקופות מדיה שההכנה שלהן איטית בפלייליסט.
- CompositionPlayer:
- תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות
Composition.Builder.setVideoFrameAggregationParametersלתהליכי עבודה של הפעלה. - תיקון של דילוגים על פריימים בקומפוזיציות עם כמה רצפים שנגרמים בגלל חוסר התאמה בכימות או בעיגול של חותמות זמן, על ידי בחירת הפריים עם חותמת הזמן הקרובה ביותר במהלך צבירת הפריימים. האפשרות הזו זמינה רק מ-API 29, כי היא דורשת שמירה של פריים נוסף אחד בכל רצף וידאו.
- תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות
- Transformer:
- תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות
Composition.Builder.setVideoFrameAggregationParametersלתהליכי עבודה של ייצוא. - תיקון של דילוגים על פריימים בקומפוזיציות עם כמה רצפים שנגרמים בגלל חוסר התאמה בכימות או בעיגול של חותמות זמן, על ידי בחירת הפריים עם חותמת הזמן הקרובה ביותר במהלך צבירת הפריימים. האפשרות הזו זמינה רק מ-API 29, כי היא דורשת שמירה של פריים נוסף אחד בכל רצף וידאו.
- לכבד את
Transformer#setAudioMimeType(AUDIO_RAW)כשמשתמשים ב-AudioProcessors. לפני התיקון הזה, בקשה שלMimeTypes.AUDIO_RAWוהחלה שלAudioProcessorגרמו לפלט דחוס.
- תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות
- בחירת טראק:
- תוקנה בעיה שבה טראק SDR הועדף בטעות על פני טראק Dolby Vision נתמך במכשירים מסוימים (#3135).
- מחלצים:
- Mp4Extractor: תיקון ניתוח התיבה
dOpsל-Opus ב-MP4 שבהPreSkip,InputSampleRateו-OutputGainלא הומרו מ-big-endian ל-little-endian, מה שגרם להשמטת כ-299 אלפיות השנייה הראשונות של האודיו כשאין רשימת עריכה (#3431). - צריך להסיר את
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESו-FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265כי ניתוח התלות של דגימות בתוך GOP ב-H.264 וב-H.265 מופעל כברירת מחדל. - Mp4Extractor: תיקון הניתוח של המטא-נתונים של המיקום מתיבות
xyzשמכילות קואורדינטות של גובה כדי לאכלס אתMp4LocationData. - הוספת
ExtractorUtil.getFramesPerEncodedSampleכדי לחשב את מספר הפריימים של האודיו לכל דגימה בפורמטים של אודיו מקודד (#3367). - מוסיפים את
FLAG_READ_XMP_METADATAל-Mp4Extractorכדי לחלץ מטא-נתונים של XMP מתיבות UUID ברמה העליונה. - תיקון של אודיו פגום בפורמטים AC-3, DTS ו-LPCM כשמפעילים תוכן MPEG-PS בסגנון DVD, על ידי הסרת הכותרת של תת-הסטרים
private_stream_1מכל חבילת PES ב-PsExtractorלפני שהמטען הייעודי (payload) מועבר לקורא האודיו (#3327). - תיקון כשל ב-
FragmentedMp4Extractorכשתיבתtfdtבגרסה 1 מקודדת ערךbaseMediaDecodeTimeשלילי (#3412). - MPEG-TS: תמיכה בניתוח הודעות SEI של סידור אריזת פריימים ב-H.264 וב-H.265 כדי לאכלס את
Format.stereoMode(#3419). - ניתוח נתוני ההגדרות של Dolby Vision Profile 20 ודחיית פרופילים לא נתמכים של Dolby Vision במקום הפעלה כ-HEVC רגיל עם צבעים שגויים (#3427).
- MP3: ביטול ההתאמה של המטא-נתונים של הריפוד וההשהיה של מקודד LAME/Xing כי היא לא תואמת להרבה מפענחי MP3 של
MediaCodec(#3425). - Matroska: תיקון של
NullPointerExceptionבזמן ניתוח של רכיביChapterAtomבתצוגת עץ (#3438). - Ogg: תוקן באג שבו חבילה שהגודל שלה הוא כפולה של 255 בייטים ומסתיימת בגבול של דף מוזגה עם החבילה הבאה.
- MP4: ניתוח של
mebxטראקים של מטא-נתונים מתוזמנים בתיבות ב-Mp4Extractorוב-FragmentedMp4Extractor. טראקים עם מפתחit35נחשפים בתורMimeTypes.APPLICATION_ITUT_T35(הפעלת HAGC). המערכת מתעלמת מטראקים אחרים שלmebx, אלא אם מוגדרFLAG_EMIT_RAW_MEBX_DATA. במקרה כזה, כל הטראקים שלmebxמופקים כ-MimeTypes.APPLICATION_MEBXגולמי. - Ogg: תמיכה בחילוץ של ריפוד סיום (end-padding) ב-Opus להפעלה ללא הפסקות (#2576), ותיקון חותמות זמן לדוגמה אחרי חיפוש דף שמתחיל בחבילה מתמשכת.
- Ogg: תיקון שגיאות פענוח וקפיצות של כ-1 שניות בחותמת הזמן בסטרימינג משורשר של Ogg Opus, על ידי התעלמות מחבילות של כותרות הערות ומזהי Opus באמצע הסטרימינג.
- Mp4Extractor: תיקון ניתוח התיבה
- Inspector:
- תמיכה באחזור מטא-נתונים של XMP מקובצי MP4 באמצעות
MetadataRetriever. - תמיכה בחילוץ טראקים של מטא-נתונים מתוזמנים בתיבות
mebxב-MediaExtractorCompatבתורMimeTypes.APPLICATION_MEBX.
- תמיכה באחזור מטא-נתונים של XMP מקובצי MP4 באמצעות
- מסגרת הבדיקה:
- תיקון חיתוך של צבעי BT.2020 עם סולם צבעים רחב בתמונת הבסיס של SDR כשמחלצים פריימים של Ultra HDR באמצעות
FrameExtractor. צבעים מחוץ למרחב הצבעים נדחסים עכשיו בצורה רכה למרחב הצבעים sRGB במקום להיות מוגבלים.
- תיקון חיתוך של צבעי BT.2020 עם סולם צבעים רחב בתמונת הבסיס של SDR כשמחלצים פריימים של Ultra HDR באמצעות
- אודיו:
- הוספת פתרון עקיף למכשירים שמפעילים את
android.media.AudioDeviceCallbackבשרשור הלא נכון (#3386). - תיקון בעיות פוטנציאליות של הפעלות שנתקעות אחרי מעברים בין טראקים עם פריקה דחוסה.
- פתרון זמני לבעיה ב-Amazon Fire TV Stick שבה אודיו AC-3 עלול לקפוא במהלך מעברים בין תקופות (#3448).
- תמיכה בחיתוך ריפוד המקודד בסוף הסטרימינג להפעלה ללא הפסקות של Opus ב-Ogg וב-WebM/Matroska (#2576).
- תוקנו עדכוני הריפוד וההשהיה ללא רווחים של פריקה דינמית במהלך מעברים בין טראקים, כך שהם חלים על הטראק הנכנס ולא על הטראק שמופעל.
- חיתוך של ריפוד הסיום של המקודד בשידורים בודדים ובשידור האחרון בפלייליסט, בנוסף למעברים ללא רווחים באמצע הפלייליסט (#2576).
- הימנעו מהעתקות מיותרות של מאגר האודיו ב-
TrimmingAudioProcessorאחרי שהסתיים החיתוך של השהיית המקודד בתחילת הסטרימינג, ואין צורך לחתוך את הריפוד בסוף הסטרימינג.
- הוספת פתרון עקיף למכשירים שמפעילים את
- סרטון:
- תיקון הדיווח על פריימים מאוחרים של סרטונים עם חותמות זמן זהות של פרסום, כך שהם ידווחו כפריימים שהושמטו במקום כפריימים שדילגו עליהם.
- טקסט:
- מוסיפים את
MediaItem.SubtitleConfiguration.timeOffsetUsכדי להזיז את חותמות הזמן של הכתוביות שנטענו ממקורות חיצוניים ביחס למדיה. אפשר לשנות את ההיסט במהלך ההפעלה באמצעותPlayer.replaceMediaItem(int, MediaItem)בלי להפריע להפעלה (#1976). - SubRip: הוספת תמיכה בהזרקת
CharsetDetectorאלDefaultSubtitleParserFactoryכדי לזהות את קידוד התווים של כתוביות SubRip עצמאיות בלי תו לציון סדר הבתים (#2247).
- מוסיפים את
- ההשפעה:
- מטמיעים את
SoundSeparationAudioProcessorלהפרדת מקורות אודיו באמצעות מודול StudioSound GMSCore.
- מטמיעים את
- מכשירי Mux:
- תיקון כתיבת תיבת
dOpsל-Opus ב-Mp4Muxerוב-FragmentedMp4Muxer, שבהןPreSkip,InputSampleRateו-OutputGainנכתבו ב-Little-endian במקום ב-Big-endian (#3431). - תמיכה בכתיבת גובה GPS ב-
Mp4LocationDataבאמצעותMp4Muxer. - מוסיפים את
Muxer.Factory.create(ParcelFileDescriptor)כדי לאפשר ריבוב ישירות אלParcelFileDescriptor. - כדי לספק חותמות זמן לפענוח מדיה, כותבים כברירת מחדל תיבת
tfdt(Track Fragment Base Media Decode Time) בתיבותtrafשל קובצי MP4 מקוטעים. - תמיכה בכתיבת תיבות מאגר
dec3של E-AC-3 ו-E-AC-3 JOC (Dolby Atmos) ב-Mp4Muxer. - הוספת תמיכה בפורמט WebM ל-
MediaMuxerCompat. - כתיבת תיבת
mfra(Movie Fragment Random Access) בסוף קובצי MP4 מקוטעים כדי לאפשר חיפוש ב-FragmentedMp4ExtractorבאמצעותFLAG_READ_MFRA_FOR_SEEK_MAP. - תיקון קריסה ב-
Mp4Writerוב-FragmentedMp4Writerכשכותבים דגימת EOS לפני שכותבים דגימות אחרות. - תוקנה בעיה בתאימות של מאגר התגים כשמבצעים ריבוב של תוכן Dolby לקובצי MP4 או לקובצי MP4 מקוטעים, על ידי פרסום המותג התואם
dby1בכותרת של מאגר התגים (#3369). - תמיכה בטראקים של אודיו בפורמט PCM עם נקודה צפה (float) של 32 ביט ב-
Mp4Muxerוב-FragmentedMp4Muxer(#3389). - דחייה של פרופילי Dolby Vision שלא נתמכים ב-
Mp4Muxerוב-FragmentedMp4Muxerכשמוסיפים טראקים. - תמיכה בטראקים של אודיו PCM של מספרים שלמים של 24 ביט ו-32 ביט ב-
Mp4Muxerוב-FragmentedMp4Muxer.
- תיקון כתיבת תיבת
- תוסף IMA:
- מעבירים את אירועי ההשהיה וההמשך של הנגן ל-IMA SDK ב-
ImaServerSideAdInsertionMediaSource.
- מעבירים את אירועי ההשהיה וההמשך של הנגן ל-IMA SDK ב-
- סשן:
- הוסיפו את
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIו-MediaConstants.EXTRAS_KEY_CATEGORIESכדי לאכלס את המטא-נתונים של הפלייליסט והפריטים ממטא-נתונים ומתיאורים קודמים, ואתMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEו-MediaConstants.EXTRAS_KEY_TTL_SECONDSכדי להציעLibraryParams.extras. - תיקון קריסה של
SecurityExceptionבזמן יצירה או שחרור שלMediaSessionבמכשירים שאוכפים מגבלות מחמירות שלPendingIntent. - תוקנה בעיה שבה
MediaSession.getControllerForCurrentRequest()החזיר את הערךnullבמהלך בקשות הפעלה ב-Android 12 (רמות API 31 ו-32) כש-MediaSessionServiceעדיין לא היה בחזית. - תיקון קריסה של
IllegalArgumentExceptionכש-MediaControllerמתחבר לסשן מדור קודם שמדווח על עוצמת קול מקסימלית שלילית. - תוקנה בעיה שבה קריאה ל-
MediaController.setMediaItemאו ל-setMediaItemsואחריה ל-play()ב-MediaSessionCompatמושהה מדור קודם עלולה לשלוח קריאה חוזרת (callback) לא נתמכת שלonPrepareFrom*במקוםonPlayFrom*, או לשלוח אתonPlay()בלי להפעיל מחדש את קובץ המדיה המבוקש. - תיקון של
NullPointerExceptionב-MediaBrowserמדור קודם כשמתקבלת תשובה לפקודה בהתאמה אישית (#3432). - תיקון קריסה של
IllegalArgumentExceptionכשמתקבלים מטא-נתונים מדור קודם עם מפתחות כפולים ב-Bundleהבסיסי. - איחוד שיחות
MediaControllerCompat.TransportControlsיוצאות שבוצעו באותה איטרציה שלLooperכששולטים ב-MediaSessionCompatמדור קודם (לדוגמה, קריאה ל-setMediaItem, ל-prepareול-playביחד שולחת עכשיו קריאה חוזרת (callback) אחת שלonPlayFrom*).
- הוסיפו את
- ממשק המשתמש:
- תיקון המיקום של סימני הפיסוק בכתוביות מימין לשמאל ושמירה על טווח ה-span כשגלישת הטקסט הדו-כיוונית מופעלת (#3454, #3455).
- מוסיפים את המחלקות
TrackSelectionStateו-TrackSelectionParametersStateואת פונקציות ה-remember של המצב הקומפוזבילי התואמות שלהן למודולmedia3-ui-compose. - להציג את
PresentationState.videoAspectRatioולגרום ל-Modifier.resizeWithContentScaleלקחתaspectRatio: Float?במקוםsourceSizeDp: Size?. - מוסיפים את המחלקה
CuesStateואת ה-ComposablerememberCuesStateלמודולmedia3-ui-composeכדי להאזין לאותות הנוכחיים של הנגן. - הוסיפו תמיכה במצב חיפוש לאורך ציר הזמן ל-
ProgressSliderאם הוא מבוסס עלExoPlayerאו עלCompositionPlayer. - מוסיפים תמיכה ב-
showArtworkל-PresentationStateומשתמשים בה כדי לתזמן את העיבוד שלartworkComposable האופציונלי שסופק ב-ContentFrameוב-Player. מוסיפים אתArtworkComposable כדי להשתמש בו כערך ברירת המחדל של המשבצתartwork. - מוסיפים שדות חדשים ל-
PlayPauseButtonState(showBuffering,showRetry,showReplay) ומשתמשים בהם ב-PlayPauseButtonכדי להציג עוד סמלים ואינדיקטור לטעינה מראש. - הוספת המחלקה
PlaybackStateכדי לאפשר תצפית על מצב הפעלה בהתאמה אישית, והוספתBufferingIndicatorכרכיב שלא תלוי בלחצן. - תוקנה בעיה שבה
PlayerViewו-PlayerControlViewהציגו סמני מודעות בגבולות של פרקי זמן בשביל פלייסהולדרים של מודעות בסוף הסרטון בשידורים חיים עם כמה פרקי זמן. - משבצות קומפוזביליות של
Player,ContentFrame,PlayerDefaultsו-MiniControllerלא מקבלות יותר את הנגן או את הרשאות הגישה לפקדים כפרמטרים. במקום זאת, צריך לתעד אותם מהיקף הקריאה (לדוגמה,topControlsהוא עכשיו@Composable BoxScope.() -> Unit). זהו שינוי תוכנה שעלול לגרום לכשל ב-API לא יציב. - מוסיפים את הפרמטר
alignmentל-ContentFrame, ל-Playerול-Modifier.resizeWithContentScaleכדי למקם את התוכן המותאם בתוך הקונטיינר שלו, וחותכים את התוכן שלContentFrameלגבולות שלו, כך שהסרטון שמותאם באמצעותContentScale.Cropלא יופיע יותר מחוץ לגבולות. - הוספת תמיכה בממשק המשתמש של סטרימינג בשידור חי ל-
ProgressSlider, ל-ProgressStateWithTickCountול-ProgressStateWithTickIntervalעל ידי חשיפתisLiveו-liveOffsetMs. הוספתLiveButtonComposable אלmedia3-ui-compose-material3(#2213).
- תוסף Ktor:
- תוקנה בעיה שבה
KtorDataSourceעלול להתייחס לכשלים בחיבור באמצע הסטרימינג כסוף הקלט במקום להציגHttpDataSourceException(#3460).
- תוקנה בעיה שבה
- תוסף HLS:
- ניתוח של
VIDEO-RANGE(PQו-HLG) ב-EXT-X-STREAM-INFוב-EXT-X-I-FRAME-STREAM-INFלתוךFormat.colorInfo(#3441). - תיקון של
NullPointerExceptionבמהלך ניתוח של מקטעי אתחול MPEG-TSEXT-X-MAPשמכילים דגימות מדיה של PES (#3456). - תוקנה רגרסיה שבה
Format.idו-Format.metadataהיוnullבטראקים חשופים של HLS (#3402). - חיתוך מודעות עם רשימת נכסים ל-
X-PLAYOUT-LIMITודילוג על מודעות שחורגות לחלוטין מהמגבלה, והגדרת ברירת המחדל של היסט המשך התוכן ל-0 כשמודעת מעברון משמיטה אתX-RESUME-OFFSETומשך הזמן שלה לא ידוע, גם אםX-PLAYOUT-LIMITמוגדר. - תוקנה בעיה שבה סגירת מודעת מעברון ב-
X-ASSET-LISTהחליפה את התרומות של היסט המשך התוכן של מודעות מעברון אחרות באותה קבוצת מודעות.
- ניתוח של
- תוסף DASH:
- תמיכה בניתוח של אירועי הוספה (
urn:mpeg:dash:event:alternativeMPD:insert:2025) והחלפה (urn:mpeg:dash:event:alternativeMPD:replace:2025) של MPD חלופי ב-DashManifestParserוחשיפה שלהם כמופעים שלAlternativeMpdEventב-Period.alternativeMpdEvents. זהו שינוי תוכנה שעלול לגרום לכשל באפליקציות שיוצרות מחלקת משנה שלDashManifestParser: עכשיוDashManifestParser.buildPeriodמקבל פרמטרList<AlternativeMpdEvent>נוסף, ועומס היתר הקודם הוסר. אפליקציות שמבטלות אתDashManifestParser.parseEventStream(XmlPullParser)צריכות לבטל אתDashManifestParser.parseEventStream(XmlPullParser, String)במקום זאת, כי האפשרות הראשונה הוצאה משימוש ותהפוך לפרטית בגרסה עתידית. - ניתוח של פרטי הצבע של CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientsו-VideoFullRangeFlag) מהמתאריםEssentialPropertyו-SupplementalPropertyלתוךFormat.colorInfo(#3426). - תמיכה ברשימות מופרדות ברווחים של ערכי
@idבמאפייני@value(#3315) של מתאר (http://dashif.org/guidelines/trickmode) במצב טריק. - תמיכה בניתוח של
<ProducerReferenceTime>ב-DashManifestParser, חשיפה שלו ב-AdaptationSet.producerReferenceTimesושימוש בו כדי לאכלס אתTimeline.Window.presentationStartTimeMsואתTimeline.Window.windowStartTimeMsבסטרימינג של וידאו על פי דרישה (VOD). - נוספה תמיכה ב-DASH Content Steering (#1689).
- תוקנה שגיאת
NullPointerExceptionשיכולה להתרחש כשמנתחים מניפסט DASH עם מאפיין חסר ברכיב<UTCTiming>(#3436).
- תמיכה בניתוח של אירועי הוספה (
- תוסף RTSP:
- תוקנה קריסה של
IllegalStateExceptionשקרתה כשעובדו תגובות רשת מושהות אחרי שלקוח ה-RTSP נסגר. - תוקנה בעיה שבה גלילה מהירה עלולה להפעיל בטעות את מנגנון הגיבוי של פרוטוקול TCP.
- תיקון קריסה של
IllegalStateExceptionשיכולה להתרחש בזמן עיבוד של תגובות רשת מושהות אחרי שלקוח RTSP מאפס את המצב במהלך בחירה מחדש של טראק, פירוק סשן או הפניית URI. - תוקנה בעיה שבה דילוג נוסף לפני הפעלה מחדש של הסרטון עלול לגרום לקריסה של
IllegalStateException. - תוקנה בעיה שבה דילוג אחורה בזמן שדילוג אחר כבר ממתין עלול לגרום לניתוק באודיו ולהקפאת הפעלת הסרטון.
- תוקנה בעיה שבה יחידות גישה של פריימים מרכזיים ב-H.264 וב-H.265 שמסתיימות בחבילת צבירה או בחבילה שאינה IDR לא סומנו כפריימים מרכזיים, וכתוצאה מכך ההפעלה נתקעה בטעינה (#3434).
- תוקנה קריסה של
- תוספי מפענח (FFmpeg, VP9, AV1 וכו'):
- תוסף Opus: תיקון קריסה של JNI בזמן פענוח של נתוני Opus לא תקינים.
- תוסף Opus: תיקון התעלמות מריפוד (padding) של התעלמות כשדילוג מראש וריפוד של התעלמות נופלים על אותה חבילה (#2576).
- תוסף Cast:
- הוספת
SessionAvailabilityListener.SessionUnavailableReasonכדי לייצג את הסיבה לכך שהסשן לא זמין, ושימוש ב-overloaded method ב-SessionAvailabilityListener.onCastSessionUnavailableכדי לחשוף אותה. - תוקנה בעיה שבה ההפעלה חודשה באופן מקומי באופן בלתי צפוי אחרי הפסקת סשן Cast.
- רישום שגיאה ביומן כשפעולות של
RemoteMediaClient(כמו הפעלה, השהיה, שינוי מהירות, מצב הפעלה חוזרת, עוצמת קול, השתקה או בחירת טראק) נכשלות ב-RemoteCastPlayer(#3373). - תיקון של
ArrayIndexOutOfBoundsExceptionב-RemoteCastPlayerכשהתור של מקלט Cast משתנה או מצטמצם בזמן שפעולת חיפוש ממתינה (#3372). - תוקנה בעיה במקלט Cast שמוגדר כברירת מחדל, שבה ציר הזמן אוכלס רק בפריטי מדיה שסמוכים לפריט הפעיל, במקום בכל הפלייליסט (#3129).
- עדכון ציר הזמן ומיקום ההפעלה באופן מיידי כשמשנים את הפלייליסט (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) או כשמדלגים ב-RemoteCastPlayer, והוספת פעולות פלייליסט עוקבות לתור כדי שהן יבוצעו באופן מהימן לפי הסדר (#2639, #3272). - תוקנה בעיה שבה קריאה ל-
addMediaItemsבתור ריק ב-RemoteCastPlayerגרמה לכך שקובצי המדיה לא נטענו במקלט Cast (#2402). - תוקנה בעיה ב-
RemoteCastPlayerשבה הגעה לסוף התור של מקלט Cast מחקה את ציר הזמן במקום לשמור את הפלייליסט. - תוקנה בעיה שבה
playWhenReady,repeatModeו-playbackParametersלא הועברו או הוחלו כשהוגדרו ב-RemoteCastPlayerלפני טעינת פריטי מדיה (לדוגמה, במהלך העברת הפעלה ממכשיר מקומי למכשיר מרוחק ב-CastPlayer) (#889).
- הוספת
- אפליקציית הדגמה:
- הוספת תמיכה בקובצי מדיה שמוגנים באמצעות DRM וסטרימינג נוסף לדוגמה של HLS לקטלוג של אפליקציית ההדגמה של הסשן.
- מגדירים את
RemoteCastPlayerעםCastTrackSelectorבאפליקציית ההדגמה של הסשן כדי לאפשר בחירה של כתוביות וטראק אודיו בזמן ההעברה (cast).
- הסרת סמלים שהוצאו משימוש:
- הסרה של
DashUtil.buildDataSpec(Representation, RangedUri, int)ושלDashUtil.buildDataSpec(Representation, String, RangedUri, int). במקום זאת, אתם צריכים להשתמש ב-DashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- הסרה של
- יצירה:
- מגדילים את Gradle
minSdkל-24.
- מגדילים את Gradle
גרסה 1.11.0
1.11.1
10 בספטמבר 2026
- ExoPlayer:
- העברת הדגל להפעלה או להשבתה של מטא-נתונים של HAGC למדיה פרוגרסיבית מ-
MediaSource.Factoryל-ExtractorsFactory. ה-method הקודמת,setExperimentalEnableHagcPlayback, הוסרה והוחלפה ב-ExtractorsFactory.setParseHagcMetadata. העדכון הזה גם פותר בעיה שבה ההשבתה לא פעלה במאגרי Matroska/WebM. - תיקון של עצירת הפעלה שנגרמה בזמן חימום מראש של רכיב עיבוד משני שלא עובר.
- תיקון בעיה בחימום מראש שבה צריך להחזיר את
Surfaceלמעבד הראשי כשחיפוש מאפס ומשבית את שני המעבדים. - תיקון של
ArrayIndexOutOfBoundsExceptionכשציר זמן של שידור חי מתרענן ומזיז את מיקום ברירת המחדל מעבר למודעה שמוכנסת בצד השרת ומופעלת כרגע (#3348). - תוקנה בעיה במצב חיפוש לאורך ציר הזמן שבה פריימים ישנים של סרטון הוצגו לזמן קצר כשחיפשו עם
ScrubbingModeParameters.allowSkippingMediaCodecFlushמופעל.
- העברת הדגל להפעלה או להשבתה של מטא-נתונים של HAGC למדיה פרוגרסיבית מ-
- מחלצים:
- Matroska: תוקנה בעיה שבה טראקים שהוצבו אחרי אשכולות לא הובילו לציר זמן שניתן לחפש בו (#3377).
- אודיו:
- תיקון החישוב של גודל המאגר ב-
SilenceSkippingAudioProcessorכך שמשך השתיקה המינימלי לא יוקטן באופן שגוי לפי גודל המסגרת (#3271). - תיקון הטיפול ב-PCM של 8 ביט ב-
PcmAudioUtilכדי להתייחס לדגימות כלא חתומות, כפי שמוגדר ב-Android (#3271). - תוקנה בעיה של הפחתת עומס שבה ההפעלה עלולה להיתקע במהלך מעברים ללא רווחים או במהלך טעינה מראש, בגלל גודל מוגבל של שטח אחסון זמני בחומרה.
- תיקון באג ב-
DefaultAudioSinkשבו מספר ההפעלות לא יורד כששרשור ההפעלה כבר לא פעיל (#3338).
- תיקון החישוב של גודל המאגר ב-
- סשן:
- תוסף HLS:
- תוסף DASH:
- תיקון חישוב שגוי של חותמת זמן לדוגמה של טראקים של תמונות עם
presentationTimeOffset(#3334).
- תיקון חישוב שגוי של חותמת זמן לדוגמה של טראקים של תמונות עם
- תוספי מפענח (FFmpeg, VP9, AV1 וכו'):
- Opus: תיקון פגיעה בזיכרון כשמאתחלים כמה מופעים של
OpusDecoderבו-זמנית. - MPEG-H: תיקון דליפת זיכרון, קיטוע של תווים שהם לא תווי ASCII וקריסה ברמת שפת המכונה פוטנציאלית בתנאים של זיכרון מועט כששולחים פקודות אל
MpeghUiManager(#3365).
- Opus: תיקון פגיעה בזיכרון כשמאתחלים כמה מופעים של
גרסה 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כדי לאפשר לסטרימינג לדווח על דגלים, ומעדכנים את רכיבי הרינדור כדי לבדוק את הדגלים האלה באופן דינמי. - חזרה למעריך קצב הפריימים ב-
MediaCodecVideoRendererולפורמט הפלט של ה-codec ב-MediaCodecAudioRendererכדי לחשב את קצב הפעולה של ה-codec כשפורמטים של הסטרימינג לא מספקים ערך תקין, וכדי להימנע מאיפוסים מיותרים של ה-codec. - הסרת חיתוך התוכן של מודעות שמוטמעות בצד הלקוח בנגן הליבה. במקום זאת,
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כדי להחזיר את ההקצאות של קבוצות המדינות ארוזות במספר שלם של 32 ביט במקום במערך, וכך להקטין את הקוד ולהימנע מהקצאות. - תיקון כשלים באתחול של
AudioTrackבמכשירים מסוימים על ידי הבטחה שלוגיקת הניסיון החוזר תמיד מנסה שטח אחסון זמני של שנייה אחת לפחות אם ניסיונות חוזרים אחרים (על ידי חציית שטח האחסון הזמני) נכשלים (#3207). - תוקנה בעיה בקודק במכשירים מסוימים, שבה הקודק בלע את כל הדגימות אם הוא נשטף לפני קבלת מאגרי קלט.
- הוספת
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. פרטי הפרקים שחולצו מוצגים כרשומות
Chapterבתוך ה-Metadataשל הטראק, מה שמאפשר ניווט מקורי בין פרקים בקובצי MP4, M4A ו-M4B (כמו ספרי אודיו ופודקאסטים) (#2803). - WAV, Matroska ו-MP4: הוספת תמיכה באודיו PCM עם נקודה צפה (floating point) של 64 ביט (#3090).
- Matroska: משתמשים במטא-נתונים של זרם הנתונים של הקודק כדי לאכלס
ColorInfoמדויק. - MP4: הוספת תמיכה בחיפוש בקובצי MP4 מקוטעים באמצעות התיבה
mfraכשאין תיבתsidx. כדי להפעיל את זה, צריך לספק אתFLAG_READ_MFRA_FOR_SEEK_MAPל-FragmentedMp4Extractor, וזה מה שקורה עכשיו כברירת מחדל ב-DefaultExtractorsFactory(#3088). - התעלמות מנתוני
av1Cעם גרסה לא נתמכת. - MP4: הוספת תמיכה ב-PCM עם נקודה צפה (floating point) בפורמט big-endian בתיבות
fpcm. - Matroska: ניתוח מידע על פרקים לערכי
Chapterב-Metadataשל טראק. - MPEG-TS: שיפור החילוץ של שידורי DTS-HD ו-DTS Express על ידי שילוב של Core ו-Extension Substream לדגימה אחת, ותיקון בעיות הפעלה שבהן שניהם הופקו בעבר כדגימות נפרדות (#3147).
- MP4: מניעת לולאות אינסופיות וקריאות מחוץ לתחום בזמן ניתוח של פריטים ריקים של תגי מטא-נתונים מסוג
ilst(#3191). - MPEG-TS: מוודאים שהפריים האחרון מעובד בסטרימינג שבו חבילת ה-PES האחרונה היא באורך ידוע (#3206).
- MP3: תיקון הדיווח על קצב העברת הנתונים בקבצים עם כותרת 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, כך שישתמש בשטח אחסון זמני קבוע של 500 אלפיות השנייה כדי להפחית את התלות במכשיר. - עדכון של
MediaCodecAudioRendererכדי לחלץ את מסכת הערוצים המרחבית ממפענח הפלטפורמה, כך ש-DefaultAudioSinkיוכל להשתמש במסכה המפורשת הזו במקום להסיק אותה ממספר הערוצים. - המרת הפרמטרים של
AudioSink.configureלמחלקת נתונים. צריך להעביר את השינויים המותאמים אישית שלForwardingAudioSink.configureלחתימת השיטה החדשה. - הוספת תמיכה בשמירה על גובה הצליל כשמותחים את הזמן של שידור אודיו באמצעות
EditedMediaItem.Builder#setSpeed(SpeedParameters). - שיפור של
ToFloatPcmAudioProcessorכדי לתמוך בהמרה של PCM של 8 ביט, PCM של 16 ביט big-endian ו-PCM של 64 ביט עם נקודה צפה (floating point) ל-PCM של 32 ביט עם נקודה צפה (#3090). - משנים את ערך ההחזרה של
DecoderAudioRenderer.getChannelMappingל-ImmutableIntArray. - תוקן באג שגרם לכך שההפעלה נתקעה כשמפעילים פלייליסט של אודיו ללא הפסקות במצב פריקה דחוסה.
- העברת
Timelineו-UID של תקופה אלAudioSink.configureו-AudioProcessor.StreamMetadataכדי לספק הקשר של פלייליסט למעבדי האודיו (#418). - צריך להגדיר את
AudioProcessor.StreamMetadata.positionOffsetUsהנכון כדי לאפשר עיבוד אודיו מבוסס-זמן (#418). - הוספת תמיכה ב-PCM עם נקודה צפה (floating point) של 32 ביט ו-64 ביט ב-big-endian.
- הסרת נתיב החלופה של EAC3-JOC ל-EAC3 להפעלה במכשירי Google Pixel, כי מפענחי EAC3 הרגילים שלהם לא יכולים לפענח סטרימינג של EAC3-JOC (#3257).
- סרטון:
- תיקון הלוגיקה של הצטרפות לסרטון כדי לספור מאגרים שנמחקו במהלך ההצטרפות כמאגרים שדילגו עליהם במקום כמאגרים שנמחקו.
- תוקנה החלטת העיבוד המיידית כשמגדירים משטח חדש כדי למנוע דילוג על פריימים במכשירים שלא תומכים במשטחי פלייסהולדר.
- תיקון ההערכה של קצב הפריימים ב-
MediaCodecVideoRendererכדי שתהיה מדויקת יותר, על ידי התחשבות בפריימים שהושמטו או שדילגו עליהם. - אפשר להגדיר את הסף לתזמון מוקדם של פריימים. ערך ברירת המחדל הוא 50ms, אבל אפשר להתאים אישית את הערך באמצעות
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - תוקן באג ב-
VideoFrameReleaseHelperשבו שינויים בתצוגה עלולים להפעיל קריאות חוזרות (callbacks) מיותרות שלChoreographerוהתעוררויות מוגזמות של המעבד (CPU) בשרשור הראשי.
- טקסט:
- מטא-נתונים:
- מוסיפים את השדה
MediaMetadata.discSubtitleומנתחים אותו מנתוני ID3v2.4TSSTו-VorbisDISCSUBTITLE. - ניתוח מספר הדיסק והספירה ממסגרת ID3
TPOS.
- מוסיפים את השדה
- ההשפעה:
- מנקים את מצב השרטוט מחדש ב-
FinalShaderProgramWrapperבזמן הניקוי כדי למנוע מהנגן לקפוא בזמן החיפוש.
- מנקים את מצב השרטוט מחדש ב-
- מכשירי Mux:
- הוספנו תמיכה בהפניות לטראקים (התיבה
tref) ב-Mp4Muxerבאמצעות ממשק API חדש שלaddTrackReference. כך אפשר ליצור קשרים בין טראקים, למשל לקשר טראק של מטא-נתונים לטראק של הסרטון שהוא מתאר. - צריך להוסיף את
OggMuxerכדי לאפשר ריבוב של מקורות מדיה מסוגOPUSאוVORBISלפורמט הקובץogg. - מוסיפים את
WavMuxerליצירת קובץ WAV (תומך ב-PCM של מספרים שלמים ונקודה צפה). - כדי לאפשר כתיבה של קבצים קטנים יותר שלא ניתנים להעברה בסטרימינג בלי שטח שמור, צריך להוסיף את
setAttemptStreamableOutputEnabledאלInAppMp4Muxer.Factory. - הוספת תמיכה באודיו IAMF ב-
Mp4Muxerוב-FragmentedMp4Muxer.
- הוספנו תמיכה בהפניות לטראקים (התיבה
- תוסף IMA:
- מוסיפים את
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotכדי לאפשר הוספה של מיקום מודעה בדף שבו יוצגו מודעות שמופיעות בהשהיה. - תיקון באג שבו מודעות VAST עוקבות שניתן לדלג עליהן מציגות את לחצן הדילוג מיד במודעה השנייה (#3165).
- מוסיפים את
- סשן:
- תיקון של מבוי סתום (deadlock) פוטנציאלי וקריסות של
IllegalStateExceptionבתוךMediaNotificationManagerכשמשתמשים בסשן עם לולאת נגן של שרשור ברקע. - אכיפה של דרישות מחמירות יותר לגבי שרשורים ב-methods של
MediaSession. שיטות Void מפרסמות עכשיו באופן אוטומטי את ההפעלה לשרשור של לולאת האפליקציה, ו-accessors של מצבים (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 ו-37. - תוקנה בעיה שבה התמונה ב-
MediaSessionהוקטנה פעמיים כשהגודל שלה היה קרוב למגבלה של הפלטפורמה, וכך נפתרה בעיית הטשטוש בהתראות (#3134). - תוקנה קריסה של
ForegroundServiceStartNotAllowedExceptionב-MediaNotificationManagerכשקריאה חוזרת (callback) אסינכרונית של טעינת מפת סיביות (bitmap) של גרפיקה מנסה להפעיל את השירות שפועל בחזית כשהאפליקציה פועלת ברקע (#3270). - תיקון בעיה שבה אובייקטים מסוג
PositionInfoשהתקבלו על ידיMediaControllerלא כללו את מזהי ה-UID המקוריים שלהם מסוגTimeline. עכשיו הסשן מתרגם ומפיץ את המזהים הייחודיים האלה באופן מהימן במהלך עדכוני המצב. - תיקון קריסה על ידי זיהוי
ForegroundServiceStartNotAllowedExceptionב-MediaSessionService.stopSelfSafely()(#3310). - תיקון קריאה חוזרת (callback) לא צפויה של
onMediaItemTransition()ב-MediaControllerכשמחפשים בתוך אותו קובץ מדיה (#3248).
- תיקון של מבוי סתום (deadlock) פוטנציאלי וקריסות של
- ממשק המשתמש:
- תיקון של רינדור הפריים הראשון בגודל שגוי כש-
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לפונקציה הקומפוזבילית שלPlayerולמשבצות התוכן שלה. - מפרסמים את
PlayerPool(common-ktx) ואתrememberPooledPlayer(ui-compose) כדי לתמוך בטעינה מראש שלMediaItemsבסביבות ממשק משתמש של חלון הזזה. כדאי להציג את הפונקציונליות הזו ב-demo-composeבאמצעותShortFormPlayerScreenחדש. - תיקון באג של דיכוי תריס ב-
PlayerViewוב-ComposePresentationStateשגרם לקריסות בציר הזמן שלא תומך בחיפוש 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. - מניעת העברה של
MediaItemsשלא ניתנים להפעלה על ידיCastPlayerכשמשנים את הנגן הפעיל (#3199). - תוקן באג שבו שידורים חיים שלא הוגדרו (
liveConfiguration == UNSET) הועברו לתור בתורSTREAM_TYPE_BUFFERED(#3318).
- הוספת מחלקה חדשה של
- כלי בדיקה:
- מרחיבים את
DataSourceContractTestכדי לכלול תמיכה בבקשותPOSTעם כותרות וגופים, מוסיפים כמה משאביPOSTאלHttpDataSourceTestEnvומוסיפים טענות נכונות (assertions) לשיטת ה-HTTP, לכותרות ולגוף הצפויים ב-WebServerDispatcher. - הקשחת טענות נכונות (assertions) ב-
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.
- הסרה של
- יצירה
- עדכנו את ההוראות של
README.mdלגבי תלות ב-Media3 באופן מקומי כדי להשתמש ב-Gradle Composite Builds (includeBuild). הסקריפטcore_settings.gradleהוסר, והמאפייניםandroidxMediaModulePrefixו-androidxMediaEnableMidiModuleכבר לא בשימוש.
- עדכנו את ההוראות של
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.
- תוקנה בעיה שבה פגמים בסרטון נגרמו כתוצאה מאספקת נתוני אתחול כשמשתמשים בקודק 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 ואילך. הפתרון הזמני היה צוואר בקבוק מלאכותי שאילץ את הפענוח לפעול באופן סדרתי, וכך מנע סרטונים משובשים בגלל בעיה ב-framework שהייתה קיימת לפני 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כדי להתאים טוב יותר בין עבודת התזמון לבין מחזורי ההתעוררות של המעבד (CPU) לזמנים שבהם אפשר לעבד פריימים של סרטונים. אפשר להפעיל את זה באמצעותexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()ב-DefaultRenderersFactory. - אפשר להגדיר
DataSource.Factoryבהתאמה אישית ב-DefaultPreloadManager.Builder. - מאפשרים ללעוג ל-
ExoPlayerבלי Robolectric על ידי העברת כמה קבועים שמוגדרים כברירת מחדל אלExoPlayer.Builder. באופן כללי, לא מומלץ לדמות את הממשק המורכב הזה – רק כשהשימוש הוא מינימלי/פשוט/מקרי (#2985).- לשם כך היה צריך להעביר את
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSמ-ExoPlayerאלExoPlayer.Builder(בלי הוצאה משימוש).
- לשם כך היה צריך להעביר את
- תוקן באג שבו
ProgressiveMediaSourceמעביר מידע לא עדכני על ציר הזמן לנגן, והתקופות בתור מוסרות באופן בלתי צפוי (#3016). - תוקנה בעיה שבה ExoPlayer לא ביקש השהיה של מיקוד האודיו כשמבקשים להפעיל תוכן במהלך שיחות טלפון.
- תוקן באג שבו מעברים מתוכן VOD לתוכן בשידור חי עלולים לגרום לטעינה מחדש של מאגר הנתונים בסוף התוכן VOD (#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: תמיכה בקבצים עם תיבות
- Inspector:
- שינוי תוכנה שעלול לגרום לכשל: הסרת
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). - ניסיון להתאים את פריסת הפלט של הרמקולים (או של Spatializer, אם רלוונטי) בזמן פענוח IAMF, גם עם תוסף IAMF וגם עם מפענחי קודק מדיה, שנתמכים על ידי שדות ולוגיקה חדשים ב-AudioCapabilities וב-AudioCapabilitiesReceiver.
- תוקן באג שגרם לכך שההפעלה נתקעה כשמפעילים פלייליסט של אודיו ללא הפסקות במצב פריקה דחוסה.
- שינוי ספריית הפענוח הבסיסית של תוסף המפענח של IAMF מ-
- טקסט:
- VobSub: שימוש בפקודות הבקרה
STARTו-STOPשל SPU כדי להפיק את משך הזמן של האות במקום להשתמש תמיד בברירת המחדל של 5 שניות (#2935).
- VobSub: שימוש בפקודות הבקרה
- מטא-נתונים:
- הגדלת מספר ברירת המחדל של מעבדי המטא-נתונים לארבעה כדי לכסות את כל הטראקים הפוטנציאליים של המטא-נתונים שפורסמו על ידי גרסאות ועיבודים של HLS (#3043).
- ההשפעה:
- העברת
LottieOverlayלמודול:media3-effect-lottieחדש (שכללה גם שינוי שם מ-androidx.media3.effect.LottieOverlayל-androidx.media3.effect.lottie.LottieOverlay).
- העברת
- אפקט Lottie:
- הוספנו מודול חדש של
:media3-effect-lottieשמאפשר להחיל אפקטים של Lottie על פריימים של סרטונים.
- הוספנו מודול חדש של
- תוסף IMA:
- כדי לקבל גישה ל-API העדכני של פרטי המדיה של המודעה, צריך לעדכן את גרסת ה-IMA SDK ל-3.39.0.
- תוקן באג שבו סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שצוין באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות פרטי המדיה של המודעה שסופקו על ידי IMA.
- מוסיפים את
setEnableCustomTabsאלImaAdsLoaderואלImaServerSideAdInsertionMediaSource, כדי לאפשר למשתמשים לקבוע אם כתובות היעד של הקליקים על המודעות יופעלו באמצעות כרטיסיות בהתאמה אישית. - מוסיפים את
ImaAdTagUriBuilder, מחלקה שמציעה דרך חלופית ליצורadTagUri. הוא מכיל את ה-API שלsetPreferredLinearOrientation. זהו API בבדיקת אלפא שיאפשר לכם להגדיר את הכיוון המועדף למודעות ליניאריות. אם אתם רוצים להצטרף לקבוצת הבדיקה של גרסת האלפא, פנו למנהל החשבון שלכם.
- סשן:
- תיקון באג שבו מערכים גדולים ב-
MediaMetadata.artworkDataיכולים לגרום לקריסת האפליקציה. - שימוש בסוג int לארגומנט
@Player.CommandבממשקActionFactory(#2933). - הפיכת
MediaSessionServiceו-MediaLibraryServiceל-LifecycleService, כדי לאפשר צירוף של פעולות שמודעות למחזור החיים למחזור החיים של השירות (#187). - הפסקת התמיכה בפקודות לשינוי עוצמת הקול במכשיר מ-
MediaControllerומ-MediaBrowserלהפעלות מקומיות. האפליקציות לא אמורות לשנות את עוצמת הקול במכשיר המקומי, ואם צריך, הן יכולות להשתמש בממשקי ה-API שלAudioManagerלמטרה הזו. - זיהוי מופעים לא פעילים של
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).
- תיקון באג שבו מערכים גדולים ב-
- ממשק המשתמש:
- מוסיפים את
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 כוללת את ה-commits הבאים.
- ההשפעה:
- צריך להגדיר במפורש את
GL_DRAW_BUFFERו-GL_READ_BUFFERכשעוברים מהקשר ללא משטח.
- צריך להגדיר במפורש את
1.9.3
16 במרץ 2026
גרסה 1.9.3 כוללת את ה-commits הבאים.
- אודיו:
- תוקן באג שגרם לכך שההפעלה נתקעה כשמפעילים פלייליסט של אודיו ללא הפסקות במצב פריקה דחוסה.
1.9.2
6 בפברואר 2026
גרסה 1.9.2 כוללת את ה-commits הבאים.
- ExoPlayer:
- תוקן באג שבו
ProgressiveMediaSourceמעביר מידע לא עדכני על ציר הזמן לנגן, והתקופות בתור מוסרות באופן בלתי צפוי (#3016).
- תוקן באג שבו
- סשן:
- תוקנה בעיה שבה פתרון עקיף למיקום של לחצן בממשק המשתמש של המערכת משפיע לרעה על משטחים אחרים של ממשק המשתמש, כמו Android Auto או יצרנים שלא צריכים את הפתרון העקיף (#3041).
- תוסף Cast:
- תוקן באג שגרם לכך שהעברה מ-Cast להפעלה מקומית לא פעלה.
1.9.1
26 בינואר 2026
גרסה 1.9.1 מכילה את ה-commits האלה.
- ספרייה משותפת:
- תמיכה במחרוזות של תאריך ושעה עם שעות בלבד בהיסט של אזור הזמן (#2929).
- ExoPlayer:
- כדי לשפר את הסנכרון בין האודיו לווידאו בתחילת ההפעלה, אפשר לאפשר לתזמון הדינמי להאט את המרווח של
doSomeWorkרק אחרי שהאודיו מתחיל. - תוקן באג ב-
DefaultLoadErrorHandlingPolicyשבו בוצעו ניסיונות חוזרים מרובים שלFileNotFoundExceptionוסוגי חריגים דומים. - תוקן באג בתזמון הדינמי שבו הזמן המחושב של
doSomeWorkהבא הופחת בטעות לפי הזמן שחלף באיטרציה הנוכחית שלdoSomeWork. טיפול בבעיה הזו אמור להאריך את זמן חוסר הפעילות של המעבד (CPU) ולחסוך בחשמל. - תוקנה בעיה שבה חלק מההפעלות של קובצי Dolby Vision נכשלו כשניסו להשתמש בקודק חלופי של AVC או HEVC.
- תיקון באג שבו הטעינה נמשכת אחרי שההפעלה הסתיימה כשמסירים את הפריט שמופעל כרגע מפלייליסט (#2873).
- נמנעת דליפה של מופעי
MediaItemכשמשתמשים שוב ושוב ב-ExoPlayer.replaceMediaItemבאותו פריט (#2993). - מניעת שגיאות ANR פוטנציאליות שנגרמות כתוצאה משחרור חירום של חסימות מצב שינה (#2979).
- כדי לשפר את הסנכרון בין האודיו לווידאו בתחילת ההפעלה, אפשר לאפשר לתזמון הדינמי להאט את המרווח של
- מחלצים:
- MP3: ניתוח נתוני ReplayGain של LAME (#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).
- תוקן באג שבו המחבר, הכותב והמלחין לא שימשו כחלופה כשבוצעה המרה מ-
MediaMetadataCompatומ-MediaDescriptionCompatהקודמים (#3018).
- תוקן באג שבו עצירה של
- הורדות:
- תיקון לולאות אינסופיות פוטנציאליות כש-
PriorityTooLowExceptionמטופל על ידיSegmentDownloader(ל-DASH, ל-HLS ול-SmoothStreaming). כשמבצעים שינויים מותאמים אישית ב-SegmentDownloaderבאמצעות השיטה המוגנתexecute, צריך לספק את המשימה עטופה ב-Supplierכדי שיהיה אפשר ליצור אותה מחדש (#2931).
- תיקון לולאות אינסופיות פוטנציאליות כש-
- תוסף HLS:
- מעבירים את מסמך ה-JSON של רשימת הנכסים הגולמיים אל פונקציית ה-callback של
Listener.onAssetListLoadCompleted. זהו שינוי תוכנה שעלול לגרום לכשל ב-API לא יציב, שמחייב אפליקציות שמטמיעות את הקריאה החוזרת (callback) הזו להוסיף ארגומנט נוסף מסוגJSONObject(#2950).
- מעבירים את מסמך ה-JSON של רשימת הנכסים הגולמיים אל פונקציית ה-callback של
- תוסף RTSP:
- טיפול נכון בחבילות RTP עם חותמות זמן שמתעגלות (#2930).
- תוספי מפענח (FFmpeg, VP9, AV1 וכו'):
- תיקון של
NullPointerExceptionפוטנציאלי שיכול להתרחש כשמנסים לדלג לפני עיבוד הפריים הראשון של הסרטון (#2965).
- תיקון של
- תוסף Cast:
- תוקן באג שמנע עדכון תקין של ציר הזמן של
RemoteCastPlayerכשמחליפים את הפלייליסט.
- תוקן באג שמנע עדכון תקין של ציר הזמן של
1.9.0
17 בדצמבר 2025
- ספרייה משותפת:
- עדכון של
minSdkל-23בהתאם לספריות AndroidX אחרות. - מוסיפים את
PlayerTransferState, שמאפשר להעביר את מצב ההפעלה בין מופעים שלPlayer. - מוסיפים ל-Player את השיטות
void mute()ו-void unmute()ששומרות את עוצמת הקול של Player לפני ואחרי שהיא מוגדרת לאפס, וכתוצאה מכך משחזרות אותה. - פרסום מחלקות שירות
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerו-StuckPlayerDetectorששימשו בעבר אתExoPlayerבאופן פנימי כדי לאפשר שימוש חוזר בנגנים אחרים (#1893). - תיקון הטיפול במאזין
ForwardingPlayerכשנגן הנציג הבסיסי משתמש בשוויון הפניות כדי להשוות בין מופעי מאזינים (#2675). - מוסיפים פונקציית השעיה של
Player.listenToבספרייהmedia3-common-ktxשמציינת את ה-Player.Eventsהספציפי שצריך לפעול לגביו. - תוקנה קריסה ב-
BasePlayer.getBufferedPercentageשנגרמה מגלישת מספר שלם כשהמיקום המדווח במאגר היה גדול באופן לא סביר מהמשך המדווח (#2750). - תיקון הזיהוי האוטומטי של סוג הטראק
TrackGroupעל ידי אי-התעלמות מסוג ה-MIME של הדגימה בהתאמה אישית, וחזרה לשימוש בסוג הטראק שעלול להיות שגוי מסוג ה-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יכול לקבל החלטות לגבי כל נגן בנפרד, על סמך הבייטים שהוקצו לו והבייטים של מאגר הנתונים הזמני (buffer) המטורגט. - מוסיפים את
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ל-15 אלפיות השנייה ומפעילים השמטה יעילה יותר של פריימים בסרטונים שעומדים בדרישות לפני הפענוח. - הוספת מגבלת זיכרון מקסימלית לחישוב הזיכרון האוטומטי ב-
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כדי לציין העדפה לטראקים עם תווית ספציפית, למשל כאלה שנקראים מתגי HLS NAME (#1666).
- מוסיפים את
- מחלצים:
- FLAC: הקשחת הזיהוי של הכותרת כדי להקטין את הסיכוי למציאת כותרות מזויפות בנתוני ה-FLAC המקודדים, שגורמות לשגיאות בפענוח (#558).
- MP3: אפשרות להוסיף רווחים בין תגי ID3 (ולפניהם) בתחילת קובצי MP3 (#811, #5718).
- MP3: הגדלת מגבלת ה-sniffing ל-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שבה החיפוש לא היה מדויק בקבצים עם כמה טראקים. נקודות הסימון משויכות עכשיו בצורה נכונה לטראקים המתאימים, וכך החיפוש מדויק יותר. - MPEG-TS: תיקון של
IllegalArgumentExceptionמ-ReorderingBufferQueueשנגרם על ידי חבילות PES ללא חותמת זמן (#2764). - הוספת תמיכה בחילוץ תמונות עם תנועה בפורמט HEIC. עכשיו
HeifExtractorיכול לנתח קובצי HEIC שמכילים טראקים מוטמעים של וידאו ואודיו.
- Inspector:
- הוספנו מודול
: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).
- אפשר לעשות שימוש חוזר בקודק בפורמטים EAC3, EAC3-JOC ו-AC-4 (#1346).
- הוספת תמיכה בדגימות PCM מסוג float ב-
Sonic. - הוספת תמיכה בדגימות PCM של 16 ביט ב-
ToFloatPcmAudioProcessor.
- הוספת מודעות לחיפוש ב-
- סרטון:
- השבתת השימוש החוזר בקודק לתוכן של Dolby-Vision עם פרופילים שונים.
- הפעלה מחדש של הפתרון הזמני לדיווח שגוי על נקודות ביצועים של קודקים מאובטחים (#2856).
- טקסט:
- תיקון הניתוח של כתוביות CEA-6/708 בתוכן Dolby Vision (#2775).
- תמונה:
- תוקנה בעיה ב-ScrubbingMode שבה הנגן נתקע בזמן חיפוש לאורך ציר הזמן בטראק של תמונות ממוזערות ב-DASH (#2815).
- DRM:
- שינוי סוג ההחזרה של השיטות
MediaDrmCallbackמ-byte[]לסוגMediaDrmCallback.Responseחדש, כדי לאפשר החזרה של מידע אופציונלי נוסף. זהו שינוי תוכנה שעלול לגרום לכשל במקור, אבל אפשר לפתור את הכשלים בקלות על ידי גלישת ערך ההחזרה הקודם שלbyte[]עםnew Responseלפני ההחזרה. - הוספת מידע חשוב על בקשות, כמו כתובת URL וזמן אחזור, אל
AnalyticsListener.onDrmKeysLoaded(#1001). - מעבירים את נתוני בקשת ההקצאה מפרמטר של כתובת URL לגוף ה-POST.
- שינוי סוג ההחזרה של השיטות
- ההשפעה:
- מוסיפים את
Presentation.copyWithUnsetSideRoundedToכדי לעגל את הצד של הפלט שלא הוגדר כש-Presentationנוצר עם אורך צד אחד.
- מוסיפים את
- מכשירי Mux:
- צריך להוסיף את
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. קודי רשת הם אופציונליים, אבל מומלץ להשתמש בהם בבקשות לשידור ב-Full service. במאמר הזה מוסבר איך למצוא את קוד הרשת. - מעדכנים את התלות ב-IMA לגרסה 3.37.0, שמחייבת הפעלה של תהליך הסרה של סוכר תחבירי בספריית הליבה. צריך להפעיל את האפשרות הזו גם באפליקציות התלויות. הערות לגבי הגדרות אישיות של 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ל-non fatal. - הוספת פרמטר
ContextאלMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - קריאת המזהה של בקרת עוצמת הקול מהפלטפורמה
PlaybackInfoבמקום לאחזר אותו באמצעות binder. כך אפשר לוודא שסוג ההפעלה ומזהה בקרת עוצמת הקול נקראים באופן אטומי ותואמים זה לזה. - תוקן באג שבו אירועי מקשים של
ACTION_UPסוננו לפני שהועברו לקריאה החוזרת (callback) לטיפול מותאם אישית. כך נוצרת התאמה למה ש-media1 עשה ולמה שהפלטפורמה עושה (#2637). - תוקן באג שבו
getCurrentTimeline()נקרא על ידיPlayerWrapperגם כשהפקודה לא זמינה (#2665). - תוקן באג שבו הודעה נשארה בתור ההודעות של הלולאה הראשית, מה שגרם לדליפת זיכרון אחרי שהשירות הסתיים (#2692).
- כשמתחברים לאפליקציית סשן מדור קודם עם
MediaBrowser, פקודות מותאמות אישית נשלחות לסשן רק אם הפעולה המותאמת אישית מפורסמת כפעולה מותאמת אישית ב-PlaybackStateCompatשל הסשן מדור קודם. כל שאר הפעולות המותאמות אישית נשלחות לשירות. - הטמעת
onAudioSessionIdChangedכדי להודיע לממשקי השליטה במדיה כשמזהה סשן אודיו מוגדר על ידי הסשן (#244). - תוקן באג שבו
KEYCODE_HEADSETHOOKלא הפעיל את הנגן כשאירוע של מקש מדיהIntentהגיע אלonStartCommand(). כדי לפתור את הבעיה, צריך לטפל ב-KEYCODE_HEADSETHOOK בדיוק כמו ב-KEYCODE_MEDIA_PLAY_PAUSE(#2816). - תוקן באג שבו גודל ה-Surface לא הועבר בין הסשן לבין הבקר, וכתוצאה מכך לא הופעלו אפקטים של וידאו ב-demo-session. אם אתם משתמשים בבקר, יכול להיות שזה שינוי תוכנה שעלול לגרום לכשל אם הנגן שלכם לא יכול לטפל בקריאה ל-
setVideoSurfaceHolder. - תיקון ההפצה של ערכי מטא-נתונים שאינם
StringCharSequence, כמו מחרוזות בסגנון span (#2853). - כדאי להוסיף
CommandButton.executeActionכדי שיהיה קל יותר להפעיל את הפעולה הרצויה באמצעות הבקרים. אפשר גם לציין פרמטרים לפקודות מסוימות של הנגן והסשן כדי להגדיר איזו פעולה להפעיל. - מוסיפים תאימות לדורות קודמים למופעים של
CommandButtonבאמצעותPlayer.CommandאוSessionCommandלא מותאם אישית כדי להגדיר את הפעולה שלהם. עכשיו הם מיוצגים בצורה נכונה בסשנים של מדיה בפלטפורמה, למשל בממשק המשתמש של המערכת או ב-Android Auto. - תוקנה בעיה שבה אותו
Bitmapנדחס כמה פעמים כשמחבריםMediaControllerלסשן מדיה בפלטפורמה.
- הוספת פרמטר חדש ל-
- ממשק המשתמש:
- מוסיפים את המחלקה
ProgressStateWithTickIntervalואת ה-Composable התואם שלrememberProgressStateWithTickIntervalלמודולmedia3-ui-compose. מאחסן המצב הזה משמש ב-demo-composeכדי להציג את המיקום הנוכחי ואת משך הזמן בפורמט טקסט. - מוסיפים את
MuteButtonStateאלui-composeשמטפל בהשתקה של עוצמת הקול שלPlayer. מאחסן המצב הזה משמש ב-demo-composeכדי להציג מתג להשתקה/ביטול השתקה. - מוסיפים את המחלקות של
ProgressStateWithTickCountואת ה-Composable התואם שלrememberProgressStateWithTickCountלמודולmedia3-ui-compose. מאחסן המצב הזה משמש ב-demo-composeלהצגת ההתקדמות כסרגל התקדמות אופקי לקריאה בלבד. - מוסיפים את
ContentFrameComposable ל-media3-ui-compose, שמשלב ניהול שלPlayerSurfaceעם שינוי גודל של יחס הגובה-רוחב וכיסוי באמצעות תריס. - עקיפת באג ידוע בפלטפורמת API 34 שגורם לסרטונים מתוחים או חתוכים כשמשתמשים ב-
SurfaceViewבתוךAndroidViewשל Compose, ולכן משפיע על רכיבי ה-Composable שלContentFrameו-PlayerSurfaceעםSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - יוצרים מודול
media3-ui-compose-material3חדש ומוסיפים לו רכיבי Composable עם עיצוב Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - מוסיפים את הרכיב הניתן לקישור
TimeTextל-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 עם מניפסט URI לא היררכי שלdata:(#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 בהדגמה של Session.
- הוספת תמיכה בהצגת כפתור של מסלול מדיה בממשק משתמש של Composable.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה בתפריט של סרגל הפעולות.
- הוספת תמיכה בהצגת כפתור של נתיב מדיה כממשק משתמש של תצוגה.
- מוסיפים את
- כלי בדיקה:
- הוספת הפרש הזמן המקסימלי להתנהגות המעבר האוטומטי לנושא הבא של
FakeClock. ערך ברירת המחדל הוא שנייה אחת, אבל אפשר להגדיר אותו באמצעותFakeClock.Builder. - הוספת הפרש הזמן המקסימלי בין הודעות עבור
RobolectricUtil.runMainLooperUntil(וגםrunLooperUntil). ברירת המחדל היא שנייה אחת, אבל אפשר להגדיר את זה באמצעות עומסי יתר חדשים של השיטות האלה. - העברת תקציב של
CapturingRenderersFactoryמהקמפייןtest-utilsאל הקמפייןtest-utils-robolectric.
- הוספת הפרש הזמן המקסימלי להתנהגות המעבר האוטומטי לנושא הבא של
- הסרת סמלים שהוצאו משימוש:
- הסרת ה-constructor של
DefaultPreloadManagerשיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultPreloadManager.Builder. - הוסרו בנאים (constructors) של
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 כוללת את ה-commits הבאים.
- ההשפעה:
- צריך להגדיר במפורש את
GL_DRAW_BUFFERו-GL_READ_BUFFERכשעוברים מהקשר ללא משטח.
- צריך להגדיר במפורש את
גרסה 1.8.0
30 ביולי 2025
גרסה 1.8.0 מכילה את השמירות האלה.
- ספרייה משותפת:
- הוספת תמיכה בהחלפת הנגן ב-
ForwardingSimpleBasePlayer.
- הוספת תמיכה בהחלפת הנגן ב-
- ExoPlayer:
- הוספת פונקציית getter למצב הפעלה אקראית לממשק
ExoPlayer(#2522). - הוספת חריגה ברורה יותר אם יש גישה אל
DefaultAudioSinkמכמה שרשורים. אם זה קורה בגלל קריאה ל-RendererCapabilities.getFormatSupportמחוץ לנגן, צריך לוודא שהקריאה ל-method הזה מתבצעת באותו שרשור כמו שרשור ההפעלה של ExoPlayer, או להשתמש במופע שונה מזה שמשמש להפעלה (#1191). - תוקן באג שבו פורמטים של אודיו שאינם סטריאו בטלוויזיות עשויים להיות מסומנים כלא נתמכים על ידי
DefaultTrackSelector. - מוודאים שהפריים האחרון מוצג בצורה נכונה כשמשתמשים בדגל
DECODE_ONLYשל MediaCodec (שמופעל כברירת מחדל במצב גלילה). - הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-
Contextשמועבר אלExoPlayer.Builder. - הפעלת תזמון דינמי כברירת מחדל במצב סריקה.
- הימנעות מטעינה מחדש מיותרת של מקור כשמדלגים לסוף של פריט.
- שימוש ב-
MediaCodec.BUFFER_FLAG_DECODE_ONLYכברירת מחדל במצב גלילה. - השלכת
IllegalStateExceptionכש-PreloadMediaSourceמופעל על ידיExoPlayerעם שרשור הפעלה שונה משרשור הטעינה מראש (#2495). - הוספת
cloneAndMoveל-ShuffleModeעם הטמעה שמוגדרת כברירת מחדל (#2226). - משנים את פעולת ברירת המחדל של
Renderer.getMinDurationToProgressUsכדי להחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render. - תוקן באג שבו התזמון הפנימי עיכב את הפריים האחרון כשחיפשו עד הסוף בזמן השהיה. נכון לעכשיו, תיקון הבאג נכנס לתוקף רק אם המדיניות
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledמופעלת. - הוספת שיטת
ExoPlayer.setScrubbingModeEnabled(boolean). כך הנגן עובר אופטימיזציה לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל הגלילה). אפשר להתאים אישית את ההתנהגות של מצב הניקוי באמצעותsetScrubbingModeParameters(..)ב-ExoPlayerוב-ExoPlayer.Builder. - אפשר להתאים אישית את טולרנס החיפוש החלקי במצב גלילה.
- הגברת קצב הפעולה של ה-codec במצב גלילה.
- תוקן באג שבו שגיאות הכנה בתוכן של
AdsMediaSourceלא דווחו אף פעם (#2337). - תיקון דליפת זיכרון ב-
MergingMediaSource, למשל כשמשתמשים בטעינת צד של כתוביות (#2338). - אפשרות להחזיר את הערך
nullב-CmcdConfiguration.Factoryכדי להשבית את רישום ה-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 (כולל כאלה שמכילות רק נקודות חיפוש של פלייסהולדרים), וחזרה לחיפוש בינארי אם משך הקובץ ידוע (#2327).
- תיקון הניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
- צריך לעדכן את
WavExtractorכך שישתמש בנתוני SubFormat של תוסף הכותרת בשביל פורמט האודיו כשמנתחים קובץ מסוגWAVE_FORMAT_EXTENSIBLE. - MP4: הוספת תמיכה בתיבות
ipcmו-fpcmשמגדירות טראקים של אודיו PCM גולמי (אין תמיכה ב-PCM נקודה צפה של 64 ביט). - MP4: טיפול בחלק של הסיבוב במטריצות הטרנספורמציה של
tkhd, שגם מסובבות את הסרטון וגם משקפות אותו. כך סרטונים שצולמו במצלמה הקדמית של האייפון מוצגים בכיוון הנכון, אבל עם השתקפות שגויה בציר ה-Y (#2012). - MP3: שימוש במשך ובגודל הנתונים ממטא-נתונים של קצב העברת נתונים משתנה (VBR) שלא ניתן לדלג בהם, כמו Xing, VBRI ודומיהם, כשחוזרים לדילוג בקצב העברת נתונים קבוע (CBR) בגלל
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כשמוסיפים לתור מאגרי קלט לפענוח בלבד. הדגל הזה ינחה את המפענח לדלג על מאגרי הנתונים הזמניים (buffers) לפענוח בלבד, וכך החיפוש יהיה מהיר יותר. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * שיפור בדיקות הביצועים של קודקי וידאו בתוכנה. יכול להיות שבעקבות זאת טראקים נוספים יסומנו כ-EXCEEDS_CAPABILITIES. - תיקון שגיאות הפעלה של VP9 Widevine במכשירים מסוימים (#2408).
- טקסט:
- הוספת תמיכה בטראקים של VobSub בקובצי MP4 (#2510).
- תיקון בעיה שבה ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה, ואז נטען בהצלחה, ואחריו יש כמה קטעי כתוביות ריקים (#2517).
- תיקון של SSA ו-SubRip כדי להציג אות בתהליך כשמפעילים כתוביות (#2309).
- תיקון בעיה שבה ההפעלה נתקעת כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם טראק כתוביות ריק (#2328).
- תיקון כתוביות CEA-608 משובשות כשמפעילים סטרימינג של H.262 שמכיל פריימים מסוג B (#2372).
- הוספת תמיכה בכתוביות SSA עם
CodecId = S_TEXT/SSAבקובצי Matroska. בעבר,MatroskaExtractorתמך רק ב-CodecId = S_TEXT/ASS, שנועד לייצג את הגרסה "המתקדמת" (גרסה 4 ואילך) של כתוביות SubStation Alpha (אבל לוגיקת הניתוח של ExoPlayer זהה בשתי הגרסאות) (#2384). - הוספת תמיכה במאפיין
layerבקובצי כתוביות בפורמט SubStation Alpha (SSA), שמשמש להגדרת סדר ה-Z של סימונים כשמוצגים כמה סימונים בו-זמנית על המסך (#2124).
- מטא-נתונים:
- הוספנו תמיכה באחזור של משך המדיה ו-
Timelineל-MetadataRetriever, והעברנו אותו ל-API מבוסס-מופע,AutoCloseable. משתמשים ב-Builderהחדש כדי ליצור מכונה שלMediaItem, ואז קוראים ל-retrieveTrackGroups(), ל-retrieveTimeline()ול-retrieveDurationUs()כדי לקבלListenableFutureלמטא-נתונים. השיטות הסטטיות הקודמות הוצאו משימוש (#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שמבטיח שהצד הקצר ביותר תמיד יתאים לערך הנתון, ללא קשר לכיוון הקלט.
- מוסיפים את
- מכשירי Mux:
- תוקן באג שבו לא הוגדרו דגלי דגימה נכונים לדגימות אודיו ב-MP4 מקוטע.
-
writeSampleData()API משתמש עכשיו במחלקהBufferInfoספציפית ל-muxer במקום ב-MediaCodec.BufferInfo. - מוסיפים את
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, שערך ברירת המחדל שלו הוא false.
- תוסף IMA:
- תוקן באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
- תוקן באג שגרם לכך שקבוצות של מודעות אחרי הסיום של חלון VOD השהו את ההפעלה.
קבוצות של מודעות עם שעת התחלה אחרי החלון לא נוספות יותר לתור של
MediaPeriodQueue(#2215).
- סשן:
- תיקון באג שבו המערכת מתעלמת מחיבורים מבקרי Media3 של צד שלישי ללא הרשאות.
- הסרת הבדיקה של הפקודות הזמינות כששולחים פקודות בהתאמה אישית ל-
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.
- ממשק המשתמש:
- תוקן באג שבו
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:
- תוקנה בעיה שבה קבוצת ההתאמה של מצב trick-play מוזגה עם קבוצת ההתאמה הראשית שלה כדי ליצור
TrackGroupלא תקין (#2148). - תוקן באג שבו קיצור משך הזמן של תקופת DASH עלול לגרום לחריגה כשדגימות מעבר למשך הזמן החדש כבר נקראו על ידי צינור עיבוד הנתונים לעיבוד (#2440).
- תוקן באג שבו לא בוצעה הפניה אוטומטית כשנעשה שימוש בפרמטרים של שאילתת CMCD (#2475).
- תוקנה בעיה שבה קבוצת ההתאמה של מצב trick-play מוזגה עם קבוצת ההתאמה הראשית שלה כדי ליצור
- תוסף 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כדי להגדיר מקודדים ומפענחים של Shadow. - החלפת הקידומת exotest ב-media3 בשמות של קודקים שדווחו על ידי
ShadowMediaCodecConfig.
- מוסיפים את
- הסרת סמלים שהוצאו משימוש:
- הוסר ה-constructor שהוצא משימוש
SegmentDownloaderSegmentDownloader(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 כוללת את ה-commits האלה.
- ספרייה משותפת:
- הוספת ה-method
PlaybackParameters.withPitch(float)כדי להעתיק בקלותPlaybackParametersעם ערךpitchחדש (#2257).
- הוספת ה-method
- 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).
- סשן:
- הפחתת הזמן הקצוב לתפוגה של צבירת הנתונים עבור קריאות חוזרות (callbacks) של פלטפורמת
MediaSessionמ-500 ל-100 אלפיות השנייה, והוספת פונקציית setter ניסיונית כדי לאפשר לאפליקציות להגדיר את הערך הזה. - תוקנה בעיה שבה התראות הופיעו שוב אחרי שהמשתמש סגר אותן (#2302).
- תוקן באג שבו הסשן החזיר ציר זמן עם פריט אחד כשהנגן שעטוף למעשה ריק. זה קרה כשהנגן העטוף לא הכיל את
COMMAND_GET_TIMELINE, אבלCOMMAND_GET_CURRENT_MEDIA_ITEMהיה זמין והנגן העטוף היה ריק (#2320). - תוקן באג שבו קריאה ל-
MediaSessionService.setMediaNotificationProviderמתעלמת בשקט אחרי אינטראקציות אחרות עם השירות, כמוsetForegroundServiceTimeoutMs(#2305).
- הפחתת הזמן הקצוב לתפוגה של צבירת הנתונים עבור קריאות חוזרות (callbacks) של פלטפורמת
- ממשק המשתמש:
- מפעילים את
PlayerSurfaceכדי לעבוד עםExoPlayer.setVideoEffectsו-CompositionPlayer. - תיקון באג שבו לא ניתן ליצור מחדש את
PlayerSurfaceעםPlayerחדש.
- מפעילים את
- תוסף HLS:
- תוקנה בעיה שבה משך הזמן של מקטע לא הוגדר ב-
CmcdDataלמדיה בפורמט HLS, מה שגרם לכשל בטענת הנכוֹנוּת (assertion) במהלך העיבוד של מקטעי מדיה מוצפנים (#2312).
- תוקנה בעיה שבה משך הזמן של מקטע לא הוגדר ב-
- תוסף RTSP:
- הוספת תמיכה ב-URI עם סכימת RTSPT כדרך להגדיר את סשן ה-RTSP לשימוש ב-TCP (#1484).
- תוסף Cast:
- הוספת תמיכה במטא-נתונים של פלייליסטים (#2235).
1.6.0
26 במרץ 2025
androidx.media3:media3-*:1.6.0 מופץ. גרסה 1.6.0 מכילה את ה-commits האלה.
- ספרייה משותפת:
- מוסיפים את
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ל-methodDefaultTrackSelector.selectVideoTrack(). - מוסיפים את הפרמטר
retryCountל-MediaSourceEventListener.onLoadStartedול-methods המתאימות שלMediaSourceEventListener.EventDispatcher. - תוקן באג שבו פריטים בפלייליסט או תקופות בסטרימינג של DASH עם כמה תקופות, שהמשכים שלהם לא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריימים בסוף הפריט (#1698).
- מעבירים את
BasePreloadManager.Listenerל-PreloadManagerListenerברמה העליונה. - אפשר להטמיע את
RenderersFactory.createSecondaryRendererכדי לספק רכיבי רינדור משניים לחימום מראש. התכונה הזו מאפשרת מעבר מהיר יותר בין קובצי מדיה במהלך ההפעלה. - הפעלת השליחה של
CmcdDataלבקשות מניפסט בפורמטים של סטרימינג דינמי: DASH, HLS ו-SmoothStreaming (#1951). - צריך לספק את
MediaCodecInfoשל ה-codec שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec(#1963). - כדי להגדיל את
AdPlaybackStates, צריך לשנות אתAdsMediaSourceעל ידי הוספת קבוצות של מודעות. שינויים לא תקינים מזוהים ומובילים לחריגה. - תוקנה בעיה שבה פריימים נוספים לפענוח בלבד עשויים להופיע ברצף מהיר במעבר למדיה של תוכן אחרי מודעה באמצע הסרטון.
- כדי לאפשר לאפליקציות לקבל שתי סכימות שונות של מטא-נתונים כברירת מחדל, צריך להוסיף ל-
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 עם אורכים שמבוטאים בבייט אחד או שניים (במקום 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 מסוג float ל-
ChannelMappingAudioProcessorול-TrimmingAudioProcessor.
- תיקון של
- סרטון:
- שינוי של
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceל-protected כדי שאפליקציות יוכלו לשנות את ההגדרות ולחסום את השימוש במשטחים של פלייסהולדרים (#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כמחלקת משנה כדי לאפשר הגדרות שכבת-על דינמיות.
- הפונקציונליות של
- מכשירי Mux:
- העברנו את
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(). - ההתראה תישאר גלויה כשההפעלה נכנסת למצב שגיאה או למצב עצירה. ההתראה תוסר רק אם הפלייליסט יימחק או אם הנגן יופסק.
- שיפור הטיפול בפעולות ACTION_PLAY ו-ACTION_PAUSE של MediaSession בפלטפורמת Android, כך שרק אחת מהן תוגדר בהתאם לפקודות הזמינות, וגם קבלה של מצב שבו רק אחת מהן מוגדרת.
- הוספת
Contextכפרמטר ל-MediaButtonReceiver.shouldStartForegroundService(#1887). - תוקן באג שבו קריאה ל-method של
Playerב-MediaControllerשמחובר לסשן מדור קודם גרמה לביטול השינויים מעדכון בהמתנה. - הוספת האפשרות לקבל ערך null ב-
MediaSession.setSessionActivity(PendingIntent)(#2109). - תוקן באג שגרם לכך שהתראה ישנה נשארה גלויה אחרי שהפלייליסט נמחק (#2211).
- שמירה על מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצוב לתפוגה בלי להסתכן במגבלות בסיוע שירות שפועל בחזית במכשירים שונים. חשוב לזכור: אי אפשר יותר להשתמש בקריאה ל-
- ממשק המשתמש:
- מוסיפים מאחסני מצב ורכיבים קומפוזביליים למודול
media3-ui-composeעבורPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateו-PlaybackSpeedState.
- מוסיפים מאחסני מצב ורכיבים קומפוזביליים למודול
- הורדות:
- תוקן באג ב-
CacheWriterשמשאיר את מקורות הנתונים פתוחים ואת אזורי המטמון נעולים במקרה שמקור הנתונים מחזירExceptionשאינוIOException(#9760).
- תוקן באג ב-
- תוסף HLS:
- מוסיפים גרסה ראשונה של
HlsInterstitialsAdsLoader. הכלי לטעינת מודעות קורא את מודעות המעברון של HLS מפלייליסט מדיה של HLS וממפה אותן ל-AdPlaybackStateשמועבר אלAdsMediaSource. הגרסה הראשונית הזו תומכת רק בסטרימינג של HLS VOD עם מאפייניX-ASSET-URI. - מוסיפים את
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. אפליקציות יכולות להשתמש בו כדי ליצור מכונות שלAdsMediaSourceשמשתמשות ב-HlsInterstitialsAdsLoaderבצורה נוחה ובטוחה. - ניתוח התג
SUPPLEMENTAL-CODECSמפלייליסט HLS כדי לזהות פורמטים של Dolby Vision (#1785). - הקלה בתנאי לדילוג כדי לסנכרן מיקומים בשידור 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שהוצאו משימוש:- ה-constructor
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().
- ה-constructor
- צריך להסיר את השיטה
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. - מוסיפים את פריט המידע שנוצר בתהליך הפיתוח (Artifact)
androidx.media3:media3-common-ktx, שמספק פונקציונליות ספציפית ל-Kotlin שמבוססת על הספרייה הנפוצה. - מוסיפים פונקציית השעיה של
Player.listenכדי להפעיל פונקציית קורוטין להאזנה ל-Player.Eventsבספרייהmedia3-common-ktx. - הסרת הערות
@DoNotInlineממחלקות פנימיות שהוצאו ידנית מהשורה, שנועדו למנוע כשלים באימות מחלקות בזמן ריצה. גרסאות עדכניות של R8 מבצעות עכשיו באופן אוטומטי קריאות out-of-line כאלה כדי למנוע כשלים בזמן הריצה (כך שכבר לא נדרש out-of-lining ידני). כל משתמשי Gradle של הספרייה כבר צריכים להשתמש בגרסה של הפלאגין של Android Gradle שמשתמשת בגרסה של R8 שעושה את זה, בגללcompileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle יצטרכו לוודא ששלב הכיווץ/ההסתרה המקביל ל-R8 מבצע תהליך אוטומטי דומה של out-of-lining כדי למנוע כשלים באימות המחלקה בזמן הריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
- הוספת
- ExoPlayer:
- עכשיו אפשר להפעיל את
MediaCodecRenderer.onProcessedStreamChange()לכל קובץ מדיה. בעבר, לא הייתה קריאה לפונקציה הזו עבור המודעה הראשונה. כדי להפעיל את האפשרות הזו, צריך להשתמש ב-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שמעבירה את כל הפעלות ה-method למרנדר אחר (1703). - הוספת טעינה מראש של הפלייליסט לפריט הבא בפלייליסט. אפליקציות יכולות להפעיל טעינה מראש על ידי קריאה ל-
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, כשמצטרפים ל-DefaultLoadControl, הטעינה מראש מוגבלת כך שהיא מתחילה ונמשכת רק כשהנגן לא טוען תוכן להפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה שלLoadControl.shouldContinuePreloading()בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl). הטמעת ברירת המחדל שלLoadControlמשביתה את הטעינה מראש אם האפליקציה משתמשת בהטמעה בהתאמה אישית שלLoadControl. - הוספת ה-method
MediaSourceEventListener.EventDispatcher.dispatchEvent()כדי לאפשר הפעלת אירועים של פונקציות event listener של מחלקות משנה (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) משויכות מופקות באמצעות קריאות חוזרות (callbacks) של
onLoadError. - בטיפול בכתוביות מדור קודם (במהלך הרינדור), רק שגיאות טעינה משויכות מופקות באמצעות קריאות חוזרות (callbacks) של
onLoadError, ושגיאות ניתוח מתעלמות באופן שקט (זוהי התנהגות קיימת).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות ניתוח (למשל, נתוני כתוביות לא חוקיים) ושגיאות טעינה (למשל, HTTP 404) משויכות מופקות באמצעות קריאות חוזרות (callbacks) של
- תוקן באג שבו פריטים בפלייליסט או תקופות בסטרימינג מסוג 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). - הוספת תמיכה בפורמט קובץ מדיה בסיסי של AC-4 Level-4 ISO (#1265).
- מאפשרת ל-
- DataSource:
- עדכון של
HttpEngineDataSourceכדי לאפשר שימוש החל מגרסה S, תוסף 7, במקום רמת API 34 (#1262). -
DataSourceContractTest: מוודאים שהפונקציהDataSource.getUri()מחזירה את ה-URI שפוענח (כפי שמתועד). אם הוא שונה מה-URI של הבקשה, אפשר לציין זאת בבדיקות באמצעות השיטה החדשהDataSourceContractTest.TestResource.Builder.setResolvedUri(). -
DataSourceContractTest: מוודאים ש-DataSource.getUri()ו-getResponseHeaders()מחזירים את הערך "פתוח" אחרי קריאה שנכשלה ל-open()(בגלל משאב שלא נמצא) ולפני קריאה עוקבת ל-close().- כשמבטלים את
DataSourceContractTest.getNotFoundResources(), מחלקות משנה לבדיקה יכולות לספק כמה משאבים מסוג "לא נמצא" וגם לספק את כל הכותרות הצפויות. כך אפשר להבחין בין HTTP 404 (עם כותרות) לבין "השרת לא נמצא" (ללא כותרות).
- כשמבטלים את
- עדכון של
- אודיו:
- הגדרה אוטומטית של מטא-נתונים של עוצמת קול CTA-2075 ב-codec אם הם קיימים במדיה.
- הנמכה חלקה של עוצמת הקול כשמדלגים קדימה או אחורה בסרטון.
- תיקון צלילי פופ שעלולים להתרחש במהלך חיפושים.
- תיקון הצטברות שגיאות חיתוך באלגוריתם של Sonic למתיחת זמן/שינוי גובה צליל.
- תיקון באג ב-
SpeedChangingAudioProcessorשגורם להשמטת פריימים בפלט.
- סרטון:
-
MediaCodecVideoRendererנמנע מפענוח דגימות שלא מעובדות ולא משמשות כקובץ עזר לדגימות אחרות. - ב-API 35 ואילך,
MediaCodecAdapterיכול עכשיו לקבלnullSurfaceב-configureוקריאות ל-method חדשdetachOutputSurfaceכדי להסירSurfaceשהוגדר קודם, אם ה-codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported). - שימוש בערכים של יחס הגובה-רוחב של הפיקסלים שסופקו על ידי
MediaCodecAdapter, אם סופקו, במהלך העיבוד שלonOutputFormatChanged(#1371). - הוספת פתרון עקיף לבעיה במכשיר Galaxy Tab S7 FE שגורמת לסימון של שידורי H264 מאובטחים בקצב של 60fps כלא נתמכים (#1619).
- הוספת פתרון עקיף לקודקים שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות של סוף הסטרימינג.
-
- טקסט:
- הוספת
VoiceSpanבהתאמה אישית ואכלוס שלו עבור טווחי קול של WebVTT (#1632). - מוודאים שמוצג WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שחורגות מ-
longשל 64 ביט כשהן מיוצגות כמיקרו-שניות ומוכפלות בבסיס הזמן של90,000MPEG) (#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לשינוי קנה מידה קטן שלSurfaceTexture. SurfaceTextureעשוי לכלול שינוי קטן בקנה המידה שחותך גבול של טקסל אחד מסביב לקצה של מאגר נתונים חתוך. עכשיו הבעיה הזו מטופלת, והפלט קרוב יותר למה שצפוי. - האצה של
DefaultVideoFrameProcessor.queueInputBitmap(). לכן, ייצוא תמונות לסרטונים באמצעותTransformerמתבצע מהר יותר.
- הוספת פתרון עקיף ל-
- תוסף IMA:
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
ArrayIndexOutOfBoundsExceptionב-ImaServerSideAdInsertionMediaSource. - תוקן באג שבו שידורי DAI שהוכנסו בצד השרת ללא מודעה לפני הסרטון יכולים לגרום לשגיאה
ArrayIndexOutOfBoundsExceptionכשמפעילים את הסרטון אחרי המודעה האחרונה באמצע הסרטון (#1741).
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
- סשן:
- כדי לאפשר לאפליקציות לבטל פקודת הפעלה שמגיעה לחידוש הפעלת מדיה, צריך להוסיף את
MediaButtonReceiver.shouldStartForegroundService(Intent)כדי לשנות את השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר להפסיק את ההפעלה בלי שהמערכת תגרום לקריסת השירות עםForegroundServiceDidNotStartInTimeException(#1528). - תוקן באג שגרם לכך שפקודות בהתאמה אישית שנשלחו מ-
MediaBrowserנשלחו אלMediaSessionCompat.Callbackבמקום אל הווריאנטMediaBrowserServiceCompatשל השיטה, כשהיה חיבור לשירות מדור קודם. הבעיה הזו מנעה מ-MediaBrowserלקבל את ערך ההחזרה בפועל שנשלח בחזרה על ידי השירות הקודם (#1474). - טיפול ב-
IllegalArgumentExceptionשנזרק על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור ל-Intent של לחצן המדיה (#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פעמיים כשנרשמים להורה.
- כדי לאפשר לאפליקציות לבטל פקודת הפעלה שמגיעה לחידוש הפעלת מדיה, צריך להוסיף את
- ממשק המשתמש:
- הוספת אפשרות להצטרף לסרטון המתוח/החתוך בפתרון העקיף
PlayerView-in-Compose-AndroidView, בגלל בעיות במעברים משותפים שמבוססים על XML. באפליקציות שמשתמשות ב-PlayerViewבתוךAndroidViewצריך להפעיל אתPlayerView.setEnableComposeSurfaceSyncWorkaroundכדי להביע הסכמה (#1237, #1594). - הוספת
setFullscreenButtonStateל-PlayerViewכדי לאפשר עדכונים של סמל לחצן המסך המלא לפי דרישה, כלומר מחוץ לפס ולא בתגובה לאינטראקציה של קליק (#1590, #184). - תיקון באג שבו האפשרות "ללא" בבחירת הטקסט לא פועלת אם יש העדפות לבחירת טראק טקסט שמוגדרות באפליקציה.
- הוספת אפשרות להצטרף לסרטון המתוח/החתוך בפתרון העקיף
- תוסף DASH:
- הוספת תמיכה לתקופות שמתחילות באמצע פלח (#1440).
- תוסף לסטרימינג חלק:
- תיקון שגיאת
Bad magic number for Bundleבהפעלת שידורי SmoothStreaming עם טראקים של טקסט (#1779).
- תיקון שגיאת
- תוסף RTSP:
- תוספי מפענח (FFmpeg, VP9, AV1 וכו'):
- הוספנו את מודול המפענח של IAMF, שמאפשר להפעיל קובצי MP4 שמכילים טראקים של IAMF באמצעות ספריית ה-Native libiamf כדי לסנתז אודיו.
- אפשר להפעיל את הסרטון בפריסת סטריאו וגם ב-5.1 עם אודיו מרחבי, וגם להפעיל מעקב ראש, אבל כרגע אין תמיכה בהפעלה דו-אוזנית.
- הוספת תמיכה בדפים בגודל 16KB לתוספי מפענחים ב-Android 15 (#1685).
- הוספנו את מודול המפענח של 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שיצאה משימוש. - הסרת בנאים (constructors) של
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 מכילה את ה-commits האלה.
- 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של ה-framework (#1603).
- תיקון השגיאה
- ההשפעה:
- מוסיפים שיטת
release()אלGlObjectsProvider.
- מוסיפים שיטת
- סשן:
- תוסף RTSP:
- דילוג על תיאורי מדיה לא חוקיים בניתוח SDP (#1087).
גרסה 1.4.0
25 ביולי 2024
androidx.media3:media3-*:1.4.0 מופץ. גרסה 1.4.0 מכילה את ה-commits האלה.
- ספרייה משותפת:
- העברת קריאות חיפוש משוערות ללא פעולה ל-methods המוגנות
BasePlayer.seekTo()ו-SimpleBasePlayer.handleSeek()במקום להתעלם מהן. אם אתם מטמיעים את השיטות האלה בנגן בהתאמה אישית, יכול להיות שתצטרכו לטפל בקריאות הנוספות האלה באמצעותmediaItemIndex == C.INDEX_UNSET. - הסרת התלות של הקומפיילר בתהליך ההסרה המשופר של סוכר תחבירי ב-Java 8 (#1312).
- צריך לוודא שהמערכת מתעלמת ממשך הזמן שמועבר אל
MediaItem.Builder.setImageDurationMs()אם לא מדובר בתמונהMediaItem(כפי שמתועד). - מוסיפים את
Format.customDataכדי לאחסן מידע מותאם אישית שסופק על ידי האפליקציה לגבי מכונות שלFormat.
- העברת קריאות חיפוש משוערות ללא פעולה ל-methods המוגנות
- ExoPlayer:
- מוסיפים את
BasePreloadManager, שמתאם את הטעינה מראש של כמה מקורות על סמך סדרי העדיפויות שמוגדרים ב-rankingDataשלהם. אפשר להתאים אישית את המחלקה הזו על ידי הרחבה שלה. מוסיפים אתDefaultPreloadManager, שמשתמש ב-PreloadMediaSourceכדי לטעון מראש דגימות מדיה של המקורות לזיכרון, ומשתמש במספר שלםrankingDataשמציין את האינדקס של פריט בממשק המשתמש. - מוסיפים את
PlayerIdלרוב השיטות שלLoadControlכדי לאפשר להטמעות שלLoadControlלתמוך בכמה שחקנים. - הסרה של
Buffer.isDecodeOnly()ושלC.BUFFER_FLAG_DECODE_ONLY. אין צורך להגדיר את הדגל הזה, כי רכיבי הרינדור והמפענחים יחליטו אם לדלג על מאגרים על סמך חותמת הזמן. בהטמעות מותאמות אישית שלRenderer, צריך לבדוק אם ההפסקה בין פגישות היא לפחותBaseRenderer.getLastResetPositionUs()כדי להחליט אם להציג דגימה. הטמעות מותאמות אישית שלSimpleDecoderיכולות לבדוק אתisAtLeastOutputStartTimeUs()אם צריך, או לסמן מאגרים אחרים באמצעותDecoderOutputBuffer.shouldBeSkippedכדי לדלג עליהם. - מאפשרים ל-
TargetPreloadStatusControl.getTargetPreloadStatus(T)להחזיר ערך null כדי לציין שלא צריך לטעון מראשMediaSourceעם ה-rankingDataשצוין. - מוסיפים את
remove(MediaSource)אלBasePreloadManager. - צריך להוסיף את
reset()אלBasePreloadManagerכדי לשחרר את כל המקורות שמוחזקים, תוך שמירה על המופע של מנהל הטעינה מראש. - מוסיפים את
ExoPlayer.setPriority()(ואתBuilder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManagerולחשיבות של MediaCodec מ-API 35. - תוקנה בעיה בעדכון זמן הטעינה מראש האחרון, שגרמה למפתח
bs(מחסור בנתונים בטעינה מראש) שגוי ב-CMCD (#1124). - מוסיפים את הערך
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)כדי לציין שהמקור נטען עד הסוף. כך אפשר להטמיע אתDefaultPreloadManagerואתPreloadMediaSource.PreloadControlבהתאמה אישית כדי לטעון מראש את המקור הבא או לבצע פעולות אחרות. - תוקן באג שבו דילוג על שתיקה בסוף פריטים יכול לגרום לחריגה בהפעלה.
- מוסיפים את
clearאלPreloadMediaSourceכדי לבטל את תקופת הטעינה מראש. - הוספת קוד שגיאה חדש
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDשמשמש כשמשאבי קודק מוחזרים למשימות בעדיפות גבוהה יותר. -
AdsMediaSourceמאפשר לטעון מודעות לפני סרטון לפני שההכנה הראשונית של תוכן המדיה מסתיימת (#1358). - תוקן באג שבו ההפעלה עברה ל-
STATE_ENDEDבמהלך הכנה מחדש של שידור חי ב-DASH עם כמה תקופות, אחרי שהתקופה המקורית כבר הוסרה מהמניפסט. - משנים את השם של
onTimelineRefreshed()ל-onSourcePrepared()ואת השם שלonPrepared()ל-onTracksSelected()ב-PreloadMediaSource.PreloadControl. צריך גם לשנות את השם של IntDefs ב-DefaultPreloadManager.Stageבהתאם. - הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההתעוררות של המעבד, ולעכב את ההתעוררות עד שהמעבדים יוכלו להתקדם.
אפשר להפעיל את זה באמצעות
experimentalSetDynamicSchedulingEnabled()כשמגדירים את המכונה של ExoPlayer. - מוסיפים את
Renderer.getDurationToProgressUs().Rendererיכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שבו ההפעלה צריכה להתקדם כדי שהמעבד יתקדם. אם המדיניותExoPlayerמוגדרת עם הערךexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerתפעיל את השיטה הזו כשהיא תחשב את הזמן לתזמון של Work Tasks. - צריך להוסיף את
MediaCodecAdapter#OnBufferAvailableListenerכדי לקבל התראה כשמאגרי הקלט והפלט זמינים לשימוש על ידיMediaCodecRenderer. MediaCodecRendererיאותת ל-ExoPlayerכשהוא יקבל את הקריאות החוזרות האלה, ואםExoPlayerמוגדר עםexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerיתזמן את לולאת העבודה שלו ככל שהמעבדים (renderers) יתקדמו. - צריך להשתמש במחלקת נתונים לשיטות
LoadControlבמקום בפרמטרים נפרדים. - מוסיפים את
ExoPlayer.isReleased()כדי לבדוק אם בוצעה קריאה ל-Exoplayer.release(). - הוספת
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()כדי להגדיר את המיקום המקסימלי שבוseekToPrevious()מחפש את הפריט הקודם (#1425). - תיקון חוסר עקביות במיקוד האודיו, למשל אי דיווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
- תיקון של
IndexOutOfBoundsExceptionפוטנציאלי שנגרם על ידי מחלצים שמדווחים על טראקים נוספים אחרי שלב ההכנה הראשוני (#1476). -
Effectsב-ExoPlayer.setVideoEffect()יקבל את חותמות הזמן עם הסרת ההיסט של ה-renderer (#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) ובשידורי H.262 HLS (#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נכונים, בלי קשר לערכים שקיימים בסטרימינג (התמיכה ב-columnLockלא מוטמעת, אז בפועל מניחים שהערך תמיד שקרי).- השינוי הזה נכלל במקור בהערות המוצר של גרסה
1.3.0-alpha01, אבל הוא בוטל בטעות לפני ההשקה של גרסה1.3.0-rc01. הבעיה תוקנה והשינוי חזר.
- השינוי הזה נכלל במקור בהערות המוצר של גרסה
- CEA-708: נמנעת הוספה של שורות חדשות כפולות על ידי הטיפול הפשוט של ExoPlayer בפקודה "הגדרת מיקום העט" (#1315).
- תיקון של
IllegalArgumentExceptionמ-LegacySubtitleUtilכשדגימת כתוביות ב-WebVTT לא מכילה סימנים, למשל כחלק מסטרימינג ב-DASH (#1516).
- מטא-נתונים:
- תיקון המיפוי של MP4 לתגי מיון של ID3. בעבר, תגי MP4 של "מיון אלבומים" (
soal), "מיון אומנים" (soar) ו"מיון אומני אלבומים" (soaa) מופו באופן שגוי לתגי ID3TSO2,TSOAו-TSOP(#1302). - תוקנה הקריאה של תגי
gnre(ז'אנר) ו-tmpo(קצב) מספריים ב-MP4 (או ב-iTunes) כשהערך ארוך מבייט אחד. - הפצת מסגרת ID3
TCONאלMediaMetadata.genre(#1305).
- תיקון המיפוי של MP4 לתגי מיון של ID3. בעבר, תגי MP4 של "מיון אלבומים" (
- תמונה:
- הוספת תמיכה ברשתות של תמונות ממוזערות ב-DASH שהן לא ריבועיות (#1300).
- הוספת תמיכה ב-AVIF ל-API מגרסה 34 ואילך.
- אפשר להשתמש ב-
nullכפרמטר שלExoPlayer.setImageOutput()כדי למחוקImageOutputשהוגדר קודם.
- DataSource:
- הטמעת תמיכה במזהי URI של משאבים גולמיים מסוג
android.resource://package/id, כאשרpackageשונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו לא תועדה בעבר, אבל זו דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם. - בודקים באופן יזום ש-
urlהוא לא null בבנאים שלDataSpec. הפרמטר הזה כבר סומן כ-non-null. - מאפשרים ל-
ByteArrayDataSourceלפתור URI למערך בייטים במהלךopen(), במקום להגדיר אותו באופן קבוע במהלך הבנייה (#1405).
- הטמעת תמיכה במזהי URI של משאבים גולמיים מסוג
- DRM:
- אפשר להגדיר
LoadErrorHandlingPolicyב-DefaultDrmSessionManagerProvider(#1271).
- אפשר להגדיר
- ההשפעה:
- תמיכה בשינויי מהירות מרובים באותו
EditedMediaItemאוCompositionב-SpeedChangeEffect. - תמיכה בפלט HLG ו-PQ מקלט מפת סיביות (bitmap) ב-Ultra HDR.
- הוספנו תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפר את פלט ה-surface של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
- עדכון ההטמעה של מטריצת השכבות כדי שתהיה עקבית עם התיעוד, על ידי היפוך ערכי ה-X וה-Y שחלים ב-
setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את ערכי ה-x וה-y על ידי הכפלה ב--1. - תוקן באג שגרם לקריסה של
TimestampWrapperכשמשתמשים ב-ExoPlayer#setVideoEffects(#821). - משנים את מרחב הצבעים של SDR שמוגדר כברירת מחדל מצבעים לינאריים לסרטון BT 709 SDR חשמלי. יש גם אפשרות שלישית, לשמור על מרחב הצבעים המקורי.
- אפשר להגדיר סדר 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).
- כדי להשתמש באותו סדר עדיפויות ובאותה לוגיקה בבחירת מאפייני מטא-נתונים כמו ב-media1, צריך להתאים את ההמרה של
MediaMetadataל-MediaDescriptionCompat. - הוספת
MediaSession.sendError()שמאפשר לשלוח שגיאות לא קריטיות לבקר Media3. כשמשתמשים בבקר ההתראות (ראוMediaSession.getMediaNotificationControllerInfo()), השגיאה בהתאמה אישית משמשת לעדכון ה-PlaybackStateשל הסשן בפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (#543). - מוסיפים את
MediaSession.Callback.onPlayerInteractionFinished()כדי להודיע לסשנים כשסדרה של אינטראקציות של שחקנים מבקר ספציפי הסתיימה. - מוסיפים את
SessionErrorומשתמשים בו ב-SessionResultוב-LibraryResultבמקום בקוד השגיאה, כדי לספק מידע נוסף על השגיאה ועל הדרכים לפתור אותה, אם אפשר. - פרסום הקוד של אפליקציית הבדיקה של בקר media3, שמאפשרת לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
- העברת תוספות שהועברו אל
MediaSession[Builder].setSessionExtras()של media3 אלPlaybackStateCompat.getExtras()של בקר media1. - מיפוי שגיאות קריטיות ולא קריטיות אל הסשן בפלטפורמה וממנו.
PlaybackExceptionממופה למצב שגיאה חמורה שלPlaybackStateCompat. SessionErrorשנשלח לבקר ההתראות של המדיה עםMediaSession.sendError(ControllerInfo, SessionError)ממופה לשגיאה לא קריטית ב-PlaybackStateCompat, כלומר קוד השגיאה וההודעה מוגדרים אבל מצב הסשן בפלטפורמה נשאר שונה מ-STATE_ERROR. - לאפשר להגדיר את פעילות הסשן לכל בקר כדי לשנות את פעילות הסשן הגלובלית. אפשר להגדיר את פעילות הסשן לבקר בזמן החיבור על ידי יצירת
ConnectionResultעםAcceptedResultBuilder.setSessionActivivty(PendingIntent). אחרי החיבור, אפשר לעדכן את הפעילות בסשן באמצעותMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - שיפור השכפול של שגיאות בקריאות ל-
MediaLibrarySession.Callback. עכשיו אפשר להגדיר שכפול שגיאות באמצעותMediaLibrarySession.Builder.setLibraryErrorReplicationMode()כדי לבחור את סוג השגיאה או לבטל את ההסכמה לשכפול שגיאות, שמופעל כברירת מחדל.
- משנים את ברירת המחדל של
- ממשק המשתמש:
- הוספת תמיכה בהצגת תמונות ב-
PlayerViewכשהוא מחובר אלExoPlayer(#1144). - הוספת התאמה אישית של סמלים שונים ב-
PlayerControlViewבאמצעות מאפייני XML כדי לאפשר רכיבי drawable שונים לכל מופע שלPlayerView, במקום שינויים גלובליים (#1200). - עקיפת באג בפלטפורמה שגורם למתיחה או לחיתוך של הסרטון כשמשתמשים ב-
SurfaceViewבתוךAndroidViewשל Compose ב-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. - צריך להסיר חלק מה-constructors של
DataSpec. במקומה צריך להשתמש במדיניותDataSpec.Builder. - הסרת השיטה
setContentTypePredicate(Predicate)מהממשקיםDefaultHttpDataSource,OkHttpDataSourceו-CronetDataSource. במקום זאת, צריך להשתמש בשיטה המקבילה בכלXXXDataSource.Factory. - הסרה של
OkHttpDataSourceבנאים ו-OkHttpDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory. - הסרה של
PlayerMessage.setHandler(Handler). במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper). - הסרת השדה
Timeline.Window.isLive. במקום זאת, משתמשים ב-methodisLive(). - הסרת
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 מכילה את ה-commits האלה.
- ספרייה משותפת:
- כדי לאפשר תוויות מקומיות או תוויות חלופיות אחרות, צריך להוסיף את
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) ובסטרימינג של H.262 HLS (#1126).
- אודיו:
- מתן הרשאה לשחזור של רכיב העיבוד על ידי השבתת הפחתת העומס, אם האתחול של טראק האודיו נכשל במצב הפחתת עומס.
- סרטון:
- הוספת פתרון עקיף לבעיה במכשירים 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 על ידי המרת מרחבי צבעים.
- סשן:
- ממשק המשתמש:
- אם
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)כשלפחות אחד מהם הוא לא null (#964).
- צריך להטמיע תמיכה במזהי URI של משאבים גולמיים מסוג
- ExoPlayer:
- הוספת
PreloadMediaSourceו-PreloadMediaPeriodשמאפשרים לאפליקציות לטעון מראש מקור מדיה של תוכן במיקום התחלה ספציפי לפני ההפעלה. PreloadMediaSourceמכין את מקור המדיה של התוכן לקבלתTimeline, מכין את התקופה במיקום ההתחלה הנתון ושומר אותה במטמון, בוחר טראקים וטוען נתוני מדיה לתקופה. האפליקציות שולטות בהתקדמות הטעינה מראש על ידי הטמעה שלPreloadMediaSource.PreloadControlוהגדרת המקור שנטען מראש לנגן לצורך הפעלה. - מוסיפים את
ExoPlayer.setImageOutputשמאפשר לאפליקציות להגדיר אתImageRenderer.ImageOutput. - עכשיו
DefaultRenderersFactoryמספקImageRendererלנגן כברירת מחדל עם ערכי null ב-ImageOutputוב-ImageDecoder.Factory.DEFAULT. - הפעלת אירוע
Player.Listener.onPositionDiscontinuityכשמדלגים על שתיקה (#765). - הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את זה באמצעות
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - תמיכה במקורות מדיה דינמיים באמצעות
PreloadMediaSource. - מטמיעים את
HttpEngineDataSource,HttpDataSourceבאמצעות ה-API של HttpEngine. - מניעת יצירת מחלקות משנה של
CompositeSequenceableLoader. הרכיב הזה הוגדר בעבר כניתן להרחבה, אבל אף פעם לא הוגדרה לו מחלקת משנה בספרייה. כדי לבצע התאמות אישיות, אפשר לעטוף מופע באמצעות תבנית העיצוב Decorator ולהטמיעCompositeSequenceableLoaderFactoryבהתאמה אישית. - תוקנה בעיה שבה חזרה על אותה שעה גרמה למחיקת המטא-נתונים מהפריט הזה (#1007).
- שינוי השם של ה-methods
experimentalSetSubtitleParserFactoryב-BundledChunkExtractor.Factoryוב-DefaultHlsExtractorFactoryל-setSubtitleParserFactory, ואיסור על העברתnull. משתמשים בשיטות החדשות שלexperimentalParseSubtitlesDuringExtraction(boolean)כדי לשלוט בהתנהגות הניתוח. - הוספת תמיכה בהתאמה אישית של
SubtitleParser.Factoryשמשמש במהלך החילוץ. אפשר לעשות את זה באמצעותMediaSource.Factory.setSubtitleParserFactory(). - הוספת קידומת מקור לכל השדות מסוג
Format.idשנוצרו מ-MergingMediaSource. כך אפשר לזהות איזה מקור יצר את השגיאהFormat(#883). - תיקון הביטוי הרגולרי שמשמש לאימות שמות מפתחות מותאמים אישית של Common Media Client Data (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המותאם אישית, ולהעביר את ספק ה-video sink אלMediaCodecVideoRenderer.
- משנים את ה-constructor של
- טקסט:
- תיקון של סדרת אותות מפת הסיביות כדי לפתור את השגיאה
Tried to marshall a Parcel that contained Binder objectsכשמשתמשים ב-DefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: התעלמות מהערך
rowLock. לפי המפרט של CEA-708-E S-2023, צריך להניח שגםrowLockוגםcolumnLockנכונים, בלי קשר לערכים שקיימים בסטרימינג (התמיכה ב-columnLockלא מוטמעת, אז בפועל מניחים שהערך תמיד שקרי).
- תיקון של סדרת אותות מפת הסיביות כדי לפתור את השגיאה
- תמונה:
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות ברשת נחתכות ותמונות ממוזערות בודדות נשלחות אל
ImageOutputקרוב לזמן הצגת השקפים.
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות ברשת נחתכות ותמונות ממוזערות בודדות נשלחות אל
- DRM:
- הפעלת דגימות לא מוצפנות של "clear lead" בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדגימות המוצפנות הבאות עדיין לא מוכנים. זה עלול לגרום להפסקות באמצע ההפעלה אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדגימות המוצפנות (אבל בעבר ההפעלה לא הייתה מתחילה בכלל בשלב הזה). אפשר להשבית את ההתנהגות הזו באמצעות
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyאוDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- תוסף IMA:
- תוקנה בעיה שבה אי אפשר להפעיל מודעות DASH ו-HLS בלי סיומת הקובץ המתאימה.
- הפעלת דגימות לא מוצפנות של "clear lead" בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדגימות המוצפנות הבאות עדיין לא מוכנים. זה עלול לגרום להפסקות באמצע ההפעלה אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדגימות המוצפנות (אבל בעבר ההפעלה לא הייתה מתחילה בכלל בשלב הזה). אפשר להשבית את ההתנהגות הזו באמצעות
- סשן:
- השבתת הזיהוי של לחיצה כפולה באפליקציות לטלוויזיה (#962).
- תוקנה בעיה שבה
MediaItem.RequestMetadataעם תוספות שאינן null לא מועבר בין ממשקי השליטה במדיה לבין הסשנים. - מוסיפים ל-
MediaLibrarySession.Builderפונקציית constructor שמקבלת רקContextבמקוםMediaLibraryService.
- תוסף HLS:
- צמצום הניראות של
HlsMediaPeriodלפרטית בחבילה. אין להסתמך ישירות על הסוג הזה מחוץ לחבילת ה-HLS. - פתרון בעיות שקשורות לחיפוש בתחילת קטע בצורה יעילה יותר (#1031).
- צמצום הניראות של
- תוספי מפענחים (FFmpeg, VP9, AV1, MIDI וכו'):
- מפענח MIDI: התעלמות מהודעות אירועים של SysEx (#710).
- כלי בדיקה:
- אל תשהה את ההפעלה ב-
TestPlayerRunHelper.playUntilPosition. הבדיקה משאירה את ההפעלה במצב פעיל, אבל משהה את ההתקדמות עד שהבדיקה יכולה להוסיף טענות נכונות (assertions) ופעולות נוספות.
- אל תשהה את ההפעלה ב-
- אפליקציית הדגמה:
- הוספת מודול הדגמה של סרטונים קצרים כדי להדגים את השימוש ב-
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:
- פתרון עקיף לבעיה שבה המקודד נכשל בזמן ההגדרה בגלל הגדרה של קצב פעולה גבוה.
- מחלצים:
- סמנו טראקים משניים (שאי אפשר להפעיל) של HEVC בתמונות עם תנועה בפורמט JPEG בתור
ROLE_FLAG_ALTERNATEכדי למנוע בחירה אוטומטית שלהם להפעלה בגלל הרזולוציה הגבוהה יותר שלהם. - תיקון זיהוי שגוי של תמונת מפתח בסטרימינג של TS H264 (#864).
- תיקון של הערכת משך הזמן של סטרימינג בפורמט TS שארוך מ-47,721 שניות (#855).
- סמנו טראקים משניים (שאי אפשר להפעיל) של HEVC בתמונות עם תנועה בפורמט JPEG בתור
- אודיו:
- תוקן הטיפול ב-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).
- הוספת המפתחות והערכים המותאמים אישית ל-
- ממשק המשתמש:
- תוסף 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 שבה פרמטרים של סוגים גנריים שניתנים לביטול וסוגים של רכיבי מערך שניתנים לביטול לא מזוהים כניתנים לביטול. לדוגמה, הפרמטרים של השיטות
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). - אפשר לעדכן את
MediaItemלכל המחלקות שלMediaSourceשסופקו על ידי הספרייה באמצעות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): מחסור במאגר נתונים (
bs), מועד אחרון (dl), מהירות ההפעלה (pr) והפעלה (su) (#8699). - הוספת עומק סיביות של בהירות וצבע ל-
ColorInfo(#491). - הוספת שדות נוספים לרישום ביומן של Common Media Client Data (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 קלאסי ל-
Mp4Extractor.
- אודיו:
- הוספנו תמיכה ב-PCM מסוג big-endian של 24/32 ביט ב-MP4 וב-Matroska, וניתוח של קידוד PCM ל-
lpcmב-MP4. - הוספנו תמיכה בחילוץ אודיו בפורמט Vorbis ב-MP4.
- מוסיפים את
AudioSink.getFormatOffloadSupport(Format)שמאחזר את רמת התמיכה בהעברה שה-sink יכול לספק לפורמט באמצעותDefaultAudioOffloadSupportProvider. היא מחזירה את ה-AudioOffloadSupportהחדש שמכיל אתisFormatSupported,isGaplessSupportedו-isSpeedChangeSupported. - מוסיפים את
AudioSink.setOffloadMode()שדרכו נקבעת ההגדרה של העברת הנתונים ב-audio sink. ברירת המחדל היאAudioSink.OFFLOAD_MODE_DISABLED. - אפשר להפעיל את ההעברה דרך
setAudioOffloadPreferenceב-TrackSelectionParameters. אם ההעדפה שהוגדרה היא להפעיל, המכשיר תומך בהעברת הנתונים בפורמט, והטראק שנבחר הוא טראק אודיו יחיד, אז העברת נתוני האודיו תופעל. - אם המדיניות
audioOffloadModePreferenceמוגדרת לערךAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, המדיניותDefaultTrackSelectorתבחר רק טראק אודיו, ורק אם הפורמט של הטראק נתמך ב-offload. אם אין טראק של אודיו שנתמך ב-offload, לא ייבחר אף טראק. - השבתת התמיכה בהשמעה רציפה ל-offload בגרסאות שקודמות לרמת API 33 בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
- הסרת הפרמטר
enableOffloadמהחתימה של השיטהDefaultRenderersFactory.buildAudioSink. - הסרת השיטה
DefaultAudioSink.Builder.setOffloadMode. - הסרת הערך intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - הוספת תמיכה במטא-נתונים של Opus ללא הפסקות במהלך הפעלה של פריקה.
- אפשרות לשחזר את ה-renderer על ידי השבתת ה-offload אם הכתיבה הראשונה נכשלה (#627).
- הפעלת תזמון הפחתת עומס כברירת מחדל להפעלת אודיו בלבד בהפחתת עומס.
- מוחקים את
ExoPlayer.experimentalSetOffloadSchedulingEnabledואתAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - השם של
onExperimentalSleepingForOffloadChangedהשתנה ל-onSleepingForOffloadChangedוהשם שלonExperimentalOffloadedPlaybackהשתנה ל-onOffloadedPlayback. - העברת ממשקים והגדרות של
TrackSelectionParametersשקשורים למצב פריקת אודיו למחלקה פנימית שלAudioOffloadPreferences. - מוסיפים קריאות חוזרות (callbacks) של
onAudioTrackInitializedו-onAudioTrackReleasedאלAnalyticsListener,AudioRendererEventListenerו-AudioSink.Listener. - תיקון בעיה של גלישת מאגר נתונים (buffer underflow) באודיו של DTS Express (#650).
- תוקן באג שבו בדיקת היכולות של E-AC3-JOC זורקת שגיאה מסוג
IllegalArgumentException(#677).
- הוספנו תמיכה ב-PCM מסוג big-endian של 24/32 ביט ב-MP4 וב-Matroska, וניתוח של קידוד PCM ל-
- סרטון:
- מאפשרים ל-
MediaCodecVideoRendererלהשתמש ב-VideoFrameProcessor.Factoryבהתאמה אישית. - תוקן באג שבו לא ניתן היה לעבד את הפריים הראשון אם שידור האודיו התחיל בחותמות זמן שליליות (#291).
- מאפשרים ל-
- טקסט:
- הסרה של
ExoplayerCuesDecoder. עכשיוTextRendererמטפל ישירות בטראקים של טקסט עםsampleMimeType = application/x-media3-cues, בלי צורך במופע שלSubtitleDecoder.
- הסרה של
- מטא-נתונים:
- לא תתבצע יותר קריאה ל-
MetadataDecoder.decodeעבור דגימות "לפענוח בלבד", כי ההטמעה חייבת להחזיר ערך null בכל מקרה.
- לא תתבצע יותר קריאה ל-
- ההשפעה:
- הוספת
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)הוספה לתור של קלט מפת סיביות (bitmap) לפי חותמת זמן. - משנים את
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). - צריך להשתמש רק ב-
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()מעל API 31 כדי למנוע בעיות עם API שהוצא משימוש במכשירי סמסונג (#167). - משתמשים בבקר ההתראות של המדיה כשרת proxy כדי להגדיר את הפקודות הזמינות ואת הפריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
- המרת אירועים של לחצני מדיה שמתקבלים על ידי
MediaSessionService.onStartCommand()בתוך Media3, במקום לנתב אותם לסשן בפלטפורמה ובחזרה ל-Media3. כך, הבקר של המתקשר הוא תמיד הבקר של ההתראה על המדיה, והאפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות. - תיקון באג שבו
MediaController.getCurrentPosition()לא מתקדם כשמחוברים ל-MediaSessionCompatמדור קודם. - כדאי להוסיף את
MediaLibrarySession.getSubscribedControllers(mediaId)כדי שיהיה לך נוח. - צריך לשנות את
MediaLibrarySession.Callback.onSubscribe()כדי לאשר את הזמינות של מזהה ההורה שאליו הבקר נרשם. אם הבקשה מצליחה, המינוי מאושר ומתבצעת קריאה מיידית לפונקציהnotifyChildrenChanged()כדי לעדכן את הדפדפן (#561). - הוספת מודול הדגמה של סשן ל-Automotive OS והפעלת הדגמה של סשן ל-Android Auto.
- אל תגדירו את התור של סשן ה-framework כש-
COMMAND_GET_TIMELINEלא זמין לבקר של ההתראות על מדיה. כשהאפליקציה Android Auto היא בקר הלקוח שקורא מהסשן של ה-framework, הלחצןqueueלא מוצג בממשק המשתמש של Android Auto (#339). - שימוש ב-
DataSourceBitmapLoaderכברירת מחדל במקום ב-SimpleBitmapLoader(#271, #327). - הוספת
MediaSession.Callback.onMediaButtonEvent(Intent)שמאפשר לאפליקציות לשנות את ברירת המחדל של הטיפול באירועים של לחצני מדיה.
- הגדרת ההתנהגות של שירות ההתראות שפועל בחזית לערך
- ממשק המשתמש:
- הוסיפו הטמעה של
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 בכותרת הציבורית של תגובת Options (#613).
- שימוש בערך של זמן קצוב לתפוגה של תגובת הגדרת RTSP במרווח הזמן של שליחת בקשות של אפשרויות RTSP לשמירת החיבור (#662).
- תוקן מרוץ תהליכים שיכול היה לגרום לשגיאה
- תוספי מפענחים (FFmpeg, VP9, AV1, MIDI וכו'):
- שחרור מודול המפענח של MIDI, שמספק תמיכה בהפעלה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסנתוז אודיו.
- מוסיפים את
DecoderOutputBuffer.shouldBeSkippedכדי לסמן ישירות מאגרי פלט שלא צריך להציג. השיטה הזו עדיפה על פניC.BUFFER_FLAG_DECODE_ONLY, שתוצא משימוש. - מוסיפים את
Decoder.setOutputStartTimeUsואתSimpleDecoder.isAtLeastOutputStartTimeUsכדי לאפשר למפענחים להשמיט דגימות לפענוח בלבד לפני שעת ההתחלה. מומלץ להשתמש בה במקום במדיניותBuffer.isDecodeOnlyשתוצא משימוש. - תיקון באג בפרסום פריט המידע שנוצר בתהליך הפיתוח (Artifact) של מפענח 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 וכותרת של הערה בתחילת זרם הנתונים (bitstream) להפעלה של Opus שהועברה, בהתאם ל-RFC 7845.
- סרטון:
- H.265/HEVC: תיקון ניתוח מידע על תמונת עזר לטווח קצר וארוך ב-SPS.
- טקסט:
- CEA-608: שינוי הלוגיקה של חיתוך הכתוביות כך שרק הטקסט שמוצג יילקח בחשבון. בעבר, ההיסט של הטאב והכניסה נכללו בהגבלת האורך של הכתובית ל-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
- ספרייה משותפת:
- הוספת סיבה לביטול ההשתקה של נתיב אודיו לא מתאים והפעלה כשהוא מוכן שינוי הסיבה להשתקה ארוכה מדי. (#15).
- הוספת פקודות לנגן:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- הוספת שיטות עמוסות לנגן שמאפשרות למשתמשים לציין דגלי עוצמת קול:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- הוספת
BuilderעבורDeviceInfoוהוצאה משימוש של ה-constructor הקיים. - מוסיפים את
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 וה-methods של ה-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. - מוסיפים פרמטרים ל-
LoadControlmethodsshouldStartPlaybackול-onTracksSelectedשמאפשרים לשייך את השיטות האלה ל-MediaPeriodהרלוונטי. - משנים את החתימה של
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם המזהים הייחודיים שמשמשים כמפתחות במפה. ההגדרה הזו נדרשת כדי למנוע בעיות של בו-זמניות בשידורים חיים עם כמה תקופות. - הוצאה משימוש של
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). - תוקן באג שבו הטרנספורמציה נתקעה (מה שגרם לזמן קצוב לתפוגה של המולטיפלקסר) אם הסוף של שידור הווידאו סומן ברגע שבו פריים קלט המתין לעיבוד.
- כדי להרחיב את התמיכה, אפשר לשלוח שאילתות לקודקים דרך
MediaCodecListבמקום להשתמש בכלי השירות שלfindDecoder/EncoderForFormat. - צריך להסיר את ההגדרה של B-frame ב-
DefaultEncoderFactoryכי היא לא פועלת במכשירים מסוימים.
- הסרה של
- בחירת טראק:
- מוסיפים את
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeשמושבתת כברירת מחדל. כשהאפשרות הזו מופעלת,DefaultTrackSelectorתפעיל בחירת טראק חדש כשהיכולות של ה-renderer משתנות.
- מוסיפים את
- מחלצים:
- אודיו:
- תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהרת הנתונים הופעלה ו-
AudioProcessorsהיו פעילים, למשל בחיתוך ללא רווחים (#10847). - הוספת מסגרות Opus לחבילות Ogg בהפעלות ישירות (העברה).
- הערכת המיקום הנוכחי במצב שינה באמצעות תזמון פריקה.
- מוסיפים את
Renderer.release()ו-AudioSink.release()כדי לשחרר את המשאבים בסוף מחזור החיים של הנגן. - האזנה לשינויים ביכולות האודיו ב-
DefaultAudioSink. מוסיפים פרמטר חובהcontextב-constructor של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).
- תיקון באג שבו קבוצת מודעות חדשה מוכנסת לשידורים חיים כי מיקום התוכן המחושב בצירי זמן עוקבים משתנה מעט.
- סשן:
- מוסיפים את ה-helper method
MediaSession.getControllerForCurrentRequestכדי לקבל מידע על הבקר שקורא כרגע ל-methodPlayer. - הוספת
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).
- מוסיפים את ה-helper method
- ממשק המשתמש:
- מוסיפים את השיטות Util
shouldShowPlayButtonו-handlePlayPauseButtonActionכדי לכתוב רכיבים מותאמים אישית בממשק המשתמש עם לחצן הפעלה/השהיה.
- מוסיפים את השיטות Util
- תוסף RTSP:
- תוסף DASH:
- הסרת הזמן שחלף במדיה מ-
MediaLoadData.startTimeMsומ-MediaLoadData.endTimeMsבשידורי DASH עם כמה תקופות. - תוקן באג שבו הכנה מחדש של מקור מדיה מסוג Dash בשידור חי עם כמה תקופות גרמה לשגיאה
IndexOutOfBoundsException(#10838).
- הסרת הזמן שחלף במדיה מ-
- תוסף HLS:
- מוסיפים את
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)כדי להגדיר זמן קצוב לתפוגה של השרשור שנטען, עד שה-TimestampAdjusterיופעל. אם תהליך ההפעלה לא מסתיים לפני הזמן הקצוב לתפוגה, נזרקת שגיאה מסוגPlaybackExceptionכדי למנוע השהיה אינסופית של ההפעלה. כברירת מחדל, הזמן הקצוב לתפוגה מוגדר לאפס (#323).
- מוסיפים את
- כלי בדיקה:
- צריך לבדוק אם סכמת ה-URI לא תלוית-רישיות ב-
DataSourceContractTest.
- צריך לבדוק אם סכמת ה-URI לא תלוית-רישיות ב-
- הסרת סמלים שהוצאו משימוש:
- הסרת ה-constructors של
DefaultAudioSink, ושימוש ב-DefaultAudioSink.Builderבמקום זאת. - צריך להסיר את
HlsMasterPlaylistולהשתמש ב-HlsMultivariantPlaylistבמקום זאת. - הסרה של
Player.stop(boolean). במקום זאת, אתם צריכים להשתמש ב-Player.stop()וב-Player.clearMediaItems()(אםresetהואtrue). - הסרנו שני בנאים (constructors) של
SimpleCacheשהוצאו משימוש. במקומם, צריך להשתמש בבנאי שלא הוצא משימוש ומקבלDatabaseProviderכדי לשפר את הביצועים. - צריך להסיר את ה-constructor של
DefaultBandwidthMeterולהשתמש במקום זאת ב-DefaultBandwidthMeter.Builder. - צריך להסיר את ה-constructors של
DefaultDrmSessionManagerולהשתמש במקום זאת ב-DefaultDrmSessionManager.Builder. - הסרנו שני בנאים (constructors) של
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. - הסרת ה-methods שהוצאו משימוש
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatו-createSampleFormat, ששימשו ליצירת מופע של המחלקהFormat. במקום זאת, צריך להשתמש ב-Format.Builderכדי ליצור מופעים שלFormat. - הסרת השיטות שהוצאו משימוש:
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateו-copyWithVideoSize. במקומן צריך להשתמש ב-Format.buildUpon()ובשיטות setter. - צריך להסיר את
ExoPlayer.retry()שהוצא משימוש ולהשתמש במקומו ב-prepare(). - הסרת ה-constructor של
DefaultTrackSelectorללא ארגומנטים שהוצא משימוש, והחלפה שלו ב-DefaultTrackSelector(Context). - הסרת ה-constructor של
OfflineLicenseHelperשהוצא משימוש, ושימוש ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)במקומו. - מסירים את ה-constructor של
DownloadManagerשהוצא משימוש, ומשתמשים במקומו ב-constructor שמקבלExecutor. - הסרת בנאים (constructors) של
Cueשהוצאו משימוש, והחלפתם ב-Cue.Builder. - הסרת ה-constructor של
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.
- הסרת ה-constructors של
גרסה 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. - תוקנה בעיה שבה יכול להיות שהפריים האחרון לא יעובד אם הדגימה האחרונה עם הפריימים תוסר מהתור בלי לקרוא את הדגימה "סוף הסטרימינג". (#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להציג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:
- ניסיון חוזר עם TCP אם הגדרת RTSP עם UDP נכשלת עם שגיאת RTSP 461 UnsupportedTransport (#11069).
גרסה 1.0.0
22 במרץ 2023
androidx.media3:media3-*:1.0.0 מופץ. גרסה 1.0.0 מכילה את השינויים האלה.
הגרסה הזו תואמת לגרסה 2.18.5 של ExoPlayer.
אין שינויים מאז גרסה 1.0.0-rc02.
גרסה 1.0.0-rc02
2 במרץ 2023
androidx.media3:media3-*:1.0.0-rc02 מופץ. גרסה 1.0.0-rc02 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.4 של ExoPlayer.
- ספריית ליבה:
- הורדות:
- הגדרת ההפרש המקסימלי בין שעת ההתחלה של שני פלחים שצריך למזג ב-
SegmentDownloaderובמחלקות המשנה (#248).
- הגדרת ההפרש המקסימלי בין שעת ההתחלה של שני פלחים שצריך למזג ב-
- אודיו:
- סרטון:
- ממפים את הפורמט HEVC HDR10 ל-
HEVCProfileMain10HDR10במקום ל-HEVCProfileMain10. - הוספת פתרון עקיף לבעיה במכשיר ב-Chromecast with Google TV וב-Lenovo M10 FHD Plus, שגורמת לסימון של שידורי AVC בקצב של 60fps כלא נתמכים (#10898).
- תיקון בעיות בביצועים של שחרור פריימים כשמפעילים מדיה עם קצב פריימים גבוה בהרבה מקצב הרענון של המסך.
- ממפים את הפורמט HEVC HDR10 ל-
- העברה:
- תיקון של
STATE_IDLEזמני במעבר בין קובצי מדיה (#245).
- תיקון של
- RTSP:
- תפיסת ה-IllegalArgumentException שנזרק בניתוח של הודעות תיאור תגובה לא חוקיות של RTSP (#10971).
- סשן:
- תוקן באג שבו לחצן ההפעלה/השהיה של ההתראה לא מתעדכן בהתאם למצב הנגן (#192).
- תוסף IMA:
- תוקן באג שמנע הפעלה של שידורי DAI ללא מודעות, כי האירוע הראשון (ובמקרה של שידור ללא מודעות, האירוע היחיד) של
LOADEDלא התקבל.
- תוקן באג שמנע הפעלה של שידורי DAI ללא מודעות, כי האירוע הראשון (ובמקרה של שידור ללא מודעות, האירוע היחיד) של
גרסה 1.0.0-rc01
16 בפברואר 2023
androidx.media3:media3-*:1.0.0-rc01 מופץ. גרסה 1.0.0-rc01 מכילה את השינויים האלה.
הגרסה הזו תואמת לגרסה 2.18.3 של ExoPlayer.
- ספריית ליבה:
- שינוי לוגיקת הסדר של המפענח של ה-renderer כדי לשמור על ההעדפות של
MediaCodecSelector, גם אם המפענח מדווח שהוא לא יכול להפעיל את המדיה בצורה יעילה. לדוגמה, עם בורר ברירת המחדל, מפענח חומרה עם תמיכה פונקציונלית בלבד יועדף על פני מפענח תוכנה שתומך באופן מלא בפורמט (#10604). - מוסיפים את
ExoPlayer.Builder.setPlaybackLooperשמגדיר שרשור הפעלה קיים למופע חדש של ExoPlayer. - אפשר למחוק את עוזרי מנהל ההורדות (#10776).
- הוספת פרמטר ל-
BasePlayer.seekToכדי לציין גם את הפקודה שמשמשת לחיפוש. - שימוש בעיצוב בזמן טעינת פריטים שניתן לשרטט ב-API 21 ואילך (#220).
- הוספת
ConcatenatingMediaSource2שמאפשר לשלב כמה קובצי מדיה בחלון אחד (#247).
- שינוי לוגיקת הסדר של המפענח של ה-renderer כדי לשמור על ההעדפות של
- מחלצים:
- הפעלת
ParserExceptionבמקוםNullPointerExceptionאם בטבלת הדגימה (stbl) חסר תיאור דגימה נדרש (stsd) במהלך ניתוח של אטומי trak. - דילוג נכון על דגימות כשמדלגים ישירות לפריים סנכרון ב-fMP4 (#10941).
- הפעלת
- אודיו:
- יש להשתמש בקצב העברת הנתונים של פורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי של
AudioTrackבהפעלות ישירות (passthrough).
- יש להשתמש בקצב העברת הנתונים של פורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי של
- טקסט:
- תיקון של
TextRendererשמעביר אינדקס לא חוקי (שלילי) אלSubtitle.getEventTimeאם קובץ כתוביות לא מכיל אותות. - SubRip: הוספת תמיכה בקובצי UTF-16 אם הם מתחילים בתו סימון סדר בתים (BOM).
- תיקון של
- מטא-נתונים:
- לנתח כמה ערכים מופרדים ב-null ממסגרות ID3, כפי שמותר ב-ID3 v2.4.
- מוסיפים את
MediaMetadata.mediaTypeכדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsableבמקוםMediaMetadata.folderType. סוג התיקייה יוצא משימוש בגרסה הבאה.
- DASH:
- הוספת ניתוח מלא של קבוצות התאמה של תמונות, כולל ספירת משבצות (#3752).
- ממשק המשתמש:
- סשן:
- הוספת
SimpleBasePlayerמופשט כדי לעזור בהטמעת הממשקPlayerלנגנים מותאמים אישית. - הוספת שיטת עזר להמרת טוקן לסשן של הפלטפורמה ל-Media3
SessionToken(#171). - שימוש ב-
onMediaMetadataChangedכדי להפעיל עדכונים של סשן המדיה בפלטפורמה (#219). - מוסיפים את סשן המדיה כארגומנט של
getMediaButtons()שלDefaultMediaNotificationProviderומשתמשים ברשימות שלא ניתנות לשינוי כדי לשמור על בהירות (#216). - הוספת מאזין קריאה חוזרת (callback) של
onSetMediaItemsכדי לספק אמצעים לשינוי או להגדרה של רשימתMediaItem, אינדקס התחלה ומיקום לפי סשן לפני ההגדרה בנגן (#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). - מחיקת מאגר הנתונים הזמני הקודם לפני שההפעלה נתקעת בגלל שאין מספיק זיכרון פנוי.
- סגירת בלוק המעקב "doSomeWork" כשההעברה מופעלת.
- תיקון בעיה במעקב אחרי סשנים עם חיפושים מהירים ב-
PlaybackStatsListener(#180). - שליחת קריאה חוזרת (callback) חסרה של
onMediaItemTransitionכשקוראים ל-seekToNextאו ל-seekToPreviousבפלייליסט עם פריט אחד (#10667). - מוסיפים את
Player.getSurfaceSize, שמחזיר את גודל הפלטפורמה שבה הסרטון מוצג. - תיקון באג שבו הסרת מאזינים במהלך הפצת הנגן עלולה לגרום ל-
IllegalStateException(#10758).
- הוספת
- יצירה:
- אכיפת גרסה מינימלית של
compileSdkVersionכדי למנוע שגיאות קומפילציה (#10684). - הימנעות מפרסום בלוק כשהוא נכלל ב-gradle build אחר.
- אכיפת גרסה מינימלית של
- בחירת טראק:
- אם המסך לא תומך ב-Dolby Vision, עדיף להשתמש בטראקים אחרים. (#8944).
- הורדות:
- סרטון:
- אם המסך לא תומך ב-Dolby Vision, אפשר לנסות מפענח חלופי. (#9794).
- אודיו:
- שימוש ב-
SingleThreadExecutorלשחרור מופעים שלAudioTrackכדי למנוע שגיאות OutOfMemory כשמשחררים כמה נגנים בו-זמנית (#10057). - מוסיף את
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).
- שימוש ב-
- מטא-נתונים:
- עכשיו אפשר להגדיר את
MetadataRendererכך שיוצגו מטא-נתונים ברגע שהם זמינים. יוצרים מכונה עםMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)כדי לציין אם המעבד (renderer) יוציא מטא-נתונים מוקדם או בסנכרון עם מיקום הנגן.
- עכשיו אפשר להגדיר את
- DRM:
- עקיפת באג בהטמעה של ClearKey ב-Android 13, שגורם להחזרה של כתובת URL לא ריקה אבל לא תקינה של רישיון.
- תיקון שגיאת
setMediaDrmSession failed: session not openedבמעבר בין סכימות DRM בפלייליסט (למשל, Widevine ל-ClearKey).
- טקסט:
- CEA-608: מוודאים שפקודות החלפת השירות בשדה 2 מטופלות בצורה נכונה (#10666).
- DASH:
- ניתוח של
EventStream.presentationTimeOffsetממניפסטים (#10460).
- ניתוח של
- ממשק המשתמש:
- שימוש בשינויים הנוכחיים של הנגן כפי שהוגדרו מראש ב-
TrackSelectionDialogBuilder(#10429).
- שימוש בשינויים הנוכחיים של הנגן כפי שהוגדרו מראש ב-
- סשן:
- מוודאים שהפקודות תמיד מבוצעות בסדר הנכון, גם אם חלק מהן דורשות פתרון אסינכרוני (#85).
- מוסיפים את
DefaultMediaNotificationProvider.Builderכדי ליצור מופעים שלDefaultMediaNotificationProvider. ה-builder יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראות ואת שם ערוץ ההתראות שבהם הספק משתמש. כדאי גם להוסיף את השיטהDefaultMediaNotificationProvider.setSmallIcon(int)כדי להגדיר את הסמל הקטן של ההתראות. (#104). - מוודאים שפקודות שנשלחו לפני
MediaController.release()לא נמחקות (#99). -
SimpleBitmapLoaderיכול לטעון מפת סיביות (bitmap) מכתובות URI שלfile://(#108). - תוקנה טענת נכוֹנוּת (assertion) שמונעת מ-
MediaControllerלדלג על מודעה בפרק זמן מסוים (#122). - כשההפעלה מסתיימת, ה-
MediaSessionServiceמפסיק לפעול בחזית ומוצגת התראה להפעלה מחדש של קובץ המדיה האחרון שהופעל (#112). - אל תפעילו שירות שפועל בחזית עם Intent בהמתנה להשהיה (#167).
- הסתרה ידנית של "התג" שמשויך להתראה שנוצרה על ידי
DefaultNotificationProviderב-API 26 וב-API 27 (התג מוסתר באופן אוטומטי ב-API 28 ואילך) (#131). - תוקן באג שבו חיבור binder שני מ-MediaSession מדור קודם אל Media3 MediaController גורם ל-IllegalStateExceptions (#49).
- RTSP:
- IMA:
- תוסף FFmpeg:
- הוספת דגלים חדשים שנדרשים כדי לקשר ספריות FFmpeg ל-NDK בגרסה 23.1.7779620 ואילך (#9933).
- תוסף AV1:
- עדכון הגרסה של CMake כדי למנוע חוסר תאימות עם הגרסאות העדכניות של Android Studio (#9933).
- תוסף Cast:
- הטמעת
getDeviceInfo()כדי לזהות אתCastPlayerכששולטים בהפעלה באמצעותMediaController(#142).
- הטמעת
- Transformer:
- הוספת טיימר watchdog של מרבב כדי לזהות מתי יצירת דגימת פלט איטית מדי.
- הסרת סמלים שהוצאו משימוש:
- הסרה של
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).
- אפשר להשתמש בכלי רישום בהתאמה אישית לכל פלט היומן של ExoPlayer (#9752).
- תיקון ההטמעה של
setDataSourceFactoryב-DefaultMediaSourceFactory, שלא פעלה במקרים מסוימים (#116).
- מוודאים שהחלפת
- מחלצים:
- DASH:
- ניתוח של כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
- ממשק המשתמש:
- מוודאים ש-TalkBack מכריז על אפשרות המהירות הפעילה כרגע בתפריט רכיבי ה-UI להפעלה (#10298).
- RTSP:
- הוספת טיפול בחבילות מקוטעות של VP8 (#110).
- תוסף Leanback:
- האזנה לשינויים ב-
playWhenReadyב-LeanbackAdapter(10420).
- האזנה לשינויים ב-
- העברה:
גרסה 1.0.0-beta01
16 ביוני 2022
androidx.media3:media3-*:1.0.0-beta01 מופץ. גרסה 1.0.0-beta01 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.18.0 של ExoPlayer.
- ספריית ליבה:
- הפעלת תמיכה באבחון של פלטפורמת Android באמצעות
MediaMetricsManager. ExoPlayer יעביר לפלטפורמה אירועי הפעלה ונתוני ביצועים, שיעזרו לספק מידע על ביצועי המערכת ועל תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה גם אם המשתמש במכשיר הפעיל את שיתוף דפוסי שימוש וביצועים. אפליקציות יכולות לבטל את ההסכמה לתרום לניתוח הביצועים של הפלטפורמה ב-ExoPlayer באמצעותExoPlayer.Builder.setUsePlatformDiagnostics(false). - תוקן באג שגרם לאיפוס תכוף מדי של טראקים כשמשתמשים ב-
MergingMediaSource, לדוגמה כשמבצעים טעינה צדדית של כתוביות ומשנים את הכתוביות שנבחרו באמצע ההפעלה (#10248). - הפסקת הזיהוי של סוג הרשת 5G-NSA ב-API 29 ו-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.
- משנים את
- מחלצים:
- ממשק המשתמש:
- תיקון של העברת אירועים אל
OnClickListenerשמוגדרים ב-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:
- חזרה להכנה של chunkful אם המאפיין 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).
- הוספת חריגה מסומנת כשמנתחים את התזמון של RTSP (#10165).
- הוספת קורא RTP ל-VP9 (#47).
- הוספת קורא RTP ל-OPUS (#53).
- מקורות נתונים:
- לשנות את השם של
DummyDataSourceלשםPlaceholderDataSource. - פתרון עקיף לטיפול בהפרעות של OkHttp.
- לשנות את השם של
- סשן:
- מחליפים את
MediaSession.MediaItemFillerבערךMediaSession.Callback.onAddMediaItemsכדי לאפשר פתרון אסינכרוני של בקשות. - תמיכה בשיטות
setMediaItems(s)כש-MediaControllerמתחבר לסשן מדיה מדור קודם. - הסרה של
MediaController.setMediaUriושלMediaSession.Callback.onSetMediaUri. אפשר להשיג את אותה פונקציונליות באמצעותMediaController.setMediaItemו-MediaSession.Callback.onAddMediaItems. - העברת שיחות בגרסה הקודמת של
MediaControllerלהפעלת מדיה אלMediaSession.Callback.onAddMediaItemsבמקום אלonSetMediaUri. - מוסיפים את
MediaNotification.Providerו-DefaultMediaNotificationProviderכדי להתאים אישית את ההתראה. - מוסיפים את
BitmapLoaderו-SimpleBitmapLoaderכדי להוריד תמונות של גרפיקה. - מוסיפים את
MediaSession.setCustomLayout()כדי לספק תאימות לדורות קודמים עם הסשן הקודם. - צריך להוסיף את
MediaSession.setSessionExtras()כדי לספק תכונות שוות ערך לסשן הקודם. - משנים את השם של
MediaSession.MediaSessionCallbackל-MediaSession.Callback, את השם שלMediaLibrarySession.MediaLibrarySessionCallbackל-MediaLibrarySession.Callbackואת השם שלMediaSession.Builder.setSessionCallbackל-setCallback. - תיקון של NPE ב-
MediaControllerImplLegacy(#59). - עדכון פרטי המיקום של הסשן בשינוי ציר הזמן (#51).
- תיקון NPE ב-
MediaControllerImplBaseאחרי שחרור הבקר (#74).
- מחליפים את
- הפעלת מודעות / IMA:
- הפחתת קצב הדגימה של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, בהתאם להמלצות של המועצה לדירוג מדיה (MRC).
- תוסף FFmpeg:
- עדכון גרסת CMake ל-
3.21.0+כדי למנוע באג ב-CMake שגורם לכשל בסנכרון Gradle של AndroidStudio (#9933).
- עדכון גרסת CMake ל-
- הסרת סמלים שהוצאו משימוש:
- הסרה של
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). במקום זאת, אתם צריכים להשתמש ב-Player.Listener.onTracksChanged(Tracks). - הסרה של
Player.getCurrentTrackGroupsושלPlayer.getCurrentTrackSelections. במקום זאת, אתם צריכים להשתמש ב-Player.getCurrentTracks. אפשר גם להמשיך להשתמש ב-ExoPlayer.getCurrentTrackGroupsוב-ExoPlayer.getCurrentTrackSelections, למרות שהשיטות האלה עדיין נחשבות כהוצאה משימוש. - הסרה של הקבועים
DownloadHelper,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTו-DEFAULT_TRACK_SELECTOR_PARAMETERS. במקום זאת, אתם צריכים להשתמש ב-getDefaultTrackSelectorParameters(Context)כשאפשר, וב-DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTבמקרים אחרים. - הסרת ה-constructor
DefaultTrackSelector(ExoTrackSelection.Factory). במקומה צריך להשתמש במדיניותDefaultTrackSelector(Context, ExoTrackSelection.Factory). - הסרה של
Transformer.Builder.setContext. במקום זאת, צריך להעביר אתContextאל ה-constructor שלTransformer.Builder.
- הסרה של
גרסה 1.0.0-alpha03
14 במרץ 2022
androidx.media3:media3-*:1.0.0-alpha03 מופץ. גרסה 1.0.0-alpha03 מכילה את השמירות האלה.
הגרסה הזו תואמת לגרסה 2.17.1 של ExoPlayer.
- אודיו:
- תיקון שגיאה בבדיקת יכולות האודיו של 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 מכילה את השינויים האלה.
הגרסה הזו תואמת לגרסה 2.17.0 של ExoPlayer.
- ספריית ליבה:
- מוסיפים את השיטה המוגנת
DefaultRenderersFactory.getCodecAdapterFactory()כדי שמחלקות משנה שלDefaultRenderersFactoryשמבטלות אתbuildVideoRenderers()או אתbuildAudioRenderers()יוכלו לגשת למפעל המתאמים של ה-codec ולהעביר אותו למופעים של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ב-constructor של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). - אם גודל שטח האחסון הזמני שביקשתם היה גדול מ-1MB, נסו ליצור שוב את
AudioTrack. (#9712).
- מחלצים:
- טקסט:
- DRM:
- הסרת
playbackLooperמהחשבוןDrmSessionManager.(pre)acquireSession. כשאפליקציה משתמשת ב-DrmSessionManagerב-MediaSourceבהתאמה אישית, צריך להעביר אתplaybackLooperאלDrmSessionManager.setPlayer.
- הסרת
- הפעלת מודעות / IMA:
- הוספת תמיכה בהטמעת מודעות דינמיות (DAI) של IMA (#8213).
- הוספת שיטה ל-
AdPlaybackStateכדי לאפשר איפוס של קבוצת מודעות כך שניתן יהיה להפעיל אותה שוב (#9615). - אכיפה של מהירות הפעלה של 1.0 במהלך הפעלת מודעה (#9018).
- תוקנה בעיה שבה קבוצת מודעות שלא נטענה גרמה לאיפוס מיידי של ההפעלה (#9929).
- ממשק המשתמש:
- 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כדי לציין את אפשרויות הטרנספורמציה. - אפשר לרשום כמה מאזינים.
- תיקון מצב שבו Transformer נתקע כשפלט ה-codec נקרא באופן חלקי.
- תיקון של NPE פוטנציאלי ב-
Transformer.getProgressכששחרור המולטיפלקסר גורם לשגיאה. - הוספת אפליקציית הדגמה להחלת טרנספורמציות.
- תוסף MediaSession:
- כברירת מחדל,
MediaSessionConnectorמנקה עכשיו את הפלייליסט כשמפסיקים את ההפעלה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להפעיל אתsetClearMediaItemsOnStop(false)במחבר.
- כברירת מחדל,
- תוסף Cast:
- תוסף FFmpeg:
- הגדרת
build_ffmpeg.shכך שיהיה תלוי בכלי ה-bin של LLVM במקום באלה של GNU (#9933).
- הגדרת
- תאימות ל-Android 12:
- שדרגו את תוסף Cast כך שיהיה תלוי ב-
com.google.android.gms:play-services-cast-framework:20.1.0. גרסאות קודמות שלplay-services-cast-frameworkלא תואמות לאפליקציות שמטרגטות את Android 12, והן יקרסו עםIllegalArgumentExceptionבזמן יצירתPendingIntent(#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. במקום זאת, אתם צריכים להשתמש ב-constructorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory). - הסרה של
ProgressiveMediaSource.Factory#setTagושלProgressiveMediaSource.Factory#setCustomCacheKey. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTagוב-MediaItem.Builder#setCustomCacheKey. - מסירים את ה-constructors
DefaultRenderersFactory(Context, @ExtensionRendererMode int)ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). במקום זאת, צריך להשתמש ב-constructorDefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererModeוב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - הסירו את כל ה-constructors הציבוריים של
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. כך אפשר לשלב ישירות בין נגנים לסשנים של מדיה בלי להשתמש במחלקת מתאם או מחבר.