Media3

ספריות תמיכה לתרחישי שימוש במדיה.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫22 ביולי 2026 1.10.1 ‎1.11.0-rc01 ‎1.11.0-beta01 ‎1.11.0-alpha01

הצהרה על יחסי תלות

כדי להוסיף תלות ב-Media3, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.

אתם יכולים להוסיף את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:

Groovy

dependencies {
    def media3_version = "1.10.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.10.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.11.0

‫1.11.0-rc01

‫22 ביולי 2026

  • ‫ExoPlayer:
    • תוקנה בעיה פוטנציאלית במצב ההזזה שגרמה להזזה להיעצר כשמנסים להגיע ל 'סוף השידור'.
    • ביטול השינוי: הוספת תמיכה במודעות בתוכן עם כמה תקופות (למשל, DASH) על ידי פיצול והזחה של AdPlaybackState לכל תקופה.
  • DataSource:
    • תוקנה הבעיה שבה KtorDataSource טוען את כל התוכן של תגובת HTTP לזיכרון כשפותחים חיבור (#3305).
  • סשן:
    • כדי לתקן את הקריסה, צריך לטפל בחריגה ForegroundServiceStartNotAllowedException ב-MediaSessionService.stopSelfSafely() (‎#3310).
    • תוקנה קריאה חוזרת (callback) לא צפויה של onMediaItemTransition() ב-onMediaItemTransition() כשמבצעים חיפוש בתוך אותו פריט מדיה (‎#3248).MediaController
  • הורדות:
    • פתרון משתני HLS בפלייליסט של מדיה כשמאחזרים אותו להורדה (#3258).
  • תוסף HLS:
    • תוקן חישוב ההיסטור של התוכן כשמנסים לפתור רשימות של נכסי ביניים (‎#3322).
    • תיקון של אי רציפות בלתי צפויה של חותמת הזמן של טראק אודיו כשממשיכים הפעלה בשידור חי עם השהיה נמוכה אחרי כשל בבקשת פלייליסט (#3311).
    • תיקון באג ב-HlsMediaPeriod.getStreamKeys() שבו טראק ID3 בעיבודים של אודיו נחשב ככתוביות (‎#3333).
  • תוסף DASH:
    • תוקנה קריסה (IndexOutOfBoundsException) בפתיחת מניפסטים עם רכיב <SegmentTimeline/> ריק (#3326).
  • תוספים של מפענחים (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • החזרת התמיכה בסרטון מונוכרום ל-dav1d JNI שצורף לחבילה.
  • תוסף Cast:
    • תוקן באג שגרם לכך ששידורים חיים שלא הוגדרו (liveConfiguration == UNSET) הוכנסו לתור כ-STREAM_TYPE_BUFFERED (#3318).

‫1.11.0-beta01

‫7 ביולי 2026

  • ‫ExoPlayer:
    • הוספת Format.selectionPriority שמייצג את ההעדפה היחסית של Format בבחירת רצועה (‎#3236).
  • בחירת טראק:
    • תוקנה בעיה של בו-זמניות שתלויה בתזמון, שבה עדכונים רציפים מהירים של פרמטרים לבחירת רצועות עלולים לגרום לכך שחלק מהעדכונים יאבדו או יימחקו.
  • אמצעי חילוץ:
    • ‫AVI: תוקנה בעיה שבה הפעלת קבצים ללא סימון של מסגרות מפתח במסלולי אודיו גרמה לאובדן אודיו ול-OutOfMemoryError.
    • ‫MP3: שימוש במשכי זמן עם מודעות לרווחים מכותרות Xing/Info (#3183).
    • ‫MP3: התאמת השהיית המקודד LAME/Xing ומטא-נתוני הריפוד כך שיתאימו לחיתוך של PCM מפוענח (#3200).
  • אודיו:
    • הוסר נתיב חלופי של EAC3-JOC ל-EAC3 להפעלה במכשירי Google Pixel, כי מפענחי ה-EAC3 הרגילים שלהם לא יכולים לפענח זרמי EAC3-JOC (#3257).
  • סרטון:
    • תוקן באג ב-VideoFrameReleaseHelper שבו שינויים בתצוגה יכלו להפעיל קריאות חוזרות (callback) מיותרות של Choreographer והפעלות מוגזמות של CPU בשרשור הראשי.
  • סשן:
    • תיקון של הקטנת תמונה כפולה של יצירות אמנות ב-MediaSession כשהגודל של התמונה קרוב למגבלה של הפלטפורמה, כדי לפתור בעיה של טשטוש בהתראות (‎#3134).
    • תוקן קריסת ForegroundServiceStartNotAllowedException ב-MediaNotificationManager כשקריאה חוזרת (callback) אסינכרונית לטעינת מפת סיביות של יצירת אומנות מנסה להפעיל את השירות שפועל בחזית בזמן שהאפליקציה פועלת ברקע (#3270).
    • תוקנה בעיה שבה חסרו מזהי ה-UID המקוריים של אובייקטים מסוג PositionInfo שהתקבלו על ידי MediaController.Timeline התרגום של מזהי ה-UID האלה מתבצע עכשיו באופן מהימן במהלך עדכוני המצב, והם מועברים בצורה תקינה במהלך הסשן.
  • UI:
    • תוקנה באג שקשור לביטול רעשים במצב PlayerView ובכלי ההלחנה PresentationState שגרם לקריסות בציר הזמן שלא תומך בחיפוש UID של תקופה (#3264).
  • תוסף HLS:
    • מנתחים את מאפיין SCORE של EXT-X-STREAM-INF ושל EXT-X-I-FRAME-STREAM-INF, ומאכלסים אותו בערך Format.selectionPriority (#3236).
    • תוקן באג שבו פעולות ריענון מתוזמנות של פלייליסטים בפורמט HLS ממשיכות גם אם הפלייליסט כבר לא ראשי או פעיל (#3254).
  • תוסף DASH:
    • נוספה תמיכה בניתוח של כמה רכיבי Location מתוך קובץ המניפסט (MPD) וביצוע חזרה למיקום ב-DashMediaSource כשמתרחשת שגיאה בטעינת המניפסט.
  • תוספים של מפענחים (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • הוספת תמיכה בסרטון בשחור-לבן ל-JNI של dav1d בחבילה.
  • תוסף Cast:
    • מוסיפים את MediaRouteButtonState ואת rememberMediaRouteButtonState כדי לתמוך בבדיקת מצב החשיפה של כלי הבחירה של נתיב המדיה, ומוסיפים את הפרמטר state ל-MediaRouteButton (3172).
    • תיקון באג שבו RemoteCastPlayer נתקע באופן קבוע במצב של הסתרת טראק אחרי בחירת טראק, ולכן התעלם מעדכוני טראק עוקבים ממקלט Cast ‏(#3237).
    • תוקן באג שבו DefaultMediaItemConverter זורק את NullPointerException כשמנסים להצטרף להפעלה של Cast שהתחילה משולח שאינו Media3.
    • מונעים מ-CastPlayer להעביר MediaItems שלא ניתן להפעיל כשמשנים את הנגן הפעיל (#3199).
  • כלי בדיקה:
    • הוספת setPlaybackLooper אל TestExoPlayerBuilder.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של androidx.media3.common.C.generateAudioSessionIdV21. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.common.util.Util.generateAudioSessionId.

‫1.11.0-alpha01

  • ספרייה משותפת:
    • מוסיפים Format.channelMask כדי לייצג באופן מפורש את מסכת ערוץ האודיו, ומוסיפים עומס יתר חדש של Util.getAudioTrackChannelConfig(Format) כדי לפתור את הבעיה בצורה בטוחה.
    • שדרוג Kotlin מגרסה 2.0.20 לגרסה 2.2.0.
  • ‫ExoPlayer:
    • תוקן באג של פעולות מקבילות שתלוי בתזמון, שיכול לגרום ל-IllegalStateException או ל-IndexOutOfBoundsException ב-ExoPlayer.
    • הפחתת ההגבלות על מספר קבוצות המודעות ב-AdsMediaSource כדי לאפשר את הקטנת מספר קבוצות המודעות כשקבוצת מודעות עוברת עיבוד מלא (hasUnplayedAds() הוא false), וכך להתאים את הגודל של קבוצות מודעות דינמיות במהלך תהליכי עבודה של איפוס.
    • הוספת תמיכה במודעות בתוכן עם כמה תקופות (למשל, DASH) על ידי פיצול והזחה של AdPlaybackState לכל תקופה.
    • מוסיפים את getFlags() ואת FLAG_STRICT_DURATION אל SampleStream כדי לאפשר לסטרימינג לדווח על סימונים, ומעדכנים את רכיבי ה-Renderer כדי לבדוק את הסימונים האלה באופן דינמי.
    • אם פורמטי הסטרימינג לא מספקים ערך תקין, המערכת חוזרת לחישוב של קצב הפעולה של הקודק באמצעות הערכה של קצב הפריימים ב-MediaCodecVideoRenderer ושל פורמט הפלט של הקודק ב-MediaCodecAudioRenderer, כדי למנוע איפוסים מיותרים של הקודק.
    • הסרת חיתוך של תוכן במודעות שמוכנסות בצד הלקוח בנגן הליבה. במקום זאת, AdsMediaSource מטפל בלוגיקה של החיתוך. צריך לעדכן מקורות מותאמים אישית של מודעות שמוכנסות בצד הלקוח כדי להטמיע את חיתוך התוכן באופן פנימי.
    • סימון טראקים עם פרופיל או רמה של קודק בפורמט תקין אבל לא מזוהה כ-supported=NO_EXCEEDS_CAPABILITIES במקום כ-supported=YES (כך מסומנים טראקים עם מידע חסר או בפורמט שגוי לגבי הפרופיל או הרמה). כך מוודאים שהרצועות האלה (שסביר להניח שהמכשיר לא תומך בהן) לא ייבחרו אם יש חלופות טובות יותר שנתמכות.
    • מוסיפים את DefaultPreloadManager.SimpleRankingDataComparator, שהוא RankingDataComparator שמשווה את הדירוגים של קובצי המדיה על סמך המרחקים שלהם לאינדקס של קובץ המדיה שמופעל כרגע. אפליקציות יכולות לבטל את השיטה compare(Integer, Integer) אם נדרשת לוגיקה מדויקת יותר להשוואה. אפשר להחדיר את SimpleRankingDataComparator המותאם אישית באמצעות constructor חדש של DefaultPreloadManager.Builder.
    • כדי להקטין את הסיכון ל-OOM של DefaultLoadControl.prioritizeTimeOverSizeThresholds, אפשר לחזור למגבלות של גודל הבייטים של המאגר אם נראה שאין מספיק זיכרון בערימה.
    • התאמה של הטיפול בתמונות סטילס כשלא מוגדר MediaItem.imageDurationUs: תמונות סטילס בפורמט JPEG ו-HEIC מוצגות עכשיו עם משך ברירת מחדל קצר מאוד (באותו אופן שבו תמונות בפורמט PNG ותמונות אחרות הוצגו בעבר).
    • הוספה של MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter) ל-BandwidthMeter כדי להגיע ל-MediaSource. עם זאת, כברירת מחדל עדיין תתבצע קריאה לשיטה שהוצאה משימוש עם הטמעה בהתאמה אישית. מומלץ להטמיע את השיטה החדשה ולהשתמש ב-BandwidthMeter.getTransferListener() כדי לקבל שוויון לשיטה הישנה.
    • ב-DefaultBandwidthMeter, מוסיפים תמיכה ב-InitialBitrateSupplier מותאם אישית. כך האפליקציות יכולות לספק לוגיקה משלהן לקביעת הערכת קצב הביטים הראשונית, שתשמש ליצירת DefaultBandwidthMeter ולשינויים בסוג הרשת. אפשר להגדיר את הספק באמצעות DefaultBandwidthMeter.Builder.setInitialBitrateSupplier().
    • הפעלה של תזמון דינמי כברירת מחדל. הלולאה של הפעלת ExoPlayer תפעל באופן דינמי ולא במרווח סטטי.
    • הסרת איפוס מיותר שיכול להתרחש כשמצטרפים לטראקים עם דגימות של פרסומות לפני הסרטון להפעלה פעילה.
    • ב-DefaultBandwidthMeter, מבצעים אופטימיזציה של getInitialBitrateCountryGroupAssignment כדי להחזיר את ההקצאות של קבוצת המדינות כערך שלם (integer) בגודל 32 ביט במקום כמערך, וכך להקטין את גודל הקוד ולמנוע הקצאות.
    • תוקנו כשלים בהפעלת AudioTrack במכשירים מסוימים. כדי לעשות זאת, הובטח שהלוגיקה של הניסיון החוזר תנסה תמיד גודל מאגר של שנייה אחת לפחות אם ניסיונות חוזרים אחרים (על ידי חלוקת גודל המאגר בחצי) לא יצליחו (#3207).
    • תיקון בעיה ב-codec במכשירים מסוימים שבהם ה-codec בלע את כל הדגימות אם הוא רוקן לפני קבלת מאגרי קלט.
    • הוספת ExoPlayer.Builder.enablePerStreamMediaProgression() כדי לאפשר קידום של עיבוד המדיה על בסיס כל סטרימינג בנפרד. השינוי הזה מקטין את זמן האחזור של ההפעלה בין פריטים בפלייליסט, ומונע מצב שבו ההפעלה 'נתקעת' בתוכן קצר מאוד (#3122).
    • תוקנה בעיית מרוץ תהליכים שקשורה לשימוש במזהה של סשן אודיו, שבה נעשה שימוש במזהה הראשוני של סשן אודיו שנוצר אוטומטית על ידי ExoPlayer במקום בערך שהוגדר על ידי setAudioSessionId (#3241).
    • הוספנו תמיכה ניסיונית בהפעלה של מטא-נתונים מתוזמנים של HAGC (ST 2094-50) למדיה פרוגרסיבית (למשל MP4, ‏ Matroska). הנגן ממזג באופן אוטומטי רצועות של מטא-נתונים של HAGC עם רצועת הווידאו המשויכת, ומעביר את המטא-נתונים מחוץ לפס למפענח במכשירים עם API בגרסה 37 ומעלה. אפשר להשבית את ההתנהגות הזו באמצעות DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false).
  • ‫CompositionPlayer:
    • תוקנה בעיה שבה מופעי TrackSelector לא שוחררו.
  • ‫Transformer:
    • תוקנה בעיה שבה יכול להיות שערך המדד ExportResult.fileSizeBytes דווח כגבוה מדי.
  • בחירת טראק:
    • חושפים את BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR ומוסיפים AdaptiveTrackSelection.Factory.setTrackFormatComparator כדי לאפשר סדר מותאם אישית של פורמטים ועדיפות לבחירת ABR מעבר לסדר שמבוסס על קצב העברת נתונים בלבד.
  • אמצעי חילוץ:
    • ‫MP4, ‏ MP3 ו-FLAC: נוספה האפשרות FLAG_DISABLE_ARTWORK_METADATA כדי לאפשר ביטול של תמונות מצורפות ומטא-נתונים של גרפיקה במהלך ניתוח של קובץ מארח, כדי לצמצם את צריכת הזיכרון בזמן הריצה (מס' 2077). אפשר להפעיל את ההגדרה הזו באופן מרכזי דרך DefaultExtractorsFactory.setDisableArtworkMetadata.
    • ‫MP4: נוספה תמיכה בחילוץ של נתוני מטא-נתונים מתוזמנים של ITU-T T.35 ‏ (it35) מתוך טראקים.
    • ‫MP4: הוספת תמיכה בחילוץ מטא-נתונים של פרקים (גם בפורמט Nero וגם בפורמט QuickTime). אם יש גם סימניות של QuickTime וגם סימניות של YouTube, המערכת תעדיף את הסימניות של QuickTime. המידע על הפרקים שחולץ מוצג כChapter רשומות בתוך רצועת Metadata, וכך מאפשר ניווט מקורי בין פרקים בקובצי MP4,‏ M4A ו-M4B (כמו ספרי אודיו ופודקאסטים) (#2803).
    • ‫WAV,‏ Matroska ו-MP4: נוספה תמיכה באודיו PCM בנקודה צפה של 64 ביט (‎#3090).
    • ‫Matroska: משתמשים במטא-נתונים של קודק bitstream כדי לאכלס את ColorInfo בצורה מדויקת.
    • ‫MP4: נוספה תמיכה בחיפוש בקובצי MP4 מפוצלים באמצעות התיבה mfra כשתיבה sidx לא קיימת. כדי להפעיל את האפשרות הזו, צריך לספק את FLAG_READ_MFRA_FOR_SEEK_MAP אל FragmentedMp4Extractor, שמתבצעת עכשיו כברירת מחדל ב-DefaultExtractorsFactory (#3088).
    • התעלמות מנתוני av1C עם גרסה לא נתמכת.
    • ‫MP4: הוספנו תמיכה ב-PCM של נקודה צפה בפורמט big-endian בתיבות fpcm.
    • ‫Matroska: ניתוח מידע על פרקים לרשומות Chapter ב-Chapter של טראק.Metadata
    • ‫MPEG-TS: שיפור החילוץ של זרמי DTS-HD ו-DTS Express על ידי שילוב של Core ו-Extension Substream לדוגמה אחת, תיקון בעיות בהפעלה שבהן שני הזרמים האלה הופקו בעבר כדוגמאות נפרדות (#3147).
    • ‫MP4: מניעת לולאות אינסופיות וקריאות מחוץ לגבולות במהלך ניתוח של פריטי תג מטא-נתונים ריקים ‫ilst (#3191).
    • ‫MPEG-TS: מוודאים שהפריים האחרון עובר רינדור בסטרימינג שבו אורך חבילת ה-PES האחרונה ידוע (#3206).
    • ‫MP3: תיקון דיווח קצב העברת הנתונים (bitrate) בקבצים עם כותרת Xing ו-VBRI.
    • ‫Matroska: טיפול בטראקים שמוגדרים באשכול האחרון (#3250).
    • ‫Matroska: נוספה תמיכה ב-ALAC (#3268).
    • ‫MP4: אפשר להשתמש בתיבות באורך משתנה בקובצי MP4 מפוצלים sgpd (‎#3243).
  • אודיו:
    • הוספת תקופת חסד של 100 אלפיות השנייה לרכיבי העיבוד של האודיו ב-ExoPlayer כשעוברים ממצב מוכן למצב לא מוכן, כדי למנוע מצבים של חוסר נתונים זמני (underrun) ולמנוע מצבי אחסון בזיכרון מטמון לא צפויים במהלך הפעלה פעילה (#3210).
    • שינוי הלוגיקה של גודל ברירת המחדל של מאגר PCM ב-DefaultAudioTrackBufferSizeProvider כך שישתמש במאגר קבוע של 500ms כדי להפחית את התלות במכשיר.
    • צריך לעדכן את MediaCodecAudioRenderer כדי לחלץ את ה-channelMask המרחבי ממפענח הפלטפורמה, וכך לאפשר ל-DefaultAudioSink להשתמש במסכה המפורשת הזו במקום להסיק מסכה מספירת הערוצים.
    • המרת פרמטרים של AudioSink.configure למחלקת נתונים. צריך להעביר את ההגדרות המותאמות אישית של ForwardingAudioSink.configure לחתימת השיטה החדשה.
    • נוספה תמיכה בשמירה על גובה הצליל כשמבצעים מתיחה בזמן של זרם אודיו באמצעות EditedMediaItem.Builder#setSpeed(SpeedParameters).
    • שיפור ToFloatPcmAudioProcessor כדי לתמוך בהמרה של PCM עם 8 ביט, PCM עם 16 ביט בשיטת Big-endian ו-PCM עם 64 ביט בנקודה צפה ל-PCM עם 32 ביט בנקודה צפה (‎#3090).
    • שינוי ערך ההחזרה של DecoderAudioRenderer.getChannelMapping ל-ImmutableIntArray.
    • תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.
    • מעבירים את Timeline ואת ה-UID של התקופה אל AudioSink.configure ואל AudioProcessor.StreamMetadata כדי לספק הקשר של פלייליסט למעבדי האודיו (#418).
    • צריך להגדיר את הערך הנכון של AudioProcessor.StreamMetadata.positionOffsetUs כדי לאפשר עיבוד אודיו מבוסס-זמן (#418).
    • הוספת תמיכה ב-PCM של נקודה צפה (floating point) בפורמט big endian ב-32 ביט וב-64 ביט.
  • סרטון:
    • תיקון הלוגיקה של הצטרפות לסרטון כדי לספור את מאגרי הנתונים הזמניים שהושמטו במהלך ההצטרפות כמאגרי נתונים זמניים שדילגו עליהם במקום כמאגרי נתונים זמניים שהושמטו.
    • תיקון של החלטת רינדור מיידית כשמגדירים משטח חדש כדי למנוע ירידה במספר הפריימים לשנייה במכשירים שלא תומכים במשטחי placeholder.
    • תיקנו את הערכת קצב הפריימים ב-MediaCodecVideoRenderer כדי שתהיה מדויקת יותר, על ידי התחשבות בפריימים שהושמטו או שדילגו עליהם.
    • הגדרה שמאפשרת לקבוע את ערך הסף שמשמש לתזמון מוקדם של פריימים. ערך ברירת המחדל הוא 50 אלפיות השנייה, אבל אפשר להתאים אישית את הערך באמצעות MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold().
  • טקסט:
    • ‫TTML: חזרה ל-displayAlign מ-style לאזורים (‎#2559).
    • ‫TTML: קבלת שעת התחלה של רמזים בירושה מרכיב האב של רכיבי <p> (מס' 3246).
  • מטא-נתונים:
    • מוסיפים שדה MediaMetadata.discSubtitle ומנתחים אותו מנתוני ID3v2.4 TSST ו-Vorbis DISCSUBTITLE.
    • ניתוח מספר הדיסק והספירה מתוך מסגרת ID3 TPOS.
  • אפקט:
    • ניקוי מצב הציור מחדש ב-FinalShaderProgramWrapper כשמרוקנים את המאגר כדי למנוע את קפיאת הנגן כשמבצעים חיפוש.
  • Muxers:
    • הוספנו תמיכה בהפניות לרצועות (התיבה tref) ב-Mp4Muxer באמצעות API חדש addTrackReference. התג הזה מאפשר ליצור קשרים בין רצועות, למשל לקשר רצועת מטא-נתונים לרצועת הסרטון שהיא מתארת.
    • מוסיפים את OggMuxer כדי לאפשר מיזוג של מקורות מדיה מסוג OPUS או VORBIS לפורמט הקובץ ogg.
    • מוסיפים WavMuxer ליצירת קובץ WAV (תומך ב-PCM של מספרים שלמים וב-PCM של נקודה צפה).
    • מוסיפים setAttemptStreamableOutputEnabled ל-InAppMp4Muxer.Factory כדי לאפשר כתיבה של קבצים קטנים יותר שלא ניתן להזרים בלי מקום שמור.
    • הוספת תמיכה באודיו בפורמט IAMF ב-Mp4Muxer וב-FragmentedMp4Muxer.
  • ‫IMA extension:
    • מוסיפים את התג ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot כדי לאפשר הקצאת מיקום מודעה בדף לשימוש במודעות שמופיעות בהשהיה.
    • תוקן באג שגרם לכך שכשמודעות VAST ניתנות לדילוג ומוצגות ברצף, לחצן הדילוג מוצג מיד במודעה השנייה (#3165).
  • סשן:
    • תיקון של מצבי קיפאון פוטנציאליים וקריסות של IllegalStateExceptionMediaNotificationManager כשמשתמשים בסשן עם לולאת נגן של שרשור ברקע.
    • אכיפת דרישות מחמירות יותר לגבי שרשורים בשיטות MediaSession. שיטות Void מפרסמות עכשיו באופן אוטומטי את הביצוע בשרשור של לולאת האפליקציה, ופונקציות גישה למצב (getters) יוצרות באופן מפורש IllegalStateException אם הן מופעלות משרשור שאינו שרשור לולאת האפליקציה.
    • תוקנה קריסה של מיזוג ציר זמן מחוץ לגבולות (IllegalStateException ב-MediaUtils.mergePlayerInfo) באמצעות מעקב אחר עקביות המצב לכל בקר בצד של הסשן.
    • הוספנו את androidx.media3.session.MediaSessionManager כדי לספק תמיכה בשליחת שאילתות לגבי סשנים פעילים של מדיה והחזרת מופעים של Media3 SessionToken.
    • שינוי התנהגות ברירת המחדל של MediaSession.Callback.onConnect אם השיטה לא מוחלפת כדי לספק גישת קריאה בלבד לבקרים לא מהימנים.
    • הוספנו תמיכה בשינוי שם החבילה בזמן יצירת אפליקציה ב-MediaSession באמצעות API חדש MediaSession.Builder#setPackageNameOverride. למבצע השיחה צריכה להיות הרשאה android.permission.OVERRIDE_MEDIA_SESSION_OWNERלשנות את שם החבילה של הסשן.
    • מוסיפים MediaSession.Callback.onConnectAsync(). השיטה החדשה מאפשרת לעבד באופן אסינכרוני את ניסיון החיבור של בקר. אפליקציות יכולות להחזיר Future מיידי עם Futures.immediateFuture(ConnectionResult) כדי להשיג את ההתנהגות הקודמת. מומלץ לעבור לשיטה החדשה כי Callback.onConnect עומדת לצאת משימוש.
    • תוקנה בעיה שבה הגלישה ב-Bluetooth AVRCP לא זיהתה את MediaLibraryService ב-API 36 וב-API 37.
  • UI:
    • תוקנה בעיה שבה הרינדור של הפריים הראשון היה בגודל שגוי כש-ContentFrame הורכב מחדש באמצע ההפעלה (#3238).
    • מוסיפים את המחלקה CurrentMediaItemState ואת ה-Composable המתאים rememberCurrentMediaItemState למודול media3-ui-compose. מחזיק המצב הזה משמש ב-demo-compose להצגת מידע שונה של מטא-נתונים על MediaItem שמופעל כרגע.
    • מוסיפים את המחלקה PlaylistState ואת ה-Composable המתאים rememberPlaylistState למודול media3-ui-compose. מאחסן מצב זה משמש ב-demo-compose כדי להציג מידע שונה של מטא-נתונים על MediaItems שמוגדר בנגן.
    • הוספת API להרצה קדימה/הילוך איטי ל-PlaybackSpeedState. אפשר להשתמש בפונקציה הזו ב-demo-compose כדי להציג את האפשרות להרצה קדימה בלחיצה ארוכה.
    • מוסיפים את הקומפוזבילי MiniController למודול media3-ui-compose-material3. הוא מספק ממשק קומפקטי לשליטה בPlayer, ומציג את השם, האמן, יצירת האומנות וההתקדמות של פריט המדיה הנוכחי.
    • מוסיפים את המחלקה ErrorState ואת ה-Composable המתאים rememberErrorState למודול media3-ui-compose. מוסיפים את ErrorText Composable אל media3-ui-compose-material3 ומגדירים אותו כשכבת-על שמוצגת כברירת מחדל ב-Player.
    • פרסום אובייקט PlayerDefaults עם קומפוזיציות ל-TopControls,‏ CenterControls,‏ BottomControls ו-ErrorOverlay.
    • מוסיפים FocusRequester ל-Player Composable ולמשבצות התוכן שלו.
    • פרסום PlayerPool (common-ktx) ו-rememberPooledPlayer (ui-compose) כדי לתמוך בטעינה מראש של MediaItems בסביבות של ממשקי משתמש עם חלון הזזה. הדגמה של הפונקציונליות הזו ב-demo-compose באמצעות ShortFormPlayerScreen חדש.
  • תוסף Ktor:
    • הוספת מודול חדש של תוסף media3-datasource-ktor שמספק KtorDataSource עם גיבוי של מחסנית ה-HTTP של Ktor.
  • תוסף HLS:
    • הוספנו תמיכה ב-HLS Content Steering וב-Pathway Cloning (#1689).
    • הוספת setWithAssetListReset אל HlsInterstitialsAdsLoader כדי לאפשר לאפליקציות לאפס מודעות מעברון ברשימת נכסים שעברו עיבוד מלא, כך שהן לא יהיו זמינות יותר לצורך פתרון בעיות לפי דרישה.
  • תוסף DASH:
    • פיצול כתוביות סמויות של CEA ל-TrackGroup שונים על סמך שפה (#3113).
  • תוסף RTSP:
    • תיקון של השהיות או כשלים זמניים בהפעלה במהלך ההכנה להפעלה של RTSP שנגרמים משגיאות באיגוד של יציאות UDP.
  • תוסף Cast:
    • הוספת מחלקה חדשה CastParams כדי לאפשר הגדרה של Cast על ידי קריאה ל-Cast.initialize(CastParams).
    • הוספנו אפשרות חדשה CastParams.getShowSystemOutputSwitcherOnCastIconClick() שמפעילה את הכלי להחלפת פלט של SystemUI במקום את הכלי לבחירת מכשיר ל-Cast בתוך האפליקציה, כשהוא זמין.
  • כלי בדיקה:
    • הרחבת DataSourceContractTest כדי לכלול תמיכה בבקשות POST עם כותרות וגופים, הוספת כמה משאבי POST ל-HttpDataSourceTestEnv והוספת הצהרות לגבי שיטת ה-HTTP, הכותרות והגוף הצפויים ב-WebServerDispatcher.
    • הידוק הטענות ב-DataSourceContractTest לגבי אורכים שמוחזרים מ-DataSource.open(). במשאבים שעשויים להוביל לC.LENGTH_UNSET צריך לציין זאת באמצעות TestResource.Builder.setMayResolveToUnknownLength(boolean).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של 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.
  • Build
    • עדכנו את ההוראות לשימוש ב-Media3 באופן מקומי ב-README.md כדי להשתמש ב-Gradle Composite Builds ‏ (includeBuild). הסקריפט core_settings.gradle הוסר, והמאפיינים androidxMediaModulePrefix ו-androidxMediaEnableMidiModule לא נמצאים יותר בשימוש.

גרסה 1.10.0

‫1.10.1

‫12 במאי 2026

  • ספרייה משותפת:
    • תוקן הטיפול ב-onAudioSessionIdChanged ב-SimpleBasePlayer וב-ForwardingSimpleBasePlayer.
  • ‫ExoPlayer:
    • תיקון מרוץ תהליכים שקשור ליצירת מזהה סשן אודיו שיכול להוביל ל-IllegalStateException במצב מנהור. (#3099).
    • תיקנו קריסות אפשריות של אפליקציות בזמן שחזור משגיאות של מפענח עם חימום מראש של רכיב ה-Renderer.
    • תוקנה בעיה שבה נוצרו ארטיפקטים בסרטון בגלל אספקת נתוני אתחול כשמשתמשים ב-codec של Dolby Vision שמבוסס על AV1 (מספר 3153).
  • בחירת טראק:
    • התאמת הלוגיקה של בחירת טראקים ב-VideoTrackInfo כדי לפתור סוגי MIME של חזרה למצב קודם והעברת העדפות של HDR וציון קודק להעדפות איכות (#3135).
  • אמצעי חילוץ:
    • ‫MP3: מתעלמים מאורך הנתונים של Xing אם הוא ארוך יותר מאורך הסטרימינג הידוע (‎#3117).
    • תיקון ArrayIndexOutOfBoundsException ב-Mp4Extractor כשההגדרה FLAG_OMIT_TRACK_SAMPLE_TABLE מוגדרת ולרצועה חסרה דוגמה לסנכרון (stss).
  • אודיו:
    • תיקון באג שבו יכול להיות שאירועי אודיו ינותבו בצורה שגויה אם מוסיפים לנגן כמה רכיבי עיבוד של אודיו.
  • סרטון:
    • התאמת הלוגיקה לשימוש חוזר ב-codec בשינויים בקצב הפריימים ב-API מתחת ל-30 כדי למנוע איפוסים של codec במקרים שבהם הם לא מועילים (‎#3120).
    • השבתנו את הפתרון העקיף לסנכרון מאולץ ב-queueSecureInputBuffer בגרסה API 31 ואילך. הפתרון העקיף היה צוואר בקבוק מלאכותי שאילץ את ההצפנה לפעול באופן סדרתי, מה שמנע שיבוש בסרטון בגלל בעיה במסגרת שהייתה קיימת לפני גרסה API 31.
  • תמונה:
    • תוקנה בעיה במצב ניקוי שבה עדכוני תמונות נכנסו לתוקף רק כשהמשתמש "הפסיק את הניקוי" (#2815).
  • סשן:
    • תוקן באג שגרם לכך ש-ForegroundServiceStartNotAllowedException לא הועבר בין גבולות ה-thread במקרה שה-thread של האפליקציה לא היה ה-thread הראשי (#2499).
    • תוקן באג שבו COMMAND_SEEK_TO_MEDIA_ITEM לא זמין ב-MediaController כשמתחברים לסשן שמוגבל לפלטפורמה ותומך בדילוג לפריטים אחרים אבל לא בשינויים בפלייליסט.
    • תוקנה הבעיה שבה MediaController לא יכול להגדיר פריטי מדיה בהפעלות מדיה בפלטפורמה שלא מאפשרות פעולות של PREPARE_FROM.
    • תוקן באג שבו התהליך של המשתמש לא סומן ב-Controller.isTrusted() בגרסה API 27 ומטה כשמתחברים דרך בקרי פלטפורמה.
  • תוסף HLS:
    • תוקן באג שגורם לשגיאה ArrayIndexOutOfBoundsException במהלך חזרה לסטרימינג אם בחירת הרצועה היא קבוצת משנה של הרצועות הזמינות (מס' 3161).
    • תוקנה בעיה שבה פלח האתחול לא הועבר בעדכונים של פלייליסטים של מדיה אם התג #EXT-X-MAP לא חזר על עצמו בעדכונים הבאים (#3105).
  • תוסף DASH:
    • תיקון קריסה ב-SampleQueue כשמנסים להגיע לחלק שכרגע מתבצעת בו פעולת ביטול.

1.10.0

‫26 במרץ 2026

  • ספרייה משותפת:
    • קידום של Player.mute() ושל Player.unmute() מ-UnstableApi לגרסה יציבה.
    • קידום של Format.pcmEncoding ושל C.PcmEncoding מ-UnstableApi לגרסה יציבה.
    • מוסיפים את Format.primaryTrackGroupId כדי לזהות את הקבוצה הראשית של מופעי Format שמוטמעים (מס' 294).
  • ‫ExoPlayer:
    • הוספת יכולות חיתוך ל-AdsMediaSource.
    • נוספה תמיכה בתזמון דינמי ב-MediaCodecVideoRenderer כדי לשפר את ההתאמה בין תזמון העבודה לבין מחזורי ההתעוררות של המעבד, לזמן שבו אפשר לעבד את פריים הווידאו. אפשר להפעיל את התכונה הזו באמצעות experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs() ב-DefaultRenderersFactory.
    • אפשר להגדיר DataSource.Factory מותאם אישית ב-DefaultPreloadManager.Builder.
    • אפשר להשתמש ב-ExoPlayer כ-mock בלי Robolectric על ידי העברת חלק מהקבועים של ברירת המחדל אל ExoPlayer.Builder. בדרך כלל לא מומלץ ליצור מוקאפ לממשק המורכב הזה – רק אם השימוש בו מינימלי, פשוט או מקרי (#2985).
      • לכן נדרשה העברה של DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS מ-ExoPlayer אל ExoPlayer.Builder (ללא הוצאה משימוש).
    • תוקן באג שבו ProgressiveMediaSource מעביר לנגן מידע לא עדכני על ציר הזמן, והתקופות שנוספו לתור מוסרות באופן לא צפוי (#3016).
    • תוקנה בעיה שגרמה לכך ש-ExoPlayer לא ביקש הרשאת אודיו מושהית כשנשלחה בקשה להפעלה במהלך שיחות טלפון.
    • תוקן באג שבו מעברים מתוכן על פי דרישה לתוכן בשידור חי עלולים לגרום לטעינה מחדש בסוף התוכן על פי דרישה (#3052).
    • הוספת תמיכה ב-Dolby Vision Profile 10 (#2830).
    • תוקן באג שבו מודעת pre-roll שלא אותחלה הפיקה את השגיאה ArrayIndexOutOfBoundsException (‎#3125).
  • ‫CompositionPlayer:
    • הוספת תמיכה ב-EditedMediaItem.removeVideo.
  • ‫Transformer:
    • עכשיו אפשר להגדיר ב-EditedMediaItem.Builder.setFrameRate() קצב פריימים מקסימלי לפלט של סרטון. זה שימושי במיוחד כשמגבירים את מהירות המדיה באמצעות setSpeed().
  • בחירת טראק:
    • משנים את החתימה של DefaultTrackSelector.selectAllTracks כך שתכלול את מערך הפלט כפרמטר, עם ערכים שמוגדרים מראש לשינויים בטראקים.
    • תוקנה בעיה שבה טראקים של מטא-נתונים מוטמעים נבחרו בלי קשר לשאלה אם הטראק הראשי התואם נבחר (#294).
    • ייצוב האפשרויות של TrackSelectionParameters עבור preferredVideoLanguages, ‏ preferredVideoLabels,‏ preferredAudioLabels, ‏ preferredTextLabels ו-selectTextByDefault.
  • אמצעי חילוץ:
    • ‫MP4: תמיכה בקבצים עם תיבות גדולות של uuid לפני תיבות אחרות כמו moov (מס' 3046).
    • ‫MP4: נוספה תמיכה בטראקים של Versatile Video Coding ‏ (VVC) במאגרי MP4.
  • כלי הבדיקה:
    • שינוי תוכנה שעלול לגרום לכשל: הסרה של FrameExtractor. המשתמשים צריכים להסתמך עכשיו על מודול :media3-inspector-frame החדש ולעדכן את הייבוא ל-androidx.media3.inspector.frame.FrameExtractor.
    • הוספנו מודול חדש לחילוץ ולעיבוד של פריימים מפוענחים של סרטונים.
  • אודיו:
    • שינוי ספריית הפענוח הבסיסית של תוסף הפענוח של IAMF מ-libiamf ל-iamf_tools.
    • פענוח IAMF תומך בפלט בינאורלי דרך המפענח (כשמשתמשים בתוסף מפענח IAMF) או דרך Android Spatializer.
    • הסרה נכונה של התמיכה ב-AC4Profile22 ובפרופילים אחרים מדור קודם בבדיקת התמיכה במפענח AC-4 בתרחישים של Automotive (#2609).
    • שיפור הלוגיקה לניסיון נוסף של אתחול AudioOutput ב-DefaultAudioSink (#2905).
    • כשמפענחים IAMF, צריך לנסות להתאים את פריסת הפלט של הרמקולים (או של Spatializer אם רלוונטי), גם עם התוסף IAMF וגם עם מפענחי קודק המדיה, שנתמכים על ידי שדות ולוגיקה חדשים ב-AudioCapabilities וב-AudioCapabilitiesReceiver.
    • תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.
  • טקסט:
    • ‫VobSub: משתמשים בפקודות הבקרה START ו-STOP SPU כדי לגזור את משך האות במקום להשתמש תמיד בברירת המחדל של 5 שניות (מס' 2935).
  • מטא-נתונים:
    • הגדלת מספר ברירת המחדל של רכיבי העיבוד של מטא-נתונים לארבעה כדי לכסות את כל רצועות המטא-נתונים הפוטנציאליות שמתפרסמות על ידי וריאציות ועיבודים של HLS (‎#3043).
  • אפקט:
    • העברה של LottieOverlay למודול חדש של :media3-effect-lottie (שכללה גם שינוי שם מ-androidx.media3.effect.LottieOverlay ל-androidx.media3.effect.lottie.LottieOverlay).
  • ‫Effect Lottie:
    • הוספנו מודול חדש :media3-effect-lottie שמספק פונקציונליות להחלת אפקטים של Lottie על פריים של סרטונים.
  • ‫IMA extension:
    • כדי לקבל גישה ל-API העדכני של פרטי המדיה של המודעה, צריך לעדכן את גרסת IMA SDK ל-3.39.0.
    • תיקנו באג שבו סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שסופק באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות פרטי המדיה של המודעה שסופקו על ידי IMA.
    • הוספת setEnableCustomTabs ל-ImaAdsLoader ול-ImaServerSideAdInsertionMediaSource, כדי לאפשר למשתמשים לקבוע אם כתובות URL של מעקב אחרי קליקים על מודעות יופעלו באמצעות כרטיסיות בהתאמה אישית.
    • מוסיפים את ImaAdTagUriBuilder, מחלקה שמציעה דרך חלופית ליצירת adTagUri. הוא כולל את setPreferredLinearOrientation API. זהו API שנמצא בבדיקת אלפא, שיאפשר לכם להגדיר את ההתמצאות המועדפת שלכם למודעות ליניאריות. אם אתם רוצים להצטרף לקבוצת בדיקות האלפא, אתם יכולים לפנות לשותף שאחראי על החשבון שלכם.
  • סשן:
    • תוקן באג שבו מערכים גדולים ב-MediaMetadata.artworkData עלולים לגרום לקריסה של האפליקציה.
    • צריך להשתמש בסוג int לארגומנט @Player.Command בממשק ActionFactory (#2933).
    • הופכים את MediaSessionService ואת MediaLibraryService ל-LifecycleService, כדי לאפשר צירוף של פעולות שמתבצעות בהתאם למחזור החיים למחזור החיים של השירות (‎#187).
    • הפסקת התמיכה בפקודות לשינוי עוצמת הקול במכשירים מ-MediaController ומ-MediaBrowser להפעלות מקומיות. אפליקציות לא אמורות לשנות את עוצמת הקול במכשיר המקומי, ואם נדרש, הן יכולות להשתמש בממשקי AudioManager API למטרה הזו.
    • זיהוי מקרים לא פעילים של Intent שהתחילו את השירות כשירות שפועל בחזית. כך נמנעת שגיאה ForegroundServiceDidNotStartInTimeException במערכת. זהו שינוי שובר תאימות ב-API לא יציב באפליקציות שמטמיעות MediaNotification.Provider בהתאמה אישית, כי יש שיטה חדשה שנדרשת.
    • הוספת כלים ליצירת מופעים של PendingIntent לשימוש בווידג'טים במסך הבית (#2933).
    • הוספת שיטות סטטיות ליצירת מופעים של Intent לווידג'טים של מסך הבית שמבוססים על Compose (‎#2933).
    • תוקן באג שבו המעבר בין פריטי מדיה לא דווח לבקרי המדיה כשההפעלה עברה מאינדקס של פריט מדיה מסוים לאינדקס אחר עם אותו פריט מדיה בגלל סיבת אי הרציפות AUTO ו-SEEK (‎#2997).
    • תיקון בעיה שבה פתרון עקיף למיקום לחצנים בממשק המשתמש של המערכת משפיע באופן שלילי על ממשק משתמש אחר, כמו Android Auto, או על יצרנים שלא צריכים את הפתרון העקיף (#3041).
    • תוקנה הבעיה שבה הגישה למינויים לא סונכרנה (#3056).
    • פתרון עקיף לבאג ב-SysUI ב-API 29, שבו יצירת יצירות אמנות של סשן מדיה בגודל מסוים עלולה לגרום לקריסת SysUI ולאלץ את המכשיר להפעיל מחדש (#3118).
    • תיקון של שינוי גודל הסמל של יצירת האומנות בהתראות ב-Android Q ‏(#3084).
  • UI:
    • הוספת PlaybackSpeedControl Composable ל-media3-ui-compose כדי להציג ולשנות את מהירות ההפעלה.
    • מוסיפים PlaybackSpeedToggleButton Composable ל-media3-ui-compose-material3 כדי לשלוט במהירות ההפעלה.
    • הוספנו את ProgressSlider Composable ל-media3-ui-compose-material3 כדי להציג את ההתקדמות של הצופה בסרטון ולאפשר לו לדלג קדימה ואחורה באמצעות גרירה והקשה (מספר 2288).
    • הימנעות ממאגר גדול מחוץ למסך בהנפשת PlayerControlView.
    • מוסיפים את רכיב ה-Composable‏ Player אל 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:
    • נפתרה בעיה שבה טראקים עם זמני התחלה של קטעים שלא מיושרים גורמים לעיכובים או לדגימות חסרות בתחילת ההפעלה (#3057).
    • תיקון באג שבו חותמות הזמן של מטא-נתונים של EMSG v0 בתוך פס לא מוגדרות בצורה נכונה (#3024).
  • תוסף RTSP:
    • תוקנה רגרסיה בסטרימינג של H.264 ו-H.265 שגרמה לניתוח שגוי של דוגמאות של אותה יחידת גישה שהתפרסה על פני כמה מנות RTP. התוצאה הייתה ארטיפקטים חזותיים ופגמים בסרטון (#3121).
  • תוספים של מפענחים (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • הוספת תמיכה במנהל ממשק משתמש של MPEG-H לתוסף של מפענח MPEG-H (#3066).
  • תוסף Cast:
    • הוספנו RemoteCastPlayer.Builder#setTrackSelector שיטה שמאפשרת הטמעה של בחירת טראקים בהפעלות של Cast.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של ExperimentalFrameExtractor. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.inspector.frame.FrameExtractor.
    • הסרה של ChannelMixingMatrix.create(). במקום זאת, אתם צריכים להשתמש ב-ChannelMixingMatrix.createForConstantGain().
    • הסרה של androidx.media3.extractor.metadata.flac.VorbisComment. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.metadata.vorbis.VorbisComment.
    • הסרה של MediaSource.prepareSource(MediaSourceCaller, TransferListener). במקומה צריך להשתמש במדיניות MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId).

‫1.10.0-rc03

‫25 במרץ 2026

משתמשים בגרסה יציבה 1.10.0.

‫1.10.0-rc02

‫16 במרץ 2026

משתמשים בגרסה יציבה 1.10.0.

‫1.10.0-rc01

‫10 במרץ 2026

משתמשים בגרסה יציבה 1.10.0.

‫1.10.0-beta01

‫25 בפברואר 2026

משתמשים בגרסה יציבה 1.10.0.

‫1.10.0-alpha01

‫6 בפברואר 2026

משתמשים בגרסה יציבה 1.10.0.

גרסה 1.9.0

1.9.4

‫16 במאי 2026

גרסה 1.9.4 מכילה את השמירות הבאות.

  • אפקט:
    • צריך להגדיר בצורה מפורשת את GL_DRAW_BUFFER ואת GL_READ_BUFFER כשעוברים מהקשר ללא משטח.

1.9.3

‫16 במרץ 2026

גרסה 1.9.3 מכילה את השמירות האלה.

  • אודיו:
    • תוקן באג שגרם להפעלה להיתקע כשמפעילים פלייליסט של אודיו ללא הפסקה במצב של העברת נתונים דחוסים.

‫1.9.2

‫6 בפברואר 2026

גרסה 1.9.2 מכילה את השמירות האלה.

  • ‫ExoPlayer:
    • תוקן באג שבו ProgressiveMediaSource מעביר לנגן מידע לא עדכני על ציר הזמן, והתקופות שנוספו לתור מוסרות באופן לא צפוי (#3016).
  • סשן:
    • תיקון בעיה שבה פתרון עקיף למיקום לחצנים בממשק המשתמש של המערכת משפיע באופן שלילי על ממשק משתמש אחר, כמו Android Auto, או על יצרנים שלא צריכים את הפתרון העקיף (#3041).
  • תוסף Cast:
    • תוקן באג שגרם לכך שההעברה מ-Cast להפעלה מקומית לא פעלה.

‫1.9.1

‫26 בינואר 2026

גרסה 1.9.1 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • תמיכה במחרוזות של תאריך ושעה עם שעות בלבד בהיסט מאזור הזמן (‎#2929).
  • ‫ExoPlayer:
    • ההגדרה הזו מאפשרת לתזמון דינמי להאט את מרווח הזמן של doSomeWork רק אחרי שהשמע מתחיל, כדי לתמוך בסנכרון חלק יותר של אודיו ווידאו בתחילת ההפעלה.
    • תוקן באג ב-DefaultLoadErrorHandlingPolicy שבו בוצע ניסיון חוזר מספר פעמים ל-FileNotFoundException ולסוגים דומים של חריגים.
    • תוקנה באג בתזמון דינמי שבו הזמן המחושב להפעלה הבאה של doSomeWork קוצר בטעות בפרק הזמן שחלף מההפעלה הנוכחית של doSomeWork. הטיפול בבעיה הזו אמור להאריך את זמן ההמתנה של המעבד ולחסוך בחשמל.
    • תוקנה בעיה שבה חלק מההפעלות של קובצי Dolby Vision נכשלות כשמנסים להשתמש בקודק חלופי של AVC או HEVC.
    • תוקן באג שבו הטעינה נמשכת אחרי שההפעלה מסתיימת כשמסירים את הפריט שמופעל כרגע מפלייליסט (#2873).
    • נמנעו דליפות של MediaItem מקרים כשמשתמשים שוב ושוב ב-ExoPlayer.replaceMediaItem באותו פריט (‎#2993).
    • מניעת מצבים פוטנציאליים של ANR שנגרמים משחרור חסימת מצב שינה במקרה חירום (#2979).
  • אמצעי חילוץ:
    • ‫MP3: Parse LAME ReplayGain data (#2840).
  • אודיו:
    • הסרה נכונה של התמיכה ב-AC4Profile22 ובפרופילים אחרים מדור קודם בבדיקת התמיכה במפענח AC-4 בתרחישים של Automotive (#2609).
  • סרטון:
    • הסרת קודקים של סרטונים במכשירים עם API מתחת ל-30 כשקצב הפריימים של התוכן משתנה, כדי למנוע גמגום בהפעלה (‎#2941).
  • טקסט:
    • ‫VobSub: תוקנו כמה כתוביות חסרות על ידי טיפול נכון ב-SPU שמכילים רק רצף בקרה יחיד, או שיש בהם מידע קריטי שמפוצל בין כמה רצפי בקרה (#2935).
  • ‫IMA extension:
    • תיקון באג: תוקנה בעיה שבה סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שסופק באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות אינדקס רצף המודעות ומיקום מודעה בדף.
    • צריך להוסיף בדיקה של ערך null לפני שמתבצעת גישה לתוצאה של getAdsManager() ושל AdEvent.getAd().
  • סשן:
    • תוקן באג שגרם לקריסת האפליקציה כשמפסיקים סשן של MediaController שמתחבר לפלטפורמה, אם ההפסקה מתרחשת במהלך הפעלת מודעה (#2948).
    • כדי להגן מפני מקרים של מופעי extras Bundle פגומים שנשלחים מתהליכים אחרים, כדאי להוסיף אימותים נוספים במופעי extras Bundle בכמה מחלקות.
    • תוקנה בעיה שבה פקודות חסרות עבור COMMAND_SEEK_NEXT או COMMAND_SEEK_BACK עלולות לגרום לפערים בהתראה על מדיה במערכת (#2976).
    • העברת קנה מידה של מפת סיביות לסמל ההתראה מחוץ לשרשור הראשי (#2829).
    • תוקן באג שגרם לכך שהשדות author, ‏ writer ו-composer לא שימשו כגיבוי כשבוצעה המרה מ-MediaMetadataCompat ומ-MediaDescriptionCompat מדור קודם (‎#3018).
  • הורדות:
    • תיקון לולאות אינסופיות פוטנציאליות כשמטפלים ב-PriorityTooLowException באמצעות SegmentDownloader (עבור DASH, ‏ HLS ו-SmoothStreaming). אם משתמשים בשיטה המוגנת execute כדי לבצע שינויים בהתאמה אישית ב-SegmentDownloader, צריך לספק את המשימה בתוך Supplier כדי שאפשר יהיה ליצור אותה מחדש (מס' 2931).
  • תוסף HLS:
    • מעבירים את מסמך ה-JSON של רשימת הנכסים הגולמית אל פונקציית הקריאה החוזרת Listener.onAssetListLoadCompleted. זהו שינוי שעלול לשבור את התאימות לאחור ב-API לא יציב, שמחייב אפליקציות שמטמיעות את הקריאה החוזרת הזו להוסיף ארגומנט נוסף מסוג JSONObject (‎#2950).
  • תוסף 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.listenTomedia3-common-ktx שמציינת את Player.Events הספציפי שצריך לפעול לגביו.
    • תוקנה קריסה ב-BasePlayer.getBufferedPercentage שנגרמה כתוצאה מגלישה (overflow) של מספר שלם, כשמיקום המאגר המדווח גדול באופן לא סביר בהרבה מהמשך המדווח (#2750).
    • תיקון הזיהוי האוטומטי של TrackGroup track type על ידי אי התעלמות מסוג MIME מותאם אישית של דוגמה, וחזרה לשימוש ב-track type שעלול להיות שגוי מתוך סוג ה-MIME של הקונטיינר (#2860).
  • ‫ExoPlayer:
    • הוספת זיהוי של נגן תקוע שמפעיל שגיאת נגן אם נראה שהנגן תקוע.StuckPlayerException זה קורה במקרים הבאים, שבהם אפשר להגדיר כל זמן קצוב לתפוגה שמוגדר כברירת מחדל ב-ExoPlayer.Builder אם נדרש:
      • אחרי 10 דקות של STATE_BUFFERING בזמן ניסיון ההפעלה, ללא התקדמות בטעינה.
      • אחרי 10 שניות של STATE_READY בזמן ניסיון ההפעלה, ללא התקדמות בהפעלה.
      • אחרי דקה אחת של STATE_READY מעבר למשך הזמן המוצהר בלי להגיע לסוף הפריט.
      • אחרי 10 דקות עם סיבה לביטול ההפעלה בזמן ניסיון ההפעלה.
    • הפעלת הטיפול בנעילת ההשכמה כברירת מחדל כדי לפתור בעיות שקשורות לאגירת נתונים במהלך הפעלה ברקע. הפעולה הזו שוות ערך להגדרת ExoPlayer.Builder.setWakeMode לערך C.WAKE_MODE_LOCAL.
    • הוספת לוגיקת האזנה לעדכון אוטומטי של מזהה המכשיר הווירטואלי כששינוי מדווח ל-Context שהועבר במקור ל-ExoPlayer.Builder.
    • מוסיפים את ExoPlayer.setVirtualDeviceId כדי לעדכן באופן ידני את מזהה המכשיר הווירטואלי שהתקבל מ-Context שהועבר אל ExoPlayer.Builder.
    • חשוב לוודא שרכיבי העיבוד לא צורכים נתונים מהפריט הבא ברשימת ההשמעה יותר מ-10 שניות לפני סוף הפריט הנוכחי.
    • הוספת setSeekBackIncrementMs, setSeekForwardIncrementMs ו-setMaxSeekToPreviousPositionMs אל ExoPlayer כדי לעדכן את ההגדרות האלה אחרי הבנייה (#2736).
    • הוספנו ל-DefaultPreloadManager פונקציונליות של טעינה מראש מהמטמון. אפליקציות יכולות עכשיו להחזיר DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) או DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) דרך TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData) כדי לציין שפריט מדיה צריך להיטען מראש למטמון.
    • שימוש בפונקציונליות של טעינה מראש מהמטמון של DefaultPreloadManager באפליקציית הדגמה של סרטונים קצרים.
    • מוסיפים פונקציות setter של DefaultLoadControl.Builder להפעלה מקומית ומשנים את ערכי ברירת המחדל של DefaultLoadControl כדי שהם יתאימו למגוון רחב של קבצים מקומיים.
    • תוקן באג שבו הגדרת פלייליסט ריק יכולה להשאיר את הנגן במצב STATE_READY או STATE_BUFFERING.
    • שיפור ממשקי ה-API של הכלי לניהול טעינה מראש:
      • מוסיפים את הפונקציות addMediaItems(List<MediaItem>, List<T>) ו-addMediaSources(List<MediaSource>, List<T>) שמוסיפות את פריטי המדיה או מקורות המדיה בחבילה, וקוראות אוטומטית לפונקציה invalidate() לאחר מכן.
      • מוסיפים removeMediaItems((List<MediaItem>) וremoveMediaSources(List<MediaSource>) שמסירים את פריטי המדיה או את מקורות המדיה בחבילה, ומוודאים שמנהל הטעינה מראש לא מתחיל לטעון מראש או ממשיך לטעון מראש אף אחד מהם אחרי ההסרה.
      • אפשרות ל-DefaultPreloadManager.setCurrentPlayingIndex(int) לבטל את עצמו באופן אוטומטי. אחרי עדכון האינדקס הנוכחי של הפריט שמופעל, האפליקציות לא צריכות יותר להפעיל את invalidate() באופן מפורש.
    • הוספת אפשרות לדילוג על איפוס של מסגרת מפתח לחיפוש קדימה באותה קבוצה של תמונות במצב ניקוי.
    • מוסיפים DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) לאפליקציות כדי להגדיר ערך של בייטים של מאגר היעד עבור שחקן עם playerName שצוין. ה-DefaultLoadControl יכול עכשיו לקבל החלטות לגבי כל שחקן בנפרד על סמך הבייטים שהוקצו לו והבייטים של מאגר היעד.
    • מוסיפים SkipInfo ל-AdPlaybackState.AdGroup כדי להעביר מידע על אפשרות הדילוג לכל מודעה בקבוצת המודעות.
    • תוקן באג שגרם לקריסה כשמתקשרים אל removeMediaItems(List) במהלך הפעלה של מודעה בסוף סרטון (#2746).
    • תיקנו בעיה של גמגום בהפעלת פלייליסטים, שבה פריימים הוגדרו בטעות תמיד כדגימה האחרונה ועברו עיבוד.
    • הפעלת נתיב ניסיון חוזר אם הנגן לא מצליח ליצור מזהה של סשן אודיו (#2382, #2678).
    • הוספת תמיכה בשליטה בבייטים הכוללים של מאגר הנתונים הזמני של המקורות ב-DefaultPreloadManager כדי למנוע מצב שבו הבייטים הכוללים של מאגר הנתונים הזמני לטעינה מראש גדלים באופן שרירותי. כדי להשתמש בלוגיקת הבקרה שמוגדרת כברירת מחדל, אפליקציות יכולות להגדיר את בייטי מאגר היעד לטעינה מראש באמצעות DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) עבור playerName של PlayerId.Preload.name ("טעינה מראש"), ולהחדיר את DefaultLoadControl שנוצר באמצעות DefaultPreloadManager.Builder.setLoadControl(LoadControl).
    • הוספת cloneAndSet(int, int) ל-ShuffleOrder עם הטמעה של ברירת מחדל (‎#2834).
    • הוספת היסטוריית מיקומי צפייה בתוכן כשמדלגים על השמעת מודעה אחרי התאמה אוטומטית או מעבר אוטומטי (#2484).
    • הוספת API להגדרת פרמטרים של קודק ולמעקב אחריהם בטראקים של אודיו ווידאו. התכונה הזו מיושמת עבור רכיבי עיבוד שמבוססים על MediaCodec ונדרשת רמת API‏ 29 ומעלה.
      • משתמשים ב-ExoPlayer.setAudioCodecParameters() וב-ExoPlayer.setVideoCodecParameters() כדי להחיל פרמטרים.
      • משתמשים ב-ExoPlayer.addAudioCodecParametersChangeListener() וב-ExoPlayer.addVideoCodecParametersChangeListener() כדי להאזין לשינויים. כדי לצפות במפתחות ספציפיים לספק, צריך להשתמש ב-API בגרסה 31 ומעלה.
    • תוקנה שגיאה IllegalStateException שנגרמה כתוצאה מהגדרת מקור מדיה ריק אחרי דילוג למיקום שאינו אפס ואז הכנת הנגן עם מקור מדיה לא ריק.
    • תיקון באג שבו מעבר לפריטי מדיה אחרים במצב ניקוי יכול לגרום לIllegalStateException.
    • תיקון בעיות פוטנציאליות של NullPointerException ב-DefaultPlaybackSessionManager (#2885).
    • הפעלת שיפורים בביצועי ההרצה קדימה בסרטונים שעומדים בדרישות.
    • הפעלה מחדש של שימוש בפענוח אסינכרוני ב-MediaCodec ב-API 36 ומעלה, שבהם תוקנו בעיות של זמן קצוב לתפוגה ב-API של הפלטפורמה הזו (‎#1641).
    • משנים את ערך ברירת המחדל של MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs ל-15ms ומפעילים השמטה יעילה יותר של פריימים של סרטונים לפני פענוח של סרטונים שעומדים בדרישות.
    • הוספת מגבלת זיכרון מקסימלית לחישוב הזיכרון האוטומטי ב-DefaultLoadControl. ההגדרה הזו אמורה לפעול רק אם נבחר מספר מוגזם של טראקים (#2860).
    • תוקן באג שבו, אם מפעילים פלייליסט או מצב הפעלה חוזרת, חיפוש במצב גלילה ליד הסוף עלול לגרום לחיפוש של פריט המדיה הבא.
  • ‫CompositionPlayer:
    • פרסום CompositionPlayer עם הערה חדשה של @ExperimentalApi כדי לציין שהתכונה זמינה לניסויים, אבל עדיין נמצאת בפיתוח. יש סיכוי גבוה שחלק מממשקי ה-API ישתנו באופן משמעותי בגרסאות עתידיות, ויש בעיות ומגבלות ידועות בחלק מתרחישי השימוש (חלקן לא מתועדות).
    • הוספת תמיכה ב-COMMAND_SET_AUDIO_ATTRIBUTES ובטיפול בהרשאת אודיו ב-CompositionPlayer.
    • הוספת תמיכה בשינוי מהירות ברצפים משניים ב-CompositionPlayer.
    • הוספת תמיכה ב-EditedMediaItem.removeVideo.
  • ‫Transformer:
    • שימוש ב-InAppMp4Muxer כברירת מחדל של כלי לצירוף נתונים.
    • הוספה של EditedMediaItem.Builder#setSpeed() והוצאה משימוש של Effects#createExperimentalSpeedChangingEffects().
    • מחליפים את forceAudioTrack ואת forceVideoTrack ב-trackTypes ב-EditedMediaItemSequence.
  • בחירת טראק:
    • מוסיפים TrackSelectionParameters.selectTextByDefault כדי להעדיף את הבחירה של כל רצועת טקסט בלי לציין העדפות ספציפיות יותר.
    • מוסיפים את preferredVideoLabels, ‏ preferredAudioLabels ו-preferredTextLabels ב-TrackSelectionParameters כדי לציין העדפה לגבי טראקים עם תווית ספציפית, למשל טראקים שנקראים מתגי NAME של HLS ‏ (#1666).
  • אמצעי חילוץ:
    • ‫FLAC: שיפרנו את זיהוי הכותרות כדי להקטין את הסיכוי למצוא כותרות מזויפות בנתוני FLAC המקודדים, וכתוצאה מכך להפחית את שגיאות הפענוח (#558).
    • ‫MP3: מאפשר פערים בין תגי ID3 (ולפני) בתחילת קובצי MP3 (#811,‏ #5718).
    • ‫MP3: הגדלת מגבלת החיפוש ל-128kB כדי להתאים למגבלת החיפוש הקיימת לבייט סנכרון (‎#2713).
    • ‫MP3: שינוי FLAG_ENABLE_INDEX_SEEKING כך שיועדף חיפוש מידע בכותרות של מטא-נתונים (כמו Xing ו-VBRI) אם הן זמינות, וחזרה לחיפוש מבוסס-אינדקס אם אין מידע אחר לחיפוש. השינוי הזה משפר את הביצועים של קבצים עם מטא-נתונים של חיפוש (#2839).
    • ‫MP3: שינוי Mp3Extractor לברירת מחדל של הנחה של קצב העברת נתונים קבוע (CBR) כשלא נמצאים מטא-נתונים של חיפוש (למשל, Xing, ‏ VBRI), גם כשמוגדר FLAG_ENABLE_INDEX_SEEKING. ההנחה הזו מבוססת על היסטוריית המפרטים של MP3, שבה CBR היה תקני ו-VBR דרש כותרות מפורשות. השיטה הזו משפרת את האפשרות לחפש מיקום בקבצים ללא מטא-נתונים, אבל עלולה לפגוע בדיוק של קבצים עם VBR בלי כותרות. עכשיו נעשה שימוש בחיפוש באינדקס כגיבוי אם ההנחה לגבי CBR לא ניתנת לחיפוש (למשל, בסטרימינג באורך לא ידוע) (#2848).
    • ‫MP4: כדי להבחין בין סוגי ה-MIME‏ audio/mpeg (MP3),‏ audio/mpeg-L1 ו-audio/mpeg-L2, צריך להציץ בערך השכבה של הדגימה הראשונה לפני שמוציאים פורמט של טראק מהכלי לחילוץ (‎#2683).
    • ‫MP4: שיפור היעילות של סריקת קבצים גדולים מאוד על ידי הנחה שתיבת stbl גדולה מ-1MB מרמזת שהקובץ לא מפולח (‎#2650).
    • ‫MP4: נוספה תמיכה במטא-נתונים של ©mvn (שם התנועה) ושל ©mvi (אינדקס התנועה). עכשיו הם מופקים כאובייקטים של TextInformationFrame ב-Format.metadata עם המזהים MVNM ו-MVIN בהתאמה (#2754).
    • ‫MP4: המערכת מתעלמת מטרקים עם תיבת stsd חסרה (במקום להיכשל בניתוח של הקובץ כולו).
    • ‫Matroska: נוספה תמיכה בזיהוי של DTS-HD (#6225).
    • תוקנה בעיה ב-MatroskaExtractor שבה החיפוש יכול להיות לא מדויק בקבצים עם כמה רצועות. נקודות ה-Cue משויכות עכשיו בצורה נכונה לטראקים המתאימים, מה שמוביל לחיפוש מדויק יותר.
    • ‫MPEG-TS: תיקון IllegalArgumentException מתוך ReorderingBufferQueue שנגרם על ידי חבילות PES ללא חותמת זמן (#2764).
    • הוספת תמיכה בחילוץ תמונות HEIC עם תנועה. ‫HeifExtractor יכול עכשיו לנתח קובצי HEIC שמכילים טראקים מוטמעים של וידאו ואודיו.
  • כלי הבדיקה:
    • הוספנו מודול חדש, :media3-inspector, שמשמש כמרכז ייעודי לכלי בדיקת מדיה. המודול הזה כולל עכשיו androidx.media3.inspector.MetadataRetriever חדש, שיספק API מאוחד לחילוץ מטא-נתונים ומסגרות. הגרסה הקיימת של androidx.media3.exoplayer.MetadataRetriever הוצאה משימוש, ועכשיו אפשר להשתמש בגרסה החדשה הזו.
    • השקנו את androidx.media3.inspector.FrameExtractor, API ציבורי חדש לשליפת פריימים. המחלקות האלה מספקות דרך לחלץ פריימים עם תמיכה בווידאו HDR, באפקטים של וידאו ובבחירה מותאמת אישית של מפענח.AutoCloseable צריך ליצור אותו דרך Builder עבור MediaItem ספציפי.
    • ‫FrameExtractor: נוספה האפשרות getThumbnail() לחילוץ פריים מייצג של תמונה ממוזערת מקובץ מדיה בלי שנדרשת חותמת זמן ספציפית.
    • הוספת androidx.media3.inspector.MediaExtractorCompat, תחליף מוכן לשימוש ל-android.media.MediaExtractor של הפלטפורמה, שמספק דרך לחלץ דגימות מדיה גולמיות ומקודדות מקובץ מדיה. השימוש ב-androidx.media3.exoplayer.MediaExtractorCompat הקיים הופסק לטובת הכיתה החדשה הזו.
  • אודיו:
    • הגדרת מודעות של מופעי AudioProcessor לחיפוש.
    • מתן הרשאה להטמעת הממשק החדש של AudioOutputProvider ב-DefaultAudioSink.Builder כדי לתמוך בנתיבי פלט אודיו מותאמים אישית. ערך ברירת המחדל הוא AudioTrackAudioOutputProvider.
    • התמודדות עם חיפושים ב-GainProcessor.
    • שימוש בפרופיל ובאפשרויות של מפענח AC-4 בהערכת התמיכה בפורמט של רצועת אודיו (‎#2580).
    • נמנעים מעיכובים פוטנציאליים שנגרמים כתוצאה מטיפול בהחזרות (callbacks) של שינויי ניתוב בתחילת ההפעלה (‎#2646).
    • אפשר להשתמש מחדש ב-Codec לפורמטים EAC3, ‏ EAC3-JOC ו-AC-4 (‎#1346).
    • הוספת תמיכה בדגימות PCM של מספרים ממשיים ב-Sonic.
    • הוספנו תמיכה בדגימות PCM של 16 ביט ב-ToFloatPcmAudioProcessor.
  • סרטון:
    • השבתה של שימוש חוזר ב-codec לתוכן Dolby-Vision עם פרופילים שונים.
    • הפעלה מחדש של פתרון עקיף לנקודות ביצוע שדווחו באופן שגוי עבור קודקים מאובטחים (#2856).
  • טקסט:
    • תוקן ניתוח של כתוביות CEA-6/708 בתוכן Dolby Vision‏ (‎#2775).
  • תמונה:
    • תוקנה בעיה ב-ScrubbingMode שבה הנגן נתקע בזמן גלילה מהירה של רצועת תמונות ממוזערות ב-DASH (#2815).
  • DRM:
    • שינוי סוג ההחזרה של שיטות MediaDrmCallback מ-byte[] לסוג MediaDrmCallback.Response חדש, כדי לאפשר החזרה של מידע אופציונלי נוסף. זהו שינוי שובר תאימות במקור, אבל אפשר לפתור בקלות את הבעיות שנוצרות ממנו על ידי הוספת הערך הקודם של byte[] ל-new Response לפני ההחזרה.
    • מוסיפים ל-AnalyticsListener.onDrmKeysLoaded (‎#1001) פרטים חשובים על הבקשה, כמו כתובת URL וזמן אחזור.
    • העברת נתוני בקשת הקצאת הרשאות מפרמטר של כתובת URL לגוף בקשת ה-POST.
  • אפקט:
    • מוסיפים Presentation.copyWithUnsetSideRoundedTo כדי לעגל את הפלט של הצד שלא הוגדר כשיוצרים את Presentation עם אורך צד אחד.
  • Muxers:
    • צריך להוסיף את MediaMuxerCompat, תחליף מוכן לשימוש ל-framework MediaMuxer.
    • כדי לאפשר יצירת תמונות דינמיות, צריך להוסיף את MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo().
    • הוספת WebmMuxer כדי לאפשר מיזוג של זרמי מדיה OPUS, VORBIS, VP8 ו-VP9 לפורמט קובץ webm.
  • ‫IMA extension:
    • הסרנו כללים מותאמים אישית של Proguard, כדי שאפליקציות יוכלו להשתמש באלה שפורסמו בארכיון IMA Android.
    • הוספנו את ImaServerSideAdInsertionUriBuilder.setNetworkCode, API חדש להגדרת קוד הרשת של Google Ad Manager עבור IMA SDK, כדי לטפל במזהי מודעות בהתאם להגדרות של Google Ad Manager. קודים של ערוצים הם אופציונליים, אבל מומלצים לבקשות של שידורים עם שירות מלא. כדי למצוא את הקוד של הרשת, ראה מאמר זה.
    • העלאת התלות ב-IMA לגרסה 3.37.0, שדורשת הפעלה של desugaring של ספריית הליבה. גם באפליקציות התלויות צריך להפעיל את ההגדרה הזו. אפשר לעיין בהערות על ההגדרה של IMA. * תמיכה באפשרויות מותאמות אישית של ממשק משתמש ב-IMA DAI בכלי ליצירת URI של SSAI. אפשרויות מותאמות אישית לממשק המשתמש להוספת מודעות בצד השרת כוללות תמיכה בעיבוד של 'ניתן לדילוג' ו'בנוגע למודעה הזו'. התכונה זמינה כרגע רק לקבוצה נבחרת של בעלי אפליקציות שמופיעים ברשימת ההיתרים. בנוסף, השינוי הזה משדרג את גרסת IMA SDK ל-3.38.0 (הערות על הגרסה) כדי לאפשר גישה ל-API של אפשרויות ממשק משתמש בהתאמה אישית.
    • תוקנה הבעיה שבה שגיאה בהכנת תוכן להצגה אחרי מודעה דווחה בטעות כשגיאה בהפעלת מודעה (#2656).
  • סשן:
    • הוספת פרמטר חדש ל-MediaSession.Callback.onPlaybackResumption כדי לציין אם השיחה מתבצעת רק כדי לאסוף מידע או כדי להתחיל בהפעלה (‎#1764).
    • עדכון של MediaSession.ControllerInfo.isTrusted כך שיוצהר גם על בקרי גישה מהאפליקציה עצמה כאמינים (מס' 2542).
    • נוסף MediaSessionService.triggerNotificationUpdate כדי להפעיל ידנית עדכון של התראות (מס' 1833).
    • מוסיפים ProgressListener לשיטות של פקודות מותאמות אישית.
    • משנים את ערך ברירת המחדל של MediaLibrarySession.Builder.setLibraryErrorReplicationMode לערך שאינו קריטי.
    • מוסיפים פרמטר Context ל- MediaButtonReceiver.onForegroundServiceStartNotAllowedException (מס' 2625).
    • קריאת המזהה של בקרת עוצמת הקול מהפלטפורמה PlaybackInfo במקום אחזור שלו באמצעות binder. כך אפשר לוודא שסוג ההפעלה ומזהה בקרת עוצמת הקול נקראים באופן אטומי ומתאימים זה לזה.
    • תוקן באג שבו ACTION_UP אירועים מרכזיים סוננו לפני שהועברו לקריאה חוזרת לטיפול מותאם אישית. השינוי הזה יוצר שוויון עם מה ש-media1 עשה ומה שהפלטפורמה עושה (‎#2637).
    • תוקן באג שבו הפונקציה getCurrentTimeline() נקראה על ידי PlayerWrapper גם אם הפקודה לא הייתה זמינה (‎#2665).
    • תוקן באג שגרם להשארת הודעה בתור ההודעות של ה-looper הראשי, מה שגרם לדליפת זיכרון אחרי שהשירות הסתיים (#2692).
    • כשמתחברים לאפליקציה של סשן מדור קודם עם MediaBrowser, פקודות מותאמות אישית נשלחות לסשן רק אם הפעולה המותאמת אישית מוצגת כפעולה מותאמת אישית ב-PlaybackStateCompat של הסשן מדור קודם. כל הפעולות המותאמות אישית האחרות נשלחות לשירות.
    • הוטמעה onAudioSessionIdChanged כדי להודיע לבקרי מדיה כשמזהה סשן אודיו מוגדר על ידי הסשן (#244).
    • תוקן באג שגרם לכך שהנגן לא הופעל כשאירוע של מקש מדיה Intent הגיע ל-onStartCommand() אחרי שבוצע לחיצה על KEYCODE_HEADSETHOOK. הבעיה הזו נפתרה על ידי טיפול ב-KEYCODE_HEADSETHOOK כמו ב-KEYCODE_MEDIA_PLAY_PAUSE (‎#2816).
    • תוקן באג שבו גודל ה-Surface לא הועבר בין הסשן לבין הבקר, ולכן לא ניתן היה להחיל אפקטים של סרטונים בסשן הדמו. אם אתם משתמשים בבקר, יכול להיות שזה שינוי שובר אם הנגן שלכם לא יכול לטפל בקריאה setVideoSurfaceHolder.
    • תיקון ההפצה של ערכי מטא-נתונים שאינם String CharSequence, כמו מחרוזות עם תגי span‏ (‎#2853).
    • מוסיפים CommandButton.executeAction כדי שבקרים יוכלו להפעיל בקלות רבה יותר את הפעולה הרצויה. בנוסף, אפשר לציין פרמטרים לחלק מהפקודות של הנגן והסשן כדי להגדיר איזו פעולה תופעל.
    • הוספת תאימות לאחור למופעים של CommandButton באמצעות Player.Command או SessionCommand לא מותאם אישית כדי להגדיר את הפעולה שלהם. הם מוצגים עכשיו בצורה נכונה בסשנים של מדיה בפלטפורמה, למשל בממשק המשתמש של המערכת או ב-Android Auto.
    • תוקנה בעיה שבה אותו Bitmap נדחס כמה פעמים כשמחברים MediaController לסשן מדיה בפלטפורמה.
  • UI:
    • מוסיפים את המחלקה ProgressStateWithTickInterval ואת ה-Composable המתאים למודול media3-ui-compose.rememberProgressStateWithTickInterval האובייקט הזה משמש ב-demo-compose כדי להציג את המיקום והמשך הנוכחיים בפורמט טקסט.
    • מוסיפים MuteButtonState ל-ui-compose שמטפל בהשתקה של עוצמת הקול Player. מאחסן מצב זה משמש ב-demo-compose להצגת לחצן להשתקה או לביטול ההשתקה.
    • מוסיפים את המחלקות ProgressStateWithTickCount ואת ה-Composable המתאים ל-media3-ui-composemodule.rememberProgressStateWithTickCount מחזיק המצב הזה משמש ב-demo-compose להצגת ההתקדמות כסרגל התקדמות אופקי לקריאה בלבד.
    • הוספנו את ContentFrame Composable ל-media3-ui-compose, שמשלב ניהול של PlayerSurface עם שינוי גודל של יחס רוחב-גובה וכיסוי עם תריס.
    • עקיפת באג ידוע בפלטפורמת API 34 שגורם למתיחה או לחיתוך של סרטונים כשמשתמשים ב-SurfaceView בתוך Compose AndroidView, ולכן משפיע על רכיבי ContentFrame ו-PlayerSurface Composables עם SURFACE_TYPE_SURFACE_VIEW (‎#1237, ‎#2811).
    • יוצרים מודול media3-ui-compose-material3 חדש ומוסיפים לו רכיבים הניתנים להרכבה עם ערכת נושא Material3 (PlayPauseButton, ‏ NextButton,‏ PreviousButton, ‏ SeekBackButton, ‏ SeekForwardButton, ‏ RepeatButton,‏ ShuffleButton, ‏ MuteButton).
    • הוספת TimeText composable ל-media3-ui-compose-material3 כדי להציג את התקדמות השחקן בצורה טקסטואלית. אפשר להגדיר אותו כך שיוצגו בו המיקום הנוכחי, משך הזמן או הזמן שנותר.
    • הוספת תמיכה בהצבת לחצן של מסלול מדיה בPlayerView.
    • שימוש ב-BidiFormatter כדי להציג נכון סימני פיסוק בכתוביות של טקסט מימין לשמאל (‎#11214).
  • תוסף HLS:
    • ניתוח מאפייני דילוג על מודעות מעבר בפרוטוקול HLS.
    • מיפוי של מאפייני בקרה לדילוג מתוך רשימת הנכסים ומתוך קובץ הפלייליסט ב-HLS אל AdPlaybackState לגישה ציבורית.
    • תוקן באג שגרם להשמטת שעת ההתחלה של הפלייליסט כשמסירים תג EXT-X-PROGRAM-START-DATE שמגדיר את שעת ההתחלה מפלייליסט (#2760).
    • משתמשים בחיפוש בינארי כדי למצוא את אינדקס הפלח של מיקום נתון בפלייליסט (#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).
  • תוסף Cast:
    • מוסיפים את CastPlayer.Builder, שמאפשר ל-CastPlayer להפעיל תוכן גם מקומית וגם ב-Cast. כדי לשמור על ההתנהגות הישנה של CastPlayer, שבה נתמכת רק הפעלה ב-Cast, אפשר להשתמש ב-RemoteCastPlayer. הקונסטרקטורים הקיימים CastPlayer שומרים על ההתנהגות הקודמת שלהם, אבל הם הוצאו משימוש. במקומם, מומלץ להשתמש בבוני CastPlayer או RemoteCastPlayer.
    • הפסקת האכיפה של סוג mime שאינו null ב-DefaultMediaItemConverter.
    • אם יש אפשרות, משתמשים ב-MediaItem.mediaMetadata.mediaType כדי להסיק את ה-MEDIA_TYPE של Cast לשימוש ב-DefaultCastOptionsProvider#toMediaQueueItem.
    • מפעילים העברות מרחוק למקומיות ב-DefaultCastOptionsProvider.
    • הוספת תמיכה ב-Cast בהדגמה של הסשן.
    • הוספת תמיכה בהצגת לחצן של נתיב מדיה בממשק משתמש שניתן להרכבה.
    • הוספת תמיכה בהצגת לחצן של נתיב מדיה בתפריט של סרגל פעולות.
    • הוספת תמיכה בהצגת לחצן של נתיב מדיה כממשק משתמש של תצוגה.
  • כלי בדיקה:
    • הוספת הפרש זמן מקסימלי להתנהגות של מעבר אוטומטי ב-FakeClock. ערך ברירת המחדל הוא שנייה אחת, אבל אפשר להגדיר אותו באמצעות FakeClock.Builder.
    • הוספת הפרש הזמן המקסימלי בין הודעות עבור RobolectricUtil.runMainLooperUntil (ו-runLooperUntil). ברירת המחדל היא שנייה אחת, אבל אפשר להגדיר את הערך באמצעות עומסים חדשים של השיטות האלה.
    • העברת CapturingRenderersFactory מ-test-utils אל test-utils-robolectric.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של ה-constructor‏ DefaultPreloadManager שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultPreloadManager.Builder.
    • הוסרו קונסטרוקטורים EditedMediaItemSequence שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItemSequence.Builder.
    • הסרה של BitmapFactoryImageDecoder.BitmapDecoder. במקום זאת, אתם צריכים להשתמש ב-ExternallyLoadedImageDecoder.
    • הסרת ShadowMediaCodecConfig.forAllSupportedMimeTypes() שיצא משימוש. במקומה צריך להשתמש במדיניות ShadowMediaCodecConfig.withAllDefaultSupportedCodecs().
    • הסרת ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes() שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-ShadowMediaCodecConfig.withNoDefaultSupportedCodecs().

‫1.9.0-rc01

‫1 בדצמבר 2025

משתמשים בגרסה יציבה 1.9.0.

‫1.9.0-beta01

‫20 בנובמבר 2025

משתמשים בגרסה יציבה 1.9.0.

‫1.9.0-alpha01

‫22 באוקטובר 2025

משתמשים בגרסה יציבה 1.9.0.

גרסה 1.8.0

1.8.1

‫21 במאי 2026

גרסה 1.8.1 מכילה את השמירות האלה.

  • אפקט:
    • צריך להגדיר בצורה מפורשת את GL_DRAW_BUFFER ואת GL_READ_BUFFER כשעוברים מהקשר ללא משטח.

גרסה 1.8.0

‫30 ביולי 2025

גרסה 1.8.0 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • הוספת תמיכה בהחלפת הנגן ב-ForwardingSimpleBasePlayer.
  • ‫ExoPlayer:
    • הוספת פונקציית getter למצב הפעלה אקראית לממשק ExoPlayer (‎#2522).
    • הוספנו הבהרה לגבי השגיאה שמוצגת אם מתבצעת גישה אל DefaultAudioSink מכמה שרשורים. אם זה קורה בגלל קריאה ל-RendererCapabilities.getFormatSupport מחוץ לנגן, צריך לוודא שקוראים לשיטה הזו באותו השרשור כמו שרשור ההפעלה של ExoPlayer, או להשתמש במופע אחר מזה שמשמש להפעלה (#1191).
    • תוקן באג שבו פורמטים של אודיו שאינם סטריאו בטלוויזיות עשויים להיות מסומנים כלא נתמכים על ידי DefaultTrackSelector.
    • כשמשתמשים בדגל DECODE_ONLY של MediaCodec (שמופעל כברירת מחדל במצב ניקוי), צריך לוודא שהפריים האחרון מוצג בצורה תקינה.
    • הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-Context שעבר אל ExoPlayer.Builder.
    • הפעלה של תזמון דינמי כברירת מחדל במצב ניקוי.
    • כדי להימנע מטעינה מחדש מיותרת של מקור כשמקדמים לסוף של פריט.
    • שימוש ב-MediaCodec.BUFFER_FLAG_DECODE_ONLY כברירת מחדל במצב ניקוי.
    • ‫Throw IllegalStateException כש-PreloadMediaSource מופעל על ידי ExoPlayer עם שרשור הפעלה ששונה משרשור הטעינה מראש (‎#2495).
    • הוספת cloneAndMove אל ShuffleMode עם הטמעה שמוגדרת כברירת מחדל (מס' 2226).
    • שינוי התנהגות ברירת המחדל של Renderer.getMinDurationToProgressUs כך שיחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render.
    • תוקן באג שגרם לכך שתזמון פנימי עיכב את הפריים האחרון כשמנסים להגיע לסוף בזמן שההפעלה מושהית. בשלב הזה, תיקון הבאג יפעל רק אם ההגדרה ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled מופעלת.
    • מוסיפים את אמצעי התשלום ExoPlayer.setScrubbingModeEnabled(boolean). כך מתבצעת אופטימיזציה של הנגן לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל ההתקדמות). אפשר להתאים אישית את אופן הפעולה של מצב ההזזה באמצעות setScrubbingModeParameters(..) ב-ExoPlayer וב-ExoPlayer.Builder.
    • אפשרות להתאים אישית את סף הטעות של חיפוש חלקי במצב ניקוי.
    • הגדלת קצב ההפעלה של קודק במצב ניקוי.
    • תוקן באג שבו יכול להיות ששגיאות בהכנה בתוכן של AdsMediaSource לא דווחו אף פעם (#2337).
    • תיקון דליפת זיכרון ב-MergingMediaSource, למשל בשימוש בהעלאת כתוביות (#2338).
    • אפשרות להחזיר את CmcdConfiguration.Factory אל null כדי להשבית את הרישום ביומן של CMCD עבור פריטי מדיה ספציפיים (מס' 2386).
    • הגדלת גודל ברירת המחדל של שטח אחסון זמני לתמונות מ-128kB (טעות בהעתקה והדבקה מתוך רצועות טקסט) ל-26MB, שזה מספיק גדול לתמונות Ultra HDR של 50MP (‎#2417).
    • הוספת PreCacheHelper שמאפשרת לאפליקציות לשמור מראש במטמון מדיה אחת עם מיקום התחלה ומשך מוגדרים.
    • הוספנו תמיכה בטעינה מראש ממיקום שצוין ב-DefaultPreloadManager.
  • ‫Transformer:
    • מוסיפים את התג CodecDbLite שמאפשר לבצע אופטימיזציות ספציפיות לערכת השבבים של הגדרות קידוד הווידאו.
    • מוסיפים את הדגל setEnableCodecDbLite ל-DefaultEncoderFactory כדי להפעיל אופטימיזציה של ההגדרות של CodecDB Lite. כברירת מחדל, הערך של הדגל הזה הוא False.
    • כדי למלא פער ראשוני (שנוסף באמצעות addGap()) באודיו שקט, צריך עכשיו להגדיר במפורש את experimentalSetForceAudioTrack(true) ב-EditedMediaItemSequence.Builder. אם הפער הוא באמצע הרצף, לא צריך להשתמש בדגל הזה.
    • העברת ממשק Muxer מ-media3-transformer אל media3-muxer.
    • הגדרת MediaItem.Builder().setImageDuration(long) כחובה לייבוא פריט מדיה כתמונה.
    • מוסיפים Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) שכולל רשימת עריכה של MP4 כשמבצעים חיתוך, כדי להנחות את הנגנים להתעלם מדגימות בין מסגרת המפתח לפני נקודת ההתחלה של החיתוך, לבין נקודת ההתחלה של החיתוך.
    • מעדכנים את אפליקציית ההדגמה של Composition כך שתשתמש ב-Kotlin וב-Jetpack Compose, ומוסיפים VideoCompositorSettings מותאם אישית כדי לסדר רצפים בפריסה של 2x2 או בפריסת תמונה בתוך תמונה (PiP).
  • אמצעי חילוץ:
    • ניתוח מטא-נתונים מקובצי MP4 מפוצלים (#2084).
    • ‫JPEG: תמיכה בתמונות בתנועה שאין להן קטע Exif בהתחלה (#2552).
    • הוספת תמיכה בחיפוש ב-MP4 מפוצל עם כמה אטומי sidx. אפשר להפעיל את ההתנהגות הזו באמצעות הדגל FLAG_MERGE_FRAGMENTED_SIDX ב-FragmentedMp4Extractor (מספר 9373).
    • התעלמות מטבלאות ריקות של מיקום בקובצי FLAC (כולל כאלה שמכילות רק נקודות מיקום של placeholder), וחזרה לחיפוש בינארי של מיקום אם משך הקובץ ידוע (#2327).
    • תוקן ניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
    • מעדכנים את WavExtractor כך שישתמש בנתוני SubFormat של תוסף הכותרת עבור פורמט האודיו כשמנתחים קובץ מסוג WAVE_FORMAT_EXTENSIBLE.
    • ‫MP4: נוספה תמיכה בתיבות ipcm ו-fpcm שמגדירות רצועות אודיו של PCM גולמי (אין תמיכה ב-PCM של נקודה צפה ב-64 ביט).
    • ‫MP4: טיפול בחלק הסיבוב של tkhd מטריצות טרנספורמציה שמסובבות ומשקפות את הסרטון. כך אפשר לוודא שהסרטונים המשתקפים שצולמו במצלמה הקדמית של האייפון יוצגו בכיוון הנכון, אבל ההשתקפות שלהם בציר ה-Y לא יהיו נכונות (#2012).
    • ‫MP3: שימוש במשך ובגודל הנתונים מ-Xing,‏ VBRI ומטא-נתונים דומים של קצב העברת נתונים משתנה שלא ניתן לחיפוש, כשחוזרים לחיפוש של קצב העברת נתונים קבוע בגלל FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194).
  • אודיו:
    • תוקן באג שגרם לכך שהפונקציה AnalyticsListener.onAudioPositionAdvancing לא נקראה כשהפעלת האודיו התחילה קרוב מאוד לסוף המדיה.
    • הוספנו תמיכה בכל פורמטי הדגימות של PCM ליניארי ב-ChannelMappingAudioProcessor וב-TrimmingAudioProcessor.
    • הוספנו תמיכה בפערים באודיו ב-CompositionPlayer.
    • הסרת שיחה שגויה אל BaseAudioProcessor#flush() מ-BaseAudioProcessor#reset().
    • אפשרות להמרה קבועה של אודיו לסטריאו או להפך ב-DefaultAudioMixer.
    • הגדרת ChannelMappingAudioProcessor, ‏TrimmingAudioProcessor ו-ToFloatPcmAudioProcessor כציבוריים (מס' 2339).
    • כדי לזהות חוסרים ב-DefaultAudioSink במקום להסתמך על הערכה מיטבית, צריך להשתמש ב-AudioTrack#getUnderrunCount() ב-AudioTrackPositionTracker.
    • שיפור ההחלקה של חותמות הזמן של האודיו במקרה של סחיפה לא צפויה במיקום ממכשיר פלט האודיו.
    • תיקון באג שגורם לכך שהסנכרון בין האודיו לווידאו לא תקין במשך 10 השניות הראשונות אחרי שממשיכים הפעלה מהשהיה כשמחוברים למכשירי Bluetooth.
    • תוקן באג שגרם לכך ש-AnalyticsListener.onAudioPositionAdvancing לא דיווח על הזמן שבו האודיו התחיל להתקדם, אלא על הזמן של המדידה הראשונה.
    • תוקנה בעיה שקשורה לשחזור אודיו רב-ערוצי אחרי חזרה לאודיו סטריאו במכשירים מסוימים (#2258).
  • סרטון:
    • הוספת פתרון עקיפה לבעיה של משטחים מנותקים למכשירי Lenovo ו-Motorola (#2059).
    • שיפור השחרור של פריימים חלקים של סרטונים בהפעלה, כשדגימות האודיו לא מתחילות בדיוק במיקום המבוקש.
    • הוספת פתרון עקיף לבעיה של משטחים מנותקים למכשירי realme ‏(#2059).
    • מוסיפים את ה-API הניסיוני ExoPlayer כדי לכלול את הדגל MediaCodec.BUFFER_FLAG_DECODE_ONLY כשמכניסים למאגרים קלט של פענוח בלבד. הדגל הזה יאותת למפענח לדלג על מאגרי הנתונים הזמניים של פענוח בלבד, וכך יתקצר הזמן של מעבר למיקום אחר בסרטון. מפעילים אותו באמצעות DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * שיפור הבדיקות של ביצועי קודקים לקודקים של וידאו בתוכנה. יכול להיות שבעקבות זאת, חלק מהטראקים הנוספים יסומנו כEXCEEDS_CAPABILITIES.
    • תיקון שגיאות הפעלה של VP9 Widevine במכשירים מסוימים (#2408).
  • טקסט:
    • הוספת תמיכה בטראקים של VobSub בקובצי MP4 (#2510).
    • תיקון של מצב שבו ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה אבל נטען בהמשך, ואחריו מופיעים כמה קטעים ריקים של כתוביות (#2517).
    • תוקנו בעיות ב-SSA וב-SubRip שגרמו להצגת רמזים במהלך הפעלת כתוביות (#2309).
    • תוקנה בעיה שגורמת להיתקעות של ההפעלה כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם טראק כתוביות ריק (#2328).
    • תיקון של כתוביות מבולבלות בפורמט CEA-608 בהפעלת סטרימינג בפורמט H.262 שמכיל פריימים מסוג B (#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 והעברנו אותו אל AutoCloseable API מבוסס-מופע. משתמשים ב-Builder החדש כדי ליצור מופע בשביל MediaItem, ואז קוראים ל-retrieveTrackGroups(), ל-retrieveTimeline() ול-retrieveDurationUs() כדי לקבל ListenableFuture בשביל המטא-נתונים. ה-methods הסטטיות הקודמות הוצאו משימוש (‎#2462).
  • תמונה:
    • כדי למנוע קריסה של אפליקציה עם Canvas: trying to draw too large bitmap. מ-PlayerView כשמנסים להציג תמונות גדולות מאוד (למשל 50MP), כדאי להגביל את מפות הסיביות המפוענחות לגודל התצוגה ב-BitmapFactoryImageDecoder.
    • משנים את החתימה של DefaultRenderersFactory.getImageDecoderFactory() כך שתקבל פרמטר Context.
    • צריך להתאים את גודל הפלט המקסימלי של מפת הסיביות שמשמש ב-CompositionPlayer לגודל שכבר משמש ב-Transformer (כלומר, CompositionPlayer לא מתחשב בגודל התצוגה כשמפענחים מפות סיביות, בניגוד ל-ExoPlayer).
  • DRM:
    • הוספת עומס יתר חדש של OfflineLicenseHelper.newWidevineInstance שמקבל MediaItem.DrmConfiguration כדי שאפשר יהיה להחיל את כותרות בקשות ה-HTTP בצורה נכונה (‎#2169).
  • אפקט:
    • מוסיפים Presentation.createForShortSide(int) שיוצר Presentation שמבטיח שהצד הקצר ביותר תמיד יהיה שווה לערך שצוין, לא משנה מה כיוון הקלט.
  • Muxers:
    • תוקן באג שבו דגמי אודיו ב-MP4 מפוצל לא קיבלו את דגלי הדגימה הנכונים.
    • writeSampleData() API משתמש עכשיו במחלקה BufferInfo הספציפית ל-muxer במקום MediaCodec.BufferInfo.
    • מוסיפים את Muxer.Factory#supportsWritingNegativeTimestampsInEditList, שערך ברירת המחדל שלו הוא false.
  • ‫IMA extension:
    • תיקנו באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
    • תוקן באג שגרם לכך שההפעלה של קבוצות מודעות אחרי סיום חלון ה-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.
  • UI:
    • תוקן באג שבו PlayerSurface בתוך רכיבים לשימוש חוזר כמו LazyColumn לא פעל בצורה תקינה (‎#2493).
    • תוקן באג ב-Compose שגרם לפער בין הגדרת מצבי הלחצנים הראשוניים לבין השינוי במצב (למשל צורות הסמלים או ההפעלה). שינויים שבוצעו בנגן מחוץ לתקופת הצפייה נלקחים בחשבון עכשיו (#2313).
    • מוסיפים מחזיקי מצב ורכיבים קומפוזביליים למודול media3-ui-compose עבור SeekBackButtonState ו-SeekForwardButtonState.
    • הוספנו תמיכה במצב ניקוי של ExoPlayer ל-PlayerControlView. אם האפשרות הזו מופעלת, הנגן עובר למצב גרירה כשהמשתמש מתחיל לגרור את סרגל הגרירה, שולח קריאה ל-player.seekTo לכל תנועה ואז יוצא ממצב הגרירה כשהמשתמש מפסיק לגעת במסך. אפשר להפעיל את השילוב הזה באמצעות time_bar_scrubbing_enabled = true ב-XML או באמצעות השיטה setTimeBarScrubbingEnabled(boolean) מ-Java/Kotlin.
    • תגרום ל-PlayerSurface לקבל ארגומנט Player שניתן להקצאה ל-null.
  • הורדות:
    • הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין סטרימינג מתקדם עם DownloadHelper ולבקש DownloadRequest מהעוזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכלול. התגובה שמוחזרת DownloadRequest כוללת את טווח הבייטים שפוענח, שאפשר ליצור איתו ProgressiveDownloader ולהוריד את התוכן בהתאם.
    • מוסיפים את DownloadHelper.Factory שבו מחליפים את השיטות הסטטיות DownloadHelper.forMediaItem().
    • מוסיפים Factory להטמעות של SegmentDownloader.
    • הוספת תמיכה בהורדה חלקית של סטרימינג אדפטיבי. אפליקציות יכולות להכין סטרימינג אדפטיבי עם DownloadHelper ולבקש DownloadRequest מהכלי העזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכלול. הערך שמוחזר DownloadRequest כולל את טווח הזמן שנקבע, שבעזרתו אפשר ליצור SegmentDownloader קונקרטי ולהוריד את התוכן בהתאם.
  • תוסף Cronet:
    • הוספת טיפול אוטומטי בקובצי Cookie (#5975).
  • תוסף HLS:
    • תוקן באג שבו HlsSampleStreamWrapper מנסה לחפש בתוך המאגר כשאין נתונים זמינים במאגר #2598.
    • תוקן באג שבו בחירת רצועה משתנה אחרי טעינה של חלקים עם השהיה נמוכה, ורמזים לטעינה מראש עלולים לגרום להפעלה להיתקע או לקפוא (#2299).
    • כדי למנוע טעינות מחדש מוגזמות, המערכת ממתינה למשך מחצית מהמשך המטרה אם השרת לא מכבד את CAN-BLOCK-RELOAD=YES (#2317).
    • תוקן באג שגרם להשהיית ההפעלה כשמתחילים סטרימינג של מודעות מעבר לפני מודעה באמצע הסרטון, ונעשה ניסיון לפתור בעיה ברשימת נכסים עבור המודעה הלא נכונה (מס' 2558).
    • תוקן ניתוח של פלייליסטים כדי לאפשר שימוש ב-\f (הזנת טופס) בערכי מאפיינים של מחרוזות במירכאות (מס' 2420).
    • תמיכה בעדכון מודעות אינטרסטיטיאל עם אותו מזהה (מס' 2427).
    • תוקן באג שבו לפעמים שגיאות בטעינת רשימת השירים לא מועברות אחרי שנגמרים המקטעים לטעינה בשידור חי (#2401https://github.com/androidx/media/issues/2401).
    • קיבוץ של רכיבי משנה של כתוביות לפי תג NAME, בדומה לקיבוץ של רכיבי משנה של אודיו (#1666).
    • תמיכה ב-X-ASSET-LIST ובשידורים חיים באמצעות HlsInterstitialsAdsLoader.
  • תוסף DASH:
    • תוקנה בעיה שבה קבוצת ההתאמות של הפעלת טריק-פליי מוזגה עם קבוצת ההתאמות הראשית שלה כדי ליצור TrackGroup לא תקין (#2148).
    • תוקן באג שבו קיצור משך הזמן של תקופת DASH עלול לגרום לחריגה אם דגימות מעבר למשך הזמן החדש כבר נקראו על ידי צינור העיבוד (#2440).
    • תוקן באג שבו לא בוצעה הפניה לכתובת אחרת כשנעשה שימוש בפרמטרים של שאילתת CMCD (מס' 2475).
  • תוסף RTSP:
    • הוספת תמיכה בחבילת צבירה של RTP עבור H265 בהתאם ל-RFC 7798#4.4.2 (#2413).
    • תוקנה בעיה שגרמה לכך שהמערכת השתמשה ב-URI של המיקום שסופק במהלך העיבוד של תגובת HTTP 302 (מס' 2398).RtspClient
    • הוספת תמיכה בניתוח של SessionDescriptions שמכילים שורות עם תווים של רווח לבן בסוף (#2357).
  • תוספים של מפענחים (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • תוקן באג שבו DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange לא משפיע על תוספים של מפענחי אודיו (#2258).
  • תוסף Cast:
    • הוספת תמיכה ב-setVolume() וב-getVolume() (#2279).
    • מונעים מ-CastPlayer להיכנס ל-STATE_BUFFERING כציר הזמן ריק.
    • הוספת תמיכה ב-getDeviceVolume(), ב-setDeviceVolume(), ב-getDeviceMuted() וב-setDeviceMuted() (#2089).
  • כלי בדיקה:
    • מוסיפים את advance(player).untilPositionAtLeast ואת untilMediaItemIndex אל TestPlayerRunHelper כדי להעביר את ההפעלה עד שמגיעים למיקום מסוים. ברוב המקרים, השיטות האלה מהימנות יותר מהשיטות הקיימות untilPosition ו-untilStartOfMediaItem.
    • מעבירים את FakeDownloader למודול test-utils-robolectric כדי להשתמש בו מחדש בבדיקות אחרות.
    • הוסרו transformer.TestUtil.addAudioDecoders(String...),‏ transformer.TestUtil.addAudioEncoders(String...) ו-transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). במקום זאת, צריך להשתמש בShadowMediaCodecConfig כדי להגדיר מקודדים ומפענחים של צללים.
    • הקידומת exotest הוחלפה בקידומת media3 בשמות של רכיבי codec שדווחו על ידי ShadowMediaCodecConfig.
  • הסרת סמלים שהוצאו משימוש:
    • הוסר ה-constructor‏ SegmentDownloader שהוצא משימוש SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) וה-constructors התואמים במחלקות המשנה שלו DashDownloader, ‏ HlsDownloader ו-SsDownloader.
    • הוסרו ההגדרות Player.hasNext() ו-Player.hasNextWindow() שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasNextMediaItem().
    • הוסר Player.next() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר Player.seekToPreviousWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • הוסר Player.seekToNextWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר מודול BaseAudioProcessor שהוצא משימוש ב-exoplayer. משתמשים ב-BaseAudioProcessor במודול common.
    • הסרת בנאי MediaCodecVideoRenderer שיצא משימוש MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).

גרסה ‎1.8.0-rc02

‫24 ביולי 2025

משתמשים בגרסה יציבה 1.8.0.

גרסה ‎1.8.0-rc01

‫16 ביולי 2025

משתמשים בגרסה יציבה 1.8.0.

גרסה ‎1.8.0-beta01

‫2 ביולי 2025

משתמשים בגרסה יציבה 1.8.0.

גרסה ‎1.8.0-alpha01

‫19 במאי 2025

משתמשים בגרסה יציבה 1.8.0.

גרסה 1.7.0

גרסה 1.7.1

‫16 במאי 2025

הגרסה הזו כוללת את אותו קוד כמו גרסה 1.6.1, והיא מתפרסמת כדי לוודא שהיא תופיע כגרסה 'חדשה יותר' מגרסה 1.7.0, שהייתה גרסת אלפא שתויגה בטעות כגרסה יציבה (ראו בהמשך).

גרסה 1.7.0

‫16 במאי 2025

גרסה זו הייתה אמורה להיות 1.7.0-alpha01, אבל היא תויגה בטעות כ-1.7.0 (כלומר, יציבה) בכתובת maven.google.com. אל תשתמשו בה. להישאר בגרסה 1.6.1 או לשדרג לגרסה 1.7.1 (שכוללת את אותו קוד כמו גרסה 1.6.1).

גרסה 1.6.0

1.6.1

‫14 באפריל 2025

androidx.media3:media3-*:1.6.1 מופץ. גרסה 1.6.1 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • הוספנו את השיטה PlaybackParameters.withPitch(float) כדי להקל על העתקה של PlaybackParameters עם ערך חדש של pitch (מס' 2257).
  • ‫ExoPlayer:
    • תוקנה בעיה שגרמה לכך שהמעבר בין פריטי מדיה נכשל בגלל שגיאת רכיב עיבוד שניתן לשחזר במהלך האתחול של פריט המדיה הבא (#2229).
    • נפתרה בעיה שבה ProgressiveMediaPeriod מחזיר את השגיאה IllegalStateException כש-PreloadMediaSource מנסה לקרוא ל-getBufferedDurationUs() לפני שהוא מוכן (#2315).
    • תוקנה בעיה בשליחת CmcdData בבקשות למניפסט עבור DASH,‏ HLS ו-SmoothStreaming (#2253).
    • מוודאים שאפשר להשתמש ב-AdPlaybackState.withAdDurationsUs(long[][]) אחרי הסרת קבוצות המודעות. המשתמש עדיין צריך להעביר מערך של משכי זמן לקבוצות של מודעות שהוסרו, שיכול להיות ריק או null ‏(#2267).
  • אמצעי חילוץ:
    • ‫MP4: צריך לנתח את alternate_group מהתיבה tkhd ולחשוף אותו כרשומה Mp4AlternateGroupData בכל רצועה של Format.metadata (מספר 2242).
  • אודיו:
    • תוקנה בעיה בהפחתת עומס שבה המיקום עלול להיתקע כשמפעילים פלייליסט של תוכן קצר (#1920).
  • סשן:
    • הורדת הזמן הקצוב לתפוגה של הצטברות נתונים עבור קריאות חוזרות (callback) של פלטפורמת MediaSession מ-500 ל-100 אלפיות השנייה, והוספת פונקציית setter ניסיונית כדי לאפשר לאפליקציות להגדיר את הערך הזה.
    • תוקנה בעיה שבה ההתראות הופיעו מחדש אחרי שהמשתמש סגר אותן (#2302).
    • תוקן באג שבו הסשן החזיר ציר זמן עם פריט יחיד כשהנגן העוטף ריק. המצב הזה קורה כשאין COMMAND_GET_TIMELINE בנגן העוטף, אבל יש COMMAND_GET_CURRENT_MEDIA_ITEM והנגן העוטף ריק (מספר 2320).
    • תוקן באג שבו קריאה ל-MediaSessionService.setMediaNotificationProvider מתעלמת בשקט אחרי אינטראקציות אחרות עם השירות, כמו setForegroundServiceTimeoutMs (מספר 2305).
  • UI:
    • מפעילים את PlayerSurface כדי לעבוד עם ExoPlayer.setVideoEffects ועם CompositionPlayer.
    • תיקון באג שבו אי אפשר להרכיב מחדש את PlayerSurface עם Player חדש.
  • תוסף HLS:
    • תוקנה בעיה שבה משך הזמן של חלקי המדיה לא הוגדר ב-CmcdData עבור מדיה בפורמט HLS, מה שגרם לכשל באימות כשמעבדים פלחים של מדיה מוצפנת (#2312).
  • תוסף RTSP:
    • הוספת תמיכה ב-URI עם סכימת RTSPT כדרך להגדיר את סשן ה-RTSP לשימוש ב-TCP (#1484).
  • תוסף Cast:
    • הוספת תמיכה במטא-נתונים של פלייליסטים (‎#2235).

‫1.6.0

‫26 במרץ 2025

androidx.media3:media3-*:1.6.0 מופץ. גרסה 1.6.0 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • מוסיפים את AudioManagerCompat ו-AudioFocusRequestCompat כדי להחליף את המחלקות המקבילות ב-androidx.media.
    • שדרוג של Kotlin מגרסה 1.9.20 לגרסה 2.0.20 ושימוש בפלאגין Compose Compiler Gradle. שדרוג ספריית KotlinX Coroutines מגרסה 1.8.1 לגרסה 1.9.0.
    • צריך להסיר את השיטה Format.toBundle(boolean excludeMetadata) ולהשתמש ב-Format.toBundle() במקומה.
    • תוקנה באג ב-SimpleBasePlayer שבו הגדרה של currentMediaItemIndex חדש ב-State אחרי setPlaylist עם null MediaMetadata לא מעריכה מחדש את המטא-נתונים (#1940).
    • שינוי הגישה ל-SimpleBasePlayer.State ממוגנת לציבורית כדי להקל על הטיפול בעדכונים בכיתות אחרות (מס' 2128).
  • ‫ExoPlayer:
    • הוספת MediaExtractorCompat, מחלקה חדשה שמספקת תכונות שוות ערך לפלטפורמה MediaExtractor.
    • הוספנו תמיכה ניסיונית בחימום מראש של ExoPlayer להפעלה באמצעות MediaCodecVideoRenderer. אפשר להגדיר את DefaultRenderersFactory דרך experimentalSetEnableMediaCodecVideoRendererPrewarming כדי לספק MediaCodecVideoRenderer משני ל-ExoPlayer. אם האפשרות הזו מופעלת, ExoPlayer הסרטון של פריטי מדיה עוקבים עובר עיבוד מראש במהלך ההפעלה כדי לקצר את זמן הטעינה של המעבר בין פריטי המדיה.
    • צריך להקטין את ערכי ברירת המחדל של bufferForPlaybackMs ושל bufferForPlaybackAfterRebufferMs ב-DefaultLoadControl ל-1,000 ו-2,000 אלפיות השנייה בהתאמה.
    • הפעלה של DeviceInfo ועוצמת הקול במכשיר באופן אסינכרוני (אם ההגדרה מופעלת באמצעות setDeviceVolumeControlEnabled). הערכים האלה לא זמינים באופן מיידי אחרי ExoPlayer.Builder.build(), ו-Player.Listener מודיע על שינויים באמצעות onDeviceInfoChanged ו-onDeviceVolumeChanged.
    • מזהה סשן האודיו הראשוני לא זמין יותר באופן מיידי אחרי יצירת נגן. אפשר להשתמש ב-AnalyticsListener.onAudioSessionIdChanged כדי להאזין לעדכון הראשוני אם צריך.
    • כדאי לקחת בחשבון את השפה כשבוחרים טראק וידאו. כברירת מחדל, אם יש טראק וידאו 'ראשי' שתואם לשפה של טראק האודיו שנבחר, הוא נבחר. אפשר לציין העדפות שפה לסרטון באמצעות התג TrackSelectionParameters.Builder.setPreferredVideoLanguage(s).
    • מוסיפים את הפרמטר selectedAudioLanguage לשיטה DefaultTrackSelector.selectVideoTrack().
    • מוסיפים את הפרמטר retryCount ל-MediaSourceEventListener.onLoadStarted ול-methods המתאימים MediaSourceEventListener.EventDispatcher.
    • תוקן באג שבו פריטים או תקופות בפלייליסטים בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
    • העברה של BasePreloadManager.Listener לרמה העליונה PreloadManagerListener.
    • אפשר להטמיע את RenderersFactory.createSecondaryRenderer כדי לספק מעבדים משניים לחימום מראש. חימום מראש מאפשר מעברים מהירים יותר בין פריטי מדיה במהלך ההפעלה.
    • הפעלת שליחת CmcdData לבקשות של קובץ מניפסט בפורמטים של סטרימינג אדפטיבי DASH,‏ HLS ו-SmoothStreaming (#1951).
    • צריך לספק MediaCodecInfo של הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • משנים את AdsMediaSource כדי לאפשר ל-AdPlaybackStates לגדול על ידי הוספת קבוצות של מודעות. זוהו שינויים לא תקינים והמערכת זורקת חריגה.
    • תוקנה בעיה שבה יכול להיות שיוצגו פריימים נוספים של פענוח בלבד ברצף מהיר כשעוברים לתוכן מדיה אחרי מודעה באמצע סרטון.
    • הגדרנו את DefaultRenderersFactory כך שיוסיף שני מקרים של MetadataRenderer כדי לאפשר לאפליקציות לקבל כברירת מחדל שתי סכימות שונות של מטא-נתונים.
    • הערכה מחדש של השאלה אם צריך לבטל את הטעינה המתמשכת של מקטע כשההפעלה מושהית (#1785).
    • הוספת אפשרות ל-ClippingMediaSource כדי לאפשר חיתוך במדיה שלא ניתן להעביר בה קדימה או אחורה.
    • תוקן באג שבו חיפוש עם חימום מראש יכול לחסום מעבר לפריט מדיה הבא.
    • תוקן באג שגרם לכך שהסמל ExoPlayer.isLoading() נשאר true גם אחרי שהמצב השתנה ל-STATE_IDLE או ל-STATE_ENDED (#2133).
    • הוספת lastRebufferRealtimeMs אל LoadControl.Parameter (#2113).
  • ‫Transformer:
    • הוספת תמיכה בהעברה של נתונים מפורמט אחד לפורמט אחר (transmuxing) לפורמטים חלופיים שתואמים לאחור.
    • נוספה תמיכה בהמרת קידוד ובהמרת פורמט של Dolby Vision (פרופיל 8).
    • עדכון הפרמטרים של VideoFrameProcessor.registerInputStream ושל VideoFrameProcessor.Listener.onInputStreamRegistered לשימוש ב-Format.
    • יצירת מטא-נתונים סטטיים של HDR כשמשתמשים ב-DefaultEncoderFactory.
    • כדי להפעיל תמיכה באבחון של פלטפורמת Android, משתמשים ב-MediaMetricsManager. הכלי Transformer מעביר אירועי עריכה ונתוני ביצועים לפלטפורמה, וכך מספק מידע על ביצועי המערכת ומידע על תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את שיתוף דפוסי שימוש וביצועים. אפליקציות יכולות לבטל את ההסכמה לשיתוף נתונים לצורך אבחון פלטפורמה עבור Transformer באמצעות Transformer.Builder.setUsePlatformDiagnostics(false).
    • פיצול של InAppMuxer ל-InAppMp4Muxer ול-InAppFragmentedMp4Muxer. משתמשים ב-InAppMp4Muxer כדי ליצור קובץ MP4 לא מקוטע, וב-InAppFragmentedMp4Muxer כדי ליצור קובץ MP4 מקוטע.
    • העברת ממשק Muxer מ-media3-muxer אל media3-transformer.
    • להוסיף את MediaProjectionAssetLoader, שמספק מדיה מMediaProjection להקלטת מסך, ולהוסיף תמיכה בהקלטת מסך לאפליקציית ההדגמה של Transformer.
    • הוספת #getInputFormat() לממשק Codec.
    • להעביר את האחריות לשחרור GlObjectsProvider למתקשר ב-DefaultVideoFrameProcessor וב-DefaultVideoCompositor כשזה אפשרי.
  • אמצעי חילוץ:
    • ‫AVI: תוקן הטיפול בקבצים עם אודיו דחוס בקצב העברת נתונים קבוע, שבו כותרת הזרם מאחסנת את מספר הבייטים במקום את מספר המקטעים.
    • תיקון הטיפול ביחידות NAL עם אורכים שמבוטאים בבייט אחד או ב-2 בייטים (במקום ב-4).
    • תוקנה בעיה שקשורה ל-ArrayIndexOutOfBoundsException ברשימות עריכה של MP4, כשברשימת העריכה מתחילים בפריים שלא מסונכרן ללא פריים מסונכרן קודם (#2062).
    • תוקנה בעיה שבה סטרימינג של TS יכול להיתקע במכשירים מסוימים (#2069).
    • ‫FLAC: נוספה תמיכה בקובצי FLAC בפורמט 32 ביט. בעבר, אי אפשר היה להפעיל אותם ב-IllegalStateException: Playback stuck buffering and not loading (מספר 2197).
  • אודיו:
    • הפונקציה onAudioPositionAdvancing נקראת עכשיו כשההפעלה מתחדשת (בעבר היא נקראה כשההפעלה הושהתה).
    • לא לעקוף את SonicAudioProcessor כש-SpeedChangingAudioProcessor מוגדר עם פרמטרים שמוגדרים כברירת מחדל.
    • תוקנה בעיית underflow ב-Sonic#getOutputSize() שיכולה לגרום להשהיה של DefaultAudioSink.
    • צריך לתקן את MediaCodecAudioRenderer.getDurationToProgressUs() ואת DecoderAudioRenderer.getDurationToProgressUs() כדי שהחיפוש יאפס את משכי הזמן שצוינו בצורה נכונה.
    • הפיכת המספר androidx.media3.common.audio.SonicAudioProcessor לקבוע.
    • הוספת תמיכה ב-PCM עם נקודה צפה ל-ChannelMappingAudioProcessor ול-TrimmingAudioProcessor.
  • סרטון:
    • משנים את MediaCodecVideoRenderer.shouldUsePlaceholderSurface ל-protected כדי שאפליקציות יוכלו לבטל את ההגדרה ולחסום את השימוש באזורים של placeholder (#1905).
    • הוספה של ניתוח תלות בדגימת AV1 ניסיונית כדי להאיץ את החיפוש.ExoPlayer מפעילים אותו באמצעות ה-API החדש של DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies.
    • הוספנו API ניסיוני ExoPlayer כדי להשליך מאגרי קלט של מפענח MediaCodecVideoRenderer באיחור שלא תלויים בהם. מפעילים אותו באמצעות DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * תוקנה בעיה שבה נגן ללא משטח היה מוכן באופן מיידי, ופענוח של פריימים בהמתנה היה איטי מאוד (#1973).
    • החרגה של מכשירי Xiaomi ו-OPPO ממצב משטח מנותק כדי למנוע הבהוב במסך (#2059).
  • טקסט:
    • הוספת תמיכה בכתוביות VobSub‏ (#8260).
    • הפסקנו את הטעינה המוקדמת של כל קובצי הכתוביות שהוגדרו באמצעות MediaItem.Builder.setSubtitleConfigurations, ועכשיו נטען רק קובץ אחד אם הוא נבחר על ידי בחירת הטראק (‎#1721).
    • ‫TTML: נוספה תמיכה בהפניה אל tts:origin ו-tts:extent באמצעות style (‎#2953).
    • הגבלת חותמות הזמן בפורמטים WebVTT ו-SubRip ל-3 ספרות אחרי הנקודה העשרונית בדיוק. בעבר ניתחנו באופן שגוי כל מספר של מקומות אחרי הנקודה העשרונית, אבל תמיד הנחנו שהערך הוא באלפיות השנייה, מה שהוביל לחותמות זמן שגויות (#1997).
    • תיקון של מצב שבו ההפעלה נתקעת כשפלייליסט מכיל פריטים שנחתכו עם כתוביות CEA-608 או CEA-708.
    • תוקן באג שקשור ל-IllegalStateException כשקובץ SSA מכיל רמז עם משך אפס (זמן התחלה וזמן סיום זהים) (מס' 2052).
    • הסתרת שגיאות בניתוח כתוביות (ורישום שלהן ביומן) כשכתוביות משולבות באותו קובץ קונטיינר עם אודיו ווידאו (‎#2052).
    • תוקן הטיפול בתווי UTF-8 מרובי-בייט בקובצי WebVTT באמצעות סיומי שורה של CR (#2167).
  • DRM:
    • תוקנה שגיאה MediaCodec$CryptoException: Operation not supported in this configuration בהפעלת תוכן ClearKey במכשירים עם API בגרסה < 27 (מס' 1732).
  • אפקט:
    • העברנו את הפונקציונליות של OverlaySettings אל StaticOverlaySettings. ‫OverlaySettings אפשר ליצור מחלקת משנה כדי לאפשר הגדרות דינמיות של שכבת-על.
  • Muxers:
    • העברנו את MuxerException מחוץ לממשק Muxer כדי למנוע שם מוגדר במלואו ארוך מאוד.
    • השם של השיטה setSampleCopyEnabled() השתנה ל-setSampleCopyingEnabled() ב-Mp4Muxer.Builder וב-FragmentedMp4Muxer.Builder.
    • הפונקציות Mp4Muxer.addTrack() ו-FragmentedMp4Muxer.addTrack() מחזירות עכשיו מזהה של רצועת int במקום TrackToken.
    • האפשרויות Mp4Muxer ו-FragmentedMp4Muxer לא מטמיעות יותר את הממשק Muxer.
    • השבתה של Mp4Muxer אריזת דגימות והעתקה כברירת מחדל.
    • תיקון באג ב-FragmentedMp4Muxer שגורם ליצירה של הרבה פרגמנטים כשנכתב רק טראק אודיו.
  • סשן:
    • שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצובה הזו בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להשתמש רק בקריאה ל-player.pause() כדי לעצור את השירות שפועל בחזית לפני stopSelf() כשמבטלים את onTaskRemoved. במקום זאת, צריך להשתמש ב-MediaSessionService.pauseAllPlayersAndStopSelf().
    • ההתראה תישאר גלויה כשההפעלה תעבור למצב שגיאה או למצב עצירה. ההתראה מוסרת רק אם הפלייליסט נמחק או אם הנגן נסגר.
    • שיפור הטיפול בפעולות MediaSession של פלטפורמת Android‏ ACTION_PLAY ו-ACTION_PAUSE, כך שרק אחת מהן מוגדרת בהתאם לפקודות הזמינות, וגם אם רק אחת מהן מוגדרת, היא מתקבלת.
    • מוסיפים את Context כפרמטר ל-MediaButtonReceiver.shouldStartForegroundService (מס' 1887).
    • תוקנה באג שבו קריאה לשיטה Player בחיבור MediaController למסגרת זמן מדור קודם גרמה להסרת שינויים מעדכון בהמתנה.
    • הגדרת MediaSession.setSessionActivity(PendingIntent) לקבלת ערך null (#2109).
    • תוקן באג שגרם לכך שהתראה לא עדכנית נשארה גלויה כשפלייליסט נוקה (#2211).
  • UI:
    • מוסיפים מחזיקי מצב ורכיבי Composable למודול 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(), use EditedMediaItem.Builder.setFlattenForSlowMotion() to flatten the EditedMediaItem passed to Transformer.start() instead.
      • setListener(), אפשר להשתמש ב-addListener(), ב-removeListener() או ב-removeAllListeners().
    • מסירים את ה-methods הבאות שהוצאו משימוש ב-Transformer.Listener:
      • onTransformationCompleted(MediaItem), במקומה צריך להשתמש ב-onCompleted(Composition, ExportResult).
      • onTransformationCompleted(MediaItem, TransformationResult), במקומה צריך להשתמש ב-onCompleted(Composition, ExportResult).
      • onTransformationError(MediaItem, Exception), במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationException), במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationResult, TransformationException), במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), במקומה צריך להשתמש ב-onFallbackApplied(Composition, TransformationRequest, TransformationRequest).
    • הסרת המחלקה TransformationResult שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportResult.
    • הסרת המחלקה TransformationException שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportException.
    • הסרת Transformer.PROGRESS_STATE_NO_TRANSFORMATION שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.PROGRESS_STATE_NOT_STARTED.
    • הסרת Transformer.setListener() שיצא משימוש. במקומה, צריך להשתמש ב-Transformer.addListener(), ב-Transformer.removeListener() או ב-Transformer.removeAllListeners().
    • הסרת Transformer.startTransformation() שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.start(MediaItem, String).
    • הסרת SingleFrameGlShaderProgram שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-BaseGlShaderProgram.
    • הסרה של Transformer.flattenForSlowMotion. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItem.flattenForSlowMotion.
    • הוסרו ExoPlayer.VideoComponent, ‏ ExoPlayer.AudioComponent,‏ ExoPlayer.TextComponent ו-ExoPlayer.DeviceComponent.
    • בוצעה הסרה של androidx.media3.exoplayer.audio.SonicAudioProcessor.
    • הוסרו ה-methods הבאות שהוצאו משימוש ב-DownloadHelper:
      • הקונסטרוקטור DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), במקומו צריך להשתמש ב-DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList).
      • getRendererCapabilities(RenderersFactory), אפשר להשיג פונקציונליות שוות ערך על ידי יצירת DefaultRendererCapabilitiesList עם RenderersFactory וקריאה ל-DefaultRendererCapabilitiesList.getRendererCapabilities().
      • הוסרה השיטה PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). במקום זאת, צריך להשתמש ב-PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) ולהעביר את (MediaSession.Token) compatToken.getToken().

‫1.6.0-rc02

‫19 במרץ 2025

משתמשים בגרסה יציבה 1.6.0.

‫1.6.0-rc01

‫12 במרץ 2025

משתמשים בגרסה יציבה 1.6.0.

‫1.6.0-beta01

‫26 בפברואר 2025

משתמשים בגרסה יציבה 1.6.0.

גרסה ‎1.6.0-alpha03

‫6 בפברואר 2025

משתמשים בגרסה יציבה 1.6.0.

גרסה ‎1.6.0-alpha02

‫30 בינואר 2025

משתמשים בגרסה יציבה 1.6.0.

גרסה ‎1.6.0-alpha01

‫20 בדצמבר 2024

משתמשים בגרסה יציבה 1.6.0.

גירסה 1.5

גירסה 1.5.1

‫19 בדצמבר 2024

androidx.media3:media3-*:1.5.1 מופץ. גרסה 1.5.1 מכילה את השמירות האלה.

  • ‫ExoPlayer:
    • השבתה של שימוש בפענוח אסינכרוני ב-MediaCodec כדי למנוע בעיות של פסק זמן (timeout) ב-codec שדווחו ב-API של הפלטפורמה הזו (‎#1641).
  • אמצעי חילוץ:
    • ‫MP3: הפעלת קובץ לא תיפסק לפני הזמן אם תוכן העניינים של מסגרת VBRI לא כולל את כל נתוני ה-MP3 בקובץ (#1904).
  • סרטון:
    • החזרה לשימוש בערכי יחס גובה-רוחב של פיקסלים שסופקו MediaCodecAdapter כשמספקים אותם במהלך העיבוד של onOutputFormatChanged (#1371).
  • טקסט:
    • תוקן באג ב-ReplacingCuesResolver.discardCuesBeforeTimeUs שבו רמז פעיל ב-timeUs (התחיל לפני אבל עדיין לא הסתיים) נפסל באופן שגוי (‎#1939).
  • מטא-נתונים:
    • חילוץ מספרי הדיסק והטראק וז'אנר מתגובות Vorbis אל MediaMetadata (#1958).

גרסה 1.5.0

‫27 בנובמבר 2024

androidx.media3:media3-*:1.5.0 מופץ. גרסה 1.5.0 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • הוספת ForwardingSimpleBasePlayer שמאפשרת העברה לנגן אחר עם שינויים קלים, תוך שמירה על עקביות מלאה וטיפול במאזינים (#1183).
    • מחליפים את SimpleBasePlayer.State.playlist בשיטה getPlaylist().
    • הוספת שינוי ברירת המחדל ל-SimpleBasePlayer.State.Builder.setPlaylist() כדי לציין ישירות Timeline וTracks וMetadata הנוכחיים במקום ליצור מבנה של פלייליסט.
    • הגדלת minSdk ל-21 (Android Lollipop). ההתנהגות הזו תואמת לכל שאר ספריות AndroidX.
    • הוספה של ארטיפקט androidx.media3:media3-common-ktx שמספק פונקציונליות ספציפית ל-Kotlin שנבנתה על בסיס הספרייה Common
    • תוסיף לספרייה media3-common-ktx פונקציית הרחבה להשהיית Player.listen כדי להפעיל קורוטינה להאזנה ל-Player.Events.
    • הסרת הערות @DoNotInline ממחלקות פנימיות שהוצאו ידנית מהשורה כדי למנוע כשלים באימות מחלקות בזמן ריצה. בגרסאות האחרונות של R8 השיחות האלה מוצאות אוטומטית מחוץ לשורה כדי למנוע כשלים בזמן הריצה (כך שאין יותר צורך בהוצאה ידנית מחוץ לשורה). כל המשתמשים בספרייה ב-Gradle צריכים כבר להשתמש בגרסה של Android Gradle Plugin שמשתמשת בגרסה של R8 שעושה את זה, בגלל compileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle צריכים לוודא ששלב הכיווץ או הטשטוש המקביל ל-R8 מבצע תהליך דומה של הוצאה אוטומטית מתוך השורה, כדי למנוע כשלים באימות של מחלקת זמן הריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
  • ‫ExoPlayer:
    • עכשיו אפשר להתקשר אל MediaCodecRenderer.onProcessedStreamChange() לגבי כל פריט מדיה. בעבר, לא הייתה קריאה ל-callback הראשון. כדי להפעיל את האפשרות הזו, צריך להשתמש ב-MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().
    • מוסיפים את PreloadMediaSource.PreloadControl.onPreloadError כדי לאפשר הטמעות של PreloadMediaSource.PreloadControl לבצע פעולות כשמתרחשת שגיאה.
    • מוסיפים את BasePreloadManager.Listener כדי להפיץ אירועי טעינה מראש לאפליקציות.
    • אפשרות לשנות את הזמן הקצוב לתפוגה של לקוח SNTP ולנסות שוב כתובות חלופיות אם חלף הזמן הקצוב לתפוגה (‎#1540).
    • הסרת השדה MediaCodecAdapter.Configuration.flags כי הערך שלו תמיד היה אפס.
    • המשתמש יכול לבחור את הרמקול המובנה להשמעה ב-Wear OS API 35 ומעלה (אם המכשיר תומך בכך).
    • השיחה החסומה אל Context.getSystemService(Context.AUDIO_SERVICE) תידחה עד שהטיפול במיקוד האודיו יופעל. כך אפשר לוודא שהשיחה החוסמת לא תתבצע אם הטיפול במיקוד האודיו לא מופעל (‎#1616).
    • אפשרות להפעלה ללא קשר למשך הזמן שבוצעה שמירה בזיכרון המטמון, אם הטעינה נכשלת (‎#1571).
    • מוסיפים AnalyticsListener.onRendererReadyChanged() כדי לציין מתי רכיבי עיבוד נפרדים מאפשרים שההפעלה תהיה מוכנה.
    • תוקנה בעיה שבה לפעמים MediaCodec.CryptoException דווחה כ'שגיאה לא צפויה בסביבת זמן הריצה' כש-MediaCodec הופעל במצב אסינכרוני (התנהגות ברירת המחדל ב-API 31 ואילך).
    • כרטיס bufferedDurationUs במקום bufferedPositionUs עם PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). בנוסף, השינוי מ-DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS ל-DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, האפליקציות צריכות להעביר ערך שמייצג משך זמן ספציפי ממיקום ההתחלה שמוגדר כברירת מחדל, שבו מקור המדיה המתאים צריך להיטען מראש עם IntDef הזה, במקום מיקום.
    • מוסיפים הטמעה של ForwardingRenderer שמעבירה את כל הקריאות לשיטות אל רכיב עיבוד אחר (1703).
    • הוספת טעינה מראש של הפריט הבא בפלייליסט. אפליקציות יכולות להפעיל טעינה מראש על ידי קריאה ל-ExoPlayer.setPreloadConfiguration(PreloadConfiguration) בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, אם בחרתם להשתמש בתכונה הזו, DefaultLoadControl מגביל את הטעינה מראש כך שהיא תתחיל ותימשך רק כשהנגן לא נטען לצורך הפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה של LoadControl.shouldContinuePreloading() בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl). הטמעת ברירת המחדל של LoadControl משביתה את הטעינה מראש אם אפליקציה משתמשת בהטמעה מותאמת אישית של LoadControl.
    • נוספה שיטה MediaSourceEventListener.EventDispatcher.dispatchEvent() כדי לאפשר הפעלה של אירועים של פונקציות event listener מסוג subclass ‏(1736).
    • מוסיפים DefaultPreloadManager.Builder שיוצר את המופעים DefaultPreloadManager ו-ExoPlayer עם הגדרות משותפות באופן עקבי.
    • צריך להסיר את הפרמטר Renderer[] מ-LoadControl.onTracksSelected() כי ההטמעה של DefaultLoadControl יכולה לאחזר את סוגי הסטרימינג מ-ExoTrackSelection[].
    • הוצאנו משימוש את DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) וסימנו את השיטה כסופית כדי למנוע החלפות. במקומה, צריך להשתמש ב-DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).
    • דיווח על אירועי MediaSourceEventListener ממקורות משניים ב-MergingMediaSource. התוצאה היא שאירועים של התחלת טעינה, שגיאה, ביטול או השלמה ידווחו על כתוביות שהועלו (אלה שנוספו באמצעות MediaItem.LocalConfiguration.subtitleConfigurations), ועשויים להופיע כאירועי טעינה כפולים שנשלחו מ-AnalyticsListener.
    • למנוע מצב שבו שגיאות בכתוביות ובמטא-נתונים יגרמו להפסקת ההפעלה. במקום זאת, הרצועה הבעייתית מושבתת וההפעלה של הרצועות הנותרות נמשכת (#1722).
      • בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל, נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות באמצעות קריאות חוזרות (callback) של onLoadError.
      • בטיפול הקודם בכתוביות (במהלך הרינדור), רק שגיאות טעינה משויכות מועברות באמצעות קריאות חוזרות (callback) של onLoadError, ושגיאות ניתוח מתעלמים מהן בשקט (זו התנהגות שהייתה קיימת לפני כן).
    • תוקן באג שבו פריטים או תקופות בפלייליסטים בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
    • הוספנו setter ל-SntpClient כדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (‎#1794).
  • ‫Transformer:
    • הוספנו את SurfaceAssetLoader, שתומך בהוספת נתוני סרטונים לתור של Transformer באמצעות Surface.
    • ImageAssetLoader מדווח על קלט לא נתמך באמצעות AssetLoader.onError במקום להציג IllegalStateException.
    • הופכים את הגדרת משך הזמן של התמונה באמצעות MediaItem.Builder.setImageDurationMs לחובה לייצוא תמונות.
    • הוספת תמיכה בייצוא של פערים ברצפים של פריטי מדיה מסוג EditedMediaItem של אודיו.
  • בחירת טראק:
    • DefaultTrackSelector: עדיף להשתמש באודיו מבוסס-אובייקט ולא באודיו מבוסס-ערוץ, אם שאר הגורמים זהים.
  • אמצעי חילוץ:
    • מתן הרשאה ל-Mp4Extractor ול-FragmentedMp4Extractor לזהות דגימות H264 שלא נעשה בהן שימוש כהפניה לדגימות הבאות.
    • הוספנו אפשרות להפעיל חיפוש מבוסס-אינדקס ב-AmrExtractor.
    • קבצי MP3 עם יותר מ-128kB בין מסגרות תקינות נחשבים לקטומים (במקום לא תקינים). המשמעות היא שקבצים עם נתונים שאינם MP3 בסוף, ללא מטא-נתונים אחרים שמציינים את אורך הבייטים של ה-MP3, מפסיקים עכשיו את ההפעלה בסוף הנתונים של ה-MP3 במקום להיכשל עם ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563).
    • תוקן טיפול בדוגמאות של מודעות לפני סרטון במיקומי התחלה של מדיה שאינם פריימים מרכזיים, כשמעבדים רשימות עריכה בקובצי MP4 (#1659).
    • שיפור החישוב של קצב הפריימים באמצעות משך המדיה מהתיבה mdhd ב-Mp4Extractor וב-FragmentedMp4Extractor (#1531).
    • תיקון קנה מידה שגוי של media_time ברשימות עריכה של MP4. הערך segment_duration כבר הותאם בצורה נכונה באמצעות קנה המידה של הסרט, אבל הערך media_time מותאם עכשיו בצורה נכונה באמצעות קנה המידה של הרצועה, כפי שצוין בתקן של פורמט MP4 (‎#1792).
    • טיפול בפריימים לא מסודרים בחישוב endIndices עבור MP4 עם רשימת עריכה (#1797).
    • תוקן ניתוח של משך המדיה בתיבה mdhd של קובצי MP4 כדי לטפל בערכים -1 (#1819).
    • נוספה תמיכה בזיהוי תיבת h263 בקובצי MP4 עבור סרטון H.263 (מס' 1821).
    • הוספת תמיכה בפורמט קובץ מדיה בסיסי ISO AC-4 ברמה 4 (#1265).
  • DataSource:
    • בוצע עדכון של HttpEngineDataSource כדי לאפשר שימוש החל מגרסה S extension 7 במקום רמת API‏ 34 (‎#1262).
    • DataSourceContractTest: מוודאים ש-DataSource.getUri() מחזיר את ה-URI שפוענח (כפי שמתואר במסמכים). אם ה-URI הזה שונה מה-URI המבוקש, אפשר לציין את זה בבדיקות באמצעות השיטה החדשה DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • DataSourceContractTest: מוודאים שהפונקציות DataSource.getUri() ו-getResponseHeaders() מחזירות את הערך open אחרי קריאה שנכשלה לפונקציה open() (בגלל משאב שלא נמצא) ולפני קריאה עוקבת לפונקציה close().
      • החלפת הערך של DataSourceContractTest.getNotFoundResources() מאפשרת למחלקות משנה של בדיקות לספק כמה משאבים מסוג 'לא נמצא', וגם לספק את כל הכותרות הצפויות. כך אפשר להבחין בין HTTP 404 (עם כותרות) לבין 'השרת לא נמצא' (ללא כותרות).
  • אודיו:
    • הגדרת מטא-נתונים של עוצמת הקול לפי תקן CTA-2075 באופן אוטומטי ב-Codec אם הם קיימים במדיה.
    • הנמכה הדרגתית של עוצמת הקול כשמחפשים מיקום מסוים בסרטון.
    • איך לפתור בעיות שקשורות לצלילי פופ שיכולים להופיע במהלך חיפוש.
    • תיקון שגיאות הצטברות של חיתוך באלגוריתם של Sonic לשינוי מהירות/גובה הצליל.
    • תוקן באג ב-SpeedChangingAudioProcessor שגורם להשמטת פריים של פלט.
  • סרטון:
    • MediaCodecVideoRenderer לא מפענח דגימות שלא מוצגות ולא משמשות כהפניה לדגימות אחרות.
    • ב-API 35 ומעלה, יכול להיות שעכשיו MediaCodecAdapter יקבל null Surface ב-configure וקריאות לשיטה חדשה detachOutputSurface כדי להסיר Surface שהוגדר בעבר אם רכיב ה-Codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported).
    • שימוש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו, אם יש כאלה, במהלך העיבוד של onOutputFormatChanged (#1371).MediaCodecAdapter
    • הוספנו פתרון עקיף לבעיה במכשיר Galaxy Tab S7 FE שגורמת לכך שסטרימינג מאובטח של H264 ב-60fps מסומן כלא נתמך (#1619).
    • נוספה דרך לעקיפת הבעיה ב-Codec שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות של סוף הסטרימינג.
  • טקסט:
    • מוסיפים תג מותאם אישית VoiceSpan ומאכלסים אותו בטווחים של קול ב-WebVTT (#1632).
    • מוודאים שקובצי WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שגולשות מעבר ל-64 ביט long כשמייצגים אותן כמיקרו-שניות ומכפילים אותן בבסיס הזמן של 90,000 MPEG) מוצגות (#1763).
    • תמיכה בכתוביות CEA-608 בתוכן Dolby Vision (#1820).
    • תוקנה בעיה שגורמת להשהיית ההפעלה בשידורי DASH מרובי תקופות כשהכתוביות בפורמט CEA-608 מופעלות (#1863).
  • מטא-נתונים:
    • מקצים את הסוג C.TRACK_TYPE_METADATA לטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
  • תמונה:
    • הוספת ExternallyLoadedImageDecoder לשילוב פשוט עם ספריות חיצוניות לטעינת תמונות כמו Glide או Coil.
  • DataSource:
    • הוספת FileDescriptorDataSource, DataSource חדש שאפשר להשתמש בו כדי לקרוא מFileDescriptor (מספר 3757).
  • אפקט:
    • הוספת פתרון עקיף לבעיה DefaultVideoFrameProcessor של שינוי קנה מידה קל של SurfaceTextureSurfaceTexture עשוי לכלול שינוי קנה מידה קטן שגורם לחיתוך של שוליים ברוחב של 1 טקסל מסביב לקצה של מאגר חתוך. הטיפול בבעיה הזו מתבצע עכשיו כך שהפלט קרוב יותר למה שצפוי.
    • האצה DefaultVideoFrameProcessor.queueInputBitmap(). כתוצאה מכך, אפשר לייצא תמונות לסרטונים עם Transformer מהר יותר.
  • ‫IMA extension:
    • תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-ArrayIndexOutOfBoundsException ב-ImaServerSideAdInsertionMediaSource.
    • תוקן באג שבו סטרימינג של DAI עם הוספה בצד השרת ללא פרסומת לפני הסרטון עלול לגרום ל-ArrayIndexOutOfBoundsException כשממשיכים להפעיל אחרי הפרסומת האחרונה באמצע הסרטון (#1741).
  • סשן:
    • כדאי להוסיף את MediaButtonReceiver.shouldStartForegroundService(Intent) כדי לאפשר לאפליקציות לבטל פקודת הפעלה שמגיעה להמשך ההפעלה על ידי החלפת השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר להפסיק את ההפעלה שלו בלי שהמערכת תקרוס עם השגיאה ForegroundServiceDidNotStartInTimeException (‎#1528).
    • תוקן באג שגרם לכך שפקודות מותאמות אישית שנשלחו מ-MediaBrowser הועברו אל MediaSessionCompat.Callback במקום אל הגרסה MediaBrowserServiceCompat של השיטה, כשהיה חיבור לשירות מדור קודם. כתוצאה מכך, MediaBrowser לא קיבל את ערך ההחזרה בפועל שנשלח על ידי השירות מדור קודם (#1474).
    • טיפלנו בחריגה IllegalArgumentException שמופעלת על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור לכוונות של לחצן מדיה (#1730).
    • להוסיף כפתורי פקודות לפריטי מדיה. הפעולה הזו מוסיפה את Media3 API למה שהיה ידוע בתור Custom browse actions עם הספרייה מדור קודם עם MediaBrowserCompat. שימו לב: כפתורי פקודות של Media3 לפריטי מדיה זמינים גם ב-MediaBrowser וגם ב-MediaController. איך מטמיעים פעולות מותאמות אישית לגלישה * נפתרה באג שבו בקר Media3 לא הצליח לפעמים לאפשר לאפליקציית סשן להפעיל שירות שפועל בחזית אחרי בקשת play().
    • הגבלת CommandButton.Builder.setIconUri לקבלת כתובות URI של תוכן בלבד.
    • העברת רמזים לחיבור של דפדפן Media3 אל MediaBrowserCompat הראשוני כשמתחברים אל MediaBrowserCompat מדור קודם. השירות יכול לקבל את רמזי החיבור שמועברים כרמזי שורש עם הקריאה הראשונה ל-onGetRoot().
    • תוקן באג שבו MediaBrowser שמחובר לשירות דפדפן מדור קודם, לא קיבל שגיאה שנשלחה על ידי השירות אחרי שהדפדפן נרשם ל-parentid.
    • שיפור ההתנהגות של יכולת פעולה הדדית, כך שדפדפן Media3 שמחובר ל-MediaBrowserService מדור קודם לא יבקש את הצאצאים של parentId פעמיים כשנרשמים למינוי של הורה.
  • UI:
    • הפתרון העקיף לבעיה של סרטונים מתוחים או חתוכים ב-PlayerView-in-Compose-AndroidView הוא להשתמש במעברים משותפים מבוססי XML. אפליקציות שמשתמשות ב-PlayerView בתוך AndroidView צריכות לשלוח קריאה ל-‎ PlayerView.setEnableComposeSurfaceSyncWorkaround כדי להביע הסכמה (מס' 1237,‏ מס' 1594).
    • הוספנו את setFullscreenButtonState ל-PlayerView כדי לאפשר עדכונים של סמל הלחצן למסך מלא לפי דרישה, כלומר מחוץ לפס הרגיל ולא באופן תגובתי לאינטראקציה של לחיצה (‎#1590,‏ ‎#184).
    • תיקון באג שבו האפשרות 'ללא' בבחירת הטקסט לא פועלת אם יש העדפות לבחירת רצועת טקסט שהוגדרו באפליקציה.
  • תוסף DASH:
    • הוספנו תמיכה בתקופות שמתחילות באמצע פלח (#1440).
  • תוסף Smooth Streaming:
    • תוקנה שגיאה Bad magic number for Bundle בהפעלת סטרימינג של SmoothStreaming עם טראקים של טקסט (#1779).
  • תוסף RTSP:
    • תיקון הסרת פרטי משתמש מכתובות URL שמכילות תווים מקודדים של @ (#1138).
    • תוקנה קריסה בניתוח חבילות RTP עם תוספי כותרת (#1225).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות ספריית Native libiamf לסינתוז אודיו.
      • ההפעלה מופעלת עם פריסת סטריאו וגם עם 5.1 עם מרחביות, יחד עם מעקב ראש אופציונלי, אבל כרגע אין תמיכה בהפעלה בינאורלית.
    • נוספה תמיכה בדפים בגודל 16KB לתוספי פענוח ב-Android 15 (#1685).
  • תוסף Cast:
    • הפסקת ניקוי ציר הזמן אחרי הניתוק של CastSession, מה שמאפשר לאפליקציית השולח להמשיך את ההפעלה באופן מקומי אחרי הניתוק.
    • מאכלסים את DeviceInfo של CastPlayer כשמספקים Context. הפעולה הזו מאפשרת לקשר את MediaSession אל RoutingSession, שנדרש לשילוב של הכלי להחלפת פלט (‎#1056).
  • כלי בדיקה:
    • DataSourceContractTest כולל עכשיו בדיקות לאימות:
      • מקור הנתונים read position עודכן.
      • מאגר הפלט offset מוחל בצורה תקינה.
  • אפליקציית הדגמה
    • פתרון בעיות של דליפות זיכרון באפליקציה להדגמה של תוכן קצר (מספר 1839).
  • הסרת סמלים שהוצאו משימוש:
    • הסרת Player.hasPrevious שהוצא משימוש, Player.hasPreviousWindow(). במקום זאת, אתם צריכים להשתמש ב-Player.hasPreviousMediaItem().
    • הסרת השיטה Player.previous() שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • הסרת השיטה DrmSessionEventListener.onDrmSessionAcquired שיצאה משימוש.
    • הסרה של קונסטרוקטורים DefaultEncoderFactory שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultEncoderFactory.Builder.

גרסה ‎1.5.0-rc02

‫19 בנובמבר 2024

משתמשים בגרסה יציבה 1.5.0.

גרסה ‎1.5.0-rc01

‫13 בנובמבר 2024

משתמשים בגרסה יציבה 1.5.0.

גרסה ‎1.5.0-beta01

‫30 באוקטובר 2024

משתמשים בגרסה יציבה 1.5.0.

גרסה ‎1.5.0-alpha01

‫10 בספטמבר 2024

משתמשים בגרסה יציבה 1.5.0.

גרסה 1.4.0

גרסה 1.4.1

‫27 באוגוסט 2024

androidx.media3:media3-*:1.4.1 מופץ. גרסה 1.4.1 מכילה את השמירות האלה.

  • ‫ExoPlayer:
    • טיפול אסינכרוני בפונקציות callback של טרום-טעינה ב-PreloadMediaSource (#1568).
    • אפשרות להפעלה ללא קשר למשך הזמן שבוצעה שמירה בזיכרון המטמון, אם הטעינה נכשלת (‎#1571).
  • אמצעי חילוץ:
    • ‫MP3: תוקנה שגיאה Searched too many bytes על ידי התעלמות נכונה מנתונים לא רלוונטיים בסוף קובץ ה-MP3, בהתבסס על שדה האורך בפריים Info (#1480).
  • טקסט:
    • ‫TTML: תוקן הטיפול בערכי אחוזים tts:fontSize כדי להבטיח שהם יקבלו בירושה בצורה נכונה מצמתי אב עם ערכי אחוזים tts:fontSize.
    • תיקון IndexOutOfBoundsException ב-LegacySubtitleUtil עקב טיפול לא תקין במקרה שבו שעת ההתחלה של הפלט המבוקש גדולה מזמן האירוע הסופי ב-Subtitle או שווה לו (#1516).
  • DRM:
    • תיקון שגיאה android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE במכשירי API מגרסה 31 ומעלה בהפעלת תוכן L1 Widevine. השגיאה הזו נגרמת בגלל הטמעה לא מלאה של שיטת MediaDrm.requiresSecureDecoder (‎#1603) ב-framework.
  • אפקט:
    • מוסיפים אמצעי תשלום release() ל-GlObjectsProvider.
  • סשן:
    • הפיכת לחיצה כפולה על KEYCODE_HEADSETHOOK לפעולה 'מעבר למיקום הבא', כפי שמתואר (#1493).
    • צריך להתייחס ל-KEYCODE_HEADSETHOOK כפקודה להפעלה ב-MediaButtonReceiver כשמחליטים אם להתעלם ממנה כדי למנוע ForegroundServiceDidNotStartInTimeException (#1581).
  • תוסף RTSP:
    • דילוג על תיאורי מדיה לא תקינים בניתוח SDP (#1087).

גרסה 1.4.0

‫25 ביולי 2024

androidx.media3:media3-*:1.4.0 מופץ. גרסה 1.4.0 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • במקום להתעלם משיחות חיפוש שמוגדרות כ-no-op, המערכת מעבירה אותן לשיטות המוגנות BasePlayer.seekTo() ו-SimpleBasePlayer.handleSeek(). אם מטמיעים את השיטות האלה בנגן בהתאמה אישית, יכול להיות שיהיה צורך לטפל בקריאות הנוספות האלה באמצעות mediaItemIndex == C.INDEX_UNSET.
    • הוסרה תלות בהידור של ביטול סוכר משופר ב-Java 8 (‎#1312).
    • חשוב לוודא שהמשך שהועבר אל MediaItem.Builder.setImageDurationMs() לא רלוונטי ל-MediaItem שאינו תמונה (כפי שמתואר במסמך).
    • הוספת Format.customData לאחסון מידע מותאם אישית שסופק על ידי האפליקציה לגבי מופעים של Format.
  • ‫ExoPlayer:
    • מוסיפים את BasePreloadManager שמתאם את הטעינה מראש של כמה מקורות על סמך העדיפויות שמוגדרות על ידי rankingData. אפשר להתאים אישית את המחלקה הזו באמצעות הרחבה שלה. מוסיפים את התג DefaultPreloadManager שמשתמש ב-PreloadMediaSource כדי לטעון מראש דגימות של מדיה מהמקורות לזיכרון, ומשתמש במספר שלם rankingData שמציין את האינדקס של פריט בממשק המשתמש.
    • מוסיפים PlayerId לרוב השיטות של LoadControl כדי לאפשר הטמעות של LoadControl שתומכות בכמה שחקנים.
    • הסרה של Buffer.isDecodeOnly() ושל C.BUFFER_FLAG_DECODE_ONLY. אין צורך להגדיר את הדגל הזה, כי רכיבי ה-renderer והמפענחים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. ביישומים מותאמים אישית של Renderer צריך לבדוק אם זמן ההשהיה הוא לפחות Renderer כדי להחליט אם להציג דוגמה.BaseRenderer.getLastResetPositionUs() הטמעות מותאמות אישית של SimpleDecoder יכולות לבדוקisAtLeastOutputStartTimeUs() אם יש צורך בכך או לסמן מאגרי נתונים זמניים אחרים באמצעות DecoderOutputBuffer.shouldBeSkipped כדי לדלג עליהם.
    • הפונקציה מאפשרת להחזיר ערך null על ידי TargetPreloadStatusControl.getTargetPreloadStatus(T) כדי לציין שלא לבצע טעינה מראש של MediaSource עם הערך הנתון rankingData.
    • הוספת remove(MediaSource) אל BasePreloadManager.
    • מוסיפים את reset() אל BasePreloadManager כדי לבטל את ההחזקה של כל המקורות תוך שמירה על מופע של הכלי לניהול טעינה מראש.
    • מוסיפים ExoPlayer.setPriority() (ו-Builder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManager ואת חשיבות MediaCodec מ-API 35.
    • תוקנה בעיה בעדכון של זמן האגירה מחדש האחרון, שגרמה למפתח bs (buffer starvation) שגוי ב-CMCD (#1124).
    • מוסיפים את התג PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) כדי לציין שהמקור נטען עד הסוף. ההרשאה הזו מאפשרת להטמעות של DefaultPreloadManager ושל PreloadMediaSource.PreloadControl לטעון מראש את המקור הבא או לבצע פעולות אחרות.
    • תוקן באג שבו דילוג על השתקה בסוף פריטים יכול להפעיל חריגה בהפעלה.
    • כדי לבטל את תקופת הטעינה מראש, מוסיפים את clear אל PreloadMediaSource.
    • הוספת קוד שגיאה חדש PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED שמשמש כאשר משחררים משאבי codec למשימות בעדיפות גבוהה יותר.
    • מאפשרים ל-AdsMediaSource לטעון מודעות לפני הסרטון לפני השלמת ההכנה של תוכן המדיה הראשוני (#1358).
    • תוקן באג שגרם לכך שההפעלה עברה ל-STATE_ENDED כשמכינים מחדש שידור חי בפורמט DASH עם כמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט.
    • שינוי השם של onTimelineRefreshed() ל-onSourcePrepared() ושל onPrepared() ל-onTracksSelected() ב-PreloadMediaSource.PreloadControl. כמו כן, צריך לשנות את השם של IntDefs ב-DefaultPreloadManager.Stage בהתאם.
    • הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההפעלה של המעבד, ולדחות את ההפעלה עד שהרכיבים לעיבוד התמונה יוכלו להתקדם. אפשר להפעיל את ההגדרה הזו באמצעות experimentalSetDynamicSchedulingEnabled() כשמגדירים את מופע ExoPlayer.
    • מוסיפים Renderer.getDurationToProgressUs(). ‫Renderer יכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שצריך להעביר את ההפעלה כדי שהרכיב Renderer יתקדם. אם ExoPlayer מוגדר עם experimentalSetDynamicSchedulingEnabled(), אז ExoPlayer יקרא לשיטה הזו כשהוא יחשב את הזמן לתזמון של משימת העבודה שלו.
    • מוסיפים את MediaCodecAdapter#OnBufferAvailableListener כדי לקבל התראה כשמאגרי הקלט והפלט זמינים לשימוש על ידי MediaCodecRenderer. ‫MediaCodecRenderer ישלח אות ל-ExoPlayer כשהוא יקבל את הקריאות החוזרות האלה, ואם ExoPlayer מוגדר עם experimentalSetDynamicSchedulingEnabled(), אז ExoPlayer יתזמן את לולאת העבודה שלו כדי שהרכיבים המעבדים יוכלו להתקדם.
    • שימוש במחלקת נתונים עבור שיטות LoadControl במקום בפרמטרים נפרדים.
    • מוסיפים את ExoPlayer.isReleased() כדי לבדוק אם בוצעה קריאה ל-Exoplayer.release().
    • הוספת ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() כדי להגדיר את המיקום המקסימלי שבו seekToPrevious() מחפש את הפריט הקודם (‎#1425).
    • תוקנו כמה אי-התאמות במיקוד האודיו, למשל אי-דיווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
    • תיקון בעיות פוטנציאליות IndexOutOfBoundsException שנגרמות בגלל דוחות של כלי החילוץ על רצועות נוספות אחרי שלב ההכנה הראשונית (#1476).
    • Effects ב-ExoPlayer.setVideoEffect() יקבלו את חותמות הזמן עם ההיסט של הרנדרר שהוסר (‎#1098).
    • תוקנה בעיה פוטנציאלית IllegalArgumentException בטיפול בשגיאת הפעלה שהתרחשה במהלך קריאה מראש של פריט אחר בפלייליסט (#1483).
  • ‫Transformer:
    • מוסיפים את התגים audioConversionProcess ו-videoConversionProcess ל-ExportResult כדי לציין איך נוצר כל טראק בקובץ הפלט.
    • הקלה על בדיקות ברמת H.264 של אופטימיזציה של חיתוך.
    • הוספנו תמיכה במעבר בין מדיה מסוג SDR ל-HDR ברצף.
    • הוספת תמיכה באפקטים של אודיו ברמת הקומפוזיציה.
    • הוספת תמיכה בטרנסקוד של תמונות Ultra HDR לסרטוני HDR.
    • תוקנה הבעיה שבה הפונקציה DefaultAudioMixer לא מחזירה את מספר הבייטים הנכון אחרי איפוס ושימוש חוזר.
    • פתרון לבעיה במפענח שבה מספר ערוצי האודיו הוגבל לסטריאו כשמטפלים בקלט PCM.
    • כשבוחרים טראקים ב-ExoPlayerAssetLoader, מתעלמים ממגבלות על מספר ערוצי האודיו כי הן חלות רק על הפעלה.
    • מחליפים את הממשק androidx.media3.transformer.Muxer ב-androidx.media3.muxer.Muxer ומסירים את androidx.media3.transformer.Muxer.
    • תוקנה בעיה בטעינת תמונות בפורמט HEIC מסכימות URI של תוכן. (#1373).
    • משנים את משך הזמן של טראק האודיו בAudioGraphInput כדי לשפר את הסנכרון בין האודיו לווידאו.
    • הסרת השדה ExportResult.processedInputs. אם אתם משתמשים בשדה הזה לפרטי קודק, אתם צריכים להשתמש בשדה DefaultDecoderFactory.listener במקום זאת. במקרה של חריגה ב-codec, פרטי ה-codec יהיו זמינים ב-ExportException.codecInfo.
  • אמצעי חילוץ:
    • ‫MPEG-TS: מעבירים את השינוי קדימה כדי לוודא שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (‎#7909). שילוב תיקונים לפתרון הבעיות שצצו בשידורי HLS עם I-frame בלבד(#1150) ובשידורי HLS עם H.262 (#1126).
    • ‫MP3: עדיף להשתמש בגודל הנתונים מתוך מסגרת Info במקום בגודל שמופיע בזרם הבסיסי (למשל גודל הקובץ או כותרת ה-HTTP Content-Length). כך אפשר להחריג נתונים של טריילרים שלא ניתן להפעיל (למשל, עטיפות של אלבומים) מחישובים של חיפוש קצב העברת נתונים קבוע, וכך החיפושים מדויקים יותר (#1376).
    • ‫MP3: צריך להשתמש במספר הפריימים ובנתונים אחרים בפרים Info (אם יש) כדי לחשב קצב העברת נתונים ממוצע לחיפוש קבוע של קצב העברת נתונים, במקום להסיק מהקצב של הפרים אחרי הפרים Info, שעשוי להיות קטן באופן מלאכותי, למשל פרים PCUT (‎#1376).
    • תיקון חילוץ של פורמט אודיו PCM במאגרי AVI.
  • אודיו:
    • תיקון מאפייני קידוד של DTS:X Profile 2 להפעלה בשיטת passthrough (#1299).
    • במקרה של הפעלה שהועברה, צריך לאפס את שדה המעקב של השלמת הסטרימינג ב-DefaultAudioSink לפני הקריאה ל-AudioTrack.stop(), כדי ש-AudioTrack.StreamEventCallback#onPresentationEnded יזהה בצורה נכונה מתי כל הנתונים בהמתנה הופעלו.
    • תוקן באג ב-SilenceSkippingAudioProcessor שבו מעברים בין פורמטים שונים של אודיו (לדוגמה, מסטריאו למונו) עלולים לגרום למעבד להחזיר חריגה (‎#1352).
    • מטמיעים את MediaCodecAudioRenderer.getDurationToProgressUs() כך ש-ExoPlayer יתזמן באופן דינמי את לולאת העבודה הראשית שלו לזמן שבו MediaCodecAudioRenderer יכול להתקדם.
  • סרטון:
    • נפתרה בעיה שגרמה לכך שהסמל Listener.onRenderedFirstFrame() הופיע מוקדם מדי כשעברו בין מכשירים באמצע ההפעלה.
    • תיקון הלוגיקה של חזרה למפענח חלופי עבור Dolby Vision כדי להשתמש במפענח AV1 תואם אם יש צורך בכך (#1389).
    • תיקון חריגת קודק שעלולה להיגרם מהפעלת רכיב עיבוד סרטונים באמצע ההפעלה.
  • טקסט:
    • נפתרה בעיה שגרמה לדילוג על כתוביות שהתחילו לפני מיקום החיפוש. הבעיה הזו הופיעה רק ב-Media3 גרסה 1.4.0-alpha01.
    • שינוי התנהגות ברירת המחדל של ניתוח כתוביות כך שהיא מתרחשת במהלך החילוץ ולא במהלך העיבוד (בתרשים הארכיטקטורה של ExoPlayer מוסבר ההבדל בין חילוץ לעיבוד).
      • אפשר לשנות את ההתנהגות הזו על ידי קריאה לשני MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) ול-TextRenderer.experimentalSetLegacyDecodingEnabled(true). במסמכי ההתאמה האישית מוסבר איך להטמיע את הרכיבים האלה במופע של ExoPlayer. השיטות האלה (וכל התמיכה בפענוח של כתוביות מדור קודם) יוסרו בגרסה עתידית.
      • באפליקציות עם הטמעות מותאמות אישית של SubtitleDecoder, צריך לעדכן את ההטמעות כדי להשתמש ב-SubtitleParser במקום זאת (וב-SubtitleParser.Factory במקום ב-SubtitleDecoderFactory).
    • ‫PGS: תיקון של פענוח אורך הרצף כדי לפתור את 0 כמדד צבע, במקום כערך צבע מילולי (‎#1367).
    • ‫CEA-708: התעלמות מהערך rowLock. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגם rowLock וגם columnLock הם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLock לא מיושמת, ולכן למעשה מניחים שהוא תמיד false).
      • השינוי הזה נכלל במקור בהערות לגבי הגרסה 1.3.0-alpha01, אבל הוא בוטל בטעות לפני הגרסה 1.3.0-rc01. התקלה תוקנה, והשינוי מופיע שוב.
    • ‫CEA-708: נמנעת הוספה כפולה של שורות חדשות בגלל טיפול לא יעיל של ExoPlayer בפקודה 'הגדרת מיקום העט' (‎#1315).
    • תיקון IllegalArgumentException מ-LegacySubtitleUtil כשדוגמה של כתוביות בפורמט WebVTT לא מכילה רמזים, למשל כחלק מזרם DASH ‏(#1516).
  • מטא-נתונים:
    • תיקון המיפוי של MP4 לתגי מיון ID3. בעבר, תגי MP4 של 'מיון אלבומים' (soal), 'מיון אומנים' (soar) ו 'מיון אומנים באלבום' (soaa) מופו באופן שגוי לתגי ID3 של TSO2, TSOA ו-TSOP (#1302).
    • תוקן קריאת תגי MP4 ‏ (/iTunes) מספריים gnre (ז'אנר) ו-tmpo (קצב) אם הערך ארוך יותר מבייט אחד.
    • העברת מסגרת ID3 TCON אל MediaMetadata.genre (מס' 1305).
  • תמונה:
    • הוספת תמיכה ברשתות של תמונות ממוזערות בפורמט DASH שאינן ריבועיות (#1300).
    • הוספנו תמיכה ב-AVIF ל-API 34 ומעלה.
    • כדי לנקות ImageOutput שהוגדר בעבר, מאשרים את null כפרמטר של ExoPlayer.setImageOutput().
  • DataSource:
    • הטמעת תמיכה בכתובות URI של משאבים גולמיים של android.resource://package/id, כאשר package שונה מהחבילה של האפליקציה הנוכחית. בעבר לא היה תיעוד של האפשרות הזו, אבל היא דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם.
    • בודקים אם url הוא לא null בבוני DataSpec. הפרמטר הזה כבר סומן כפרמטר שלא יכול להיות null.
    • ההגדרה מאפשרת ל-ByteArrayDataSource לפתור URI למערך בייטים במהלך open(), במקום להיות מקודד באופן קשיח במהלך הבנייה (‎#1405).
  • DRM:
    • הרשאה להגדרת LoadErrorHandlingPolicy ב-DefaultDrmSessionManagerProvider (מס' 1271).
  • אפקט:
    • תמיכה בכמה שינויי מהירות באותו תג EditedMediaItem או Composition ב-SpeedChangeEffect.
    • תמיכה בפלט HLG ו-PQ מקלט של מפת סיביות Ultra HDR.
    • הוספנו תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפרת את פלט פני השטח של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
    • עדכון ההטמעה של מטריצת שכבת העל כדי שתהיה עקבית עם התיעוד, על ידי היפוך ערכי x ו-y שמוחלים ב-setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), מכפילים את ערכי x ו-y ב--1 כדי להפוך אותם.
    • תיקון באג שגורם לקריסה של TimestampWrapper כשמשתמשים בו עם ExoPlayer#setVideoEffects (#821).
    • שינוי מרחב העבודה של צבעי SDR שמוגדר כברירת מחדל מצבעים ליניאריים לסרטון SDR חשמלי בתקן BT 709. צריך גם לספק אפשרות שלישית לשמירה של מרחב הצבעים המקורי.
    • אפשר להגדיר סדר Z לא קבוע של EditedMediaItemSequences (#1055).
    • שמירה על טווח בהירות עקבי בין פריטי תוכן שונים ב-HDR (השימוש הוא בטווח HLG).
    • הוספנו תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
    • אפשר להשתמש באפקטים של SeparableConvolution לפני API 26.
    • מסירים את OverlaySettings.useHdr שלא בשימוש כי הטווח הדינמי של שכבת העל והמסגרת חייב להיות זהה.
    • הוספת תמיכה ב-HDR ל-TextOverlay. אפשר לשנות את בהירות שכבת-העל של הטקסט באמצעות OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • ‫IMA extension:
    • קידום API שנדרש לאפליקציות כדי להפעיל סטרימינג של מודעות DAI לגרסה יציבה.
    • מוסיפים את replaceAdTagParameters(Map <String, String>) ל-ImaServerSideAdInsertionMediaSource.AdLoader כדי לאפשר החלפה של פרמטרים של תג מודעה בזמן ריצה.
    • תוקן באג שגרם לכך שהפונקציה VideoAdPlayer.VideoAdPlayerCallback.onError() לא הופעלה כששגיאת הפעלה התרחשה במהלך הפעלת מודעה (מס' 1334).
    • העלינו את גרסת IMA SDK ל-3.33.0 כדי לתקן NullPointerException כשמשתמשים בכתובות URI של תגי מודעות data:// (מס' 700).
  • סשן:
    • משנים את ברירת המחדל של CommandButton.enabled ל-true ומוודאים שהערך יכול להישאר false לבקרי גישה גם אם הפקודה המשויכת זמינה.
    • הוספת קבועי סמלים ל-CommandButton שצריך להשתמש בהם במקום במשאבי סמלים מותאמים אישית.
    • הוספנו את MediaSessionService.isPlaybackOngoing() כדי לאפשר לאפליקציות לשלוח שאילתות לגבי הצורך בהפסקת השירות ב-onTaskRemoved() (#1219).
    • הוספנו את MediaSessionService.pauseAllPlayersAndStopSelf() שמאפשר להשהות את ההפעלה של כל הסשנים ולקרוא ל-stopSelf() כדי לסיים את מחזור החיים של MediaSessionService.
    • אפשר להגדיר את הערך MediaSessionService.onTaskRemoved(Intent) כדי לספק הטמעה בטוחה כברירת מחדל, שתשאיר את השירות פועל בחזית אם ההפעלה נמשכת, או תפסיק את השירות אחרת.
    • הסתרת סרגל ההתקדמות בהתראה על מדיה לשידורים חיים על ידי אי הגדרת משך הזמן במטא-נתונים של סשן הפלטפורמה (#1256).
    • התאמת ההמרה של MediaMetadata ל-MediaDescriptionCompat, כדי להשתמש באותו סדר מועדף ובאותה לוגיקה כשבוחרים מאפייני מטא-נתונים כמו ב-media1.
    • הוספת MediaSession.sendError() שמאפשרת שליחת שגיאות לא קריטיות אל הבקר של Media3. כשמשתמשים בבקר ההתראות (ראו MediaSession.getMediaNotificationControllerInfo()), השגיאה המותאמת אישית משמשת לעדכון PlaybackState של סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (‎#543).
    • מוסיפים את MediaSession.Callback.onPlayerInteractionFinished() כדי להודיע על סיום סדרה של אינטראקציות עם הנגן משלט מסוים.
    • מוסיפים את SessionError ומשתמשים בו ב-SessionResult וב-LibraryResult במקום קוד השגיאה כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר.
    • פרסום הקוד של אפליקציית הבדיקה של בקר media3 שאפשר להשתמש בה כדי לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
    • העברת נתונים נוספים שהועברו אל MediaSession[Builder].setSessionExtras() של media3 אל PlaybackStateCompat.getExtras() של בקר media1.
    • מיפוי שגיאות חמורות ושגיאות לא קריטיות אל הסשן בפלטפורמה וממנו. ‫A PlaybackException ממופה למצב שגיאה קריטית של PlaybackStateCompat. הודעה SessionError שנשלחת לבקר של הודעת המדיה עם MediaSession.sendError(ControllerInfo, SessionError) ממופה לשגיאה לא קריטית ב-PlaybackStateCompat, כלומר קוד השגיאה וההודעה מוגדרים אבל מצב הפעלת הפלטפורמה נשאר שונה מ-STATE_ERROR.
    • ההרשאה מאפשרת להגדיר את פעילות הסשן לכל בקר כדי לבטל את פעילות הסשן הגלובלית. אפשר להגדיר את הפעילות בסשן לבקר בזמן החיבור על ידי יצירת ConnectionResult עם AcceptedResultBuilder.setSessionActivivty(PendingIntent). אחרי ההתחברות, אפשר לעדכן את פעילות הסשן באמצעות MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • שיפור השכפול של שגיאות בשיחות אל MediaLibrarySession.Callback. מעכשיו אפשר להגדיר שכפול שגיאות באמצעות MediaLibrarySession.Builder.setLibraryErrorReplicationMode() כדי לבחור את סוג השגיאה או לבטל את שכפול השגיאות, שמופעל כברירת מחדל.
  • UI:
    • הוספת תמיכה בהצגת תמונות ל-PlayerView כשהוא מחובר ל-ExoPlayer (#1144).
    • הוספת התאמה אישית של סמלים שונים ב-PlayerControlView באמצעות מאפייני xml כדי לאפשר שימוש בנכסי drawable שונים לכל מופע של PlayerView, במקום שינויים גלובליים (#1200).
    • פתרון לבעיה בפלטפורמה שגורמת למתיחה או לחיתוך של סרטון כשמשתמשים ב-SurfaceView בתוך Compose AndroidView ב-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).
  • תוסף DASH:
    • תוקן באג שבו הכנה מחדש של שידור חי עם כמה תקופות יכולה להחזיר את השגיאה IndexOutOfBoundsException (‎#1329).
    • הוספת תמיכה בdashif:Laurl כתובות URL של רישיונות (מס' 1345).
  • תוסף Cast:
    • תוקן באג שהמיר את שם האלבום של MediaQueueItem לאומן בפריט מדיה Media3 (#1255).
  • כלי בדיקה:
    • מטמיעים את onInit() ואת onRelease() ב-FakeRenderer.
    • משנים את השיטות TestPlayerRunHelper.runUntil()/playUntil() כך שיכשלו בשגיאות לא קריטיות (לדוגמה, אלה שמדווחות ל-AnalyticsListener.onVideoCodecError()). משתמשים בשרשרת השיטות החדשה TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() כדי להשבית את ההתנהגות הזו.
  • אפליקציית הדגמה:
    • אפשר להשתמש ב-DefaultPreloadManager באפליקציית ההדגמה של סרטונים קצרים.
    • אפשר להגדיר מצב הפעלה חוזרת עם ארגומנטים של Intent משורת הפקודה (מס' 1266).
    • אפשר להשתמש ב-HttpEngineDataSource בתור HttpDataSource אם המכשיר תומך בכך.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של CronetDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
    • צריך להסיר חלק מהקונסטרוקטורים DataSpec. במקומה צריך להשתמש במדיניות DataSpec.Builder.
    • הסרת אמצעי התשלום setContentTypePredicate(Predicate) מהחשבונות DefaultHttpDataSource, OkHttpDataSource ו-CronetDataSource. במקום זאת, צריך להשתמש בשיטה המקבילה בכל XXXDataSource.Factory.
    • הסרת קונסטרוקטורים של OkHttpDataSource ו-OkHttpDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory.
    • הסרה של PlayerMessage.setHandler(Handler). במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper).
    • הסרת השדה Timeline.Window.isLive. במקום זאת, משתמשים בשיטה isLive().
    • הסרת בנאי DefaultHttpDataSource. במקום זאת, אתם צריכים להשתמש ב-DefaultHttpDataSource.Factory.
    • הסרה של DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. במקום זאת, אתם צריכים להשתמש ב-DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • הסרה של MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). במקומה צריך להשתמש במדיניות MediaCodecInfo.canReuseCodec(Format, Format).
    • הסרת השיטה DrmSessionManager.DUMMY ו-getDummyDrmSessionManager() במקום זאת, אתם צריכים להשתמש ב-DrmSessionManager.DRM_UNSUPPORTED.
    • הסרה של AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format), VideoRendererEventListener.onVideoInputFormatChanged(Format). במקום זאת, משתמשים בעומסים העודפים שמקבלים DecoderReuseEvaluation.
    • הסרה של RendererSupport.FormatSupport IntDef ושל הקבועים FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE. במקום זאת, צריך להשתמש ב-IntDef ובקבועים המקבילים ב-androidx.media3.common.C (לדוגמה, C.FORMAT_HANDLED).
    • הסרת הממשק Bundleable. זה כולל הסרה של כל השדות הקבועים Bundleable.Creator<Foo> CREATOR. במקום זאת, המתקשרים צריכים להשתמש בשיטות Bundle toBundle() ו-static Foo fromBundle(Bundle) בכל סוג.

גרסה ‎1.4.0-rc01

‫10 ביולי 2024

משתמשים בגרסה יציבה 1.4.0.

גרסה ‎1.4.0-beta01

‫26 ביוני 2024

משתמשים בגרסה יציבה 1.4.0.

גרסה ‎1.4.0-alpha02

‫7 ביוני 2024

משתמשים בגרסה יציבה 1.4.0.

גרסה ‎1.4.0-alpha01

‫17 באפריל 2024

משתמשים בגרסה יציבה 1.4.0.

גרסה 1.3.0

גרסה 1.3.1

‫11 באפריל 2024

androidx.media3:media3-*:1.3.1 מופץ. גרסה 1.3.1 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • מוסיפים Format.labels כדי לאפשר תוויות חלופיות או תוויות בשפות אחרות.
  • ‫ExoPlayer:
    • תוקנה בעיה שגרמה לכך שלא ניתן היה לשמור את הסטרימינג כשמבצעים טעינה מראש של PreloadMediaPeriod שוב.
    • צריך להחיל את TrackSelectionResult המתאים לתקופת ההפעלה בבחירה מחדש של טראקים.
    • הפעלת רכיבי עיבוד עם הפעלה מוקדמת רק אחרי מעבר לתקופת ההפעלה כשמתבצע מעבר בין פריטי מדיה (#1017).
    • הוספת סוג החזרה חסר לכלל proguard -keepclasseswithmembers עבור DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • ‫Transformer:
    • הוספת פתרון עקיף לחריג שמופעל בגלל ש-MediaMuxer לא תומך בחותמות זמן שליליות של הצגה לפני API 30.
  • בחירת טראק:
    • DefaultTrackSelector: עדיפות למסלולי וידאו עם קצב פריימים 'סביר' (‎>=10fps) על פני מסלולים עם קצב פריימים נמוך יותר או לא מוגדר. כך נמנע מצב שבו הנגן בוחר את רצועת הווידאו 'האמיתית' בקובצי MP4 שחולצו מתמונות דינמיות, שיכולות להכיל שתי רצועות HEVC, שאחת מהן היא ברזולוציה גבוהה יותר אבל עם מספר קטן מאוד של פריימים (#1051).
  • אמצעי חילוץ:
    • תוקנה בעיה שבה לא בוצע דילוג על ריווח בקריאת נתחים בגודל אי-זוגי מקובצי WAV (#1117).
    • ‫MP3: מאכלסים את Format.averageBitrate מתוך מסגרות של מטא-נתונים כמו XING ו-VBRI.
    • ‫MPEG-TS: שינוי שנועד להבטיח שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (‎#7909). הסיבה לכך היא שהשינוי גורם לבעיות חדשות בזרמי HLS של I-frame בלבד (‎#1150) ובזרמי HLS של H.262 (‎#1126).
  • אודיו:
    • מתן הרשאה לשחזור של רכיב ה-Renderer על ידי השבתת הפחתת העומס אם אתחול של טראק אודיו במצב הפחתת עומס נכשל.
  • סרטון:
    • נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE,‏ Chromecast עם Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון סטרימינג של H265 ב-60fps כלא נתמך
    • נוספה דרך לעקיפת הבעיה כדי להבטיח שהפריים הראשון תמיד יעבור רינדור בזמן המנהור, גם אם המכשיר לא עושה זאת באופן אוטומטי כנדרש על ידי ה-API (‎#1169). (#966).
    • תוקנה בעיה שבה טיפול בפרטי צבע HDR גורם להתנהגות לא תקינה של קודק ומונע מעברים בין פורמטים של רצועות וידאו SDR (מספר 1158).
  • טקסט:
    • WebVTT: מניעה של יצירת מופעים נוספים של CuesWithTiming מ-WebvttParser.parse על ידי רמזים עוקבים ישירות (‎#1177).
  • DRM:
    • פתרון לבעיה NoSuchMethodError שיכולה להתרחש ב-MediaDrm במקום ב-ResourceBusyException או ב-NotProvisionedException בחלק ממכשירי Android 14 (#1145).
  • אפקט:
    • שיפור במיפוי הטונים מ-PQ ל-SDR על ידי המרת מרחבי צבעים.
  • סשן:
    • תוקנה בעיה שבה המיקום הנוכחי קופץ אחורה כשבקר מחליף את הפריט הנוכחי (#951).
    • תוקנה הבעיה שבה MediaMetadata עם extras שאינו null בלבד לא מועבר בין בקרי מדיה והפעלות (#1176).
  • UI:
    • אם אי אפשר לזהות שם תצוגה של Locale, המערכת תשתמש בשם השפה של טראק האודיו (מספר 988).
  • תוסף DASH:
    • מאכלסים את כל רכיבי Label מהמניפסט ב-Format.labels (#1054).
  • תוסף RTSP:
    • דילוג על ערכים ריקים של פרטי סשן (תגי i) בניתוח SDP (#1087).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • ההגדרה של תוסף ה-MIDI כהסתמכות מקומית מושבתת כברירת מחדל כי נדרשת הגדרה של מאגר Maven נוסף. משתמשים שצריכים את המודול הזה כתלות מקומית יכולים להפעיל אותו מחדש.

גרסה 1.3.0

6 במרץ 2024

androidx.media3:media3-*:1.3.0 מופץ. גרסה 1.3.0 מכילה את השמירות האלה.

  • ספרייה משותפת:
    • צריך להטמיע תמיכה בכתובות URI של משאבים גולמיים של android.resource://package/[type/]name, כאשר package שונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו תמיד הייתה מתועדת כפועלת, אבל עד עכשיו היא לא הוטמעה בצורה נכונה.
    • נרמול של סוגי MIME שמוגדרים על ידי קוד האפליקציה או נקראים ממדיה, כך שיהיו באותיות קטנות בלבד.
    • הגדרת מודעות עם MediaItem מלא במקום Uri יחיד ב-AdPlaybackState.
    • הגדלת minSdk ל-19 (Android KitKat). הדרישה הזו תואמת לכל הספריות האחרות של AndroidX, והיא נדרשת כדי שנוכל לשדרג לגרסאות האחרונות של התלויות שלנו ב-AndroidX.
    • מאכלסים את שני השדות artworkUri ו-artworkData ב-MediaMetadata.Builder.populate(MediaMetadata) אם לפחות אחד מהם לא ריק (#964).
  • ‫ExoPlayer:
    • מוסיפים את PreloadMediaSource ו-PreloadMediaPeriod שמאפשרים לאפליקציות לטעון מראש מקור מדיה של תוכן במיקום התחלה ספציפי לפני ההפעלה. ‫PreloadMediaSource דואג להכנת מקור המדיה של התוכן לקבלת Timeline, להכנה ולשמירה במטמון של התקופה במיקום ההתחלה הנתון, לבחירת רצועות ולטעינת נתוני המדיה לתקופה. האפליקציות שולטות בהתקדמות הטעינה מראש באמצעות הטמעה של PreloadMediaSource.PreloadControl ומגדירות את המקור שנטען מראש בנגן להפעלה.
    • הוספת ExoPlayer.setImageOutput שמאפשרת לאפליקציות להגדיר את ImageRenderer.ImageOutput.
    • DefaultRenderersFactory מספק עכשיו ImageRenderer לשחקן כברירת מחדל עם ImageOutput ו-ImageDecoder.Factory.DEFAULT שהערך שלהם הוא null.
    • פליטת אירוע Player.Listener.onPositionDiscontinuity כשמדלגים על השתקה (‎#765).
    • הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את ההגדרה הזו באמצעות MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • תמיכה במקורות מדיה דינמיים באמצעות PreloadMediaSource.
    • מטמיעים את HttpEngineDataSource, שהוא HttpDataSource באמצעות ה-API של HttpEngine.
    • מניעת יצירת מחלקות משנה CompositeSequenceableLoader. הרכיב הזה היה ניתן להרחבה בעבר, אבל אף פעם לא נוצר ממנו מחלקת משנה בספרייה. אפשר לבצע התאמות אישיות על ידי עטיפת מופע באמצעות תבנית מעטפת (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).
  • אודיו:
    • שיפור האלגוריתם של דילוג על קטעי שקט באמצעות הגברה הדרגתית של עוצמת הקול; שמירה על קטעי שקט מינימליים ומשכי זמן טבעיים יותר של קטעי שקט (‎#7423).
    • דיווח על השתקה שבוטלה בצורה דטרמיניסטית יותר (#1035).
  • סרטון:
    • משנים את ה-constructor של MediaCodecVideoRenderer שמקבל ארגומנט של VideoFrameProcessor.Factory ומחליפים אותו ב-constructor שמקבל ארגומנט של VideoSinkProvider. אפליקציות שרוצות להוסיף VideoFrameProcessor.Factory מותאם אישית יכולות ליצור מופע של CompositingVideoSinkProvider שמשתמש ב-VideoFrameProcessor.Factory המותאם אישית ולהעביר את ספק יעד הווידאו אל MediaCodecVideoRenderer.
  • טקסט:
    • תיקון סריאליזציה של רמזים של מפת סיביות כדי לפתור את השגיאה Tried to marshall a Parcel that contained Binder objects כשמשתמשים ב- DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • ‫CEA-708: התעלמות מהערך rowLock. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגם rowLock וגם columnLock הם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLock לא מיושמת, ולכן למעשה מניחים שהוא תמיד false).
  • תמונה:
    • הוספת תמיכה בתמונות ממוזערות של DASH. תמונות הרשת נחתכות, ומוצגות תמונות ממוזערות בודדות של ImageOutput קרוב לזמני ההצגה שלהן.
  • DRM:
    • הפעלת דוגמאות לא מוצפנות של 'הובלה ברורה' בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדוגמאות המוצפנות המאוחרות יותר עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשהמיקום בהפעלה מגיע לדגימות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey או DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
      • תוסף IMA:
    • תוקנה בעיה שגרמה לכך שלא ניתן היה להפעיל מודעות בפורמטים DASH ו-HLS ללא סיומת הקובץ המתאימה.
  • סשן:
    • השבתת זיהוי של לחיצה כפולה באפליקציות לטלוויזיה (#962).
    • תוקנה הבעיה שבה MediaItem.RequestMetadata עם תוספים שאינם null לא מועבר בין בקרי מדיה לסשנים.
    • תוסיף קונסטרוקטור ל-MediaLibrarySession.Builder שמקבל רק Context במקום MediaLibraryService.
  • תוסף HLS:
    • הפחתת רמת החשיפה של HlsMediaPeriod ל-package-private. לא מומלץ להסתמך על הסוג הזה ישירות מחוץ לחבילת HLS.
    • שיפור היעילות של מעבר לתחילת קטע (#1031).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • מפענח MIDI: התעלמות מהודעות אירועים מסוג SysEx‏ (‎#710).
  • כלי בדיקה:
    • לא להשהות את ההפעלה ב-TestPlayerRunHelper.playUntilPosition. הבדיקה שומרת על מצב ההפעלה, אבל היא מושהית עד שהבדיקה תוכל להוסיף טענות ופעולות נוספות.
  • אפליקציית הדגמה:
    • מוסיפים מודול הדגמה של סרטון קצר כדי להדגים את השימוש ב-PreloadMediaSource במקרה שימוש של תוכן קצר.

גרסה ‎1.3.0-rc01

‫22 בפברואר 2024

משתמשים בגרסה 1.3.0 היציבה.

גרסה ‎1.3.0-beta01

‫7 בפברואר 2024

משתמשים בגרסה 1.3.0 היציבה.

גרסה ‎1.3.0-alpha01

‫15 בינואר 2024

משתמשים בגרסה 1.3.0 היציבה.

גרסה 1.2.0

גרסה 1.2.1

‫9 בינואר 2024

  • ‫ExoPlayer:
    • תוקנה בעיה שבה שינויים ידניים של מיקום ההפעלה מחוץ לטווח של [LiveConfiguration.min/maxOffset] גרמו להחזרת ההיסט לערך [min/maxOffset].
    • תיקון בעיה שבה פריסות הערוצים של OPUS ו-VORBIS שגויות עבור 3, 5, 6, 7 ו-8 ערוצים (#8396).
    • נפתרה בעיה שגרמה לכך שכשבוחרים רצועות אחרי מעבר למיקום אפס בשידור חי, השידור מתחיל במיקום ברירת המחדל שלו (#9347).
    • הבעיה שבה מופעים חדשים של CmcdData.Factory קיבלו ערכים שליליים של bufferedDurationUs ממקורות של נתחי נתונים, וכתוצאה מכך התקבלה שגיאה IllegalArgumentException (מספר 888).
  • ‫Transformer:
    • עקיפת בעיה שבה המקודד נכשל בזמן ההגדרה בגלל הגדרת קצב הפעלה גבוה.
  • אמצעי חילוץ:
    • כדי למנוע בחירה אוטומטית של טראקים משניים (שלא ניתן להפעיל) בפורמט HEVC בתמונות JPEG נעות להפעלה בגלל הרזולוציה הגבוהה שלהם, צריך לסמן אותם כ-ROLE_FLAG_ALTERNATE.
    • תיקון זיהוי שגוי של תמונות מפתח בסטרימינג של TS H264 (#864).
    • תיקון הערכת משך הזמן של סטרימינג TS שנמשך יותר מ-47,721 שניות (מס' 855).
  • אודיו:
    • תוקן הטיפול ב-EOS עבור SilenceSkippingAudioProcessor כשמתבצעות כמה קריאות (#712).
  • סרטון:
    • נוספו פתרונות עקיפים לבעיה במכשירים 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 כשעוברים מתוכן מוצפן לתוכן לא מוצפן בלי שמחובר לנגן משטח. השגיאה נגרמה כתוצאה משימוש לא נכון במפענח מאובטח להפעלת תוכן לא מוצפן.
  • סשן:
    • מציבים את המפתחות והערכים המותאמים אישית ב-MediaMetadataCompat עד MediaMetadata.extras וב-MediaMetadata.extras עד MediaMetadataCompat (‎#756,‏ ‎#802).
    • תיקון שידור notifyChildrenChanged לבקרי מדור קודם (#644).
    • תוקן באג שגרם לקריסה במכשירים מסוימים כשניסו להגדיר זמן שלילי לטיימר של setWhen שהושבת בהתראה (#903).
    • תוקנה בעיה שבה בקר ההתראות על מדיה IllegalStateException לא סיים את החיבור כשנשלחה בקשה לעדכון ההתראה הראשונה (#917).
  • UI:
    • תוקנה הבעיה שבה הכפתורים להרצה קדימה ולהרצה אחורה לא מוצגים כשמשתמשים בהם עם Material Design ב-BottomSheetDialogFragment ‏(#511).
    • תוקנה בעיה שבה המספרים בכפתור ההעברה המהירה של PlayerControlView לא היו מיושרים (מס' 547).
  • תוסף DASH:
    • ניתוח המחרוזת f800 כספירת ערוצים של 5 עבור Dolby במניפסט DASH (#688).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • ‫MIDI: נפתרה בעיה שבה דילוג קדימה מדלג על אירועי שינוי התוכנית (#704).
    • צריך לעבור ל-FFmpeg 6.0 ולעדכן את NDK הנתמך ל-r26b (#707, #867).
  • תוסף Cast:
    • הוסרה אפשרות ליצור Timeline כדי למנוע קריסה של האפליקציה כשטעינת המדיה נכשלת במכשיר Cast (#708).

גרסה 1.2.0

‫15 בנובמבר 2023

  • ספרייה משותפת:
    • מוסיפים פרמטר @Nullable Throwable לשיטות בממשק Log.Logger. הפרמטר message בשיטות האלה לא מכיל יותר מידע על Throwable שמועבר לשיטות Log.{d,i,w,e}(), ולכן אם רוצים לכלול את המידע הזה, צריך להוסיף אותו באופן ידני (אפשר להשתמש ב-Logger.appendThrowableString(String, Throwable)).
    • תוקנה בעיה בתאימות ל-Kotlin שבה פרמטרים של סוג גנרי שניתן להגדיר כ-nullable וסוגים של רכיבי מערך שניתן להגדיר כ-nullable לא מזוהים כ-nullable. דוגמאות: פרמטרים של שיטת ההחזרה TrackSelectorResult ו-SimpleDecoder (מספר 6792).
    • שינוי התנהגות ברירת המחדל של ממשק המשתמש וההתראות ב-Util.shouldShowPlayButton כדי להציג לחצן 'הפעלה' בזמן שההפעלה מושהית באופן זמני (למשל, בגלל אובדן זמני של מיקוד האודיו). אפשר לשמור על ההתנהגות הקודמת באמצעות PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) או MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • שדרוג מ-androidx.annotation:annotation-experimental ל-1.3.1 כדי לתקן את הבעיה https://issuetracker.google.com/251172715.
    • מעבירים את ExoPlayer.setAudioAttributes לממשק Player.
  • ‫ExoPlayer:
    • תוקנו בעיות בהזזה בשידורי AC4 שנגרמו בגלל זיהוי לא נכון של דגימות של פענוח בלבד (#11000).
    • הוספנו אפשרות להשבית את ההפעלה במכשירי פלט אודיו לא מתאימים (למשל, הרמקול המובנה במכשירי Wear OS) כשהתכונה הזו מופעלת דרך ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. סיבת ההשבתה של ההפעלה תתעדכן ל-Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT אם תתבצע פעולת הפעלה כשאין פלט אודיו מתאים, או אם כל הפלטים המתאימים ינותקו במהלך ההפעלה. סיבת ההשבתה תוסר כשמחברים פלט מתאים.
    • מוסיפים את התגים MediaSource.canUpdateMediaItem ו-MediaSource.updateMediaItem כדי לאשר עדכונים של MediaItem אחרי היצירה באמצעות Player.replaceMediaItem(s).
    • אפשר לעדכן את כל המחלקות MediaSource שסופקו על ידי הספרייה MediaItem באמצעות Player.replaceMediaItem(s) (מס' 33,‏ מס' 9978).
    • שינוי השם של MimeTypes.TEXT_EXOPLAYER_CUES ל MimeTypes.APPLICATION_MEDIA3_CUES.
    • מוסיפים PngExtractor ששולח וקורא קובץ PNG שלם לתוך TrackOutput כדוגמה אחת.
    • שיפור של method‏ SequenceableLoader.continueLoading(long) בממשק SequenceableLoader ל-SequenceableLoader.continueLoading(LoadingInfo loadingInfo). ‫LoadingInfo מכיל פרמטרים נוספים, כולל playbackSpeed ו-lastRebufferRealtimeMs, בנוסף ל-playbackPositionUs הקיים.
    • משפרים את השיטה ChunkSource.getNextChunk(long, long, List, ChunkHolder) בממשק ChunkSource ל-ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • הוספה של שדות נוספים לרישום ביומן של נתוני Common Media Client Data ‏ (CMCD): buffer starvation ‏ (bs), ‏ deadline ‏ (dl), ‏ מהירות ההפעלה ‏ (pr) ו-startup ‏(su) (#8699).
    • הוספת עומק סיביות של בהירות ושל צבע ל-ColorInfo (#491).
    • הוספה של שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (CMCD): בקשת האובייקט הבאה (nor) ובקשת הטווח הבאה (nrr) (מס' 8699).
    • הוספת פונקציונליות להעברת נתונים של Common Media Client Data‏ (CMCD) באמצעות פרמטרים של שאילתות (#553).
    • תיקון ConcurrentModificationException ב-ExperimentalBandwidthMeter (‎#612).
    • מוסיפים את הפרמטר MediaPeriodId אל CompositeMediaSource.getMediaTimeForChildMediaTime.
    • תמיכה ב-ClippingMediaSource (ובמקורות אחרים עם היסטים של תקופות/חלונות זמן) ב-ConcatenatingMediaSource2 (‎#11226).
    • משנים את BaseRenderer.onStreamChanged() כך שיקבל גם ארגומנט MediaPeriodId.
  • ‫Transformer:
    • ניתוח נתוני סיבוב של EXIF עבור קלט של תמונות.
    • מסירים את סוג ההערה TransformationRequest.HdrMode ואת הקבועים המשויכים אליו. במקום זאת, צריך להשתמש ב-Composition.HdrMode ובקבועים שמשויכים אליו.
    • כדי לפתור בעיות שקשורות לסיבוב, אפשר לפשט את OverlaySettings.
    • הפרמטרים frameRate ו-durationUs של SampleConsumer.queueInputBitmap השתנו ל-TimestampIterator.
  • בחירת טראק:
    • מוסיפים DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness כדי לאפשר או לא לאפשר באופן מפורש התאמה לא חלקה. ברירת המחדל נשארת כפי שהיא כרגע, true.
  • אמצעי חילוץ:
    • ‫MPEG-TS: כדי לוודא שהפריים האחרון עובר רינדור, צריך להעביר את יחידת הגישה האחרונה של הסטרים לתור הדגימות (‎#7909).
    • תיקון שגיאת הקלדה בקביעת rotationDegrees. השתנה projectionPosePitch ל-projectionPoseRoll (#461).
    • הסרת ההנחה שאפשר לבדוק ישירות מופעי Extractor באמצעות instanceof. אם רוצים גישה בזמן ריצה לפרטי ההטמעה של Extractor, צריך קודם להתקשר אל Extractor.getUnderlyingInstance.
    • מוסיפים BmpExtractor.
    • מוסיפים WebpExtractor.
    • מוסיפים HeifExtractor.
    • הוספת תמיכה ב-QuickTime classic ל-Mp4Extractor.
  • אודיו:
    • הוספנו תמיכה ב-PCM בפורמט big-endian‏ (24/32 ביט) ב-MP4 וב-Matroska, וניתוח של קידוד PCM עבור lpcm ב-MP4.
    • הוספת תמיכה בחילוץ אודיו בפורמט Vorbis ב-MP4.
    • הוספת AudioSink.getFormatOffloadSupport(Format) שמחלץ את רמת התמיכה בהפחתת עומס שהיעד יכול לספק לפורמט באמצעות DefaultAudioOffloadSupportProvider. הפונקציה מחזירה את AudioOffloadSupport החדש שמכיל את isFormatSupported, isGaplessSupported ו-isSpeedChangeSupported.
    • מוסיפים את AudioSink.setOffloadMode() שדרכו מוגדרת ההגדרה של העברת העומס למעבד ב-audio sink. ברירת המחדל היא AudioSink.OFFLOAD_MODE_DISABLED.
    • אפשר להפעיל את ההפחתת עומס דרך setAudioOffloadPreference ב-TrackSelectionParameters. אם ההעדפה שנקבעה היא הפעלה, המכשיר תומך בהפחתת עומס עבור הפורמט, ובחירת הרצועה היא טראק אודיו יחיד, אז הפחתת עומס האודיו תופעל.
    • אם audioOffloadModePreference מוגדר ל-AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, אז DefaultTrackSelector יבחר רק טראק אודיו, ורק אם הפורמט של הטראק הזה נתמך בהפחתת עומס. אם אין תמיכה בטראק אודיו בהפחתת עומס, לא ייבחר טראק.
    • השבתת התמיכה בהעברה ללא הפסקה כשמשתמשים בגרסאות שקודמות לרמת API‏ 33, בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
    • הסרת הפרמטר enableOffload מחתימת השיטה DefaultRenderersFactory.buildAudioSink.
    • הסרת אמצעי התשלום DefaultAudioSink.Builder.setOffloadMode.
    • הסרת הערך intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • הוספת תמיכה במטא-נתונים של Opus gapless במהלך הפעלת offload.
    • מתן הרשאה לשחזור של רכיב ה-renderer על ידי השבתת ההפחתת עומס אם היא נכשלה בכתיבה הראשונה (#627).
    • הפעלת תזמון העברת נתונים כברירת מחדל להפעלת אודיו בלבד בהעברת נתונים.
    • מוחקים את ExoPlayer.experimentalSetOffloadSchedulingEnabled ואת AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • השם של onExperimentalSleepingForOffloadChanged שונה ל-onSleepingForOffloadChanged ושל onExperimentalOffloadedPlayback ל-onOffloadedPlayback.
    • העברת ממשקי TrackSelectionParameters והגדרות שקשורים למצב העברת אודיו ל-offload אל מחלקה פנימית AudioOffloadPreferences.
    • הוספת קריאות חוזרות (callback) של onAudioTrackInitialized ו-onAudioTrackReleased אל AnalyticsListener, אל AudioRendererEventListener ואל AudioSink.Listener.
    • תיקון בעיה של חוסר נתונים בזיכרון המטמון של אודיו ב-DTS Express (#650).
    • תוקן באג שבו בדיקת היכולות של E-AC3-JOC מחזירה את השגיאה IllegalArgumentException (#677).
  • סרטון:
    • מתן הרשאה ל-MediaCodecVideoRenderer להשתמש ב-VideoFrameProcessor.Factory מותאם אישית.
    • תוקן באג שגרם לכך שלא היתה אפשרות לעבד את הפריימים הראשונים אם שידור האודיו התחיל עם חותמות זמן שליליות (#291).
  • טקסט:
    • הסרה של ExoplayerCuesDecoder. טראקים של טקסט עם sampleMimeType = application/x-media3-cues מטופלים עכשיו ישירות על ידי TextRenderer בלי צורך במופע SubtitleDecoder.
  • מטא-נתונים:
    • MetadataDecoder.decode לא יופעל יותר עבור דוגמאות של 'פענוח בלבד' כי ההטמעה ממילא צריכה להחזיר ערך null.
  • אפקט:
    • הוספה של VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) queuing bitmap input by timestamp.
    • משנים את VideoFrameProcessor.registerInputStream() כך שלא יחסום. באפליקציות צריך להטמיע את VideoFrameProcessor.Listener#onInputStreamRegistered().
    • הפרמטרים frameRate ו-durationUs של VideoFrameProcessor.queueInputBitmap השתנו ל-TimestampIterator.
  • ‫IMA extension:
    • תוקנה באג שבו שידור חי בפורמט DASH עם כמה תקופות שלא מופיע כפריט הראשון בפלייליסט יכול להחזיר חריגה (‎#571).
    • צריך להפעיל את StreamManager לפני שמתקשרים אל AdsLoader.destroy()
    • העלאה של גרסת IMA SDK ל-3.31.0.
  • סשן:
    • מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך FOREGROUND_SERVICE_IMMEDIATE ב-DefaultMediaNotificationProvider (מספר 167).
    • כדי להימנע מבעיות ב-API שהוצא משימוש במכשירי Samsung, צריך להשתמש רק ב-android.media.session.MediaSession.setMediaButtonBroadcastReceiver() מעל API 31 ‏(#167).
    • אפשר להשתמש בבקר ההתראות על מדיה כשרת proxy כדי להגדיר פקודות זמינות ופריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
    • המרת אירועים של לחצני מדיה שמתקבלים על ידי MediaSessionService.onStartCommand() בתוך Media3 במקום לנתב אותם לסשן הפלטפורמה ולחזור ל-Media3. במקרה כזה, בקר השיחה הוא תמיד בקר ההתראות על מדיה, ואפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות.
    • תוקן באג שגרם לכך ש-MediaController.getCurrentPosition() לא התקדם כשחיברו אותו ל-MediaSessionCompat מדור קודם.
    • אפשר להוסיף MediaLibrarySession.getSubscribedControllers(mediaId) לנוחותכם.
    • מחליפים את MediaLibrarySession.Callback.onSubscribe() כדי להצהיר על הזמינות של מזהה ההורה שאליו הבקר רשום. אם הפעולה מצליחה, המינוי מתקבל והפונקציה notifyChildrenChanged() מופעלת באופן מיידי כדי לעדכן את הדפדפן (מספר 561).
    • הוספנו מודול הדגמה של סשן ל-Automotive OS והפעלנו הדגמה של סשן ל-Android Auto.
    • אל תגדירו את התור של סשן ה-framework אם COMMAND_GET_TIMELINE לא זמין לבקר ההתראות של המדיה. כש-Android Auto משמש כבקר לקוח שקורא מהסשן של המסגרת, התוצאה היא שכפתור queue בממשק המשתמש של Android Auto לא מוצג (#339).
    • שימוש ב-DataSourceBitmapLoader כברירת מחדל במקום ב-SimpleBitmapLoader (מס' 271, מס' 327).
    • הוספה של MediaSession.Callback.onMediaButtonEvent(Intent) שמאפשר לאפליקציות לבטל את הטיפול באירועים של לחצני מדיה שמוגדר כברירת מחדל.
  • UI:
    • הוספנו הטמעה של Player.Listener למכשירי Wear OS שמטפלת בהפסקת ההפעלה בגלל Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT על ידי הפעלת תיבת דו-שיח במערכת שמאפשרת למשתמש לחבר פלט שמע מתאים (למשל אוזניות Bluetooth). ההאזנה תתחדש אוטומטית אם מכשיר מתאים יתחבר תוך פרק זמן מוגדר (ברירת המחדל היא 5 דקות).
  • הורדות:
    • הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור DownloadService לצורך תאימות ל-Android 14. במהלך השימוש בשירות הזה, האפליקציה צריכה גם להוסיף את dataSync כ-foregroundServiceType במניפסט ולהוסיף את ההרשאה FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • תוסף HLS:
    • רענון של פלייליסט HLS לשידור חי במרווח זמן שמחושב לפי שעת ההתחלה של הטעינה האחרונה ולא לפי שעת הסיום של הטעינה האחרונה (#663).
  • תוסף DASH:
    • אפשר להשתמש בכמה מזהים זהים של DASH בכתובת URL של תבנית פלח.
    • הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. השיפור הזה כולל תמיכה טובה יותר במיזוג של כתוביות חופפות, כולל פתרון של הבהובים במעבר בין מקטעי כתוביות. אפשר להפעיל את ההגדרה הזו באמצעות DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (מספר 288).
  • תוסף RTSP:
    • תיקון מרוץ תהליכים שעלול להוביל ל-IndexOutOfBoundsException כשמתבצעת חזרה ל-TCP, או להשהיית ההפעלה במצבים מסוימים.
    • בדיקת המצב בהגדרת RTSP כשמחזירים את מצב הטעינה של RtspMediaPeriod (#577).
    • התעלמות משיטות בקשה מותאמות אישית של Rtsp בכותרת הציבורית של תגובת האפשרויות (#613).
    • שימוש בערך הזמן הקצוב לתגובה של הגדרת RTSP במרווח הזמן של שליחת בקשות RTSP Options של הודעת keep-alive (‎#662).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • שחרור מודול מפענח MIDI, שמספק תמיכה בהשמעה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסינתוז אודיו.
    • מוסיפים DecoderOutputBuffer.shouldBeSkipped כדי לסמן ישירות מאגרי פלט שלא צריך להציג. האפשרות הזו עדיפה על C.BUFFER_FLAG_DECODE_ONLY, שתוצא משימוש.
    • מוסיפים את Decoder.setOutputStartTimeUs ואת SimpleDecoder.isAtLeastOutputStartTimeUs כדי לאפשר למפענחים להשמיט דוגמאות של פענוח בלבד לפני שעת ההתחלה. השיטה הזו מועדפת על פני Buffer.isDecodeOnly, שתוצא משימוש.
    • תוקן באג שגרם לבעיה בפרסום ארטיפקט של פענוח MIDI במאגר Maven. הארטיפקט נקרא עכשיו media3-exoplayer-midi (מס' 734).
  • תוסף Leanback:
    • תוקן באג שבו השבתה של משטח יכולה לגרום לשגיאה ArithmeticException בקוד Leanback (מס' 617).
  • כלי בדיקה:
    • להפוך את TestExoPlayerBuilder ו-FakeClock לתואמים לבדיקות ממשק משתמש של Espresso ולבדיקות ממשק משתמש של Compose. תוקן באג שגרם לכך שההפעלה התקדמה באופן לא דטרמיניסטי במהלך אינטראקציות עם תצוגת Espresso או Compose.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) ושל TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). במקום זאת, צריך להשתמש ב-Composition.Builder.setHdrMode(int) ולהעביר את Composition אל Transformer.start(Composition, String).
    • מסירים את השיטה DownloadNotificationHelper.buildProgressNotification שהיא הוצאה משימוש, ומשתמשים בשיטה שלא הוצאה משימוש שמקבלת פרמטר notMetRequirements במקום זאת.

גרסה ‎1.2.0-rc01

1 בנובמבר 2023

משתמשים בגרסה יציבה 1.2.0.

גרסה ‎1.2.0-beta01

‫19 באוקטובר 2023

משתמשים בגרסה יציבה 1.2.0.

גרסה ‎1.2.0-alpha02

‫29 בספטמבר 2023

משתמשים בגרסה יציבה 1.2.0.

גרסה ‎1.2.0-alpha01

‫17 באוגוסט 2023

משתמשים בגרסה יציבה 1.2.0.

גרסה 1.1.0

גרסה 1.1.1

‫16 באוגוסט 2023

  • ספרייה משותפת:
    • הסרה של תלות multidex שנוספה בטעות מכל המודולים (#499).
  • ‫ExoPlayer:
    • תיקון בעיה ב-PlaybackStatsListener שבה נוצרים ערכים פיקטיביים של PlaybackStats אחרי שהפלייליסט נמחק.
    • הוספת שדות נוספים לרישום ביומן של נתוני Common Media Client Data‏ (CMCD): פורמט סטרימינג (sf), סוג סטרימינג (st), גרסה (v), קצב העברת נתונים עליון (tb), משך האובייקט (d), קצב העברת נתונים שנמדד (mtp) וסוג האובייקט (ot) (#8699).
  • אודיו:
    • תוקן באג שגרם לכך שהמצב Player.getState() לא עבר אף פעם למצב STATE_ENDED בזמן הפעלת קבצים קצרים מאוד (#538).
  • הפחתת עומס אודיו:
    • הוספת דפי כותרת של מזהה Ogg וכותרת של הערה לפני זרם הביטים להפעלת Opus שהועברה בהתאם ל-RFC 7845.
  • סרטון:
    • ‫H.265/HEVC: תיקון ניתוח של פרטי תמונת ההפניה לטווח קצר ולטווח ארוך של SPS.
  • טקסט:
    • ‫CEA-608: שינוי הלוגיקה של חיתוך רמזים כך שרק טקסט גלוי ייחשב. בעבר, ההזחה וההיסטא של הטאב נכללו כשמגבילים את אורך הרמז ל-32 תווים (מה שהיה נכון מבחינה טכנית לפי המפרט) (#11019).
  • ‫IMA extension:
    • העלאה של גרסת 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).

גרסה 1.1.0

‫5 ביולי 2023

  • ספרייה משותפת:
    • ‫Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
    • הוספת פקודות ל-Player:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • מוסיפים ל-Player שיטות עמוסות מדי שמאפשרות למשתמשים לציין את עוצמת הקול:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • הוספת Builder ל-DeviceInfo והוצאה משימוש של בנאי קיים.
    • מוסיפים DeviceInfo.routingControllerId כדי לציין את מזהה בקר הניתוב להפעלות מרחוק.
    • הוספנו את Player.replaceMediaItem(s) כקיצור דרך להוספה ולהסרה של פריטים באותו מיקום (#8046).
  • ‫ExoPlayer:
    • אפשר לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת. משתמשים בExoPlayer.Builder.setDeviceVolumeControlEnabled כדי לקבל גישה אל:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) וגם setDeviceVolume(int, int)
      • increaseDeviceVolume(int) וגם increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) וגם decreaseDeviceVolume(int, int)
    • הוספת FilteringMediaSource שמאפשרת לסנן את סוגי הרצועות הזמינים מתוך MediaSource.
    • הוספנו תמיכה בהכללת נתוני לקוח מדיה נפוצים (CMCD) בבקשות היוצאות של פורמטים של סטרימינג אדפטיבי DASH,‏ HLS ו-SmoothStreaming. השדות הבאים, br,‏ bl,‏ cid,‏ rtp וגם sid, שולבו (מספר 8699). מבנה ה-API ושיטות ה-API:
      • רישום ביומן של CMCD מושבת כברירת מחדל. כדי להפעיל אותו, משתמשים ב-MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory).
      • כל המקשים מופעלים כברירת מחדל. אפשר להגדיר את CmcdConfiguration.RequestConfig.isKeyAllowed(String key) כדי לסנן את המקשים שמתועדים.
      • מחליפים את CmcdConfiguration.RequestConfig.getCustomData() כדי להפעיל רישום מותאם אישית ביומן.
    • הוספנו פעולה נוספת למניפסט של ההדגמה הראשית כדי להקל על הפעלת אפליקציית ההדגמה באמצעות קובץ *.exolist.json בהתאמה אישית (‎#439).
    • הוספת ExoPlayer.setVideoEffects() לשימוש ב-Effect במהלך הפעלת הסרטון.
    • צריך לעדכן את SampleQueue כדי לאחסן את sourceId כ-long ולא כ-int. הפעולה הזו משנה את החתימות של שיטות ציבוריות SampleQueue.sourceId ו-SampleQueue.peekSourceId.
    • מוסיפים פרמטרים לשיטות LoadControl shouldStartPlayback ו-onTracksSelected שמאפשרים לשייך את השיטות האלה לMediaPeriod הרלוונטי.
    • משנים את החתימה של ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID שמשמשים כמפתחות במפה. הפעולה הזו נדרשת כדי למנוע בעיות של גישה בו-זמנית בשידורים חיים עם כמה תקופות.
    • הוצאה משימוש של EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) ושל BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). אפשר לקרוא לגרסה של השיטות בלי mediaTimeOffsetUs. שימו לב שגם בווריאציות שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUs ול-endTimeUs של אובייקטים MediaLoadData שנשלחים על ידי ה-dispatcher.
    • שינוי השם של ExoTrackSelection.blacklist ל-excludeTrack ושל isBlacklisted ל-isTrackExcluded.
    • תיקון התנהגות לא עקבית בין ExoPlayer.setMediaItem(s) לבין addMediaItem(s) כשמפעילים אותן בפלייליסט ריק.
  • ‫Transformer:
    • הסרה של Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). במקומה, צריך להשתמש ב-ExoPlayerAssetLoader.Factory(MediaSource.Factory) וב-Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • הסרה של Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • תוקן באג שגרם לכך שהטרנספורמציה נתקעה (מה שהוביל לפסק זמן של muxer ) אם סוף הווידאו בסטרימינג סומן ברגע שפריים קלט המתין לעיבוד.
    • כדי להרחיב את התמיכה, אפשר להשתמש ב-MediaCodecList כדי לשלוח שאילתות לגבי רכיבי codec במקום להשתמש בכלי השירות findDecoder/EncoderForFormat.
    • צריך להסיר את ההגדרה של B-frame ב-DefaultEncoderFactory כי היא לא פועלת בחלק מהמכשירים.
  • בחירת טראק:
    • הוספה של DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, שמושבתת כברירת מחדל. כשהאפשרות הזו מופעלת, הפונקציה DefaultTrackSelector תפעיל בחירה חדשה של טראק אם היכולות של רכיב ה-Renderer השתנו.
  • אמצעי חילוץ:
    • ‫Ogg: תיקון באג בחיפוש בקבצים עם משך ארוך (#391).
    • ‫FMP4: תוקנה בעיה שבה TimestampAdjuster מאתחל היסט לא נכון של חותמת זמן עם זמן דגימת מטא-נתונים מאטום emsg ‏(#356).
  • אודיו:
    • תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל וAudioProcessors פעילים, למשל בחיתוך ללא הפסקה (#10847).
    • הוספת מסגרות Opus לחבילות Ogg בהפעלות ישירות (העברה).
    • אפשר לחשב את המיקום הנוכחי במהלך השינה באמצעות תזמון העברה.
    • מוסיפים את Renderer.release() ו-AudioSink.release() כדי לשחרר את המשאבים בסוף מחזור החיים של השחקן.
    • האזנה לשינויים ביכולות האודיו ב-DefaultAudioSink. מוסיפים פרמטר נדרש context בקונסטרוקטור של DefaultAudioSink, שבאמצעותו DefaultAudioSink יירשם כמאזין ל-AudioCapabilitiesReceiver ויעדכן את המאפיין audioCapabilities שלו כשמתקבל עדכון לגבי שינוי ביכולות.
    • הפצת שינויים ביכולות האודיו באמצעות אירוע חדש onAudioCapabilitiesChanged בממשק AudioSink.Listener וממשק חדש RendererCapabilities.Listener שמפעיל אירועים onRendererCapabilitiesChanged.
    • מוסיפים ChannelMixingAudioProcessor כדי להחיל שינוי גודל או מיקס על ערוצי אודיו.
    • הוספת ערך int חדש DISCARD_REASON_AUDIO_BYPASS_POSSIBLE ל-DecoderDiscardReasons כדי לבטל את קידוד האודיו כשמצב מעקף אפשרי אחרי שינוי ביכולות האודיו.
    • הוספת תמיכה בהפעלה ישירה של DTS Express ו-DTS:X (#335).
  • סרטון:
    • MediaCodecVideoRenderer report a VideoSize with a width and height of 0 when the renderer is disabled. הפונקציה 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 extension:
    • הפעלת שידורים חיים בפורמט DASH עם כמה תקופות לצורך DAI. שימו לב: ההטמעה הנוכחית עדיין לא תומכת בהזזה בשידורים חיים (#10912).
    • תוקן באג שבו קבוצת מודעות חדשה מוכנסת לשידורים חיים כי מיקום התוכן המחושב בציר זמן רצוף משתנה מעט.
  • סשן:
    • הוספת שיטת העזרה MediaSession.getControllerForCurrentRequest כדי לקבל מידע על בקר שקורא כרגע לשיטה Player.
    • מוסיפים את androidx.media3.session.MediaButtonReceiver כדי לאפשר לאפליקציות להטמיע חידוש של הפעלת תוכן באמצעות אירועים של לחצני מדיה שנשלחים, למשל, מאוזניות Bluetooth‏ (#167).
    • הוספת הטמעת ברירת מחדל ל-MediaSession.Callback.onAddMediaItems כדי לאפשר העברה של MediaItems שנדרש אל Player אם יש להם LocalConfiguration (למשל URI) (#282).
    • הוספנו כברירת מחדל לחצני פקודה של 'דילוג לקטע הקודם' ו'דילוג לקטע הבא' בתצוגה של התראות מדיה קומפקטיות ב-Android מגרסה 12 ומטה (#410).
    • הוספת הטמעת ברירת מחדל ל-MediaSession.Callback.onAddMediaItems כדי לאפשר העברה של MediaItems שנדרש אל Player אם יש להם LocalConfiguration (למשל URI) (#282).
    • הוספנו כברירת מחדל לחצני פקודה של 'דילוג לקטע הקודם' ו'דילוג לקטע הבא' בתצוגה של התראות מדיה קומפקטיות ב-Android מגרסה 12 ומטה (#410).
  • UI:
    • מוסיפים את השיטות Util‏ shouldShowPlayButton ו-handlePlayPauseButtonAction כדי לכתוב רכיבי ממשק משתמש מותאמים אישית עם לחצן הפעלה/השהיה.
  • תוסף RTSP:
    • ב-MPEG4-LATM, אם הערך של profile-level-id לא מופיע בהודעת ה-SDP של DescribeResponse, צריך להשתמש בערך ברירת המחדל (מס' 302).
    • אם הוא מופיע בכותרת התגובה של DESCRIBE, צריך להשתמש ב-URI הבסיסי כדי לפתור נתיב יחסי מהסשן של RTSP (#11160).
  • תוסף DASH:
    • מסירים את ההיסט של הזמן של המדיה מהתגים MediaLoadData.startTimeMs ו-MediaLoadData.endTimeMs בשידורי DASH עם כמה תקופות.
    • תוקן באג שגרם לכך שהכנה מחדש של מקור מדיה בשידור חי בפורמט Dash עם כמה תקופות יצרה IndexOutOfBoundsException (#10838).
  • תוסף HLS:
    • מוסיפים את HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) כדי להגדיר זמן קצוב לתהליך הטעינה להמתנה לאתחול של TimestampAdjuster. אם האתחול לא מסתיים לפני תום הזמן הקצוב לתפוגה, מוצג PlaybackException כדי למנוע את ההשהיה האינסופית של ההפעלה. ערך ברירת המחדל של הזמן הקצוב לתפוגה הוא אפס (‎#323).
  • כלי בדיקה:
    • בודקים אם יש רגישות לאותיות רישיות בסכימת ה-URI ב-DataSourceContractTest.
  • הסרת סמלים שהוצאו משימוש:
    • מסירים את ה-DefaultAudioSink constructors ומשתמשים ב-DefaultAudioSink.Builder במקום.
    • מסירים את HlsMasterPlaylist ומשתמשים ב-HlsMultivariantPlaylist במקומה.
    • הסרה של Player.stop(boolean). במקום זאת, צריך להשתמש ב-Player.stop() וב-Player.clearMediaItems() (אם reset הוא true).
    • כדי לשפר את הביצועים, מסירים שני constructors של SimpleCache שיצאו משימוש ומשתמשים ב-constructor שלא יצא משימוש שמקבל DatabaseProvider במקום זאת.
    • מסירים את ה-constructor‏ DefaultBandwidthMeter ומשתמשים ב-DefaultBandwidthMeter.Builder במקומו.
    • מסירים את ה-constructors של DefaultDrmSessionManager ומשתמשים ב-DefaultDrmSessionManager.Builder במקום זאת.
    • הסרנו שני קונסטרוקטורים שיצאו משימוש HttpDataSource.InvalidResponseCodeException והשתמשנו בקונסטרוקטור שלא יצא משימוש שמקבל שדות נוספים(cause, responseBody) כדי לשפר את רישום השגיאות.
    • הסרה של DownloadHelper.forProgressive,‏ DownloadHelper.forHls,‏ DownloadHelper.forDash ו-DownloadHelper.forSmoothStreaming, שימוש ב-DownloadHelper.forMediaItem במקום.
    • מסירים את ה-constructor ‏DownloadService שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטר channelDescriptionResourceId.
    • מסירים קבועי מחרוזות שהוצאו משימוש עבור ערכות תווים (ASCII_NAME,‏ UTF8_NAME, ‏ ISO88591_NAME, ‏ UTF16_NAME ו-UTF16LE_NAME), ומשתמשים בערכות תווים של Kotlin מהחבילה kotlin.text, ב-java.nio.charset.StandardCharsets או ב-com.google.common.base.Charsets במקום זאת.
    • מסירים את ה-constructor ‏WorkManagerScheduler שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטר Context במקום זאת.
    • הוסרו ה-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() במקומו.
    • הוסר בנאי DefaultTrackSelector עם אפס ארגומנטים שהוצא משימוש. במקומו צריך להשתמש ב-DefaultTrackSelector(Context).
    • מסירים את הבונה OfflineLicenseHelper שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) במקומו.
    • מסירים את ה-constructor DownloadManager שהוצא משימוש ומשתמשים ב-constructor שמקבל Executor במקום זאת.
    • מסירים את ה-constructors Cue שהוצאו משימוש ומשתמשים ב-Cue.Builder במקומם.
    • מסירים את הבונה OfflineLicenseHelper שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) במקומו.
    • הסרה של ארבע שיטות AnalyticsListener שיצאו משימוש:
      • onDecoderEnabled, אפשר להשתמש ב-onAudioEnabled ו/או ב-onVideoEnabled במקום זאת.
      • onDecoderInitialized, במקומה יש להשתמש ב-onAudioDecoderInitialized ו/או ב-onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, אפשר להשתמש במקום זאת ב-onAudioInputFormatChanged ו/או ב-onVideoInputFormatChanged.
      • onDecoderDisabled, אפשר להשתמש ב-onAudioDisabled ו/או ב-onVideoDisabled במקום זאת.
    • מסירים את Player.Listener.onSeekProcessed ו-AnalyticsListener.onSeekProcessed שהוצאו משימוש, ומשתמשים ב-onPositionDiscontinuity עם DISCONTINUITY_REASON_SEEK במקום זאת.
    • מסירים את ExoPlayer.setHandleWakeLock(boolean) ומשתמשים ב-setWakeMode(int) במקומה.
    • צריך להסיר את DefaultLoadControl.Builder.createDefaultLoadControl() שהוצא משימוש ולהשתמש ב-build() במקום זאת.
    • צריך להסיר את MediaItem.PlaybackProperties שהוצא משימוש ולהשתמש ב-MediaItem.LocalConfiguration במקום זאת. השדה שיצא משימוש MediaItem.playbackProperties הוא עכשיו מסוג MediaItem.LocalConfiguration.

גרסה ‎1.1.0-rc01

‫21 ביוני 2023

משתמשים בגרסה יציבה 1.1.0.

גרסה ‎1.1.0-beta01

‫7 ביוני 2023

משתמשים בגרסה יציבה 1.1.0.

גרסה ‎1.1.0-alpha01

‫10 במאי 2023

משתמשים בגרסה יציבה 1.1.0.

גרסה 1.0.0

גרסה 1.0.2

‫18 במאי 2023

androidx.media3:media3-*:1.0.2 מופץ. גרסה 1.0.2 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה 2.18.7 של ExoPlayer.

הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.0.1:

  • ספריית ליבה:
    • מוסיפים את הדגל Buffer.isLastSample() שמציין אם Buffer מכיל את הדגל C.BUFFER_FLAG_LAST_SAMPLE.
    • תוקנה הבעיה שבה יכול להיות שהפריים האחרון לא יעבור רינדור אם הדגימה האחרונה עם frames מוצאת מהתור בלי לקרוא את הדגימה 'סוף הזרם'. (#11079).
  • אמצעי חילוץ:
    • תיקון ניתוח של H.265 SPS בקובצי MPEG-TS על ידי שימוש חוזר בלוגיקת הניתוח שכבר נמצאת בשימוש ב-RTSP ובמחולצי MP4 (#303).
  • טקסט:
    • ‫SSA: הוספת תמיכה בקובצי UTF-16 אם הם מתחילים בסימן סדר בתים (‎#319).
  • סשן:
    • תוקנה בעיה שגרמה לכך ש-MediaController לא עדכן את הפקודות הזמינות שלו כשחיבור נוצר ל-MediaSessionCompat מדור קודם שעדכן את הפעולות שלו.
    • תוקן באג שמנע מ-MediaLibraryService להחזיר ערך null עבור קריאה מ-ממשק המשתמש של המערכת אל Callback.onGetLibraryRoot עם params.isRecent == true ב-API 30 (מס' 355).
    • תיקון דליפת זיכרון של MediaSessionService או MediaLibraryService (#346).
    • תוקן באג שבו עדכון משולב של Timeline ומיקום ב-MediaSession עלול לגרום ל-MediaController להקפיץ הודעת שגיאה (throw) IllegalStateException.

גרסה 1.0.1

‫18 באפריל 2023

androidx.media3:media3-*:1.0.1 מופץ. גרסה 1.0.1 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.6.

  • ספריית ליבה:
    • איפוס של שינוי ברירת המחדל של השידור החי כשמבצעים חיפוש למיקום ברירת המחדל (#11051).
    • תוקן באג שבו זרמי דגימות ריקים במדיה עלולים לגרום להפעלה להיתקע.
  • סשן:
    • תוקן באג שבו כמה פריטים זהים בתור שפורסמו על ידי MediaSessionCompat מדור קודם גרמו לחריגה ב-MediaController (#290).
    • הוספת העברה חסרה של MediaSession.broadcastCustomCommand אל MediaControllerCompat.Callback.onSessionEvent מדור קודם (‎#293).
    • תוקן באג שבו קריאה לפונקציה MediaSession.setPlayer לא מעדכנת את הפקודות הזמינות.
    • תיקון הבעיה שמופעים של TrackSelectionOverride שנשלחים מ-MediaController מתעלמים מהם אם הם מפנים לקבוצה עם Format.metadata (מס' 296).
    • פתרון בעיה שבה Player.COMMAND_GET_CURRENT_MEDIA_ITEM צריך להיות זמין כדי לגשת למטא-נתונים דרך MediaSessionCompat מדור קודם.
    • תוקנה בעיה שבה מופעים של MediaSession בשרשור ברקע גורמים לקריסות כשמשתמשים בהם ב-MediaSessionService (#318).
    • תוקנה בעיה שבה ספרייה הכריזה על מקלט של לחצן מדיה בלי שהאפליקציה התכוונה לכך (#314).
  • ‫DASH:
    • תוקן הטיפול בציר זמן של פלח ריק (#11014).
  • RTSP:
    • אם הגדרת RTSP עם UDP נכשלת עם שגיאת RTSP מספר 461 UnsupportedTransport (‎#11069), צריך לנסות שוב עם TCP.

גרסה 1.0.0

‫22 במרץ 2023

androidx.media3:media3-*:1.0.0 מופץ. גרסה 1.0.0 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.5.

לא בוצעו שינויים מאז גרסה 1.0.0-rc02.

גרסה ‎1.0.0-rc02

‫2 במרץ 2023

androidx.media3:media3-*:1.0.0-rc02 מופץ. גרסה ‎1.0.0-rc02 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה 2.18.4 של ExoPlayer.

  • ספריית ליבה:
    • תיקון של זיהוי סוג הרשת ב-API 33 (#10970).
    • צריך לתקן את NullPointerException כשמתקשרים אל ExoPlayer.isTunnelingEnabled (#10977).
  • הורדות:
    • אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-SegmentDownloader ובמחלקות משנה (#248).
  • אודיו:
    • תיקון הפעלה רציפה של קובצי MP3 במכשירי Samsung (#8594).
    • תוקן באג שבו מהירויות ההפעלה שנקבעו מיד אחרי השבתת האודיו עשויות להידחק על ידי שינוי מהירות קודם (#10882).
  • סרטון:
    • מיפוי של פורמט HEVC HDR10 אל HEVCProfileMain10HDR10 במקום אל HEVCProfileMain10.
    • נוספה דרך לעקיפת בעיה במכשיר Chromecast with Google TV וב-Lenovo M10 FHD Plus שגורמת לכך שסטרימינג של AVC ב-60fps מסומן כלא נתמך (#10898).
    • תיקון בעיות בביצועים של שחרור פריימים בהפעלת מדיה עם קצב פריימים גבוה בהרבה מקצב הרענון של המסך.
  • הפעלת Cast:
    • תיקון של STATE_IDLE חולף במעבר בין פריטי מדיה (#245).
  • RTSP:
    • תפיסה של IllegalArgumentException שמועבר בניתוח של הודעות תגובה לא תקינות של RTSP Describe (#10971).
  • סשן:
    • תוקן באג שגרם לכך שכפתור ההפעלה/ההשהיה בהתראה לא התעדכן בהתאם למצב הנגן (מס' 192).
  • ‫IMA extension:
    • תוקן באג שגרם לכך שלא ניתן היה להפעיל סטרימינג של DAI ללא מודעות, כי לא התקבל אירוע LOADED הראשון (ובמקרה של סטרימינג ללא מודעות, האירוע היחיד).

גרסה ‎1.0.0-rc01

‫16 בפברואר 2023

androidx.media3:media3-*:1.0.0-rc01 מופץ. גרסה ‎1.0.0-rc01 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.3.

  • ספריית ליבה:
    • שינוי הלוגיקה של סדר הפענוח של רכיב הרינדור כדי לשמור על ההעדפות של MediaCodecSelector, גם אם רכיב פענוח מדווח שהוא לא יוכל להפעיל את המדיה בצורה יעילה. לדוגמה, עם ברירת המחדל של בורר, מקודד חומרה עם תמיכה פונקציונלית בלבד יעדיף על פני מקודד תוכנה שתומך באופן מלא בפורמט (#10604).
    • מוסיפים את ExoPlayer.Builder.setPlaybackLooper שמגדיר שרשור הפעלה קיים מראש למופע חדש של ExoPlayer.
    • אפשר לנקות את העוזרים של מנהל ההורדות (#10776).
    • הוספת פרמטר ל-BasePlayer.seekTo כדי לציין גם את הפקודה שמשמשת לחיפוש.
    • שימוש בעיצוב כשמעלים משאבים גרפיים ב-API 21 ומעלה (#220).
    • הוספנו ConcatenatingMediaSource2 שמאפשרת לשלב כמה פריטי מדיה בחלון אחד (#247).
  • אמצעי חילוץ:
    • מחזירים ParserException במקום NullPointerException אם חסר תיאור נדרש של דוגמה (stsd) בטבלת הדוגמאות (stbl) כשמנתחים אטומי trak.
    • דילוג נכון על דוגמאות כשמבצעים חיפוש ישירות לפריים של סנכרון ב-fMP4 (#10941).
  • אודיו:
    • משתמשים בקצב העברת הנתונים בפורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי עבור AudioTrack בהשמעות ישירות (passthrough).
  • טקסט:
    • צריך לתקן את השגיאה TextRenderer passing an invalid (negative) index to Subtitle.getEventTime אם קובץ הכתוביות לא מכיל רמזים.
    • ‫SubRip: הוספת תמיכה בקובצי UTF-16 אם הם מתחילים בסימן של סדר בתים (byte order) .
  • מטא-נתונים:
    • ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
    • מוסיפים את הערך MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable כתחליף ל-MediaMetadata.folderType. סוג התיקייה הזה יוצא משימוש בגרסה הבאה.
  • ‫DASH:
    • הוספת ניתוח מלא של קבוצות להתאמת תמונות, כולל ספירת משבצות (#3752).
  • UI:
    • כדי לוודא ששינויים בסטטוס החשיפה מועברים למאזין הרשום, צריך לתקן את השימוש ב-deprecated PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) (#229).
    • תוקן הסדר של כפתורי הנגן במרכז ב-PlayerView כשמשתמשים בפריסה מימין לשמאל (RTL) (#227).
  • סשן:
    • הוספת תקציר SimpleBasePlayer כדי לעזור בהטמעה של הממשק Player עבור נגנים בהתאמה אישית.
    • הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3 SessionToken (‎#171).
    • משתמשים ב-onMediaMetadataChanged כדי להפעיל עדכונים של סשן המדיה בפלטפורמה (מס' 219).
    • מוסיפים את סשן המדיה כארגומנט של getMediaButtons() של DefaultMediaNotificationProvider ומשתמשים ברשימות שלא ניתן לשנות כדי להבהיר את העניין (#216).
    • הוספת onSetMediaItems callback listener כדי לספק אמצעים לשינוי/הגדרה של MediaItem רשימה, אינדקס התחלתי ומיקום לפי סשן לפני ההגדרה ב-Player (#156).
    • הימנעות מזיהוי הקשה כפולה לאירועים של לחצני מדיה שאינם Bluetooth (#233).
    • שיפור QueueTimeline במקרה של מצב סשן מפוקפק מדור קודם (#241).
  • מטא-נתונים:
    • ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
    • מוסיפים את הערך MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable כתחליף ל-MediaMetadata.folderType. סוג התיקייה הזה יוצא משימוש בגרסה הבאה.
  • תוסף Cast:
    • העלאת גרסת Cast SDK ל-21.2.0.
  • ‫IMA extension:
    • כדי למנוע בעיות שקשורות לשרשור, צריך להסיר את מאזין הנגן של 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 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.2.

  • ספריית ליבה:
    • נוסף ExoPlayer.isTunnelingEnabled כדי לבדוק אם מנהור מופעל עבור הרצועות שנבחרו כרגע (#2518).
    • נוספה האפשרות WrappingMediaSource כדי לפשט את הגלישה של MediaSource אחד (#7279).
    • המאגר הזמני של הדף הקודם נמחק לפני שההפעלה נתקעת בגלל חוסר בזיכרון.
    • סוגרים את הבלוק Tracing doSomeWork כשהעברת העומס מופעלת.
    • תיקון בעיה במעקב אחר סשנים עם מעברים מהירים ב-PlaybackStatsListener (#180).
    • שליחת קריאה חוזרת חסרה של onMediaItemTransition כשמתקשרים אל seekToNext או אל seekToPrevious בפלייליסט עם פריט אחד (מס' 10667).
    • מוסיפים את Player.getSurfaceSize שמחזיר את הגודל של הפלטפורמה שבה הסרטון מוצג.
    • תוקן באג שבו הסרה של listeners במהלך שחרור הנגן עלולה לגרום ל-IllegalStateException (#10758).
  • גרסת Build:
    • הגדרת ערך מינימלי ל-compileSdkVersion כדי למנוע שגיאות קומפילציה (#10684).
    • הימנעות מפרסום חסימה כשכוללים אותה ב-gradle build אחר.
  • בחירת טראק:
    • עדיף להשתמש בטראקים אחרים במקום ב-Dolby Vision אם התצוגה לא תומכת בו. (#8944).
  • הורדות:
    • תיקון לולאה אינסופית פוטנציאלית ב-ProgressiveDownloader שנגרמת בגלל הורדה והפעלה בו-זמניות עם אותו PriorityTaskManager (‎#10570).
    • הצגת התראה על הורדה באופן מיידי (#183).
    • הגבלת מספר ההסרות של הורדות מקבילות ל-1 כדי למנוע יצירה מוגזמת של שרשורים (#10458).
  • סרטון:
    • אם התצוגה לא תומכת ב-Dolby Vision, כדאי לנסות להשתמש במפענח חלופי. (#9794).
  • אודיו:
    • כדי להימנע משגיאות OutOfMemory כשמבטלים את ההפעלה של כמה נגנים בו-זמנית (‎#10057), צריך להשתמש ב-SingleThreadExecutor כדי להוציא משימוש מופעים של AudioTrack.
    • מוסיף את AudioOffloadListener.onExperimentalOffloadedPlayback למצב הפחתת העומס של AudioTrack. (#134).
    • הגדרת AudioTrackBufferSizeProvider כממשק שגלוי לכולם.
    • מוסיפים ExoPlayer.setPreferredAudioDevice כדי להגדיר את מכשיר פלט האודיו המועדף (‎#135).
    • שינוי השם של androidx.media3.exoplayer.audio.AudioProcessor ל androidx.media3.common.audio.AudioProcessor.
    • מיפוי של אודיו עם 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל הגרסאות של Android (#10701).
  • מטא-נתונים:
    • אפשר להגדיר עכשיו את MetadataRenderer כך שיציג מטא נתונים ברגע שהם זמינים. יוצרים מכונה עם MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) כדי לציין אם הרכיב לעיבוד התוכן יוציא מטא-נתונים מוקדמים או יסנכרן אותם עם מיקום הנגן.
  • DRM:
    • פתרון לבעיה ביישום ClearKey ב-Android 13 שמחזיר כתובת URL של רישיון לא ריקה אבל לא תקינה.
    • פתרון השגיאה setMediaDrmSession failed: session not opened כשעוברים בין תוכניות DRM בפלייליסט (למשל מ-Widevine ל-ClearKey).
  • טקסט:
    • ‫CEA-608: מוודאים שהפקודות להחלפת שירות בשדה 2 מטופלות בצורה נכונה (#10666).
  • ‫DASH:
    • תנתח את EventStream.presentationTimeOffset מהמניפסטים (#10460).
  • UI:
    • הגדרת ההחלפות הנוכחיות של הנגן כהגדרות קבועות מראש ב-TrackSelectionDialogBuilder (#10429).
  • סשן:
    • מוודאים שהפקודות תמיד מופעלות בסדר הנכון, גם אם חלקן דורשות פתרון אסינכרוני (#85).
    • מוסיפים DefaultMediaNotificationProvider.Builder כדי ליצור מופעים של DefaultMediaNotificationProvider. הכלי לבניית התראות יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראות ואת שם ערוץ ההתראות שמשמשים את הספק. בנוסף, מוסיפים את method DefaultMediaNotificationProvider.setSmallIcon(int) כדי להגדיר את הסמל הקטן של ההתראות. (#104).
    • מוודאים שהפקודות שנשלחו לפני MediaController.release() לא נפסלות (מס' 99).
    • SimpleBitmapLoader יכול לטעון מפת סיביות מכתובות URI של file:// (מס' 108).
    • תוקנה טענה שמונעת מ-MediaController לדלג על מודעה בתקופה מסוימת (#122).
    • כשההפעלה מסתיימת, MediaSessionService נעצר מהחזית ומוצגת התראה להפעלה מחדש של פריט המדיה האחרון שהופעל (‎#112).
    • אל תפעילו שירות שפועל בחזית עם intent בהמתנה להשהיה (‎#167).
    • הסתרה ידנית של ה'תג' שמשויך להתראה שנוצרה על ידי DefaultNotificationProvider ב-API 26 וב-API 27 (התג מוסתר אוטומטית ב-API 28 ומעלה) (מס' 131).
    • תוקן באג שבו חיבור שני של Binder מ-MediaSession מדור קודם ל-MediaController של Media3 גורם ל-IllegalStateExceptions (#49).
  • RTSP:
    • הוספת טיפול בחבילות מקוטעות של H263 (#119).
    • הוספת תמיכה ב-MP4A-LATM (#162).
  • IMA:
    • הוספת פסק זמן לטעינת פרטי המודעה כדי לטפל במקרים שבהם IMA SDK נתקע בזמן טעינת מודעה (‎#10510).
    • מניעת דילוג על מודעות באמצע הסרטון כשמבצעים חיפוש לנקודת הסיום של התוכן (#10685).
    • חישוב נכון של משך החלון בשידורים חיים עם מודעות שמוכנסות בצד השרת, לדוגמה IMA DAI (#10764).
  • תוסף FFmpeg:
    • נוספו דגלים חדשים שנדרשים לקישור ספריות FFmpeg ל-NDK בגרסה 23.1.7779620 ומעלה (#9933).
  • תוסף AV1:
    • עדכון גרסת CMake כדי למנוע בעיות תאימות עם הגרסאות האחרונות של Android Studio (#9933).
  • תוסף Cast:
    • צריך להטמיע את getDeviceInfo() כדי לזהות את CastPlayer כשמבצעים פעולות של שליטה בהפעלה באמצעות MediaController (מס' 142).
  • ‫Transformer:
    • הוספת טיימר watchdog של muxer כדי לזהות מקרים שבהם יצירת דגימת פלט איטית מדי.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Transformer.Builder.setOutputMimeType(String). התכונה הזו הוסרה. סוג ה-MIME תמיד יהיה MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.

גרסה ‎1.0.0-beta02

‫21 ביולי 2022

androidx.media3:media3-*:1.0.0-beta02 מופץ. גרסה ‎1.0.0-beta02 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.1.

  • ספריית ליבה:
    • מוודאים ששינוי הערך של ShuffleOrder ל-ExoPlayer.setShuffleOrder יוביל לשיחה עם Player.Listener#onTimelineChanged עם הערך reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (‎#9889).
    • במקרה של מדיה פרוגרסיבית, רק טראקים נבחרים נכללים במיקום במאגר (‎#10361).
    • אפשר להשתמש ב-logger מותאם אישית לכל פלט היומן של ExoPlayer (#9752).
    • תוקנה ההטמעה של setDataSourceFactory ב-DefaultMediaSourceFactory, שלא פעלה במקרים מסוימים (#116).
  • אמצעי חילוץ:
    • תוקן ניתוח של קבוצות תמונות הפניה לטווח קצר H265 (#10316).
    • תיקון ניתוח של קצבי העברת נתונים מתיבות esds (#10381).
  • ‫DASH:
    • ניתוח כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
  • UI:
    • מוודאים ש-TalkBack מכריז על אפשרות המהירות שמופעלת כרגע בתפריט אמצעי הבקרה של ההפעלה (#10298).
  • RTSP:
    • הוספת טיפול בחבילות מקוטעות של VP8 (#110).
  • תוסף Leanback:
    • האזנה לשינויים ב-playWhenReady ב-LeanbackAdapter (10420).
  • הפעלת Cast:
    • משתמשים ב-MediaItem שהועבר לשיטות של הפלייליסט בתור Window.mediaItem ב-CastTimeline (#25,‏ #8212).
    • תמיכה ב-Player.getMetadata() וב-Listener.onMediaMetadataChanged() עם CastPlayer (מס' 25).

גרסה ‎1.0.0-beta01

‫16 ביוני 2022

androidx.media3:media3-*:1.0.0-beta01 מופץ. גרסה ‎1.0.0-beta01 כוללת את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.18.0.

  • ספריית ליבה:
    • הפעלת התמיכה באבחון של פלטפורמת Android דרך MediaMetricsManager. ‫ExoPlayer יעביר אירועי הפעלה ונתוני ביצועים לפלטפורמה, מה שיעזור לספק מידע על ביצועי המערכת ומידע על תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את שיתוף דפוסי שימוש וביצועים. אפליקציות יכולות לבחור שלא לתרום לנתוני האבחון של הפלטפורמה עבור ExoPlayer באמצעות ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • תוקן באג שגורם לאיפוס של רצועות לעיתים קרובות מדי כשמשתמשים ב-MergingMediaSource, למשל כשמטעינים כתוביות מהצד ומשנים את הכתוביות שנבחרו באמצע ההפעלה (מס' 10248).
    • הפסקנו לזהות את סוג הרשת 5G-NSA ב-API 29 וב-API 30. ההשמעה תתבצע ברשת 4G.
    • ללא הרשאה להעברת null אל MediaSource.Factory.setDrmSessionManagerProvider ואל MediaSource.Factory.setLoadErrorHandlingPolicy. אפשר להעביר באופן מפורש מקרים של DefaultDrmSessionManagerProvider ושל DefaultLoadErrorHandlingPolicy אם נדרש.
    • מוסיפים MediaItem.RequestMetadata כדי לייצג מטא-נתונים שנדרשים להפעלת מדיה כשלא ידוע מהו LocalConfiguration המדויק. צריך גם להסיר את MediaMetadata.mediaUrl כי הוא כלול עכשיו ב-RequestMetadata.
    • מוסיפים Player.Command.COMMAND_SET_MEDIA_ITEM כדי לאפשר לשחקנים להגדיר פריט בודד.
  • בחירת טראק:
    • השטחת הכיתה 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 chunkless ‏(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.
  • אמצעי חילוץ:
    • הוספת תמיכה ב-AVI (#2092).
    • ‫Matroska: ניתוח של DiscardPadding לטראקים של Opus.
    • ‫MP4: ניתוח קצבי העברת נתונים מתיבות esds.
    • ‫Ogg: אפשר להשתמש במזהה Opus כפול ובכותרות של הערות (‎#10038).
  • UI:
    • תיקון של העברת אירועים אל OnClickListeners שהוגדרו ב-PlayerView במקרה ש-useController=false (#9605). בנוסף, תוקן הדיווח של אירועים אל OnLongClickListener בכל הגדרות התצוגה.
    • תוקנה בעיה שבה רצף של אירועי מגע שיוצאים מגבולות PlayerView לפני ACTION_UP נחשב בטעות לקליק (#9861).
    • תיקון בעיית נגישות PlayerView שבה הקשה על המסך עשויה להפעיל או להשהות את ההפעלה במקום להסתיר את אמצעי הבקרה (#8627).
    • שכתוב של TrackSelectionView ושל TrackSelectionDialogBuilder כך שיפעלו עם הממשק של Player ולא עם ExoPlayer. כך אפשר להשתמש בתצוגות עם הטמעות אחרות של Player, וההסתמכות על מודול ExoPlayer מוסרת ממודול ממשק המשתמש. זהו שינוי שעלול לשבור את התאימות לאחור.
    • לא להציג כתוביות מאולצות בPlayerViewבורר הכתוביות, ולשמור על כתוביות מאולצות מתאימות אם נבחרה האפשרות 'ללא' (#9432).
  • ‫DASH:
    • ניתוח מספר הערוצים מרכיבי DTS AudioChannelConfiguration. העדכון הזה מפעיל מחדש את מעבר האודיו לשידורי DTS (#10159).
    • ללא הרשאה להעברת null אל DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. אם נדרש, אפשר להעביר מקרים של DefaultCompositeSequenceableLoaderFactory באופן מפורש.
  • ‫HLS:
    • אם מאפיין ה-CODECS של רשימת ההשמעה לא מכיל את קודק האודיו, המערכת תעבור להכנה של נתחים (‎#10065).
    • ללא הרשאה להעברת null אל HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory וגם אל HlsMediaSource.Factory.setPlaylistTrackerFactory. אם נדרש, אפשר להעביר באופן מפורש מקרים של DefaultCompositeSequenceableLoaderFactory, ‏ DefaultHlsPlaylistParserFactory או הפניה אל DefaultHlsPlaylistTracker.FACTORY.
  • סטרימינג חלק:
    • ללא הרשאה להעברת null אל SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. במקרה הצורך, אפשר להעביר באופן מפורש מופעים של DefaultCompositeSequenceableLoaderFactory.
  • RTSP:
    • הוספת קורא RTP ל-H263 (‎#63).
    • הוספת קורא RTP ל-MPEG4 (מס' 35).
    • הוספת קורא RTP ל-HEVC (‎#36).
    • הוספת קורא RTP ל-AMR. בשלב הזה יש תמיכה רק בזרמי AMR לא משולבים עם ערוץ מונו. אין תמיכה במטען ייעודי (payload) של AMR RTP מורכב. (#46)
    • הוספת קורא RTP ל-VP8 (#47).
    • הוספת קורא RTP ל-WAV (#56).
    • תיקון כותרת אימות בסיסי של RTSP. (#9544).
    • הפסקנו לבדוק שדות חובה של SDP כי ExoPlayer לא צריך אותם (#10049).
    • Throw checked exception when parsing RTSP timing (#10165).
    • הוספת קורא RTP ל-VP9 (‎#47).
    • נוסף קורא RTP ל-OPUS (#53).
  • מקורות נתונים:
    • שינוי השם של DummyDataSource ל-PlaceholderDataSource.
    • פתרון עקיף לטיפול בהפסקות ב-OkHttp.
  • סשן:
    • מחליפים את MediaSession.MediaItemFiller ב-MediaSession.Callback.onAddMediaItems כדי לאפשר פתרון אסינכרוני של בקשות.
    • שיטות תמיכה setMediaItems(s) כאשר MediaController מתחברות לסשן מדיה מדור קודם.
    • הסרה של MediaController.setMediaUri ושל MediaSession.Callback.onSetMediaUri. אפשר להשיג את אותה פונקציונליות באמצעות MediaController.setMediaItem ו-MediaSession.Callback.onAddMediaItems.
    • העברת שיחות בגרסה הקודמת של MediaController להפעלת מדיה אל MediaSession.Callback.onAddMediaItems במקום אל onSetMediaUri.
    • מוסיפים את MediaNotification.Provider ואת DefaultMediaNotificationProvider כדי להתאים אישית את ההתראה.
    • מוסיפים את BitmapLoader ו-SimpleBitmapLoader כדי להוריד תמונות של יצירות אומנות.
    • מוסיפים MediaSession.setCustomLayout() כדי לספק תאימות לאחור עם הסשן הקודם.
    • כדי לספק תאימות תכונות לגרסה הקודמת של הסשן, צריך להוסיף את MediaSession.setSessionExtras().
    • שינוי השם של MediaSession.MediaSessionCallback לMediaSession.Callback, של MediaLibrarySession.MediaLibrarySessionCallback לMediaLibrarySession.Callback ושל MediaSession.Builder.setSessionCallback לsetCallback.
    • Fix NPE in MediaControllerImplLegacy (#59).
    • עדכון פרטי המיקום של הסשן בציר הזמן שינוי(#51).
    • תוקנה שגיאת NPE ב-MediaControllerImplBase אחרי שחרור בקר (‎#74).
  • הפעלת מודעה / IMA:
    • הפחתת קצב הסקרים של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, כדי להתאים להמלצות של המועצה לדירוג מדיה (MRC).
  • תוסף FFmpeg:
    • כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio ייכשל, צריך לעדכן את גרסת CMake ל-3.21.0+ (מס' 9933).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). במקום זאת, אתם צריכים להשתמש ב-Player.Listener.onTracksChanged(Tracks).
    • הסרה של Player.getCurrentTrackGroups ושל Player.getCurrentTrackSelections. במקום זאת, אתם צריכים להשתמש ב-Player.getCurrentTracks. אפשר גם להמשיך להשתמש ב-ExoPlayer.getCurrentTrackGroups וב-ExoPlayer.getCurrentTrackSelections, אבל השיטות האלה עדיין מוצאות משימוש.
    • הסרה של הקבועים DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT ו-DEFAULT_TRACK_SELECTOR_PARAMETERS. במקומה, כדאי להשתמש ב-getDefaultTrackSelectorParameters(Context) כשזה אפשרי, וב-DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT בכל מקרה אחר.
    • הסרת בנאי DefaultTrackSelector(ExoTrackSelection.Factory). במקומה צריך להשתמש במדיניות DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • הסרה של Transformer.Builder.setContext. במקום זאת, צריך להעביר את Context אל הקונסטרוקטור Transformer.Builder.

גרסה ‎1.0.0-alpha03

‫14 במרץ 2022

androidx.media3:media3-*:1.0.0-alpha03 מופץ. גרסה ‎1.0.0-alpha03 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.17.1.

  • אודיו:
    • תיקון שגיאה בבדיקת יכולות האודיו של Dolby Atmos‏ (E-AC3-JOC) ב-HLS.
  • אמצעי חילוץ:
    • ‫FMP4: תוקנה בעיה שבה מטא-נתונים של דוגמאות emsg יכלו להיות מופקים בסדר שגוי לסטרימינג שמכיל אטומי emsg בגרסאות v0 ו-v1 (#9996).
  • טקסט:
    • צריך לתקן את האינטראקציה בין SingleSampleMediaSource.Factory.setTrackId לבין MediaItem.SubtitleConfiguration.Builder.setId כדי לתת עדיפות לשדה SubtitleConfiguration ולחזור לערך Factory אם הוא לא מוגדר (#10016).
  • הפעלת המודעה:
    • תיקון של חוסרים באודיו בין תקופות של מודעות בשידורים חיים בפורמט HLS SSAI.

גרסה ‎1.0.0-alpha02

‫2 במרץ 2022

androidx.media3:media3-*:1.0.0-alpha02 מופץ. גרסה ‎1.0.0-alpha02 מכילה את השמירות האלה.

הגרסה הזו תואמת לגרסה ExoPlayer 2.17.0.

  • ספריית ליבה:
    • מוסיפים שיטה מוגנת DefaultRenderersFactory.getCodecAdapterFactory() כדי שמחלקות משנה של DefaultRenderersFactory שמבטלות את buildVideoRenderers() או את buildAudioRenderers() יוכלו לגשת לפקטורי (factory) של מתאם קודק ולהעביר אותו למופעים של MediaCodecRenderer שהן יוצרות.
    • העברת שדות הכותרת של ICY‏ name ו-genre אל MediaMetadata.station ו-MediaMetadata.genre בהתאמה, כדי שהם יגיעו לאפליקציה דרך Player.Listener.onMediaMetadataChanged() (#9677).
    • הסרת מפתחות null מ-DefaultHttpDataSource#getResponseHeaders.
    • השהיה וניסיון חוזר אם יצירת מופע של MediaCodec נכשלת. התיקון הזה נועד לפתור בעיה שמתרחשת בחלק מהמכשירים כשמעבירים משטח מ-codec מאובטח ל-codec אחר (#8696).
    • מוסיפים את MediaCodecAdapter.getMetrics() כדי לאפשר למשתמשים לקבל נתוני מדדים מ-MediaCodec. (#9766).
    • תיקון של פתרון תלות ב-Maven (#8353).
    • השבתה של התאמת מהירות אוטומטית לשידורים חיים שאין להם תכונות של השהיה נמוכה או הגדרה של בקשת משתמש להגדרת המהירות (#9329).
    • שינוי השם של DecoderCounters#inputBufferCount ל-queuedInputBufferCount.
    • הגדרת SimpleExoPlayer.renderers כפרטי. אפשר לגשת לרכיבי ה-Renderer דרך ExoPlayer.getRenderer.
    • עדכנו חלק מהערכים הקבועים של AnalyticsListener.EventFlags כך שיתאימו לערכים ב-Player.EventFlags.
    • פיצול AnalyticsCollector לממשק ולהטמעה שמוגדרת כברירת מחדל, כדי לאפשר ל-R8 להסיר אותו אם אפליקציה לא צריכה אותו.
  • בחירת טראק:
    • תמיכה בדגלים של תפקידי וידאו מועדפים בבחירת טראקים (#9402).
    • עדכון הלוגיקה של בחירת רצועות וידאו כך שתתחשב בסוגי MIME מועדפים ובדגלי תפקידים כשבוחרים כמה רצועות וידאו להתאמה (#9519).
    • עדכון הלוגיקה של בחירת טראק אודיו ווידאו כך שייבחרו רק פורמטים לבחירות אדפטיביות עם אותה רמה של תמיכה במפענח ובחומרה (‎#9565).
    • עדכון הלוגיקה לבחירת רצועת וידאו כדי להעדיף קודקים יעילים יותר אם כמה קודקים נתמכים על ידי מפענחים ראשיים עם שיפור מהירות באמצעות חומרה (#4835).
    • העדפות תוכן אודיו (לדוגמה, טראק האודיו 'ברירת מחדל' או טראק שתואם לשפת המקום במערכת) עדיפות על אילוצים טכניים לבחירת טראק (לדוגמה, סוג MIME מועדף או מספר ערוצים מקסימלי).
    • תוקנה בעיה בבחירת טראקים שבה ביטול של קבוצת טראקים אחת לא השבית קבוצות אחרות מאותו סוג (#9675).
    • תוקנה בעיה בבחירת רצועות שבה לא מוחל בצורה נכונה שילוב של החלפות של רצועות לא ריקות וריקות (#9649).
    • איסור על כפילויות של TrackGroup בתוך TrackGroupArray. TrackGroupתמיד אפשר להבחין בין TrackGroupעל ידי הגדרת id בבונה TrackGroup. הבעיה הזו גרמה לקריסה כשממשיכים את ההפעלה אחרי שהאפליקציה עברה לרקע עם החלפה פעילה של רצועת שמע (#9718).
    • משנים את הלוגיקה ב-AdaptiveTrackSelection כדי לאפשר שיפור באיכות אם יש מספיק רוחב פס ברשת, גם אם הנגינה קרובה מאוד לקצה השידור בשידור חי (#9784).
  • סרטון:
    • תיקון הלוגיקה של חזרה למפענח הקודם ב-Dolby Vision כדי להשתמש במפענח תואם של H264/H265 אם צריך.
  • אודיו:
    • תיקון הלוגיקה של חזרה למפענח במקרה של כשל ב-Dolby Atmos‏ (E-AC3-JOC) כדי להשתמש במפענח E-AC3 תואם אם צריך.
    • שינוי בממשקי ה-API של AudioCapabilities כך שנדרש להעביר במפורש AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES במקום null.
    • אפשר להתאים אישית את החישוב של שטח האחסון הזמני AudioTrack על ידי הוספת AudioTrackBufferSizeProvider ל-DefaultAudioSink. (#8891).
    • מנסים שוב ליצור את AudioTrack אם שטח האחסון הזמני שנדרש היה גדול מ-1MB. (#9712).
  • אמצעי חילוץ:
    • ‫WAV: נוספה תמיכה בזרמי RF64‏ (‎#9543).
    • תוקן ניתוח שגוי של יחידות H.265 SPS NAL (#9719).
    • ניתוח של תגובות Vorbis (כולל METADATA_BLOCK_PICTURE) בקובצי Ogg Opus ובקובצי Ogg Vorbis.
  • טקסט:
    • מוסיפים שדה MediaItem.SubtitleConfiguration.id שמועבר לשדה Format.id של רצועת הכתוביות שנוצרה מההגדרה (#9673).
    • הוספת תמיכה בסיסית בכתוביות WebVTT במאגרי Matroska (#9886).
    • מונעים מקובץ Cea708Decoder לקרוא יותר מהגודל המוצהר של בלוק שירות.
  • DRM:
    • הסרת playbackLooper מהחשבון DrmSessionManager.(pre)acquireSession. כשמשתמשים ב-DrmSessionManager באפליקציה ב-MediaSource מותאם אישית, צריך להעביר את playbackLooper ל-DrmSessionManager.setPlayer במקום.
  • הפעלת מודעה / IMA:
    • הוספת תמיכה בהטמעת מודעות דינמיות (DAI) ב-IMA (#8213).
    • הוספת שיטה ל-AdPlaybackState כדי לאפשר איפוס של קבוצת מודעות כך שאפשר יהיה להפעיל אותה שוב (#9615).
    • אכיפת מהירות הפעלה של 1.0 במהלך הפעלת מודעה (#9018).
    • תוקנה בעיה שבה קבוצת מודעות שלא נטענה גרמה לאיפוס מיידי של ההפעלה (#9929).
  • UI:
    • תוקנה בעיה שקשורה לצבע של המספרים בלחצני StyledPlayerView ההרצה אחורה וההרצה קדימה כשמשתמשים בעיצובים מסוימים (#9765).
    • תרגום נכון של מחרוזות מהירות ההפעלה (#9811).
  • ‫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:
    • הוספת API של לקוח כדי לשנות את SocketFactory שמשמש לכל חיבור לשרת (#9606).
    • עדיפות לשיטת האימות DIGEST על פני BASIC אם שתיהן קיימות (#9800).
    • טיפול במקרים שבהם התזמון של טראק RTSP לא זמין (#9775).
    • התעלמות מערכים לא תקינים של כותרת RTP-Info‏ (#9619).
  • ‫Transformer:
    • הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
    • TransformationException משמש עכשיו לתיאור שגיאות שמתרחשות במהלך טרנספורמציה.
    • מוסיפים TransformationRequest כדי לציין את אפשרויות הטרנספורמציה.
    • אפשר לרשום מספר מאזינים.
    • תוקן באג שגרם לכך שטרנספורמר נתקע כשפלט הקודק נקרא באופן חלקי.
    • תיקון NPE פוטנציאלי ב-Transformer.getProgress כששחרור ה-muxer גורם לשגיאה.
    • הוספנו אפליקציה לדוגמה להחלת טרנספורמציות.
  • תוסף MediaSession:
    • כברירת מחדל, MediaSessionConnector מנקה עכשיו את הפלייליסט כשמפסיקים את ההשמעה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להתקשר אל setClearMediaItemsOnStop(false) במחבר.
  • תוסף Cast:
    • תוקן באג שמנע מ-CastPlayer להתקשר אל onIsPlayingChanged בצורה תקינה (#9792).
    • תמיכה במטא-נתונים של אודיו, כולל גרפיקה, באמצעות DefaultMediaItemConverter (#9663).
  • תוסף FFmpeg:
    • ‫Make build_ffmpeg.sh תלוי בכלי bin של LLVM במקום בכלי GNU (מס' 9933).
  • תאימות ל-Android 12:
    • משדרגים את תוסף Cast כך שיהיה תלוי ב-com.google.android.gms:play-services-cast-framework:20.1.0. גרסאות קודמות של play-services-cast-framework לא תואמות לאפליקציות שמטרגטות את Android 12, והן יקרסו עם IllegalArgumentException כשיוצרים PendingIntents (#9528).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Player.EventListener. במקומה צריך להשתמש במדיניות Player.Listener.
    • מסירים את MediaSourceFactory#setDrmSessionManager,‏ MediaSourceFactory#setDrmHttpDataSourceFactory וMediaSourceFactory#setDrmUserAgent. במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#setDrmSessionManagerProvider.
    • הסרה של MediaSourceFactory#setStreamKeys. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setStreamKeys.
    • הסרה של MediaSourceFactory#createMediaSource(Uri). במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#createMediaSource(MediaItem).
    • הסרת setTag מהחשבון DashMediaSource, מהחשבון HlsMediaSource ומהחשבון SsMediaSource. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag.
    • הסרה של DashMediaSource#setLivePresentationDelayMs(long, boolean). משתמשים ב-MediaItem.Builder#setLiveConfiguration וב-MediaItem.LiveConfiguration.Builder#setTargetOffsetMs כדי לבטל את המניפסט, או ב-DashMediaSource#setFallbackTargetLiveOffsetMs כדי לספק ערך ברירת מחדל.
    • הסרה של (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. אי אפשר יותר לבטל את ההצטרפות לאכיפה של השרשור.
    • הסרה של ActionFile ושל ActionFileUpgradeUtil. כדי להשתמש ב-ActionFileUpgradeUtil כדי למזג קובצי פעולה מגרסאות קודמות ל-DefaultDownloadIndex, צריך להשתמש ב-ExoPlayer 2.16.1 או בגרסה קודמת.
    • הסרה של ProgressiveMediaSource#setExtractorsFactory. במקום זאת, צריך להשתמש בבונה ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • הסרה של ProgressiveMediaSource.Factory#setTag ושל ProgressiveMediaSource.Factory#setCustomCacheKey. במקום זאת, צריך להשתמש ב-MediaItem.Builder#setTag וב-MediaItem.Builder#setCustomCacheKey.
    • מסירים את הקונסטרוקטורים DefaultRenderersFactory(Context, @ExtensionRendererMode int) ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). במקום זאת, צריך להשתמש בבונה DefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererMode וב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • הסרת כל הבונה CronetDataSource הציבורי. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
  • משנים את IntDefs ל-@Target(TYPE_USE) בלבד. יכול להיות שהדבר ישבור את הקומפילציה של השימושים ב-Kotlin, ואפשר לתקן את זה על ידי העברת ההערה לציון הסוג (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (בתוכנית com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (בחבילה com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

גרסה ‎1.0.0-alpha01

‫27 באוקטובר 2021

androidx.media3:media3-*:1.0.0-alpha01 מופץ. גרסה 1.0.0-alpha01 מכילה את השמירות האלה.

תכונות חדשות

‫Media3 הוא המקום החדש לספריות תמיכה במדיה, כולל ExoPlayer. גרסת האלפא הראשונה מכילה הטמעות מוקדמות ופונקציונליות של ספריות להטמעה של תרחישי שימוש במדיה, כולל:

  • ‫ExoPlayer, נגן מדיה ברמת האפליקציה ל-Android שקל להתאים אישית ולהרחיב.
  • פונקציונליות של סשן מדיה, לחשיפה ולשליטה בהפעלות. מודול הסשן החדש הזה משתמש באותו ממשק Player כמו ExoPlayer.
  • רכיבי ממשק משתמש לבניית ממשקי משתמש להפעלת מדיה.
  • מודולים שעוטפים פונקציונליות בספריות אחרות לשימוש עם ExoPlayer, לדוגמה, הוספת מודעות באמצעות IMA SDK.

מידע נוסף זמין בפרויקט Media3 ב-GitHub.

בעבר, ExoPlayer התארח בפרויקט נפרד של ExoPlayer ב-GitHub. ב-Media3, שם החבילה הוא androidx.media3.exoplayer. אנחנו מתכננים להמשיך לתחזק ולפרסם את פרויקט ExoPlayer ב-GitHub למשך זמן מה, כדי לתת לאפליקציות זמן לעבור ל-Media3. ל-Media3 יש תחליפים לכל המודולים של ExoPlayer, חוץ מהתוספים media2 ו-mediasession מהדור הקודם, שהוחלפו במודול media3-session החדש. השילוב הזה מאפשר אינטגרציה ישירה בין נגנים לבין סשנים של מדיה, בלי צורך להשתמש במתאם או במחבר.