Media3

ספריות תמיכה לתרחישי שימוש במדיה.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫21 באוקטובר 2026 1.11.1 - - ‎1.12.0-alpha01

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

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

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

מגניב

dependencies {
    def media3_version = "1.11.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs using Jetpack Compose
    implementation "androidx.media3:media3-ui-compose:$media3_version"
    // For building media playback UIs using Jetpack Compose with Material Design 3
    implementation "androidx.media3:media3-ui-compose-material3:$media3_version"
    // For building media playback UIs using Views
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For inspecting media files
    implementation "androidx.media3:media3-inspector:$media3_version"
    // For extracting and processing video frames
    implementation "androidx.media3:media3-inspector-frame:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"
    // For applying Lottie effects on video frames
    implementation "androidx.media3:media3-effect-lottie:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
    // Common Kotlin-specific functionality
    implementation "androidx.media3:media3-common-ktx:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.11.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs using Compose
    implementation("androidx.media3:media3-ui-compose:$media3_version")
    // For building media playback UIs using Views
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs using Jetpack Compose
    implementation("androidx.media3:media3-ui-compose:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For inspecting media files
    implementation("androidx.media3:media3-inspector:$media3_version")
    // For extracting and processing video frames
    implementation("androidx.media3:media3-inspector-frame:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")
    // For applying Lottie effects on video frames
    implementation("androidx.media3:media3-effect-lottie:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
    // Common Kotlin-specific functionality
    implementation("androidx.media3:media3-common-ktx:$media3_version")
}

מידע נוסף זמין במאמר הוספת יחסי תלות ב-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. אתם יכולים להשתמש בכלי למעקב אחר בעיות ב-Media3 כדי למצוא תשובות לשאלות, בעיות ידועות ובקשות להוספת תכונות, וגם כדי לדווח על בעיות חדשות.

גרסה 1.12.0

גרסה ‎1.12.0-alpha01

‫21 באוקטובר 2026

גרסה 1.12.0-alpha01 מכילה את ה-commits הבאים.

  • ספרייה משותפת:
    • מוסיפים את C.COLOR_SPACE_DISPLAY_P3 ותומכים במרחב הצבעים Display P3 במיפוי הצבעים של ISO ב-MediaFormatUtil וב-ColorInfo.
    • הוספת מרשם Flags מרכזי לניהול דגלי תכונות ניסיוניות והשקה מדורגת (Flags.setCanaryModeEnabled). העברת הרבה שיטות @ExperimentalApi קיימות לשימוש ב-API החדש של הדגלים.
    • מוסיפים את MediaMetadata.playlistId, MediaMetadata.Builder.setPlaylistId(String), MediaMetadata.categories ו- MediaMetadata.Builder.setCategories(List<String>).
    • מחליפים את androidx.media3.common.util.NonNullApi ב-JSpecify org.jspecify.annotations.NullMarked.
  • ‫ExoPlayer:
    • תוקנה בעיה שבה הפעלה של DASH עם כמה תקופות נתקעת כשהחלק הראשון של התקופה הבאה לא נטען (#3396).
    • דיווח על wasCanceled = true ב-AnalyticsListener.onLoadError וב-MediaSourceEventListener.onLoadError כשמספר הניסיונות החוזרים לטעינה נגמר.
    • תמיכה ברישום של כמה מופעים של VideoFrameMetadataListener באמצעות ExoPlayer.addVideoFrameMetadataListener ו-ExoPlayer.removeVideoFrameMetadataListener, והוצאה משימוש של ExoPlayer.setVideoFrameMetadataListener ו-ExoPlayer.clearVideoFrameMetadataListener.
    • כדי להוסיף תמיכה במודעות בתוכן עם כמה תקופות (למשל, DASH), צריך לפצל ולקזז את AdPlaybackState לכל תקופה.
    • תוקן מרוץ תהליכים ב-PreCacheHelper שבו ביטול של בקשת הכנה מתמשכת עדיין יכול היה להתחיל הורדות ברקע.
    • הגבלת setLoadOnlySelectedTracks(true) ב-ProgressiveMediaSource וב-DefaultMediaSourceFactory כדי לסנן רק טראקים של וידאו ותמונות שלא נבחרו. טראקים של אודיו וטקסט תמיד נטענים כדי לאפשר מעבר חלק בין טראקים בלי טעינה מחדש.
    • הפעלה של setLoadOnlySelectedTracks(true) כברירת מחדל ב-ProgressiveMediaSource וב-DefaultMediaSourceFactory. כך נחסך זיכרון, וחישובי הקצאת המאגר של DefaultLoadControl פועלים בצורה מדויקת יותר כשלא כל הטראקים נבחרים. שימו לב: אם תפעילו טראקים של וידאו או תמונות שלא נבחרו באמצע ההפעלה, יכול להיות שזה יגרום לטעינה נוספת.
    • תוקנה בעיה שבה Player.getCurrentPosition() יכול להחזיר ערכים לא עדכניים (מתעדכן רק כמה פעמים בשנייה) כשמופעל תזמון דינמי (#3286).
    • תוקנה בעיה שבה ירידה או איפוס לא צפויים במיקום של ראש ההפעלה של AudioTrack עלולים להיחשב בטעות כגלישת מספר שלם, מה שגורם להשהיית ההפעלה במהלך אגירת נתונים (#3407).
    • הסרת הניסוי DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean).
    • נמנעות הפעלות מחדש מיותרות של רכיב הרינדור ותקלות כשחוזרים ממודעות מעברון או ממודעות לתוכן שנחתך בסוף (#3371).
    • תוקנה בעיה שבה שגיאת עיבוד בפריט הבא בפלייליסט עלולה להפריע להפעלה הנוכחית לפני הזמן כשהאפשרות Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION מופעלת.
    • תיקון של NullPointerException שיכול להתרחש אם ExoPlayer העביר את ה-renderers לתקופת מדיה לא מוכנה כש-Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION מופעל.
    • תוקנה בעיה שבה פריימים של סרטונים עלולים לדלג או להימחק באופן בלתי צפוי במהלך תזמון דינמי כש-Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS מופעל.
    • תיקון ArrayIndexOutOfBoundsException במאזינים לניתוח נתונים כשעוצרים את ההפעלה במהלך מודעה בשידור חי (#3423).
    • תוקנה בעיה שבה PreloadMediaSource עלול לפרסם באופן בלתי צפוי אירוע טעינה מראש כשלא מתבצעת קריאה ל-preload() (#3408).
    • תוקנה בעיה שבה המערכת התעלמה מהערך של Format.subsampleOffsetUs בטראקים של מטא-נתונים, מה שגרם לחותמות זמן שגויות של הפעלה בפקודות החיבור המפוענחות של SCTE-35‏ (#3413).
    • תיקון דליפת זיכרון ב-PreloadMediaSource וב-DefaultPreloadManager כשמתבצעת קריאה ל-preload() כמה פעמים באותו מקור (#3445).
    • תיקון של NullPointerException כשמשחררים את AdsMediaSource בזמן שרענון ציר הזמן של התוכן בהמתנה (#3442).
    • תוקנה בעיה שבה הפעלה של מדיה פרוגרסיבית יכולה לקפוץ למיקום הלא נכון כשניסיון טעינה אחרי חיפוש (או כשמתחילים הפעלה במיקום שאינו אפס) נכשל ובוצע ניסיון חוזר (#3440).
    • הוספת פתרון עקיף למפענח H.264 של Xiaomi TV Stick 4K (MiTV-AYFR0)‎ שקופא בשינויי רזולוציה חלקים (#3457).
    • תוקנה בעיה של NullPointerException ב-SteeringManifestTracker כשמעקב המודעות נעצר לפני שהושלמה טעינה שפורסמה או לפני שהופעל קריאה חוזרת (callback) של שגיאה (#3443).
    • תמיכה בהפעלה של מטא-נתונים מתוזמנים של HAGC‏ (ST 2094-50) מטראקים של מטא-נתונים בתיבות mebx בקובצי MP4.
    • תוקנה בעיה שבה המערכת דילגה על תקופות מדיה שההכנה שלהן איטית בפלייליסט.
  • ‫CompositionPlayer:
    • תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות Composition.Builder.setVideoFrameAggregationParameters לתהליכי עבודה של הפעלה.
    • תיקון של דילוגים על פריימים בקומפוזיציות עם כמה רצפים שנגרמים בגלל חוסר התאמה בכימות או בעיגול של חותמות הזמן, על ידי בחירת הפריים עם חותמת הזמן הקרובה ביותר במהלך צבירת הפריימים. האפשרות הזו זמינה רק מ-API 29, כי היא דורשת שמירה של פריים נוסף אחד בתהליך לכל רצף וידאו.
  • ‫Transformer:
    • תמיכה בהגדרת קצב הפריימים של צבירת הפריימים של הסרטון באמצעות Composition.Builder.setVideoFrameAggregationParameters לתהליכי עבודה של ייצוא.
    • תיקון של דילוגים על פריימים בקומפוזיציות עם כמה רצפים שנגרמים בגלל חוסר התאמה בכימות או בעיגול של חותמות הזמן, על ידי בחירת הפריים עם חותמת הזמן הקרובה ביותר במהלך צבירת הפריימים. האפשרות הזו זמינה רק מ-API 29, כי היא דורשת שמירה של פריים נוסף אחד בתהליך לכל רצף וידאו.
    • לכבד את Transformer#setAudioMimeType(AUDIO_RAW) כשמשתמשים ב-AudioProcessors. לפני התיקון הזה, בקשה של MimeTypes.AUDIO_RAW והחלה של AudioProcessor הובילו לפלט דחוס.
  • בחירת טראק:
    • תוקנה בעיה שבה טראק SDR הועדף בטעות על פני טראק Dolby Vision נתמך במכשירים מסוימים (#3135).
  • מחלצים:
    • ‫Mp4Extractor: תיקון ניתוח התיבה dOps ל-Opus ב-MP4, שבו PreSkip, InputSampleRate ו-OutputGain לא הומרו מ-big-endian ל-little-endian, מה שגרם להשמטת ~299 אלפיות השנייה הראשונות של האודיו כשאין רשימת עריכה (#3431).
    • צריך להסיר את Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,‏ Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,‏ FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES ו-FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265, כי ניתוח התלות של דגימות בתוך GOP ב-H.264 וב-H.265 מופעל כברירת מחדל.
    • ‫Mp4Extractor: תיקון הניתוח של המטא-נתונים של המיקום מתיבות xyz שמכילות קואורדינטות של גובה כדי לאכלס את Mp4LocationData.
    • הוספת ExtractorUtil.getFramesPerEncodedSample כדי לחשב את מספר הפריימים של האודיו לכל דגימה בפורמטים של אודיו מקודד (#3367).
    • מוסיפים את FLAG_READ_XMP_METADATA ל-Mp4Extractor כדי לחלץ מטא-נתונים של XMP מתיבות UUID ברמה העליונה.
    • תיקון אודיו פגום בפורמטים AC-3, ‏ DTS ו-LPCM כשמפעילים תוכן MPEG-PS בסגנון DVD, על ידי הסרת הכותרת של תת-הסטרים private_stream_1 מכל חבילת PES ב-PsExtractor לפני שהמטען הייעודי (payload) מועבר לקורא האודיו (#3327).
    • תיקון כשל ב-FragmentedMp4Extractor כשתיבה בגרסה 1 של tfdt מקודדת ערך שלילי של baseMediaDecodeTime (#3412).
    • ‫MPEG-TS: תמיכה בניתוח הודעות SEI של סידור אריזת פריימים ב-H.264 וב-H.265 כדי לאכלס את Format.stereoMode (#3419).
    • ניתוח נתוני ההגדרות של Dolby Vision Profile 20 ודחיית פרופילים לא נתמכים של Dolby Vision במקום להפעיל אותם כ-HEVC רגיל עם צבעים שגויים (#3427).
    • ‫MP3: ביטול ההתאמה של המטא-נתונים של הריפוד וההשהיה של מקודד LAME/Xing כי היא לא תואמת להרבה מפענחי MP3 של MediaCodec (#3425).
    • ‫Matroska: תיקון של NullPointerException בזמן ניתוח של רכיבי ChapterAtom בתצוגת עץ (#3438).
    • ‫Ogg: תוקן באג שבו חבילה שהגודל שלה הוא כפולה של 255 בייטים ומסתיימת בגבול של דף מוזגה עם החבילה הבאה.
    • ‫MP4: ניתוח של mebx טראקים של מטא-נתונים מתוזמנים בתיבות ב-Mp4Extractor וב-FragmentedMp4Extractor. טראקים עם מפתח it35 נחשפים בתור MimeTypes.APPLICATION_ITUT_T35 (הפעלת הפעלה של HAGC). המערכת מתעלמת מטראקים אחרים של mebx, אלא אם מוגדר FLAG_EMIT_RAW_MEBX_DATA. במקרה כזה, כל הטראקים של mebx מופקים כ-MimeTypes.APPLICATION_MEBX גולמי.
    • ‫Ogg: תמיכה בחילוץ של ריפוד הסיום של Opus להפעלה ללא הפסקות (#2576), ותיקון חותמות הזמן של הדגימות אחרי דילוג לדף שמתחיל בחבילה שההפעלה שלה נמשכת.
    • ‫Ogg: תיקון שגיאות פענוח וקפיצות של כ-1 שניות בחותמת הזמן בסטרימינג משורשר של Ogg Opus, על ידי התעלמות ממזהה Opus באמצע הסטרימינג ומחבילות של כותרות הערות.
  • בודק:
    • תמיכה באחזור מטא-נתונים של XMP מקובצי MP4 באמצעות MetadataRetriever.
    • תמיכה בחילוץ טראקים של מטא-נתונים מתוזמנים בתיבות mebx ב-MediaExtractorCompat בתור MimeTypes.APPLICATION_MEBX.
  • מסגרת הבדיקה:
    • תיקון החיתוך של צבעי BT.2020 עם סולם צבעים רחב בתמונת הבסיס של SDR כשמחלצים פריימים של Ultra HDR באמצעות FrameExtractor. צבעים מחוץ למרחב הצבעים נדחסים עכשיו בצורה עדינה למרחב הצבעים sRGB במקום להיות מוגבלים.
  • אודיו:
    • הוספת פתרון עקיף למכשירים שמפעילים את android.media.AudioDeviceCallback בשרשור הלא נכון (#3386).
    • תיקון בעיות פוטנציאליות של שידורים חוזרים שנתקעים אחרי מעברים בין טראקים עם פריקה דחוסה.
    • פתרון זמני לבעיה בסטרימרים של Amazon Fire TV שבה אודיו AC-3 עלול לקפוא במהלך מעברים בין תקופות (#3448).
    • תמיכה בחיתוך ריפוד מקודד בסוף הסטרימינג להפעלה ללא הפסקות של Ogg ו-WebM/Matroska Opus (#2576).
    • תוקנו עדכוני הריפוד וההשהיה ללא רווחים של פריקה דינמית במהלך מעברים בין טראקים, כך שהם חלים על הטראק הנכנס ולא על הטראק שמופעל.
    • חיתוך של ריפוד הסיום של המקודד בשידורים בודדים ובשידור האחרון בפלייליסט, בנוסף למעברים ללא רווחים באמצע הפלייליסט (#2576).
    • הימנעות מהעתקות מיותרות של מאגר האודיו ב-TrimmingAudioProcessor אחרי שהסתיים החיתוך של השהיית המקודד בתחילת הסטרימינג, ואין צורך לחתוך את הריפוד בסוף הסטרימינג.
  • סרטון:
    • תוקן הדיווח על פריימים מאוחרים של סרטונים עם חותמות זמן זהות של פרסום, כך שהם מדווחים כפריימים שהושמטו במקום כפריימים שדילגו עליהם.
  • טקסט:
    • מוסיפים את MediaItem.SubtitleConfiguration.timeOffsetUs כדי להזיז את חותמות הזמן של הכתוביות שנטענו ממקורות אחרים ביחס למדיה. אפשר לשנות את ההיסט במהלך ההפעלה באמצעות Player.replaceMediaItem(int, MediaItem) בלי להפריע להפעלה (#1976).
    • ‫SubRip: הוספת תמיכה בהזרקת CharsetDetector אל DefaultSubtitleParserFactory כדי לזהות את קידוד התווים של כתוביות SubRip עצמאיות בלי סימן סדר בתים (#2247).
  • ההשפעה:
    • הטמעה של SoundSeparationAudioProcessor להפרדת מקורות אודיו באמצעות מודול StudioSound GMSCore.
  • מכשירי Muxer:
    • תיקון כתיבת תיבת dOps ל-Opus ב-Mp4Muxer וב-FragmentedMp4Muxer, שבהן PreSkip, ‏ InputSampleRate ו-OutputGain נכתבו ב-little-endian במקום ב-big-endian (#3431).
    • תמיכה בכתיבת גובה GPS ב-Mp4LocationData באמצעות Mp4Muxer.
    • מוסיפים את Muxer.Factory.create(ParcelFileDescriptor) כדי לאפשר ריבוב ישירות אל ParcelFileDescriptor.
    • כדי לספק חותמות זמן לפענוח מדיה, כותבים כברירת מחדל תיבת tfdt (Track Fragment Base Media Decode Time) בתיבות traf של קובצי MP4 מקוטעים.
    • תמיכה בכתיבת תיבות מאגר dec3 של E-AC-3 ו-E-AC-3 JOC ‏ (Dolby Atmos) ב-Mp4Muxer.
    • הוספת תמיכה בפורמט WebM ל-MediaMuxerCompat.
    • כתיבת תיבת mfra (Movie Fragment Random Access) בסוף קובצי MP4 מקוטעים כדי לאפשר חיפוש ב-FragmentedMp4Extractor באמצעות FLAG_READ_MFRA_FOR_SEEK_MAP.
    • תוקנה קריסה ב-Mp4Writer וב-FragmentedMp4Writer כשכותבים דגימת EOS לפני שכותבים דגימות אחרות.
    • תוקנה בעיה בתאימות של מאגר התגים כשמבצעים ריבוב (muxing) של תוכן Dolby לקובצי MP4 או לקובצי MP4 מקוטעים, על ידי פרסום המותג התואם ל-dby1 בכותרת של מאגר התגים (#3369).
    • תמיכה בטראקים של אודיו בפורמט PCM עם נקודה צפה (float) של 32 ביט ב-Mp4Muxer וב-FragmentedMp4Muxer (#3389).
    • דחייה של פרופילי Dolby Vision שלא נתמכים ב-Mp4Muxer וב-FragmentedMp4Muxer כשמוסיפים טראקים.
    • תמיכה בטראקים של אודיו PCM עם מספרים שלמים של 24 ביט ו-32 ביט ב-Mp4Muxer וב-FragmentedMp4Muxer.
  • תוסף IMA:
    • מעבירים אירועים של השהיה והמשך של הנגן אל IMA SDK ב-ImaServerSideAdInsertionMediaSource.
  • סשן:
    • מוסיפים את MediaConstants.EXTRAS_KEY_PLAYLIST_ID,‏ MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,‏ MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI ו-MediaConstants.EXTRAS_KEY_CATEGORIES כדי לאכלס את המטא-נתונים של הפלייליסט והפריט מהמטא-נתונים והתיאורים הקודמים, ואת MediaConstants.EXTRAS_KEY_SUGGESTED_TYPE ו-MediaConstants.EXTRAS_KEY_TTL_SECONDS כדי להציע LibraryParams.extras.
    • תיקון קריסה של SecurityException בזמן יצירה או שחרור של MediaSession במכשירים שאוכפים מגבלות מחמירות של PendingIntent.
    • תוקנה בעיה שבה MediaSession.getControllerForCurrentRequest() החזיר את הערך null במהלך בקשות הפעלה ב-Android 12 (רמות API‏ 31 ו-32) כש-MediaSessionService עדיין לא הייתה בחזית.
    • תיקון קריסה של IllegalArgumentException כש-MediaController מתחבר לסשן מדור קודם שמדווח על עוצמת קול מקסימלית שלילית.
    • תוקנה בעיה שבה קריאה ל-MediaController.setMediaItem או ל-setMediaItems ואחריה ל-play() ב-MediaSessionCompat מדור קודם שהושהה, יכולה לשלוח קריאה חוזרת (callback) לא נתמכת של onPrepareFrom* במקום onPlayFrom*, או לשלוח onPlay() בלי להפעיל מחדש את קובץ המדיה המבוקש.
    • תיקון של NullPointerException ב-MediaBrowser מדור קודם כשמתקבלת תשובה לפקודה בהתאמה אישית (#3432).
    • תיקון קריסה של IllegalArgumentException כשמתקבלים מטא-נתונים מדור קודם עם מפתחות כפולים ב-Bundle הבסיסי.
    • איחוד קריאות יוצאות מסוג MediaControllerCompat.TransportControls שבוצעו באותה איטרציה של Looper כששולטים ב-MediaSessionCompat מדור קודם (לדוגמה, קריאה ל-setMediaItem, ל-prepare ול-play ביחד שולחת עכשיו קריאה חוזרת (callback) אחת מסוג onPlayFrom*).
  • ממשק המשתמש:
    • תיקון המיקום של סימני הפיסוק בכתוביות מימין לשמאל ושמירה על טווח ה-span כשגלישת הטקסט הדו-כיוונית מופעלת (#3454, #3455).
    • מוסיפים את המחלקות TrackSelectionState ו-TrackSelectionParametersState ואת פונקציות ה-remember של המצב ה-Composable המתאימות למודול media3-ui-compose.
    • להציג את PresentationState.videoAspectRatio ולגרום ל-Modifier.resizeWithContentScale לקחת את aspectRatio: Float? במקום את sourceSizeDp: Size?.
    • מוסיפים את המחלקה CuesState ואת rememberCuesState Composable למודול media3-ui-compose כדי להאזין לאותות הנוכחיים של הנגן.
    • הוספת תמיכה במצב גלילה ל-ProgressSlider אם הוא מבוסס על ExoPlayer או על CompositionPlayer.
    • מוסיפים תמיכה ב-showArtwork ל-PresentationState ומשתמשים בה כדי לתזמן את העיבוד של artwork Composable האופציונלי שסופק ב-ContentFrame וב-Player. מוסיפים את ה-Composable‏ Artwork שישמש כערך ברירת המחדל של המשבצת artwork.
    • מוסיפים שדות חדשים ל-PlayPauseButtonState (showBuffering, showRetry, showReplay) ומשתמשים בהם ב-PlayPauseButton כדי להציג עוד סמלים ואינדיקטור לטעינה מראש.
    • הוספת המחלקה PlaybackState כדי לאפשר תצפית על מצב ההפעלה בהתאמה אישית, והוספת BufferingIndicator כרכיב שלא תלוי בכפתור.
    • תוקנה בעיה שבה PlayerView ו-PlayerControlView הציגו סמני מודעות בגבולות של תקופות לפלייסהולדרים של מודעות בסוף הסרטון בשידורים חיים עם כמה תקופות.
    • משבצות קומפוזביליות של Player, ContentFrame, PlayerDefaults ו-MiniController לא מקבלות יותר את הנגן או את הרשאות הגישה לפקדים כפרמטרים. במקום זאת, צריך לתעד אותם מההיקף של הקריאה (לדוגמה, topControls הוא עכשיו @Composable BoxScope.() -> Unit). זהו שינוי תוכנה שעלול לגרום לכשל ב-API לא יציב.
    • מוסיפים את הפרמטר alignment ל-ContentFrame, ל-Player ול-Modifier.resizeWithContentScale כדי למקם את התוכן המותאם בתוך הקונטיינר שלו, ולחתוך את התוכן של ContentFrame לגבולות שלו, כך שסרטון שמותאם באמצעות ContentScale.Crop לא יופיע יותר מחוץ לגבולות.
    • הוספת תמיכה בממשק המשתמש של סטרימינג בשידור חי ל-ProgressSlider, ל-ProgressStateWithTickCount ול-ProgressStateWithTickInterval על ידי חשיפת isLive ו-liveOffsetMs. הוספת LiveButton Composable אל media3-ui-compose-material3 (#2213).
  • תוסף Ktor:
    • תוקנה בעיה שבה KtorDataSource עלול להתייחס לכשלים בחיבור באמצע הסטרימינג כסוף הקלט במקום להציג שגיאת HttpDataSourceException (#3460).
  • תוסף HLS:
    • ניתוח של VIDEO-RANGE (PQ ו-HLG) ב-EXT-X-STREAM-INF ו-EXT-X-I-FRAME-STREAM-INF ל-Format.colorInfo (#3441).
    • תיקון של NullPointerException במהלך ניתוח של מקטעי אתחול EXT-X-MAP של MPEG-TS שמכילים דגימות מדיה של PES (#3456).
    • תוקנה רגרסיה שבה Format.id ו-Format.metadata היו null בטראקים חשופים של HLS (#3402).
    • חיתוך מודעות עם רשימת נכסים ל-X-PLAYOUT-LIMIT ודילוג על מודעות שחורגות לחלוטין מהמגבלה, והגדרת ברירת המחדל של היסט המשך התוכן ל-0 כשמודעת מעברון משמיטה את X-RESUME-OFFSET ומשך הזמן שלה לא ידוע, גם אם X-PLAYOUT-LIMIT מוגדר.
    • תוקנה בעיה שבה סגירה של מודעת מעברון ב-X-ASSET-LIST החליפה את התרומות של היסט המשך התוכן של מודעות מעברון אחרות באותה קבוצת מודעות.
  • תוסף DASH:
    • תמיכה בניתוח של אירועי הוספה (urn:mpeg:dash:event:alternativeMPD:insert:2025) והחלפה (urn:mpeg:dash:event:alternativeMPD:replace:2025) של MPD חלופי ב-DashManifestParser וחשיפה שלהם כמופעים של AlternativeMpdEvent ב-Period.alternativeMpdEvents. זהו שינוי תוכנה שעלול לגרום לכשל באפליקציות שיוצרות מחלקת משנה של DashManifestParser: הפונקציה DashManifestParser.buildPeriod מקבלת עכשיו פרמטר List<AlternativeMpdEvent> נוסף, והעומס הקודם הוסר. אפליקציות שמבטלות את DashManifestParser.parseEventStream(XmlPullParser) צריכות לבטל את DashManifestParser.parseEventStream(XmlPullParser, String) במקום זאת, כי האפשרות הראשונה הוצאה משימוש ותהפוך לפרטית בגרסה עתידית.
    • ניתוח של פרטי הצבע של CICP (ColourPrimaries, TransferCharacteristics, MatrixCoefficients ו- VideoFullRangeFlag) מהמתארים EssentialProperty ו- SupplementalProperty לתוך Format.colorInfo (#3426).
    • תמיכה ברשימות מופרדות ברווחים של ערכי @id במאפייני @value של מתאר (http://dashif.org/guidelines/trickmode) במצב טריק (#3315).
    • תמיכה בניתוח של <ProducerReferenceTime> ב-DashManifestParser, חשיפה שלו ב-AdaptationSet.producerReferenceTimes ושימוש בו כדי לאכלס את Timeline.Window.presentationStartTimeMs ואת Timeline.Window.windowStartTimeMs בסטרימינג של וידאו על פי דרישה (VOD).
    • נוספה תמיכה ב-DASH Content Steering (#1689).
    • תיקון של NullPointerException שיכול להתרחש כשמנתחים מניפסט DASH עם מאפיין חסר ברכיב <UTCTiming> (#3436).
  • תוסף RTSP:
    • תוקנה קריסה של IllegalStateException שקרתה כשעובדו תגובות רשת שהתעכבו אחרי שהלקוח של RTSP נסגר.
    • תוקנה בעיה שבה דילוג מהיר על קטעים בסרטון עלול להפעיל בטעות את מנגנון החזרה לפרוטוקול TCP.
    • תיקון קריסה של IllegalStateException שיכולה להתרחש בזמן עיבוד של תגובות רשת מושהות אחרי שהלקוח של RTSP מאפס את המצב במהלך בחירה מחדש של טראק, פירוק סשן או הפניית URI.
    • תוקנה בעיה שבה חיפוש נוסף לפני הפעלה מחדש של ההפעלה עלול לגרום לקריסה של IllegalStateException.
    • תוקנה בעיה שבה דילוג אחורה בזמן שדילוג אחר כבר ממתין עלול לגרום להפסקת האודיו ולהקפאת הפעלת הסרטון.
    • תוקנה בעיה שבה יחידות גישה של פריימים מרכזיים ב-H.264 וב-H.265 שמסתיימות בחבילת צבירה או בחבילה שהיא לא IDR לא סומנו כפריימים מרכזיים, וכתוצאה מכך ההפעלה נתקעה בטעינה (#3434).
  • תוספי מפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • תוסף Opus: תיקון קריסה של JNI בזמן פענוח של נתוני Opus לא תקינים.
    • תוסף Opus: תיקון התעלמות מריפוד (padding) של התעלמות כשריפוד של דילוג מראש והתעלמות נמצאים באותה חבילה (#2576).
  • תוסף Cast:
    • הוספת SessionAvailabilityListener.SessionUnavailableReason כדי לייצג את הסיבה לכך שהסשן לא זמין, ומתן שיטה עמוסה מדי ל-SessionAvailabilityListener.onCastSessionUnavailable כדי לחשוף אותה.
    • תוקנה בעיה שבה ההפעלה התחדשה באופן מקומי ובלתי צפוי אחרי הפסקת סשן Cast.
    • רישום שגיאה ביומן כשפעולות של RemoteMediaClient (כמו הפעלה, השהיה, שינוי מהירות, מצב הפעלה חוזרת, עוצמת קול, השתקה או בחירת טראק) נכשלות ב-RemoteCastPlayer (#3373).
    • תיקון של ArrayIndexOutOfBoundsException ב-RemoteCastPlayer כשהתור של מקלט Cast משתנה או מצטמצם בזמן שפעולת חיפוש ממתינה (#3372).
    • תוקנה בעיה במקלט Cast שמוגדר כברירת מחדל, שבה ציר הזמן אכלס רק קובצי מדיה שסמוכים לפריט הפעיל, במקום את כל הפלייליסט (#3129).
    • עדכון ציר הזמן ומיקום ההפעלה מיד כשמשנים את הפלייליסט (setMediaItems, addMediaItems, moveMediaItems, removeMediaItems) או כשמדלגים ב-RemoteCastPlayer, והוספת פעולות פלייליסט עוקבות לתור כדי שהן יבוצעו באופן מהימן לפי הסדר (#2639, #3272).
    • תוקנה בעיה שבה קריאה ל-addMediaItems בתור ריק ב-RemoteCastPlayer גרמה לכך שקובצי המדיה לא נטענו במקלט Cast ‏(#2402).
    • תוקנה בעיה ב-RemoteCastPlayer שבה הגעה לסוף התור של מקלט Cast מחקה את ציר הזמן במקום לשמור את הפלייליסט.
    • תוקנה בעיה שבה playWhenReady,‏ repeatMode ו-playbackParameters לא הועברו או הוחלו כשהוגדרו ב-RemoteCastPlayer לפני טעינת פריטי מדיה (לדוגמה, במהלך העברת הפעלה ממכשיר מקומי למכשיר מרוחק ב-CastPlayer) (#889).
  • אפליקציית הדגמה:
    • הוספת תמיכה בקובצי מדיה שמוגנים באמצעות DRM וסטרימינג נוסף לדוגמה של HLS לקטלוג של אפליקציית ההדגמה של הסשן.
    • מגדירים את RemoteCastPlayer עם CastTrackSelector באפליקציית ההדגמה של הסשן כדי לאפשר בחירה של כתוביות וטראק אודיו בזמן ההעברה (cast).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של DashUtil.buildDataSpec(Representation, RangedUri, int) ושל DashUtil.buildDataSpec(Representation, String, RangedUri, int). במקום זאת, אתם צריכים להשתמש ב-DashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
  • גרסה:
    • מגדילים את Gradle minSdk ל-24.

גרסה 1.11.0

1.11.1

‫10 בספטמבר 2026

  • ‫ExoPlayer:
    • העברת הדגל להפעלה או השבתה של מטא-נתונים של HAGC למדיה פרוגרסיבית מ-MediaSource.Factory ל-ExtractorsFactory. ה-method הקודמת, setExperimentalEnableHagcPlayback, הוסרה והוחלפה ב-ExtractorsFactory.setParseHagcMetadata. העדכון הזה גם פותר בעיה שבה ההשבתה לא פעלה במאגרי Matroska/WebM.
    • תיקון בעיה שבה ההפעלה נתקעה כשבוצע חימום מראש של רכיב רינדור משני שלא עובר למצב אחר.
    • תיקון בעיה בחימום מראש שבה צריך להחזיר את Surface למעבד הראשי כשחיפוש מאפס ומשבית את שני המעבדים.
    • תיקון של ArrayIndexOutOfBoundsException כשעדכון של ציר זמן בשידור חי מעביר את מיקום ברירת המחדל מעבר למודעה שנוספה בצד השרת ומופעלת כרגע (#3348).
    • תוקנה בעיה במצב גלילה שבה פריימים ישנים של סרטון הוצגו לזמן קצר כשחיפשו עם ScrubbingModeParameters.allowSkippingMediaCodecFlush מופעל.
  • מחלצים:
    • ‫Matroska: תוקנה בעיה שבה טראקים שהוצבו אחרי אשכולות לא הניבו ציר זמן שניתן לחפש בו (#3377).
  • אודיו:
    • תיקון החישוב של שטח אחסון זמני ב-SilenceSkippingAudioProcessor כדי שמשך השתיקה המינימלי לא יצומצם אנכית באופן שגוי לפי גודל המסגרת (#3271).
    • תיקון הטיפול ב-PCM של 8 ביט ב-PcmAudioUtil כדי להתייחס לדגימות כלא חתומות, כפי שמוגדר ב-Android (#3271).
    • תיקון בעיה בהפחתת עומס שבה שידור חוזר עלול להיתקע במהלך מעברים לפני הצגת מודעה או ללא פערים בגלל גדלים מוגבלים של שטח אחסון זמני.
    • תיקון באג ב-DefaultAudioSink שבו מספר ההפעלות לא יורד כששרשור ההפעלה כבר לא פעיל (#3338).
  • סשן:
    • תיקון של NullPointerException כש-MediaController בתהליך משתחרר מקריאה חוזרת (callback) של Player.Listener (#3375).
    • תיקון של מבוי סתום ב-thread הראשי כש-MediaBrowser מדור קודם מתחבר לשירות שמחזיר תוצאה אסינכרונית מ-onGetLibraryRoot() או מ-onConnectAsync() (#3393).
  • תוסף HLS:
    • תיקון החישוב של היסט המשך התוכן כשפלח היעד להצמדה עדיין לא נמצא בפלייליסט (#3322).
    • תוקנה בעיה שבה HlsMediaChunk שנוצל במלואו מנסה שוב להיטען כשמתקבל EOFException מהמחלץ (#3350).
  • תוסף DASH:
    • תיקון חישוב שגוי של חותמת זמן לדוגמה של טראקים של תמונות עם presentationTimeOffset (#3334).
  • תוספי מפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • ‫Opus: תיקון פגיעה בזיכרון כשמאתחלים כמה מופעים של OpusDecoder בו-זמנית.
    • ‫MPEG-H: תיקון של דליפת זיכרון, חיתוך של תווים שאינם ASCII וקריסה ברמת שפת המכונה פוטנציאלית בתנאים של זיכרון מועט כששולחים פקודות אל MpeghUiManager (#3365).

גרסה 1.11.0

‫5 באוגוסט 2026

  • ספרייה משותפת:
    • הוספת Format.channelMask כדי לייצג באופן מפורש את מסכת ערוץ האודיו, ועומס יתר חדש של Util.getAudioTrackChannelConfig(Format) כדי לפתור את הבעיה באופן בטוח.
    • שדרוג Kotlin מגרסה 2.0.20 לגרסה 2.2.0.
  • ‫ExoPlayer:
    • תוקן באג שקשור לתזמון של פעולות בו-זמניות, שעלול לגרום ל-IllegalStateException או ל-IndexOutOfBoundsException ב-ExoPlayer.
    • הקלנו על בדיקות מספר קבוצות המודעות ב-AdsMediaSource כדי לאפשר למספר קבוצות המודעות לרדת כשקבוצת מודעות מעובדת במלואה (hasUnplayedAds() הוא false), וכך לאפשר שינוי דינמי של גודל קבוצת המודעות במהלך תהליכי עבודה של איפוס.
    • מוסיפים את getFlags() ואת FLAG_STRICT_DURATION ל-SampleStream כדי לאפשר לסטרימינג לדווח על דגלים, ומעדכנים את רכיבי הרינדור כדי לבדוק את הדגלים האלה באופן דינמי.
    • חזרה למעריך קצב הפריימים ב-MediaCodecVideoRenderer ולפורמט הפלט של ה-codec ב-MediaCodecAudioRenderer כדי לחשב את קצב הפעולה של ה-codec כשפורמטים של הסטרימינג לא מספקים ערך תקין, וכדי להימנע מאיפוסים מיותרים של ה-codec.
    • הסרת חיתוך התוכן במודעות שמוטמעות בצד הלקוח בנגן הליבה. במקום זאת, AdsMediaSource מטפל בלוגיקה של החיתוך. כדי להטמיע את חיתוך התוכן באופן פנימי, צריך לעדכן מקורות מותאמים אישית של מודעות שמוטמעות בצד הלקוח.
    • טראקים עם פרופיל או רמה של קודק בפורמט תקין אבל לא מזוהה מסומנים כ-supported=NO_EXCEEDS_CAPABILITIES במקום כ-supported=YES (כך מסומנים טראקים עם מידע חסר או בפורמט שגוי על הפרופיל או הרמה). כך אפשר לוודא שהטראקים האלה (שסביר להניח שהמכשיר לא תומך בהם) לא ייבחרו כשיש חלופות עם תמיכה טובה יותר.
    • מוסיפים את DefaultPreloadManager.SimpleRankingDataComparator, שהוא RankingDataComparator שמשווה בין הדירוגים של קובצי המדיה על סמך המרחקים שלהם מהאינדקס של קובץ המדיה שמופעל כרגע. אפליקציות יכולות לשנות את ה-method‏ compare(Integer, Integer) אם נדרש לוגיקת השוואה מדויקת יותר. אפשר להחדיר את ה-SimpleRankingDataComparator המותאם אישית באמצעות בנאי חדש של DefaultPreloadManager.Builder.
    • כדי לצמצם את הסיכון ל-OOM ב-DefaultLoadControl.prioritizeTimeOverSizeThresholds, אפשר להגדיר חזרה למגבלות של גודל מאגר הנתונים הזמני בבייטים אם נראה שזיכרון ה-heap הזמין מוגבל.
    • התאמת הטיפול בתמונות סטילס כשלא מוגדר MediaItem.imageDurationUs: תמונות סטילס בפורמט JPEG ו-HEIC "מופעלות" עכשיו עם משך זמן קצר מאוד כברירת מחדל (באותו אופן שבו תמונות בפורמט PNG ותמונות אחרות פעלו בעבר).
    • מוסיפים MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter) כדי להגיע ל-BandwidthMeter עד MediaSource. השיטה שהוצאה משימוש עם הטמעה בהתאמה אישית עדיין תיקרא כברירת מחדל, אבל מומלץ להטמיע את השיטה החדשה ולהשתמש ב-BandwidthMeter.getTransferListener() כדי לקבל שוויון לשיטה הישנה.
    • ב-DefaultBandwidthMeter, מוסיפים תמיכה ב-InitialBitrateSupplier בהתאמה אישית. כך האפליקציות יכולות לספק לוגיקה משלהן כדי לקבוע את ההערכה הראשונית של קצב העברת הנתונים, שתשמש ליצירת DefaultBandwidthMeter ולשינויים בסוג הרשת. אפשר להגדיר את הספק באמצעות DefaultBandwidthMeter.Builder.setInitialBitrateSupplier().
    • הפעלה של תזמון דינמי כברירת מחדל. לולאת העבודה של ההפעלה ב-ExoPlayer תפעל באופן דינמי ולא במרווח זמן סטטי.
    • הסרת איפוס מיותר שיכול להתרחש כשמצרפים טראקים עם דגימות טרום-הפעלה להפעלה פעילה.
    • ב-DefaultBandwidthMeter, מבצעים אופטימיזציה של getInitialBitrateCountryGroupAssignment כדי להחזיר את ההקצאות של קבוצות המדינות ארוזות במספר שלם של 32 ביט במקום במערך, וכך להקטין את הקוד ולהימנע מהקצאות.
    • תיקון כשלים באתחול של AudioTrack במכשירים מסוימים על ידי הבטחה שלוגיקת הניסיון החוזר תמיד מנסה שטח אחסון זמני של שנייה אחת לפחות אם ניסיונות חוזרים אחרים (על ידי חציית שטח האחסון הזמני) נכשלים (#3207).
    • תוקנה בעיה בקודק במכשירים מסוימים, שבה הקודק בלע את כל הדגימות אם הוא נמחק לפני קבלת מאגרי קלט.
    • הוספת ExoPlayer.Builder.enablePerStreamMediaProgression() ניסיוני כדי לאפשר עיבוד מדיה מתקדם על בסיס כל סטרימינג. כך אפשר לצמצם את זמן האחזור בהפעלה בין פריטים בפלייליסט ולמנוע מצב שבו ההפעלה "נתקעת" בתוכן קצר מאוד (#3122).
    • תוקן מרוץ תהליכים שקשור לשימוש במזהה של סשן האודיו, שבו המזהה הראשוני של סשן האודיו שנוצר אוטומטית על ידי ExoPlayer היה בשימוש במקום הערך שהוגדר על ידי setAudioSessionId (#3241).
    • הוספנו תמיכה ניסיונית בהפעלה של מטא-נתונים מתוזמנים של HAGC (ST 2094-50) למדיה פרוגרסיבית (למשל MP4, ‏ Matroska). הנגן ממזג באופן אוטומטי טראקים של מטא-נתונים של HAGC עם טראק הווידאו המשויך, ומעביר את המטא-נתונים מחוץ לפס למפענח במכשירים עם API 37 ואילך. אפשר להשבית את ההתנהגות הזו באמצעות DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false).
    • הוספת Format.selectionPriority שמייצג את ההעדפה היחסית של Format בבחירת הטראק (#3236).
    • תוקנה בעיה אפשרית במצב גלילה שבה הגלילה עלולה להיתקע כשמנסים להגיע ל"סוף הסטרימינג".
  • ‫CompositionPlayer:
    • תוקנה בעיה שבה מופעים של TrackSelector לא שוחררו.
  • טרנספורמר:
    • פתרון בעיה שבה יכול להיות דיווח יתר על ExportResult.fileSizeBytes.
  • בחירת טראק:
    • צריך לחשוף את BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR ולהוסיף את AdaptiveTrackSelection.Factory.setTrackFormatComparator כדי לאפשר סדר פורמטים מותאם אישית ועדיפות לבחירת ABR מעבר לסדר לפי קצב העברת נתונים בלבד.
    • תוקנה בעיה שקשורה לתזמון של עדכונים בו-זמניים, שבה עדכונים מהירים ורציפים של פרמטרים לבחירת טראקים עלולים לגרום לכך שחלק מהעדכונים יאבדו או יוחלפו.
  • מחלצים:
    • ‫MP4, ‏ MP3 ו-FLAC: הוספת FLAG_DISABLE_ARTWORK_METADATA כדי לאפשר הסרה של תמונות מצורפות ומטא-נתונים של גרפיקה במהלך ניתוח קונטיינר, במטרה לצמצם את צריכת הזיכרון בזמן הריצה (#2077). אפשר גם להפעיל את זה באופן מרכזי דרך DefaultExtractorsFactory.setDisableArtworkMetadata.
    • ‫MP4: הוספת תמיכה בחילוץ טראקים של מטא-נתונים מתוזמנים מסוג ITU-T T.35 (it35).
    • ‫MP4: הוספת תמיכה בחילוץ מטא-נתונים של פרקים (גם בפורמט Nero וגם בפורמט QuickTime). אם שני הסוגים קיימים, המערכת תעדיף את הפרקים של QuickTime. פרטי הפרקים שחולצו מוצגים כרשומות Chapter בתוך ה-Metadata של הטראק, מה שמאפשר ניווט מקורי בין פרקים בקובצי MP4,‏ M4A ו-M4B (כמו ספרי אודיו ופודקאסטים) (#2803).
    • ‫WAV,‏ Matroska ו-MP4: הוספת תמיכה באודיו PCM עם נקודה צפה (floating point) של 64 ביט (#3090).
    • ‫Matroska: צריך להשתמש במטא-נתונים של זרם הביטים של הקודק כדי לאכלס ערך מדויק של ColorInfo.
    • ‫MP4: הוספת תמיכה בחיפוש בקובצי MP4 מקוטעים באמצעות התיבה mfra כשאין תיבת sidx. כדי להפעיל את זה, צריך לספק את FLAG_READ_MFRA_FOR_SEEK_MAP ל-FragmentedMp4Extractor, וזה מה שקורה עכשיו כברירת מחדל ב-DefaultExtractorsFactory (#3088).
    • התעלמות מנתוני av1C עם גרסה לא נתמכת.
    • ‫MP4: הוספת תמיכה ב-PCM עם נקודה צפה (floating point) בפורמט Big-endian בתיבות fpcm.
    • ‫Matroska: ניתוח מידע על פרקים לערכי Chapter ב-Metadata של טראק.
    • ‫MPEG-TS: שיפור החילוץ של סטרימינג ב-DTS-HD וב-DTS Express על ידי שילוב של Core ו-Extension Substream לדגימה אחת, ותיקון בעיות בהפעלה שבהן שני הפורמטים הופקו בעבר כדגימות נפרדות (#3147).
    • ‫MP4: מניעת לולאות אינסופיות וקריאות מחוץ לתחום בזמן ניתוח של פריטים ריקים של תגי מטא-נתונים מסוג ilst (#3191).
    • ‫MPEG-TS: מוודאים שהפריים האחרון מעובד בסטרימינג שבו אורך חבילת ה-PES האחרונה ידוע (#3206).
    • ‫MP3: תיקון הדיווח על קצב העברת הנתונים בקבצים עם כותרת Xing ו-VBRI.
    • ‫Matroska: טיפול בטראקים שמוגדרים באשכול האחרון (#3250).
    • ‫Matroska: הוספת תמיכה ב-ALAC‏ (#3268).
    • ‫MP4: אפשר להשתמש בתיבות sgpd באורך משתנה בקובצי MP4 מקוטעים (#3243).
    • ‫AVI: תוקנה בעיה שבה הפעלת קבצים בלי דגלי פריים מרכזי בטראקים של אודיו גרמה לאובדן אודיו ול-OutOfMemoryError.
    • ‫MP3: שימוש במשכי זמן ללא הפסקות מכותרות Xing/Info (#3183).
    • ‫MP3: התאמת המטא-נתונים של ההשהיה והריפוד של מקודד LAME/Xing כך שיתאימו לחיתוך PCM מפוענח (#3200).
  • אודיו:
    • הוספת תקופת חסד של 100 אלפיות השנייה למעבדי האודיו של ExoPlayer במעבר ממצב מוכן למצב לא מוכן, כדי למנוע חריגות זמניות ולהימנע ממצבי אגירה בלתי צפויים במהלך הפעלה פעילה (#3210).
    • שינוי הלוגיקה של גודל ברירת המחדל של שטח אחסון זמני של PCM ב-DefaultAudioTrackBufferSizeProvider לשימוש במאגר נתונים זמני קבוע של 500 אלפיות השנייה, כדי להפחית את התלות במכשיר.
    • צריך לעדכן את MediaCodecAudioRenderer כדי לחלץ את ה-channelMask המרחבי ממפענח הפלטפורמה, וכך לאפשר ל-DefaultAudioSink להשתמש במסכה המפורשת הזו במקום להסיק אותה ממספר הערוצים.
    • המרת הפרמטרים של AudioSink.configure למחלקת נתונים. צריך להעביר שינויים מותאמים אישית של ForwardingAudioSink.configure לחתימת השיטה החדשה.
    • הוספת תמיכה בשמירה על גובה הצליל כשמותחים את הזמן של שידור אודיו באמצעות EditedMediaItem.Builder#setSpeed(SpeedParameters).
    • שיפור של ToFloatPcmAudioProcessor כדי לתמוך בהמרה של PCM של 8 ביט, PCM של 16 ביט big-endian ו-PCM של 64 ביט עם נקודה צפה (floating point) ל-PCM של 32 ביט עם נקודה צפה (#3090).
    • משנים את ערך ההחזרה של DecoderAudioRenderer.getChannelMapping ל-ImmutableIntArray.
    • תוקן באג שגרם לכך שההפעלה נתקעה כשמפעילים פלייליסט של אודיו ללא הפסקות במצב פריקה דחוסה.
    • העברת Timeline ו-UID של תקופה אל AudioSink.configure ו-AudioProcessor.StreamMetadata כדי לספק הקשר של פלייליסט למעבדי האודיו (#418).
    • צריך להגדיר את AudioProcessor.StreamMetadata.positionOffsetUs הנכון כדי לאפשר עיבוד אודיו מבוסס-זמן (#418).
    • הוספת תמיכה ב-PCM עם נקודה צפה (floating point) של 32 ביט ו-64 ביט ב-big-endian.
    • הסרת נתיב החלופה של EAC3-JOC ל-EAC3 להפעלה במכשירי Google Pixel, כי מפענחי EAC3 הרגילים שלהם לא יכולים לפענח סטרימינג של EAC3-JOC (#3257).
  • סרטון:
    • תיקון הלוגיקה של הצטרפות לסרטון כדי לספור מאגרים שנמחקו במהלך ההצטרפות כמאגרים שדילגו עליהם במקום כמאגרים שנמחקו.
    • תוקנה החלטת העיבוד המיידית כשמגדירים משטח חדש כדי למנוע אובדן פריימים במכשירים שלא תומכים במשטחי פלייסהולדר.
    • תיקון ההערכה של קצב הפריימים ב-MediaCodecVideoRenderer כדי שתהיה מדויקת יותר, על ידי התחשבות בפריימים שהושמטו או שדילגו עליהם.
    • אפשר להגדיר את הסף לתזמון מוקדם של פריימים. ערך ברירת המחדל הוא 50ms, אבל אפשר להתאים אישית את הערך באמצעות MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold().
    • תוקן באג ב-VideoFrameReleaseHelper שבו שינויים בתצוגה עלולים להפעיל קריאות חוזרות (callbacks) מיותרות של Choreographer והתעוררויות מוגזמות של המעבד (CPU) בשרשור הראשי.
  • טקסט:
    • ‫TTML: חזרה ל-displayAlign מ-style לאזורים (#2559).
    • ‫TTML: שעת ההתחלה של הכתובית עוברת בירושה מהרכיב הראשי של רכיבי <p> (#3246).
  • מטא-נתונים:
    • הוספת השדה MediaMetadata.discSubtitle וניתוח שלו מנתוני ID3v2.4 TSST ו-Vorbis DISCSUBTITLE.
    • ניתוח מספר הדיסק והספירה ממסגרת ID3 TPOS.
  • ההשפעה:
    • מנקים את מצב הציור מחדש ב-FinalShaderProgramWrapper בזמן הניקוי כדי למנוע מהנגן לקפוא בזמן החיפוש.
  • מכשירי Muxer:
    • הוספנו תמיכה בהפניות לטראקים (התיבה tref) ב-Mp4Muxer באמצעות ממשק API חדש של addTrackReference. כך אפשר ליצור קשרים בין טראקים, למשל לקשר טראק של מטא-נתונים לטראק של הסרטון שהוא מתאר.
    • צריך להוסיף את OggMuxer כדי לאפשר ריבוב של שידורי מדיה מסוג OPUS או VORBIS לפורמט הקובץ ogg.
    • מוסיפים את WavMuxer כדי ליצור קובץ WAV (תומך ב-PCM עם מספרים שלמים ונקודה צפה).
    • כדי לאפשר כתיבה של קבצים קטנים יותר שלא ניתנים לסטרימינג בלי שטח שמור, צריך להוסיף את setAttemptStreamableOutputEnabled אל InAppMp4Muxer.Factory.
    • הוספת תמיכה באודיו בפורמט IAMF ב-Mp4Muxer וב-FragmentedMp4Muxer.
  • תוסף IMA:
    • מוסיפים את ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot כדי לאפשר הוספה של מיקום מודעה בדף שבו יוצגו מודעות שמופיעות בהשהיה.
    • תוקן באג שגרם לכך שבמודעות VAST שניתנות לדילוג ומוצגות ברצף, כפתור הדילוג הופיע מיד במודעה השנייה (#3165).
  • סשן:
    • תיקון של מבוי סתום (deadlock) פוטנציאלי וקריסות של IllegalStateException בתוך MediaNotificationManager כשמשתמשים בסשן עם לולאת נגן של שרשור ברקע.
    • אכיפת דרישות מחמירות יותר לגבי שרשורים ב-methods של MediaSession. שיטות Void מפרסמות עכשיו באופן אוטומטי את ההפעלה לשרשור של לולאת האפליקציה, ו-accessors של מצבים (getters) מקפיצים באופן מפורש IllegalStateException אם הם נקראים משרשור שהוא לא לולאת האפליקציה.
    • תוקנה קריסה שנגרמה בגלל מיזוג של ציר זמן מחוץ לגבולות (IllegalStateException ב-MediaUtils.mergePlayerInfo) באמצעות מעקב אחרי עקביות המצב בכל בקר בצד הסשן.
    • מוסיפים את androidx.media3.session.MediaSessionManager כדי לספק תמיכה בשאילתות לגבי סשנים פעילים של מדיה והחזרת מופעים של 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 עשוי לצאת משימוש.
    • תוקנה בעיה שבה גלישה ב-AVRCP ב-Bluetooth לא זיהתה את MediaLibraryService ב-API 36 ו-37.
    • תיקון של הקטנה כפולה של גרפיקה ב-MediaSession כשגודל התמונה קרוב למגבלה של הפלטפורמה, כדי לפתור בעיות של טשטוש בהתראות (#3134).
    • תוקנה קריסה של ForegroundServiceStartNotAllowedException ב-MediaNotificationManager כשקריאה חוזרת (callback) אסינכרונית לטעינת מפת סיביות (bitmap) של גרפיקה מנסה להפעיל את השירות שפועל בחזית בזמן שהאפליקציה פועלת ברקע (#3270).
    • תיקון בעיה שבה אובייקטים מסוג PositionInfo שהתקבלו על ידי MediaController לא כללו את מזהי ה-UID המקוריים שלהם מסוג Timeline. הסשן מתרגם ומפיץ עכשיו באופן מהימן את המזהים הייחודיים האלה במהלך עדכוני המצב.
    • תיקון קריסה על ידי זיהוי ForegroundServiceStartNotAllowedException ב-MediaSessionService.stopSelfSafely() (#3310).
    • תיקון קריאה חוזרת (callback) לא צפויה של onMediaItemTransition() ב-MediaController כשמחפשים בתוך אותו קובץ מדיה (#3248).
  • ממשק המשתמש:
    • תיקון של עיבוד הפריים הראשון בגודל שגוי כש-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 ולמשבצות התוכן שלה.
    • מפרסמים את PlayerPool (common-ktx) ו-rememberPooledPlayer (ui-compose) כדי לתמוך בטעינה מראש של MediaItems בסביבות ממשק משתמש של חלון הזזה. כדאי להציג את הפונקציונליות הזו ב-demo-compose באמצעות ShortFormPlayerScreen חדש.
    • תוקן באג של דיכוי תריס ב-PlayerView וב-Compose PresentationState שגרם לקריסות בציר הזמן שלא תומך בחיפוש UID של תקופה (#3264).
  • הורדות:
    • פתרון משתני HLS בפלייליסט של מדיה כשהוא מאוחזר להורדה (#3258).
  • תוסף Ktor:
    • הוספת מודול תוסף חדש של media3-datasource-ktor שמספק KtorDataSource שמגובה על ידי מחסנית ה-HTTP של Ktor.
    • תיקון KtorDataSource: טעינת כל גוף תגובת ה-HTTP לזיכרון כשפותחים חיבור (#3305).
  • תוסף HLS:
    • הוספת תמיכה ב-HLS Content Steering וב-Pathway Cloning (#1689).
    • צריך להוסיף את setWithAssetListReset אל HlsInterstitialsAdsLoader כדי לאפשר לאפליקציות לאפס מודעות מעברון של רשימת נכסים שעובדו באופן מלא למצב לא זמין, לצורך פתרון חוזר על פי דרישה.
    • מנתחים את המאפיין SCORE של EXT-X-STREAM-INF ו-EXT-X-I-FRAME-STREAM-INF, ומאכלסים אותו ב-Format.selectionPriority (#3236).
    • תיקון באג שבו פעולות ריענון מתוזמנות של פלייליסט HLS נמשכות גם אם הפלייליסט כבר לא ראשי או פעיל (#3254).
    • תיקון החישוב של היסט החזרה לתוכן כשמפענחים רשימות של נכסי מעברון (#3322).
    • תיקון חוסר רציפות לא צפוי בחותמת הזמן של טראק האודיו כשממשיכים את ההפעלה של שידור חי עם זמן אחזור קצר אחרי כשל בבקשה של פלייליסט (#3311).
    • תיקון באג ב-HlsMediaPeriod.getStreamKeys() שבו טראק ID3 בעיבודים של אודיו נחשב לכתוביות (#3333).
  • תוסף DASH:
    • הפרדת כתוביות CEA סמויות לתגי TrackGroup שונים לפי שפה (#3113).
    • הוספת תמיכה בניתוח של כמה רכיבי Location מהמניפסט (MPD) וביצוע חלופה למיקום ב-DashMediaSource כשטעינת המניפסט נכשלת.
    • תיקון קריסה (IndexOutOfBoundsException) בפתיחת מניפסטים עם רכיב <SegmentTimeline/> ריק (#3326).
  • תוסף RTSP:
    • תיקון של כשלים או עיכובים זמניים בהפעלה במהלך הכנת ההפעלה של RTSP, שנגרמו בגלל שגיאות בקישור של יציאת UDP.
  • תוסף Cast:
    • הוספת מחלקה חדשה של CastParams כדי לאפשר הגדרה של Cast באמצעות קריאה ל-Cast.initialize(CastParams).
    • הוספנו את האפשרות החדשה CastParams.getShowSystemOutputSwitcherOnCastIconClick(), שמפעילה את השימוש ב-SystemUI Output Switcher במקום בבורר המכשירים להעברה באפליקציה, כשהוא זמין.
    • הוספת MediaRouteButtonState ו-rememberMediaRouteButtonState כדי לתמוך בתצפית על מצב החשיפה של בורר נתיבי המדיה, והוספת הפרמטר state ל-MediaRouteButton (#3172).
    • תוקן באג שבו RemoteCastPlayer יכול היה להיתקע באופן קבוע במצב של הסתרת טראק אחרי בחירת טראק, וכתוצאה מכך להתעלם מעדכוני טראקים עוקבים ממקלט Cast (#3237).
    • תיקון באג שבו DefaultMediaItemConverter זורק NullPointerException כשמנסים להצטרף לסשן Cast שהתחיל משולח שאינו Media3.
    • מניעת העברה של MediaItems שלא ניתנים להפעלה על ידי CastPlayer כשמשנים את הנגן הפעיל (#3199).
    • תוקן באג שגרם לכך ששידורים חיים לא מוגדרים (liveConfiguration == UNSET) הועברו לתור בתור STREAM_TYPE_BUFFERED (#3318).
  • כלי בדיקה:
    • מרחיבים את DataSourceContractTest כדי לכלול תמיכה בבקשות POST עם כותרות וגופים, מוסיפים כמה משאבי POST אל HttpDataSourceTestEnv ומוסיפים טענות נכונות (assertions) לשיטת ה-HTTP, לכותרות ולגוף הצפויים ב-WebServerDispatcher.
    • הקשחת טענות נכונות (assertions) ב-DataSourceContractTest לאורכים שמוחזרים מ-DataSource.open(). משאבים שעלולים לגרום ל-C.LENGTH_UNSET צריכים לציין זאת באמצעות TestResource.Builder.setMayResolveToUnknownLength(boolean).
    • מוסיפים את setPlaybackLooper אל TestExoPlayerBuilder.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של androidx.media3.exoplayer.MetadataRetriever. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.inspector.MetadataRetriever.
    • הסרה של androidx.media3.exoplayer.MediaExtractorCompat. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.inspector.MediaExtractorCompat.
    • הסרה של Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. במקום זאת, השתמשו ב-HeifExtractor כדי לחלץ מטא-נתונים של תמונות עם תנועה מקובצי HEIC.
    • הסרה של androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.metadata.MotionPhotoMetadata.
    • הסרה של androidx.media3.extractor.DummyTrackOutput. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.DiscardingTrackOutput.
    • הסרה של androidx.media3.extractor.DummyExtractorOutput. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.extractor.NoOpExtractorOutput.
    • הסרה של androidx.media3.common.C.generateAudioSessionIdV21. במקום זאת, אתם צריכים להשתמש ב-androidx.media3.common.util.Util.generateAudioSessionId.
  • גרסה
    • עדכנו את ההוראות של README.md להסתמכות על Media3 באופן מקומי כדי להשתמש ב-Gradle Composite Builds (includeBuild). הסקריפט core_settings.gradle הוסר, והמאפיינים androidxMediaModulePrefix ו-androidxMediaEnableMidiModule כבר לא בשימוש.

1.11.0-rc01

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

1.11.0-beta01

7 ביולי 2026

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

1.11.0-alpha01

‫24 ביוני 2026

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

גרסה 1.10.0

1.10.1

‫12 במאי 2026

  • ספרייה משותפת:
    • תוקן אופן הטיפול ב-onAudioSessionIdChanged ב-SimpleBasePlayer וב-ForwardingSimpleBasePlayer.
  • ‫ExoPlayer:
    • תיקון מרוץ תהליכים שקשור ליצירת מזהה של סשן אודיו, שעלול להוביל ל-IllegalStateException במצב מנהור. (#3099).
    • תיקון קריסות אפשריות של האפליקציה בזמן התאוששות משגיאות מפענח באמצעות חימום מראש של ה-renderer.
    • תוקנה בעיה שבה פגמים בסרטון נגרמו כתוצאה מהוספת נתוני אתחול כשמשתמשים בקודק Dolby Vision שמבוסס על AV1 (מספר 3153).
  • בחירת טראק:
    • שינוי הלוגיקה של בחירת הטראקים ב-VideoTrackInfo כדי לפתור בעיות בסוגי MIME חלופיים, והעברת ההעדפות של HDR ודירוג הקודקים להעדפות האיכות (#3135).
  • מחלצים:
    • MP3: התעלם מאורך נתוני Xing אם הוא ארוך מאורך הזרם הידוע (#3117).
    • תיקון של ArrayIndexOutOfBoundsException ב-Mp4Extractor כש-FLAG_OMIT_TRACK_SAMPLE_TABLE מוגדר ובטראק חסרה תיבת דגימת סנכרון (stss).
  • אודיו:
    • תוקן באג שבו אירועי אודיו עלולים להיות מנותבים באופן שגוי אם מוסיפים לנגן כמה רכיבי עיבוד אודיו.
  • סרטון:
    • שינוי הלוגיקה של שימוש חוזר ב-codec בשינויים בקצב הפריימים ב-API מתחת ל-30, כדי למנוע איפוסים של codec במקרים שבהם הם לא מועילים (#3120).
    • השבתת הפתרון הזמני לסנכרון מאולץ ב-queueSecureInputBuffer ל-API 31 ואילך. הפתרון הזמני היה צוואר בקבוק מלאכותי שאילץ את הפענוח לפעול באופן סדרתי, וכך מנע סרטונים משובשים בגלל בעיה במסגרת שהייתה קיימת לפני 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 כדי להתאים טוב יותר בין תזמון העבודה ומחזורי ההתעוררות של המעבד (CPU) לבין הזמן שבו אפשר לעבד פריימים של סרטונים. אפשר להפעיל את זה באמצעות experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs() ב-DefaultRenderersFactory.
    • אפשר להגדיר DataSource.Factory בהתאמה אישית ב-DefaultPreloadManager.Builder.
    • אפשר לדמות את ExoPlayer בלי 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.
  • טרנספורמר:
    • עכשיו אפשר להגדיר ב-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).
    • ניסיון להתאים את פריסת הפלט של הרמקולים (או של Spatializer, אם רלוונטי) בזמן פענוח IAMF, גם באמצעות תוסף IAMF וגם באמצעות מפענחי קודק מדיה, שנתמכים על ידי שדות ולוגיקה חדשים ב-AudioCapabilities וב-AudioCapabilitiesReceiver.
    • תוקן באג שגרם לכך שההפעלה נתקעה כשמפעילים פלייליסט של אודיו ללא הפסקות במצב פריקה דחוסה.
  • טקסט:
    • ‫VobSub: שימוש בפקודות הבקרה START ו-STOP של SPU כדי להפיק את משך הזמן של האות במקום להשתמש תמיד בברירת המחדל של 5 שניות (#2935).
  • מטא-נתונים:
    • הגדלת מספר ברירת המחדל של רכיבי עיבוד המטא-נתונים לארבעה, כדי לכסות את כל טראקי המטא-נתונים הפוטנציאליים שפורסמו על ידי וריאציות ועיבודים של HLS‏ (#3043).
  • ההשפעה:
    • העברת LottieOverlay למודול :media3-effect-lottie חדש (שכללה גם שינוי שם מ-androidx.media3.effect.LottieOverlay ל-androidx.media3.effect.lottie.LottieOverlay).
  • אפקט Lottie:
    • הוספנו מודול חדש, :media3-effect-lottie, שמאפשר להחיל אפקטים של Lottie על פריימים של סרטונים.
  • תוסף IMA:
    • כדי לקבל גישה ל-Ad media info API העדכני, צריך לעדכן את גרסת IMA SDK ל-3.39.0.
    • תוקן באג שבו סוג ה-MIME של המודעה לא תאם לסוג ה-MIME שצוין באירוע IMA LOADED. התיקון ממפה עכשיו את סוג ה-MIME של המודעה באמצעות פרטי המדיה של המודעה שסופקו על ידי IMA.
    • מוסיפים את setEnableCustomTabs אל ImaAdsLoader ואל ImaServerSideAdInsertionMediaSource, כדי לאפשר למשתמשים לקבוע אם כתובות היעד של הקליקים על המודעות יופעלו באמצעות כרטיסיות בהתאמה אישית.
    • מוסיפים את ImaAdTagUriBuilder, מחלקה שמציעה דרך חלופית ליצור adTagUri. הוא מכיל את ה-API של setPreferredLinearOrientation. זהו API בבדיקת אלפא שיאפשר לכם להגדיר את הכיוון המועדף למודעות ליניאריות. אם אתם רוצים להצטרף לקבוצת הבדיקה של גרסת האלפא, פנו לשותף החשבון שלכם.
  • סשן:
    • תוקן באג שבו מערכים גדולים ב-MediaMetadata.artworkData עלולים לגרום לקריסת האפליקציה.
    • שימוש בסוג int לארגומנט @Player.Command בממשק ActionFactory (#2933).
    • הפיכת MediaSessionService ו-MediaLibraryService ל-LifecycleService, כדי לאפשר צירוף של פעולות שמותאמות למחזור החיים של השירות (#187).
    • הפסקת התמיכה בפקודות לשינוי עוצמת הקול במכשיר מ-MediaController ומ-MediaBrowser להפעלות מקומיות. האפליקציות לא אמורות לשנות את עוצמת הקול במכשיר המקומי, ואם צריך, הן יכולות להשתמש בממשקי ה-API של AudioManager למטרה הזו.
    • זיהוי מופעים לא פעילים של Intent שהפעילו את השירות כשירות שפועל בחזית. כך המערכת לא תציג את השגיאה ForegroundServiceDidNotStartInTimeException. זהו שינוי תוכנה שעלול לגרום לכשל ב-API לא יציב באפליקציות שמטמיעות MediaNotification.Provider בהתאמה אישית, כי יש שיטה חדשה שנדרשת.
    • הוספת בונים למופעים של PendingIntent לשימוש עם ווידג'טים במסך הבית (#2933).
    • הוספת שיטות סטטיות ליצירת מופעים של Intent לווידג'טים של מסך הבית שמבוססים על Compose (#2933).
    • תוקן באג שבו המעבר בין קובצי מדיה לא דווח לבקרים כשההפעלה עברה מאינדקס נתון של קובץ מדיה לאינדקס אחר עם אותו קובץ מדיה, בגלל חוסר רציפות מסוג AUTO ו-SEEK (#2997).
    • תוקנה בעיה שבה פתרון עקיף למיקום של לחצן בממשק המשתמש של המערכת משפיע לרעה על משטחים אחרים של ממשק המשתמש, כמו Android Auto או יצרנים שלא צריכים את הפתרון העקיף (#3041).
    • תוקנה בעיה שבה הגישה למינויים לא סונכרנה (#3056).
    • מעקף לבאג ב-SysUI ב-API 29, שבו גרפיקה של סשן מדיה בגודל מסוים יכולה לגרום לקריסה של SysUI ולאלץ את המכשיר לבצע הפעלה מחדש (#3118).
    • תיקון קנה המידה של סמל הגרפיקה של ההתראות ב-Android Q (#3084).
  • ממשק המשתמש:
    • מוסיפים את PlaybackSpeedControl Composable ל-media3-ui-compose כדי להציג ולשנות את מהירות ההפעלה.
    • מוסיפים את PlaybackSpeedToggleButton Composable ל-media3-ui-compose-material3 כדי לשלוט במהירות ההפעלה.
    • הוספת ProgressSlider Composable ל-media3-ui-compose-material3 כדי להציג את ההתקדמות של הנגן ולבצע חיפושים באמצעות גרירה והקשה (#2288).
    • הימנעו ממאגר נתונים זמני גדול מחוץ למסך כשאתם מוסיפים אנימציה ל-PlayerControlView.
    • מוסיפים את Player Composable ל-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 כוללת את ה-commits הבאים.

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

1.9.3

‫16 במרץ 2026

גרסה 1.9.3 כוללת את ה-commits הבאים.

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

1.9.2

‫6 בפברואר 2026

גרסה 1.9.2 מכילה את ה-commits הבאים.

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

1.9.1

‫26 בינואר 2026

גרסה 1.9.1 מכילה את ה-commits האלה.

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

1.9.0-rc01

‫1 בדצמבר 2025

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

1.9.0-beta01

‫20 בנובמבר 2025

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

1.9.0-alpha01

‫22 באוקטובר 2025

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

גרסה 1.8.0

1.8.1

‫21 במאי 2026

גרסה 1.8.1 כוללת את ה-commits הבאים.

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

גרסה 1.8.0

‫30 ביולי 2025

גרסה 1.8.0 מכילה את ה-commits האלה.

  • ספרייה משותפת:
    • הוספת תמיכה בהחלפת הנגן ב-ForwardingSimpleBasePlayer.
  • ‫ExoPlayer:
    • הוספת פונקציית getter למצב הפעלה אקראית בממשק ExoPlayer (#2522).
    • הצגת חריגה ברורה יותר אם מתבצעת גישה אל DefaultAudioSink מכמה שרשורים. אם זה קורה בגלל קריאה ל-RendererCapabilities.getFormatSupport מחוץ לנגן, צריך לוודא שהקריאה ל-method הזה מתבצעת באותו שרשור כמו שרשור ההפעלה של ExoPlayer, או להשתמש במופע שונה מזה שמשמש להפעלה (#1191).
    • תוקן באג שבו פורמטים של אודיו שאינם סטריאו בטלוויזיות עשויים להיות מסומנים כלא נתמכים על ידי DefaultTrackSelector.
    • מוודאים שהפריים האחרון מוצג בצורה נכונה כשמשתמשים בדגל DECODE_ONLY של MediaCodec (שמופעל כברירת מחדל במצב גלילה).
    • הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-Context שמועבר אל ExoPlayer.Builder.
    • הפעלת תזמון דינמי כברירת מחדל במצב ניקוי.
    • הימנעו מטעינה מחדש מיותרת של מקור כשאתם מחפשים עד לסוף הפריט.
    • שימוש ב-MediaCodec.BUFFER_FLAG_DECODE_ONLY כברירת מחדל במצב ניקוי.
    • הצגת השגיאה IllegalStateException כש-PreloadMediaSource מופעל על ידי ExoPlayer עם שרשור הפעלה שונה משרשור הטעינה מראש (#2495).
    • הוספת cloneAndMove ל-ShuffleMode עם הטמעה כברירת מחדל (#2226).
    • משנים את פעולת ברירת המחדל של Renderer.getMinDurationToProgressUs כדי להחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render.
    • תוקן באג שבו התזמון הפנימי עיכב את הפריים האחרון כשחיפשו את הסוף בזמן השהיה. נכון לעכשיו, תיקון הבאג נכנס לתוקף רק אם המדיניות ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled מופעלת.
    • הוספת שיטת ExoPlayer.setScrubbingModeEnabled(boolean). כך הנגן עובר אופטימיזציה לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל הגלילה). אפשר להתאים אישית את ההתנהגות של מצב הגלילה באמצעות setScrubbingModeParameters(..) ב-ExoPlayer וב-ExoPlayer.Builder.
    • אפשר להתאים אישית את סבילות החיפוש החלקי במצב גלילה.
    • הגברת קצב הפעולה של ה-codec במצב גלילה.
    • תוקן באג שבו שגיאות הכנה בתוכן של AdsMediaSource לא דווחו אף פעם (#2337).
    • תיקון דליפת זיכרון ב-MergingMediaSource, למשל כשמשתמשים בטעינת צד של כתוביות (#2338).
    • אפשרות להחזיר את הערך null ב-CmcdConfiguration.Factory כדי להשבית את הרישום ביומן של CMCD עבור קובצי מדיה ספציפיים (#2386).
    • הגדלת גודל ברירת המחדל של שטח אחסון זמני לתמונות מ-128kB (טעות בהעתקה והדבקה מטראקים של טקסט) ל-26MB, שזה מספיק גדול לתמונות Ultra HDR של 50MP (#2417).
    • הוספת PreCacheHelper שמאפשר לאפליקציות לטעון מראש מהמטמון מדיה אחת עם מיקום התחלה ומשך זמן שצוינו.
    • הוספת תמיכה בטעינה מראש ממיקום מסוים ב-DefaultPreloadManager.
  • ‫Transformer:
    • הוספת CodecDbLite שמאפשר אופטימיזציות ספציפיות לערכת השבבים של הגדרות קידוד הווידאו.
    • כדי להפעיל את אופטימיזציית ההגדרות של CodecDB Lite, מוסיפים את הדגל setEnableCodecDbLite ל-DefaultEncoderFactory. כברירת מחדל, הערך של הדגל הזה הוא false.
    • כדי למלא פער ראשוני (שנוסף באמצעות addGap()) באודיו שקט, עכשיו צריך להגדיר במפורש את experimentalSetForceAudioTrack(true) ב-EditedMediaItemSequence.Builder. אם הפער הוא באמצע הרצף, לא צריך להשתמש בדגל הזה.
    • העברת הממשק Muxer מ-media3-transformer אל media3-muxer.
    • צריך להגדיר את MediaItem.Builder().setImageDuration(long) כחובה כדי לייבא קובץ מדיה כתמונה.
    • מוסיפים את Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) שכולל רשימת עריכה של MP4 כשמבצעים חיתוך, כדי להורות לנגנים להתעלם מדגימות בין פריים המפתח שלפני נקודת ההתחלה של החיתוך, לבין נקודת ההתחלה של החיתוך.
    • מעדכנים את אפליקציית ההדגמה של Composition כך שתשתמש ב-Kotlin וב-Jetpack Compose, ומוסיפים VideoCompositorSettings בהתאמה אישית כדי לסדר את הרצפים בפריסה של 2x2 או PiP.
  • מחלצים:
    • ניתוח מטא-נתונים מקובצי MP4 מקוטעים (#2084).
    • ‫JPEG: תמיכה בתמונות עם תנועה שאין להן קטע Exif בהתחלה (#2552).
    • הוספת תמיכה בחיפוש ב-MP4 מקוטע עם כמה אטומי sidx. אפשר להפעיל את ההתנהגות הזו באמצעות הדגל FLAG_MERGE_FRAGMENTED_SIDX ב-FragmentedMp4Extractor (#9373).
    • התעלמות מטבלאות חיפוש ריקות בקובצי FLAC (כולל כאלה שמכילות רק נקודות חיפוש של פלייסהולדרים), וחזרה לחיפוש בינארי אם משך הקובץ ידוע (#2327).
    • תיקון הניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
    • צריך לעדכן את WavExtractor כך שישתמש בנתוני SubFormat של תוסף הכותרת בשביל פורמט האודיו כשמנתחים קובץ מסוג WAVE_FORMAT_EXTENSIBLE.
    • ‫MP4: הוספת תמיכה בתיבות ipcm ו-fpcm שמגדירות טראקים של אודיו PCM גולמי (אין תמיכה ב-PCM נקודה צפה של 64 ביט).
    • ‫MP4: טיפול בחלק הסיבוב של מטריצות הטרנספורמציה tkhd שמסובבות את הסרטון וגם משקפות אותו. כך סרטונים שצולמו במצלמה הקדמית של האייפון מוצגים בכיוון הנכון, אבל עם השתקפות שגויה בציר ה-Y (#2012).
    • ‫MP3: שימוש במשך ובגודל הנתונים ממטא-נתונים של קצב העברת נתונים משתנה (VBR) כמו Xing,‏ VBRI ודומים, כשחוזרים לחיפוש של קצב העברת נתונים קבוע (CBR) בגלל FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194).
  • אודיו:
    • תיקון באג שבו לא מתבצעת קריאה ל-AnalyticsListener.onAudioPositionAdvancing כשהפעלת האודיו מתחילה קרוב מאוד לסוף המדיה.
    • הוספת תמיכה בכל הפורמטים של דגימות PCM ליניאריות ב-ChannelMappingAudioProcessor וב-TrimmingAudioProcessor.
    • הוספת תמיכה בהפסקות באודיו ב-CompositionPlayer.
    • הסרת קריאה מיותרת ל-BaseAudioProcessor#flush() מ-BaseAudioProcessor#reset().
    • מאפשרת המרה קבועה של הספק האודיו לפורמט עם יותר או פחות ערוצים ב-DefaultAudioMixer.
    • הפיכת ChannelMappingAudioProcessor, ‏ TrimmingAudioProcessor ו-ToFloatPcmAudioProcessor לגלויים לכולם (#2339).
    • כדי לזהות חריגות ב-DefaultAudioSink, משתמשים ב-AudioTrack#getUnderrunCount() ב-AudioTrackPositionTracker במקום בהערכה לפי המאמץ המרבי.
    • שיפור ההחלקה של חותמות הזמן של האודיו במקרה של סטייה בלתי צפויה במיקום ממכשיר להצגת מידע של האודיו.
    • תיקון באג שבו הסנכרון של האודיו והווידאו לא פועל ב-10 השניות הראשונות אחרי שממשיכים את ההפעלה לאחר השהיה, כשהמכשיר מחובר למכשירי Bluetooth.
    • תוקן באג שגרם לכך ש-AnalyticsListener.onAudioPositionAdvancing לא דיווח על הזמן שבו האודיו התחיל להתקדם, אלא על הזמן של המדידה הראשונה.
    • תיקון השחזור לאודיו רב-ערוצי אחרי חזרה לאודיו סטריאו במכשירים מסוימים (#2258).
  • סרטון:
    • הרחבת הפתרון הזמני למשטח מנותק למכשירי Lenovo ו-Motorola (#2059).
    • שיפור של שחרור חלק של פריימים של סרטונים בהפעלה כשדגימות האודיו לא מתחילות בדיוק במיקום המבוקש.
    • הרחבת הפתרון הזמני למשטח מנותק למכשירי realme‏ (#2059).
    • הוספת API ניסיוני של ExoPlayer כדי לכלול את הדגל MediaCodec.BUFFER_FLAG_DECODE_ONLY כשמוסיפים לתור מאגרי קלט לפענוח בלבד. הדגל הזה יסמן למפענח לדלג על מאגרי הנתונים הזמניים (buffers) לפענוח בלבד, וכך החיפוש יהיה מהיר יותר. מפעילים אותו באמצעות DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * שיפור בדיקות הביצועים של קודקי וידאו בתוכנה. יכול להיות שבעקבות זאת טראקים נוספים יסומנו כ-EXCEEDS_CAPABILITIES.
    • תיקון שגיאות הפעלה של VP9 Widevine במכשירים מסוימים (#2408).
  • טקסט:
    • הוספת תמיכה בטראקים של VobSub בקובצי MP4‏ (#2510).
    • תיקון בעיה שבה ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה, ואז נטען בהצלחה, ואחריו יש כמה קטעי כתוביות ריקים (#2517).
    • תיקון של SSA ו-SubRip כדי להציג אות בתהליך כשמפעילים כתוביות (#2309).
    • תיקון בעיה שבה ההפעלה נתקעת כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם טראק כתוביות ריק (#2328).
    • תיקון כתוביות CEA-608 משובשות כשמפעילים שידורי H.262 שמכילים פריימים מסוג B (#2372).
    • הוספת תמיכה בכתוביות SSA עם CodecId = S_TEXT/SSA בקובצי Matroska. בעבר, MatroskaExtractor תמך רק ב-CodecId = S_TEXT/ASS, שנועד לייצג את הגרסה "המתקדמת" (גרסה 4 ואילך) של כתוביות SubStation Alpha (אבל לוגיקת הניתוח של ExoPlayer זהה בשתי הגרסאות) (#2384).
    • הוספת תמיכה במאפיין layer בקובצי כתוביות של SubStation Alpha‏ (SSA), שמשמש להגדרת סדר ה-Z של אותות כשיותר מאות אחד מוצג במסך בו-זמנית (#2124).
  • מטא-נתונים:
    • הוספנו תמיכה באחזור של משך המדיה ו-Timeline ל-MetadataRetriever, והעברנו אותו ל-API מבוסס-מופע, AutoCloseable. משתמשים ב-Builder החדש כדי ליצור מכונה של MediaItem, ואז קוראים ל-retrieveTrackGroups(), ל-retrieveTimeline() ול-retrieveDurationUs() כדי לקבל ListenableFuture למטא-נתונים. השיטות הסטטיות הקודמות הוצאו משימוש (#2462).
  • תמונה:
    • כדי למנוע קריסה של האפליקציה עם Canvas: trying to draw too large bitmap. מ-PlayerView כשמנסים להציג תמונות גדולות מאוד (למשל 50MP), צריך להגביל את מפות הסיביות המפוענחות לגודל התצוגה ב-BitmapFactoryImageDecoder.
    • משנים את החתימה של DefaultRenderersFactory.getImageDecoderFactory() כך שתקבל פרמטר Context.
    • צריך להתאים את הגודל המקסימלי של פלט מפת הסיביות שמשמש ב-CompositionPlayer לזה שכבר משמש ב-Transformer (כלומר, CompositionPlayer לא מתחשב בגודל התצוגה בזמן הפענוח של מפות סיביות, בניגוד ל-ExoPlayer).
  • DRM:
    • הוספת עומס יתר חדש של OfflineLicenseHelper.newWidevineInstance שמקבל MediaItem.DrmConfiguration כדי שכותרות של בקשות HTTP יחולו בצורה נכונה (#2169).
  • ההשפעה:
    • מוסיפים Presentation.createForShortSide(int) שיוצר Presentation שמבטיח שהצד הקצר ביותר תמיד תואם לערך הנתון, ללא קשר לכיוון הקלט.
  • מכשירי Muxer:
    • תוקן באג שבו לא הוגדרו דגלי דגימה נכונים לדגימות אודיו ב-MP4 מקוטע.
    • ‫writeSampleData() API משתמש עכשיו בכיתה BufferInfo ספציפית ל-muxer במקום ב-MediaCodec.BufferInfo.
    • מוסיפים את Muxer.Factory#supportsWritingNegativeTimestampsInEditList, שמוגדר כ-false כברירת מחדל.
  • תוסף IMA:
    • תוקן באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
    • תוקן באג שגרם לכך שקבוצות של מודעות אחרי הסיום של חלון VOD השהו את ההפעלה. קבוצות של מודעות עם שעת התחלה אחרי החלון לא נכנסות יותר לתור של MediaPeriodQueue (#2215).
  • סשן:
    • תיקון באג שגורם להתעלמות מחיבורים מבקרי Media3 של צד שלישי ללא הרשאות.
    • הסרת הבדיקה של הפקודות הזמינות כששולחים פקודות בהתאמה אישית ל-MediaBrowserServiceCompat מדור קודם. ההתנהגות הזו תואמת להתנהגות של בקרים או דפדפנים מדור קודם כשהם מחוברים לאפליקציה מדור קודם.
    • תוקן באג שגרם לכך ששגיאת ההפעלה הראשונה של נגן טופלה באופן שגוי כחריגה מתמשכת בהתאמה אישית. כך האפליקציה לא יכולה להתאושש.
    • תוקן באג שבו שינויים מסוימים בבקר שלא מטופלים על ידי הסשן עלולים לגרום ל-IllegalStateExceptions.
    • תוקן באג שבו פעולות של הבקר שלא מטופלות על ידי הסשן עלולות להשאיר את הבקר במצב לא תקין.
    • תיקון אזהרה על הפרה של StrictMode בנושא הפעלה לא בטוחה (#2330).
    • תוקן באג שבו קריאה ל-setSessionExtras מהשרשור הראשי בזמן הפעלת הנגן משרשור אפליקציה שונה מהשרשור הראשי גרמה ל-IllegalStateException (#2265).
    • לא מוצגת התראה באופן אוטומטי אם הנגן מוגדר עם קובצי מדיה בלי להכין או להפעיל אותם (#2423https://github.com/androidx/media/issues/2423). אפשר לשנות את ההתנהגות הזו באמצעות MediaSessionService.setShowNotificationForIdlePlayer.
    • אפשר להוסיף PlaybackException בהתאמה אישית לכל הבקרים או לבקרים נבחרים.
    • תוקן באג שבו דילוג בשידור חי ב-MediaController עלול לגרום ל-IllegalArgumentException.
    • בשידורים חיים, הפסקת הפרסום של מיקום ההפעלה והיכולת לחפש בפריט הנוכחי בממשקי השליטה במדיה של הפלטפורמה, כדי למנוע פגמים במיקום בממשק המשתמש של Android Auto (ובממשקי שליטה אחרים שמשתמשים במידע הזה מסשן המדיה של הפלטפורמה) (#1758).
    • תוקן באג שבו העברת null אל getLibraryRoot של MediaBrowser שמחובר ל-MediaBrowserServiceCompat מדור קודם גרמה ל-NullPointerException.
    • תוקן באג שבו שליחת פעולות בהתאמה אישית, תוצאת חיפוש או בקשת getItem גרמו לקריסה של אפליקציית הסשן הקודמת עם ClassNotFoundException.
    • תוקן באג שגרם לשיתוף של MediaItem.LocalConfiguration.uri עם MediaMetadata של הסשנים בפלטפורמה. כדי לשתף בכוונה URI ולאפשר לבקרים לבקש מחדש את המדיה, צריך להגדיר את MediaItem.RequestMetadata.mediaUri.
  • ממשק המשתמש:
    • תוקן באג שבו PlayerSurface בתוך רכיבים שניתנים לשימוש חוזר כמו LazyColumn לא פעל בצורה תקינה (#2493).
    • תוקן באג ב-Compose שגרם לפער בין הגדרת המצבים הראשוניים של הכפתורים לבין צפייה בשינוי במצב (למשל, צורות של סמלים או הפעלה). עכשיו המערכת מזהה שינויים שבוצעו בנגן מחוץ לתקופת התצפית (#2313).
    • מוסיפים מאחסני מצב ורכיבים קומפוזביליים למודול media3-ui-compose של SeekBackButtonState ו-SeekForwardButtonState.
    • הוספת תמיכה במצב הגרירה של ExoPlayer ל-PlayerControlView. כשהאפשרות הזו מופעלת, הנגן עובר למצב גרירה כשהמשתמש מתחיל לגרור את סרגל הגרירה, מנפיק קריאת player.seekTo לכל תנועה, ואז יוצא ממצב גרירה כשהמשתמש מרים את האצבע מהמסך. אפשר להפעיל את השילוב הזה באמצעות time_bar_scrubbing_enabled = true ב-XML או באמצעות השיטה setTimeBarScrubbingEnabled(boolean) מ-Java או מ-Kotlin.
    • צריך לגרום ל-PlayerSurface לקבל ארגומנט Player שניתן להגדיר כ-null.
  • הורדות:
    • הוספת תמיכה בהורדה חלקית של סטרימינג פרוגרסיבי. אפליקציות יכולות להכין סטרימינג פרוגרסיבי באמצעות DownloadHelper, ולבקש DownloadRequest מהעוזר הדיגיטלי תוך ציון מיקומי ההתחלה והסיום של המדיה מבוססת הזמן שההורדה צריכה לכסות. האובייקט DownloadRequest שמוחזר מכיל את טווח הבייטים שנפתר, שבאמצעותו אפשר ליצור ProgressiveDownloader ולהוריד את התוכן בהתאם.
    • מוסיפים את DownloadHelper.Factory, שבו מוחלפות השיטות הסטטיות של DownloadHelper.forMediaItem().
    • צריך להוסיף את Factory להטמעות של SegmentDownloader.
    • הוספת תמיכה בהורדה חלקית של שידורים דינמיים. אפליקציות יכולות להכין סטרימינג דינמי באמצעות DownloadHelper, ולבקש DownloadRequest מהכלי, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שההורדה צריכה לכלול. האובייקט DownloadRequest שמוחזר מכיל את טווח התאריכים שנפתר, שבאמצעותו אפשר ליצור SegmentDownloader קונקרטי ולהוריד את התוכן בהתאם.
  • תוסף Cronet:
    • הוספת טיפול אוטומטי בקובצי Cookie (#5975).
  • תוסף HLS:
    • תיקון באג שבו HlsSampleStreamWrapper מנסה לחפש בתוך המאגר כשאין קטעים זמינים במאגר #2598.
    • תיקון באג שבו שינויים בבחירת הטראק אחרי טעינת חלקים עם זמן אחזור קצר ורמזים לטעינה מראש יכולים לגרום להפעלה להיתקע או לקפוא (#2299).
    • כדי למנוע טעינות חוזרות מוגזמות, ממתינים חצי ממשך הזמן המוגדר כשהשרת לא מכבד את CAN-BLOCK-RELOAD=YES (#2317).
    • תוקן באג שגרם להשהיית ההפעלה כשהתחיל שידור של מודעות מעברון לפני מודעה באמצע הסרטון, ונעשה ניסיון לפתור את רשימת הנכסים של המודעה הלא נכונה (#2558).
    • תיקון ניתוח הפלייליסט כדי לקבל \f (הזנת טופס) בערכי מאפיינים של מחרוזת במירכאות (#2420).
    • תמיכה בעדכון מודעות מעברון עם אותו מזהה (#2427).
    • תוקן באג שבו שגיאות בטעינת פלייליסט לפעמים לא מופצות אחרי שנגמרים המקטעים לטעינה בשידור חי (#2401https://github.com/androidx/media/issues/2401).
    • קיבוץ של גרסאות כתוביות לפי תג NAME, בדומה לאופן שבו גרסאות אודיו כבר מקובצות (#1666).
    • תמיכה ב-X-ASSET-LIST ובשידורים חיים עם HlsInterstitialsAdsLoader.
  • תוסף DASH:
    • תוקנה בעיה שבה קבוצת ההתאמה של מצב ההרצה המהירה מוזגה עם קבוצת ההתאמה הראשית שלה כדי ליצור TrackGroup לא חוקי (#2148).
    • תוקן באג שבו קיצור משך הזמן של תקופת DASH עלול לגרום לחריגה כשדגימות מעבר למשך הזמן החדש כבר נקראו על ידי צינור עיבוד הנתונים לעיבוד (#2440).
    • תוקן באג שבו לא בוצעה הפניה אוטומטית כשנעשה שימוש בפרמטרים של שאילתת CMCD‏ (#2475).
  • תוסף RTSP:
    • הוספת תמיכה בחבילת צבירת נתונים של RTP ל-H265 בהתאם ל-RFC 7798#4.4.2 (#2413).
    • תיקון של RtspClient כדי להשתמש ב-URI של המיקום כפי שסופק במהלך עיבוד של תגובת HTTP 302‏ (#2398).
    • הוספת תמיכה בניתוח של 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" בשמות של קודקים שדווחו על ידי ShadowMediaCodecConfig.
  • הסרת סמלים שהוצאו משימוש:
    • הוסר ה-constructor שהוצא משימוש SegmentDownloader SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) וה-constructors התואמים במחלקות המשנה שלו DashDownloader, ‏ HlsDownloader ו-SsDownloader.
    • הוסרו Player.hasNext(), Player.hasNextWindow() שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasNextMediaItem().
    • הוסר Player.next() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר Player.seekToPreviousWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • הוסר Player.seekToNextWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר BaseAudioProcessor שהוצא משימוש במודול exoplayer. משתמשים ב-BaseAudioProcessor במודול common.
    • הסרת ה-constructor של MediaCodecVideoRenderer שיצא משימוש MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).

גרסה ‎1.8.0-rc02

‫24 ביולי 2025

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

גרסה ‎1.8.0-rc01

‫16 ביולי 2025

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

גרסה ‎1.8.0-beta01

‫2 ביולי 2025

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

גרסה 1.8.0-alpha01

‫19 במאי 2025

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

גרסה 1.7.0

גרסה 1.7.1

‫16 במאי 2025

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

גרסה 1.7.0

‫16 במאי 2025

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

גרסה 1.6.0

1.6.1

‫14 באפריל 2025

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

  • ספרייה משותפת:
    • הוספת השיטה PlaybackParameters.withPitch(float) להעתקה קלה של PlaybackParameters עם ערך pitch חדש (#2257).
  • ‫ExoPlayer:
    • תוקנה בעיה שבה המעבר בין קובצי מדיה נכשל בגלל שגיאה שניתן לתקן במעבד (renderer) במהלך האתחול של קובץ המדיה הבא (#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).
  • סשן:
    • הפחתת הזמן הקצוב לתפוגה של צבירת הנתונים בקריאות חוזרות (callbacks) של פלטפורמת MediaSession מ-500 ל-100 אלפיות השנייה, והוספת פונקציית setter ניסיונית שמאפשרת לאפליקציות להגדיר את הערך הזה.
    • תוקנה בעיה שבה התראות הופיעו שוב אחרי שהמשתמש סגר אותן (#2302).
    • תוקן באג שבו הסשן החזיר ציר זמן עם פריט אחד כשהנגן שעטוף למעשה ריק. הבעיה הזו קרתה כשהנגן העטוף לא הכיל את COMMAND_GET_TIMELINE, אבל הכיל את COMMAND_GET_CURRENT_MEDIA_ITEM, והנגן העטוף היה ריק (#2320).
    • תוקן באג שבו הקריאה ל-MediaSessionService.setMediaNotificationProvider לא בוצעה אחרי אינטראקציות אחרות עם השירות, כמו setForegroundServiceTimeoutMs (#2305).
  • ממשק המשתמש:
    • מפעילים את 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 מכילה את ה-commits האלה.

  • ספרייה משותפת:
    • מוסיפים את AudioManagerCompat ו-AudioFocusRequestCompat כדי להחליף את הסוגים המקבילים ב-androidx.media.
    • משדרגים את Kotlin מגרסה 1.9.20 לגרסה 2.0.20 ומשתמשים בפלאגין Compose Compiler Gradle. לשדרג את ספריית KotlinX Coroutines מגרסה 1.8.1 לגרסה 1.9.0.
    • צריך להסיר את השיטה Format.toBundle(boolean excludeMetadata) ולהשתמש ב-Format.toBundle() במקום זאת.
    • תיקון באג ב-SimpleBasePlayer שבו הגדרת currentMediaItemIndex חדש ב-State אחרי setPlaylist עם 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 ל-method‏ DefaultTrackSelector.selectVideoTrack().
    • מוסיפים את הפרמטר retryCount ל-MediaSourceEventListener.onLoadStarted ול-methods המתאימות של MediaSourceEventListener.EventDispatcher.
    • תוקן באג שבו פריטים בפלייליסט או תקופות בסטרימינג מסוג DASH עם כמה תקופות, שמשך הזמן שלהם לא תואם לתוכן בפועל, עלולים לגרום להקפאת פריימים בסוף הפריט (#1698).
    • מעבירים את BasePreloadManager.Listener ל-PreloadManagerListener ברמה העליונה.
    • אפשר להטמיע את RenderersFactory.createSecondaryRenderer כדי לספק רכיבי רינדור משניים לחימום מראש. התכונה הזו מאפשרת מעבר מהיר יותר בין קובצי מדיה במהלך ההפעלה.
    • הפעלת השליחה של CmcdData לבקשות מניפסט בפורמטים של סטרימינג דינמי: DASH,‏ HLS ו-SmoothStreaming (#1951).
    • צריך לספק את MediaCodecInfo של הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • כדי להגדיל את AdPlaybackStates, צריך לשנות את AdsMediaSource על ידי הוספת קבוצות של מודעות. שינויים לא תקינים מזוהים ומובילים לחריגה.
    • תוקנה בעיה שבה פריימים נוספים לפענוח בלבד עשויים להופיע ברצף מהיר במעבר למדיה של תוכן אחרי מודעה באמצע הסרטון.
    • כדי לאפשר לאפליקציות לקבל שתי סכימות שונות של מטא-נתונים כברירת מחדל, צריך לגרום ל-DefaultRenderersFactory להוסיף שני מופעים של MetadataRenderer.
    • הערכה מחדש של הצורך בביטול הטעינה המתמשכת של מקטע כשההפעלה מושהית (#1785).
    • הוספת אפשרות ל-ClippingMediaSource שמאפשרת חיתוך במדיה שלא ניתן לדלג בה.
    • תוקן באג שבו דילוג עם חימום מראש עלול לחסום את המעבר לקובץ המדיה הבא.
    • תוקן באג שבו ExoPlayer.isLoading() נשאר true בזמן שהוא עבר ל-STATE_IDLE או ל-STATE_ENDED (#2133).
    • הוספת lastRebufferRealtimeMs אל LoadControl.Parameter (#2113).
  • ‫Transformer:
    • הוספת תמיכה בהמרת פורמט (transmuxing) לפורמטים חלופיים שתואמים לדורות קודמים.
    • הוספת תמיכה בהמרת קידוד ובהמרת ריבוב של פורמט Dolby Vision (פרופיל 8).
    • עדכון הפרמטרים של VideoFrameProcessor.registerInputStream ו-VideoFrameProcessor.Listener.onInputStreamRegistered כדי להשתמש ב-Format.
    • יצירת מטא-נתונים סטטיים של HDR כשמשתמשים ב-DefaultEncoderFactory.
    • מפעילים את התמיכה באבחון של פלטפורמת Android באמצעות MediaMetricsManager. ‫Transformer מעביר לפלטפורמה אירועי עריכה ונתוני ביצועים, שעוזרים לספק מידע על ביצועי המערכת ועל תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה גם אם המשתמש במכשיר הפעיל את שיתוף נתוני דפוסי שימוש וביצועים. אפליקציות יכולות לבטל את ההסכמה לתרום לניתוח הנתונים של הפלטפורמה עבור Transformer באמצעות Transformer.Builder.setUsePlatformDiagnostics(false).
    • פיצול של InAppMuxer ל-InAppMp4Muxer ול-InAppFragmentedMp4Muxer. משתמשים ב-InAppMp4Muxer כדי ליצור קובץ MP4 לא מקוטע, וב-InAppFragmentedMp4Muxer כדי ליצור קובץ MP4 מקוטע.
    • העברת הממשק Muxer מ-media3-muxer אל media3-transformer.
    • מוסיפים את MediaProjectionAssetLoader, שמספק מדיה מ-MediaProjection להקלטת מסך, ומוסיפים תמיכה בהקלטת מסך לאפליקציית ההדגמה של Transformer.
    • הוספת #getInputFormat() לממשק של Codec.
    • במידת האפשר, העבירו את האחריות לשחרור ה-GlObjectsProvider אל המתקשר ב-DefaultVideoFrameProcessor וב-DefaultVideoCompositor.
  • מחלצים:
    • ‫AVI: תיקון הטיפול בקבצים עם אודיו דחוס בקצב העברת נתונים קבוע, שבהם כותרת הסטרימינג מאחסנת את מספר הבייטים במקום את מספר החלקים.
    • תוקן הטיפול ביחידות NAL עם אורכים שמבוטאים בבייט אחד או שניים (במקום 4).
    • תיקון ArrayIndexOutOfBoundsException ברשימות עריכה של MP4 כשרשימת העריכה מתחילה בפריים לא מסונכרן בלי פריים מסונכרן לפניו (#2062).
    • תוקנה בעיה שבה שידורי TS נתקעים במכשירים מסוימים (#2069).
    • ‫FLAC: הוספת תמיכה בקובצי FLAC של 32 ביט. בעבר, ההפעלה של קבצים כאלה נכשלה עם IllegalStateException: Playback stuck buffering and not loading (#2197).
  • אודיו:
    • תיקון של onAudioPositionAdvancing כך שהפונקציה תיקרא כשההפעלה תתחדש (בעבר היא נקראה כשההפעלה הושהתה).
    • אל תעקפו את SonicAudioProcessor כש-SpeedChangingAudioProcessor מוגדר עם פרמטרים של ברירת מחדל.
    • תוקנה בעיה של גלישה תחתונה (underflow) ב-Sonic#getOutputSize() שעלולה לגרום ל-DefaultAudioSink להיתקע.
    • צריך לתקן את MediaCodecAudioRenderer.getDurationToProgressUs() ו-DecoderAudioRenderer.getDurationToProgressUs() כדי שפעולות החיפוש יאפסו בצורה נכונה את משכי הזמן שצוינו.
    • הופכים את androidx.media3.common.audio.SonicAudioProcessor לגרסה הסופית.
    • הוספת תמיכה ב-PCM מסוג float ל-ChannelMappingAudioProcessor ול-TrimmingAudioProcessor.
  • סרטון:
    • שינוי של MediaCodecVideoRenderer.shouldUsePlaceholderSurface ל-protected כדי שאפליקציות יוכלו לשנות את ההגדרה ולחסום את השימוש במשטחים של פלייסהולדרים (#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 כמחלקת משנה כדי לאפשר הגדרות שכבת-על דינמיות.
  • מכשירי Muxer:
    • העברנו את MuxerException אל מחוץ לממשק Muxer כדי להימנע משם מלא ארוך מאוד.
    • השיטה setSampleCopyEnabled() שונתה ל-setSampleCopyingEnabled() גם ב-Mp4Muxer.Builder וגם ב-FragmentedMp4Muxer.Builder.
    • הפונקציות Mp4Muxer.addTrack() ו-FragmentedMp4Muxer.addTrack() מחזירות עכשיו מזהה טראק מסוג int במקום TrackToken.
    • Mp4Muxer ו-FragmentedMp4Muxer לא מטמיעים יותר את הממשק Muxer.
    • השבתת האפשרות להעתיק ולשלוח דגימות של Mp4Muxer בקבוצות כברירת מחדל.
    • תיקון באג ב-FragmentedMp4Muxer שיוצר הרבה מקטעים כשנכתב רק טראק אודיו.
  • סשן:
    • שמירה על מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצוב לתפוגה בלי להסתכן במגבלות בסיוע שירות שפועל בחזית במכשירים שונים. חשוב לזכור: אי אפשר יותר להשתמש בקריאה ל-player.pause() כדי לעצור את השירות שפועל בחזית לפני stopSelf() כשמבטלים את onTaskRemoved. במקום זאת, צריך להשתמש ב-MediaSessionService.pauseAllPlayersAndStopSelf().
    • ההתראה תישאר גלויה כשההפעלה נכנסת למצב שגיאה או למצב עצירה. ההתראה תוסר רק אם הפלייליסט יימחק או אם הנגן ייסגר.
    • שיפור הטיפול בפעולות ACTION_PLAY ו-ACTION_PAUSE של MediaSession בפלטפורמת Android, כך שרק אחת מהן תוגדר בהתאם לפקודות הזמינות, וגם קבלה של מצב שבו רק אחת מהן מוגדרת.
    • הוספת Context כפרמטר ל-MediaButtonReceiver.shouldStartForegroundService (#1887).
    • תוקן באג שבו קריאה ל-method של Player ב-MediaController שמחובר לסשן מדור קודם גרמה לביטול השינויים מעדכון בהמתנה.
    • הגדרת MediaSession.setSessionActivity(PendingIntent) כך שיקבל ערך null (#2109).
    • תוקן באג שגרם לכך שהתראה ישנה נשארה גלויה אחרי שהפלייליסט נמחק (#2211).
  • ממשק המשתמש:
    • מוסיפים מאחסני מצב ורכיבים קומפוזביליים למודול media3-ui-compose עבור PlayerSurface, ‏ PresentationState, ‏ PlayPauseButtonState,‏ NextButtonState, ‏ PreviousButtonState, ‏ RepeatButtonState,‏ ShuffleButtonState ו-PlaybackSpeedState.
  • הורדות:
    • תיקון באג ב-CacheWriter שמשאיר את מקורות הנתונים פתוחים ואת אזורי המטמון נעולים במקרה שמקור הנתונים מחזיר Exception שאינו IOException (#9760).
  • תוסף HLS:
    • מוסיפים גרסה ראשונה של HlsInterstitialsAdsLoader. הכלי לטעינת מודעות קורא את מודעות המעברון של פלייליסט המדיה ב-HLS וממפה אותן ל-AdPlaybackState שמועבר אל AdsMediaSource. הגרסה הראשונית הזו תומכת רק בסטרימינג של HLS VOD עם מאפייני X-ASSET-URI.
    • מוסיפים את HlsInterstitialsAdsLoader.AdsMediaSourceFactory. אפליקציות יכולות להשתמש בו כדי ליצור מכונות של AdsMediaSource שמשתמשות ב-HlsInterstitialsAdsLoader בצורה נוחה ובטוחה.
    • ניתוח התג SUPPLEMENTAL-CODECS מהפלייליסט של HLS כדי לזהות פורמטים של Dolby Vision (#1785).
    • הקלה בתנאי לדילוג כדי לסנכרן מיקומים בשידור HLS‏ (#2209).
  • תוסף DASH:
    • נוספה תמיכה בפורמט AC-4 Level-4 ל-DASH (#1898).
    • תוקנה בעיה בחישוב מרווח הזמן לעדכון של הוספת מודעות בשידורים חיים עם כמה תקופות (#1698).
    • ניתוח של המאפיין scte214:supplementalCodecs ממניפסט DASH כדי לזהות פורמטים של Dolby Vision (#1785).
    • שיפור הטיפול במעברים בין תקופות בשידורים חיים שבהם התקופה מכילה דגימות מדיה מעבר למשך התקופה המוצהר (#1698).
    • תוקנה בעיה שבה קבוצות של התאמות שמסומנות ב-adaptation-set-switching אבל עם שפות שונות או דגלי תפקידים שונים מוזגו יחד (#2222).
  • תוספי מפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • הוספת מודול המפענח של MPEG-H, שמשתמש במפענח המובנה של MPEG-H כדי לפענח אודיו בפורמט MPEG-H (#1826).
  • תוסף MIDI:
    • העברת מופעים מותאמים אישית של AudioSink ו-AudioRendererEventListener אל MidiRenderer.
  • תוסף Cast:
    • העלאת התלות של play-services-cast-framework לגרסה 21.5.0 כדי לתקן קריסה של FLAG_MUTABLE באפליקציות שמטרגטות את API 34 ואילך במכשירים שבהם Google Play Services מותקן אבל מושבת (#2178).
  • אפליקציית הדגמה:
    • אפשר להרחיב את demo-compose באמצעות כפתורים נוספים ולשפר את השילוב של PlayerSurface עם תמיכה בשינוי קנה מידה ובצמצם.
  • הסרת סמלים שהוצאו משימוש:
    • צריך להסיר את השיטה AudioMixer.create() שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultAudioMixer.Factory().create().
    • מסירים את ה-methods הבאות של Transformer.Builder שהוצאו משימוש:
      • ‫setTransformationRequest(), במקומה צריך להשתמש ב-setAudioMimeType(),‏ setVideoMimeType() ו-setHdrMode().
      • ‫setAudioProcessors(), מגדירים את מעבד האודיו ב-EditedMediaItem.Builder.setEffects() ומעבירים אותו אל Transformer.start().
      • ‫setVideoEffects(), מגדירים את אפקט הווידאו ב-EditedMediaItem.Builder.setEffects() ומעבירים אותו אל Transformer.start().
      • ‫setRemoveAudio(), משתמשים ב-EditedMediaItem.Builder.setRemoveAudio() כדי להסיר את האודיו מה-EditedMediaItem שמועבר אל Transformer.start().
      • setRemoveVideo(), צריך להשתמש ב-EditedMediaItem.Builder.setRemoveVideo() כדי להסיר את הסרטון מה-EditedMediaItem שהועבר אל Transformer.start().
      • ‫setFlattenForSlowMotion(), צריך להשתמש ב-EditedMediaItem.Builder.setFlattenForSlowMotion() כדי לשטח את EditedMediaItem שמועבר אל Transformer.start().
      • ‫setListener(), צריך להשתמש ב-addListener(), ב-removeListener() או ב-removeAllListeners().
    • מסירים את ה-methods הבאות של Transformer.Listener שהוצאו משימוש:
      • onTransformationCompleted(MediaItem), צריך להשתמש ב-onCompleted(Composition, ExportResult).
      • onTransformationCompleted(MediaItem, TransformationResult), צריך להשתמש ב-onCompleted(Composition, ExportResult).
      • onTransformationError(MediaItem, Exception), צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationException), צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationResult, TransformationException), צריך להשתמש ב-onError(Composition, ExportResult, ExportException).
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), צריך להשתמש ב-onFallbackApplied(Composition, TransformationRequest, TransformationRequest).
    • צריך להסיר את המחלקה TransformationResult שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportResult.
    • צריך להסיר את המחלקה TransformationException שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportException.
    • הסרת Transformer.PROGRESS_STATE_NO_TRANSFORMATION שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.PROGRESS_STATE_NOT_STARTED.
    • הסרת Transformer.setListener() שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.addListener(), ב-Transformer.removeListener() או ב-Transformer.removeAllListeners().
    • הסרת Transformer.startTransformation() שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.start(MediaItem, String).
    • הסרת SingleFrameGlShaderProgram שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-BaseGlShaderProgram.
    • הסרה של Transformer.flattenForSlowMotion. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItem.flattenForSlowMotion.
    • הוסרו ExoPlayer.VideoComponent, ‏ ExoPlayer.AudioComponent,‏ ExoPlayer.TextComponent ו-ExoPlayer.DeviceComponent.
    • בוצעה הסרה של androidx.media3.exoplayer.audio.SonicAudioProcessor.
    • הסרנו את ה-methods הבאות של DownloadHelper שהוצאו משימוש:
      • ה-constructor‏ DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), צריך להשתמש במקום זאת ב-DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList).
      • ב-getRendererCapabilities(RenderersFactory), אפשר להשיג פונקציונליות מקבילה על ידי יצירת DefaultRendererCapabilitiesList עם RenderersFactory וקריאה ל-DefaultRendererCapabilitiesList.getRendererCapabilities().
      • הוסר אמצעי תשלום אחד (PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)). במקום זאת, אתם צריכים להשתמש ב-PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) ולהעביר את (MediaSession.Token) compatToken.getToken().

1.6.0-rc02

‫19 במרץ 2025

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

1.6.0-rc01

‫12 במרץ 2025

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

1.6.0-beta01

‫26 בפברואר 2025

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

גרסה 1.6.0-alpha03

‫6 בפברואר 2025

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

גרסה 1.6.0-alpha02

‫30 בינואר 2025

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

גרסה 1.6.0-alpha01

‫20 בדצמבר 2024

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

גירסה 1.5

גירסה 1.5.1

‫19 בדצמבר 2024

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

  • ‫ExoPlayer:
    • השבתת השימוש בפענוח אסינכרוני ב-MediaCodec כדי למנוע בעיות של זמן קצוב לתפוגה של קודק שדווחו ב-API הזה של הפלטפורמה (#1641).
  • מחלצים:
    • ‫MP3: לא לעצור את ההפעלה מוקדם מדי כשתוכן העניינים של מסגרת VBRI לא מכסה את כל נתוני ה-MP3 בקובץ (#1904).
  • סרטון:
    • ביטול השימוש בערכים שסופקו של יחס הגובה-רוחב של הפיקסלים של 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().
    • כדי לציין ישירות את Timeline ואת Tracks ו-Metadata הנוכחיים במקום ליצור מבנה של פלייליסט, צריך להוסיף שינוי ל-SimpleBasePlayer.State.Builder.setPlaylist().
    • מגדילים את minSdk ל-21 (Android Lollipop). השינוי הזה תואם לכל שאר הספריות של AndroidX.
    • מוסיפים את פריט המידע שנוצר בתהליך הפיתוח (Artifact) של androidx.media3:media3-common-ktx, שמספק פונקציונליות ספציפית ל-Kotlin שמבוססת על הספרייה הנפוצה.
    • מוסיפים פונקציית השעיה של תוסף Player.listen כדי להפעיל שגרת המשך (coroutine) להאזנה ל-Player.Events בספרייה media3-common-ktx.
    • הסרת הערות @DoNotInline ממחלקות פנימיות שהוצאו ידנית מהשורה, שנועדו למנוע כשלים באימות מחלקות בזמן ריצה. בגרסאות האחרונות של R8, קריאות כאלה מועברות עכשיו אוטומטית אל מחוץ לשורה כדי למנוע כשלים בזמן הריצה (כך שכבר לא נדרשת העברה ידנית אל מחוץ לשורה). כל משתמשי Gradle של הספרייה כבר צריכים להשתמש בגרסה של הפלאגין של Android Gradle שמשתמשת בגרסה של R8 שעושה את זה, בגלל compileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle יצטרכו לוודא ששלב הכיווץ/ההסתרה המקביל ל-R8 מבצע תהליך אוטומטי דומה של out-of-lining כדי למנוע כשלים באימות של מחלקות בזמן הריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
  • ‫ExoPlayer:
    • עכשיו אפשר להפעיל את MediaCodecRenderer.onProcessedStreamChange() לכל קובץ מדיה. בעבר, לא הייתה קריאה לפונקציה הזו עבור המודעה הראשונה. כדי להפעיל את האפשרות הזו, צריך להשתמש ב-MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().
    • מוסיפים את PreloadMediaSource.PreloadControl.onPreloadError כדי לאפשר להטמעות של PreloadMediaSource.PreloadControl לבצע פעולות כשמתרחשת שגיאה.
    • מוסיפים את BasePreloadManager.Listener כדי להפיץ אירועי טעינה מראש לאפליקציות.
    • אפשר לשנות את הזמן הקצוב לתפוגה של לקוח SNTP ולנסות שוב כתובות חלופיות בזמן הקצוב לתפוגה (#1540).
    • הסרת השדה MediaCodecAdapter.Configuration.flags כי הוא תמיד היה אפס.
    • המשתמשים יכולים לבחור את הרמקול המובנה להפעלה ב-Wear OS API 35 ואילך (אם המכשיר תומך בכך).
    • דחיית הקריאה החוסמת אל Context.getSystemService(Context.AUDIO_SERVICE) עד להפעלת הטיפול במיקוד האודיו. כך אפשר לוודא שהקריאה החוסמת לא מתבצעת אם הטיפול במיקוד האודיו לא מופעל (#1616).
    • אפשר להפעיל את הסרטון בלי קשר למשך הזמן של הטעינה מראש אם הטעינה נכשלת (#1571).
    • מוסיפים את AnalyticsListener.onRendererReadyChanged() כדי לאותת מתי רכיבי רינדור ספציפיים מאפשרים להפעיל את הסרטון.
    • תיקון: לפעמים MediaCodec.CryptoException מדווח כ"שגיאה לא צפויה בסביבת זמן הריצה" כש-MediaCodec פועל במצב אסינכרוני (פעולת ברירת המחדל ב-API 31 ואילך).
    • מעבירים את bufferedDurationUs במקום את bufferedPositionUs עם PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). בנוסף, השינוי של DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS ל-DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, מחייב את האפליקציות להעביר ערך שמייצג משך זמן ספציפי ממיקום ברירת המחדל להתחלה, שבו צריך לטעון מראש את מקור המדיה התואם באמצעות IntDef, במקום מיקום.
    • צריך להוסיף הטמעה של ForwardingRenderer שמעבירה את כל הפעלות ה-method למרנדר אחר (1703).
    • הוספת טעינה מראש של הפלייליסט לפריט הבא בפלייליסט. כדי להפעיל טעינה מראש, אפליקציות יכולות לבצע קריאה ל-ExoPlayer.setPreloadConfiguration(PreloadConfiguration) בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, כשהתכונה מופעלת, DefaultLoadControl מגביל את הטעינה מראש כך שהיא תתחיל ותמשיך רק כשהנגן לא טוען תוכן להפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה של LoadControl.shouldContinuePreloading() בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl). הטמעת ברירת המחדל של LoadControl משביתה את הטעינה מראש אם האפליקציה משתמשת בהטמעה בהתאמה אישית של LoadControl.
    • הוספת ה-method‏ MediaSourceEventListener.EventDispatcher.dispatchEvent() כדי לאפשר הפעלת אירועים של פונקציות event listener של מחלקות משנה (1736).
    • מוסיפים את DefaultPreloadManager.Builder שיוצר את המכונות של DefaultPreloadManager ו-ExoPlayer עם הגדרות משותפות באופן עקבי.
    • מסירים את הפרמטר Renderer[] מ-LoadControl.onTracksSelected() כי ההטמעה של DefaultLoadControl יכולה לאחזר את סוגי השידורים מ-ExoTrackSelection[].
    • הוצאה משימוש של DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) וסימון השיטה כסופית כדי למנוע ביטולים. במקומו צריך להשתמש ב-DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) החדש.
    • דיווח על אירועי MediaSourceEventListener ממקורות משניים ב-MergingMediaSource. כתוצאה מכך, אירועים של התחלת טעינה, שגיאה, ביטול והשלמה ידווחו על כתוביות שנטענו באופן ידני (אלה שנוספו באמצעות MediaItem.LocalConfiguration.subtitleConfigurations), והם עשויים להופיע כאירועי טעינה כפולים שנשלחו מ-AnalyticsListener.
    • מניעת מצבים שבהם שגיאות בכתוביות ובמטא-נתונים עוצרות לגמרי את ההפעלה. במקום זאת, הטראק הבעייתי מושבת וההפעלה של שאר הטראקים נמשכת (#1722).
      • בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות ניתוח (למשל, נתוני כתוביות לא חוקיים) ושגיאות טעינה (למשל, HTTP 404) משויכות מופקות באמצעות קריאות חוזרות (callbacks) של onLoadError.
      • בטיפול בכתוביות מדור קודם (במהלך הרינדור), רק שגיאות טעינה משויכות מופקות באמצעות קריאות חוזרות (callbacks) של onLoadError, ושגיאות ניתוח מתעלמות באופן שקט (זוהי התנהגות קיימת).
    • תוקן באג שבו פריטים בפלייליסט או תקופות בסטרימינג מסוג DASH עם כמה תקופות, שמשך הזמן שלהם לא תואם לתוכן בפועל, עלולים לגרום להקפאת פריימים בסוף הפריט (#1698).
    • הוספת פונקציית setter ל-SntpClient כדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (#1794).
  • ‫Transformer:
    • הוספת SurfaceAssetLoader, שתומך בהוספת נתוני וידאו לתור ל-Transformer באמצעות Surface.
    • ‫ImageAssetLoader מדווח על קלט לא נתמך דרך AssetLoader.onError במקום להפעיל IllegalStateException.
    • כדי לייצא תמונה, חובה להגדיר את משך הצגת התמונה באמצעות MediaItem.Builder.setImageDurationMs.
    • הוספת תמיכה בייצוא של פערים ברצפים של EditedMediaItems של אודיו.
  • בחירת טראק:
    • ‫DefaultTrackSelector: עדיפות לאודיו מבוסס-אובייקטים על פני אודיו מבוסס-ערוצים כשגורמים אחרים זהים.
  • מחלצים:
    • מאפשר ל-Mp4Extractor ול-FragmentedMp4Extractor לזהות דגימות H264 שלא משמשות כקובץ עזר לדגימות הבאות.
    • הוספת אפשרות להפעיל חיפוש מבוסס-אינדקס ב-AmrExtractor.
    • התייחסות לקובצי MP3 עם יותר מ-128kB בין פריימים תקינים כקטועים (במקום כלא תקינים). זה אומר שקבצים עם נתונים שהם לא MP3 בסוף, בלי מטא-נתונים אחרים שמציינים את האורך של בייטים ב-MP3, מפסיקים עכשיו את ההפעלה בסוף הנתונים של ה-MP3 במקום להיכשל עם ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563).
    • תוקן הטיפול בדגימות של מודעות וידאו לפני הסרטון (preroll) במיקומי התחלה של מדיה שהם לא פריים מפתח, כשמעבדים רשימות עריכה בקובצי 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 ברמה 4 של AC-4 (#1265).
  • מקור נתונים:
    • עדכון של HttpEngineDataSource כדי לאפשר שימוש החל מגרסה S תוסף 7 במקום רמת API‏ 34 (#1262).
    • ‫DataSourceContractTest: מוודאים שהפונקציה DataSource.getUri() מחזירה את ה-URI שפוענח (כפי שמתועד). אם הוא שונה מה-URI של הבקשה, אפשר לציין זאת בבדיקות באמצעות השיטה החדשה DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • ‫DataSourceContractTest: מוודאים ש-DataSource.getUri() ו-getResponseHeaders() מחזירים את הערך "פתוח" אחרי קריאה שנכשלה ל-open() (בגלל משאב שלא נמצא) ולפני קריאה עוקבת ל-close().
      • שינוי של DataSourceContractTest.getNotFoundResources() מאפשר למחלקות משנה לבדיקה לספק כמה משאבים מסוג "לא נמצא", וגם לספק את כל הכותרות הצפויות. כך אפשר להבחין בין HTTP 404 (עם כותרות) לבין "השרת לא נמצא" (ללא כותרות).
  • אודיו:
    • הגדרה אוטומטית של מטא-נתונים של עוצמת קול CTA-2075 ב-codec אם הם קיימים במדיה.
    • הנמכה חלקה של עוצמת הקול כשמדלגים קדימה או אחורה בסרטון.
    • תיקון צלילי פופ שעלולים להתרחש במהלך חיפושים.
    • תיקון הצטברות שגיאות חיתוך באלגוריתם של Sonic למתיחת זמן/שינוי גובה הצליל.
    • תיקון באג ב-SpeedChangingAudioProcessor שגורם להשמטת פריימים בפלט.
  • סרטון:
    • ‫MediaCodecVideoRenderer נמנע מפענוח דגימות שלא מעובדות ולא משמשות כקובץ עזר לדגימות אחרות.
    • ב-API 35 ואילך, MediaCodecAdapter עשוי עכשיו לקבל null Surface ב-configure וקריאות ל-method חדש detachOutputSurface כדי להסיר Surface שהוגדר בעבר אם ה-codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported).
    • שימוש בערכים שסופקו של יחס הגובה-רוחב של הפיקסלים ב-MediaCodecAdapter, אם סופקו, במהלך העיבוד של onOutputFormatChanged (#1371).
    • הוספת פתרון עקיף לבעיה במכשיר Galaxy Tab S7 FE שגורמת לסימון של סטרימינג מאובטח של H264 בקצב של 60fps כלא נתמך (#1619).
    • הוספת פתרון עקיף לקודקים שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות של סוף הסטרימינג.
  • טקסט:
    • הוספת VoiceSpan בהתאמה אישית ואכלוס שלו עבור טווחי קול של WebVTT (#1632).
    • מוודאים שמוצג WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שחורגות מ-long של 64 ביט כשהן מיוצגות כמיקרו-שניות ומוכפלות בבסיס הזמן של MPEG ב-90,000) (#1763).
    • תמיכה בכתוביות CEA-608 בתוכן של Dolby Vision (#1820).
    • תיקון בעיה שבה ההפעלה נתקעת בסטרימינג של DASH עם כמה תקופות כשהכתוביות מסוג CEA-608 מופעלות (#1863).
  • מטא-נתונים:
    • מקצים את הסוג C.TRACK_TYPE_METADATA לטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
  • תמונה:
    • הוספת ExternallyLoadedImageDecoder לשילוב פשוט עם ספריות חיצוניות לטעינת תמונות כמו Glide או Coil.
  • מקור נתונים:
    • הוספת FileDescriptorDataSource, DataSource חדש שאפשר להשתמש בו כדי לקרוא מ-FileDescriptor (#3757).
  • ההשפעה:
    • הוספת פתרון עקיף של DefaultVideoFrameProcessor לשינוי קנה מידה קטן של SurfaceTexture. הפונקציה SurfaceTexture עשויה לכלול שינוי קטן בקנה המידה שחותך גבול של טקסל אחד מסביב לקצה של מאגר נתונים חתוך. עכשיו הבעיה הזו מטופלת, והפלט קרוב יותר למה שצפוי.
    • האצה של DefaultVideoFrameProcessor.queueInputBitmap(). לכן, ייצוא תמונות לסרטונים באמצעות Transformer מהיר יותר.
  • תוסף IMA:
    • תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-ArrayIndexOutOfBoundsException ב-ImaServerSideAdInsertionMediaSource.
    • תוקן באג שבו שידורי DAI שהוכנסו בצד השרת ללא מודעה לפני הסרטון יכולים לגרום ל-ArrayIndexOutOfBoundsException כשמפעילים אחרי המודעה האחרונה באמצע הסרטון (#1741).
  • סשן:
    • צריך להוסיף את MediaButtonReceiver.shouldStartForegroundService(Intent) כדי לאפשר לאפליקציות לבטל פקודת הפעלה שמגיעה לחידוש ההפעלה, על ידי שינוי השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר להפסיק את ההפעלה בלי שהמערכת תקריס את השירות עם ForegroundServiceDidNotStartInTimeException (#1528).
    • תוקן באג שגרם לכך שפקודות בהתאמה אישית שנשלחו מ-MediaBrowser נשלחו אל MediaSessionCompat.Callback במקום אל הווריאנט MediaBrowserServiceCompat של השיטה, כשהיה חיבור לשירות מדור קודם. הבעיה הזו מנעה מ-MediaBrowser לקבל את ערך ההחזרה בפועל שנשלח בחזרה על ידי השירות הקודם (#1474).
    • טיפול ב-IllegalArgumentException שנזרק על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור ל-intent של לחצן המדיה (#1730).
    • הוספת כפתורי פקודות לקובצי מדיה. הפעולה הזו מוסיפה את Media3 API למה שהיה ידוע בתור Custom browse actions בספרייה הקודמת עם MediaBrowserCompat. שימו לב שב-Media3, כפתורי הפקודות לפריטי מדיה זמינים גם ל-MediaBrowser וגם ל-MediaController. הטמעה של פעולות עיון בהתאמה אישית * תוקן באג שבו בקר Media3 לפעמים לא הצליח לאפשר לאפליקציית סשן להפעיל שירות שפועל בחזית אחרי בקשה של play().
    • צריך להגביל את CommandButton.Builder.setIconUri כך שיקבל רק מזהי URI של תוכן.
    • העברת רמזים לחיבור של דפדפן Media3 אל MediaBrowserCompat הראשוני כשמתחברים ל-MediaBrowserCompat מדור קודם. השירות יכול לקבל את הצעות החיבור שמועברות כהצעות בסיסיות בקריאה הראשונה ל-onGetRoot().
    • תוקן באג שבו MediaBrowser שמחובר לשירות דפדפן מדור קודם לא קיבל שגיאה שנשלחה על ידי השירות אחרי שהדפדפן נרשם ל-parentid.
    • שיפור התנהגות יכולת הפעולה ההדדית, כך שדפדפן Media3 שמחובר ל-MediaBrowserService מדור קודם לא מבקש את הצאצאים של parentId פעמיים כשנרשמים להורה.
  • ממשק המשתמש:
    • הפיכת הסרטון המתוח/החתוך ב-PlayerView-in-Compose-AndroidView לפתרון עקיף להצטרפות, בגלל בעיות במעברים משותפים שמבוססים על XML. באפליקציות שמשתמשות ב-PlayerView בתוך AndroidView צריך להפעיל את PlayerView.setEnableComposeSurfaceSyncWorkaround כדי להביע הסכמה (#1237, #1594).
    • הוספת setFullscreenButtonState ל-PlayerView כדי לאפשר עדכונים של הסמל של לחצן המסך המלא לפי דרישה, כלומר מחוץ לפס ולא בתגובה לאינטראקציה של קליק (#1590, #184).
    • תיקון באג שבו האפשרות "ללא" בבחירת הטקסט לא פועלת אם יש העדפות לבחירת טראק טקסט שמוגדרות באפליקציה.
  • תוסף DASH:
    • הוספת תמיכה לתקופות שמתחילות באמצע פלח (#1440).
  • תוסף Smooth Streaming:
    • תיקון שגיאת Bad magic number for Bundle בהפעלת סטרימינג ב-SmoothStreaming עם טראקים של טקסט (#1779).
  • תוסף RTSP:
    • תיקון הסרת פרטי משתמשים בכתובות URL שמכילות תווים מקודדים של @ (#1138).
    • תיקון קריסה בזמן ניתוח של חבילות RTP עם תוספי כותרת (#1225).
  • תוספי מפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • הוספנו את מודול המפענח של 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().
    • צריך להסיר את ה-method‏ Player.previous() שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • צריך להסיר את השיטה DrmSessionEventListener.onDrmSessionAcquired שיצאה משימוש.
    • הסרת בנאים (constructors) של DefaultEncoderFactory שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultEncoderFactory.Builder.

גרסה ‎1.5.0-rc02

‫19 בנובמבר 2024

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

גרסה ‎1.5.0-rc01

‫13 בנובמבר 2024

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

גרסה ‎1.5.0-beta01

‫30 באוקטובר 2024

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

גרסה ‎1.5.0-alpha01

‫10 בספטמבר 2024

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

גרסה 1.4.0

גרסה 1.4.1

‫27 באוגוסט 2024

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

  • ‫ExoPlayer:
    • טיפול בקריאות חוזרות (callbacks) של טעינה מראש באופן אסינכרוני ב-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 של ה-framework‏ (#1603).
  • ההשפעה:
    • מוסיפים שיטת 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 מכילה את ה-commits האלה.

  • ספרייה משותפת:
    • העברת קריאות חיפוש משוערות ללא פעולה ל-methods המוגנות 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, צריך לבדוק אם ההפסקה בין פגישות היא לפחות 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 (מחסור במאגר) שגוי ב-CMCD (#1124).
    • מוסיפים את הערך PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) כדי לציין שהמקור נטען עד הסוף. כך אפשר לטעון מראש את המקור הבא או לבצע פעולות אחרות בהטמעות של DefaultPreloadManager ושל PreloadMediaSource.PreloadControl בהתאמה אישית.
    • תוקן באג שבו דילוג על שתיקה בסוף פריטים יכול לגרום לחריגה בהפעלה.
    • מוסיפים את clear אל PreloadMediaSource כדי לבטל את תקופת הטעינה מראש.
    • הוספנו קוד שגיאה חדש, PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED, שמופיע כשמשאבי קודק מוחזרים למשימות בעדיפות גבוהה יותר.
    • ‫AdsMediaSource טוען מודעות לפני סרטון לפני שההכנה הראשונית של תוכן המדיה מסתיימת (#1358).
    • תוקן באג שבו ההפעלה עברה ל-STATE_ENDED בזמן הכנה מחדש של שידור חי ב-DASH עם כמה תקופות, אחרי שהתקופה המקורית כבר הוסרה מהמניפסט.
    • שנו את השם של onTimelineRefreshed() ל-onSourcePrepared() ואת השם של onPrepared() ל-onTracksSelected() ב-PreloadMediaSource.PreloadControl. צריך גם לשנות את השם של IntDefs ב-DefaultPreloadManager.Stage בהתאם.
    • הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההתעוררות של המעבד, ולעכב את ההתעוררות עד שהמעבדים יוכלו להתקדם. אפשר להפעיל את זה באמצעות experimentalSetDynamicSchedulingEnabled() כשמגדירים את המכונה של ExoPlayer.
    • מוסיפים את Renderer.getDurationToProgressUs(). אפשר להטמיע את השיטה הזו ב-Renderer כדי להחזיר ל-ExoPlayer את משך הזמן שבו ההפעלה צריכה להתקדם כדי שהעיבוד יתקדם. אם המדיניות ExoPlayer מוגדרת עם הערך experimentalSetDynamicSchedulingEnabled(), אז ExoPlayer יקרא לשיטה הזו כשהוא יחשב את הזמן לתזמון משימת העבודה שלו.
    • צריך להוסיף את MediaCodecAdapter#OnBufferAvailableListener כדי לקבל התראה כשמאגרי הקלט והפלט זמינים לשימוש על ידי MediaCodecRenderer. ‫MediaCodecRenderer יאותת ל-ExoPlayer כשהוא יקבל את הקריאות החוזרות האלה, ואם ExoPlayer מוגדר עם experimentalSetDynamicSchedulingEnabled(), אז ExoPlayer יתזמן את לולאת העבודה שלו כשהמעבדים יוכלו להתקדם.
    • צריך להשתמש במחלקת נתונים לשיטות LoadControl במקום בפרמטרים נפרדים.
    • מוסיפים את ExoPlayer.isReleased() כדי לבדוק אם בוצעה קריאה ל-Exoplayer.release().
    • הוספת ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() כדי להגדיר את המיקום המקסימלי שבו seekToPrevious() מחפש את הפריט הקודם (#1425).
    • תיקון של כמה חוסר עקביות במיקוד האודיו, למשל לא מדווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
    • תיקון של IndexOutOfBoundsException פוטנציאלי שנגרם על ידי חילוץ דיווח על טראקים נוספים אחרי שלב ההכנה הראשוני (#1476).
    • ‫Effects ב-ExoPlayer.setVideoEffect() יקבל את חותמות הזמן בלי ההיסט של ה-renderer‏ (#1098).
    • תוקנה בעיה פוטנציאלית של IllegalArgumentException בטיפול בשגיאת נגן שקרתה בזמן קריאה מראש של פריט אחר בפלייליסט (#1483).
  • ‫Transformer:
    • מוסיפים את audioConversionProcess ו-videoConversionProcess אל ExportResult כדי לציין איך נוצר הטראק המתאים בקובץ הפלט.
    • הקלות בבדיקות של רמת H.264 באופטימיזציה של חיתוך.
    • הוספנו תמיכה במעבר בין מדיה בפורמט SDR ל-HDR ברצף.
    • הוספת תמיכה באפקטים של אודיו ברמת הקומפוזיציה.
    • הוספת תמיכה בהמרת תמונות Ultra HDR לסרטוני HDR.
    • תוקנה בעיה שבה DefaultAudioMixer לא פולט את כמות הבייטים הנכונה אחרי איפוס ושימוש חוזר.
    • פתרון באג במפענח שבו מספר ערוצי האודיו הוגבל לסטריאו בטיפול בקלט PCM.
    • כשבוחרים טראקים ב-ExoPlayerAssetLoader, צריך להתעלם ממגבלות על מספר ערוצי האודיו כי הן חלות רק על ההפעלה.
    • מחליפים את הממשק androidx.media3.transformer.Muxer ב-androidx.media3.muxer.Muxer ומסירים את androidx.media3.transformer.Muxer.
    • תיקון טעינת תמונות HEIC מסכימות URI של תוכן. (#1373).
    • כדי לשפר את הסנכרון של האודיו והווידאו, צריך לשנות את משך הזמן של טראק האודיו ב-AudioGraphInput.
    • הסרת השדה ExportResult.processedInputs. אם אתם משתמשים בשדה הזה לפרטי קודק, השתמשו במקום זאת בשדה DefaultDecoderFactory.listener. במקרה של חריגה ב-codec, פרטי ה-codec יהיו זמינים ב-ExportException.codecInfo.
  • מחלצים:
    • MPEG-TS: החלת השינוי שמבטיח שהפריים האחרון יעובד על ידי העברת יחידת הגישה האחרונה של סטרימינג לתור הדגימה (#7909). שילוב תיקונים לפתרון הבעיות שנוצרו בשידורי HLS עם I-frame בלבד(#1150) ובשידורי HLS עם H.262‏ (#1126).
    • ‫MP3: עדיף להשתמש בגודל הנתונים ממסגרת Info על פני הגודל שדווח על ידי הסטרימינג הבסיסי (למשל גודל הקובץ או כותרת HTTP Content-Length). כך אפשר להחריג נתונים של טריילרים שלא ניתנים להפעלה (למשל, עטיפת אלבום) מחישובי חיפוש של קצב העברת נתונים קבוע, וכך החיפושים מדויקים יותר (#1376).
    • ‫MP3: שימוש בספירת הפריימים ובנתונים אחרים בפריים Info (אם יש כזה) כדי לחשב קצב העברת נתונים ממוצע לחיפוש קצב העברת נתונים קבוע, במקום לבצע אקסטרפולציה מקצב העברת הנתונים של הפריים שאחרי הפריים Info, שעשוי להיות קטן באופן מלאכותי, למשל פריים PCUT (#1376).
    • תיקון חילוץ של פורמט אודיו PCM במאגרי AVI.
  • אודיו:
    • תיקון מאפייני הקידוד של DTS:X Profile 2 להפעלה ב-passthrough (#1299).
    • בהפעלה מחוץ ל-CPU, מאפסים את שדה המעקב של השלמת הסטרימינג ב-DefaultAudioSink לפני שקוראים ל-AudioTrack.stop(), כדי ש-AudioTrack.StreamEventCallback#onPresentationEnded יזהה בצורה נכונה מתי כל הנתונים בהמתנה הופעלו.
    • תוקן באג ב-SilenceSkippingAudioProcessor שבו מעברים בין פורמטים שונים של אודיו (לדוגמה, מסטריאו למונו) יכולים לגרום למעבד להציג חריגה (#1352).
    • מטמיעים את MediaCodecAudioRenderer.getDurationToProgressUs() כדי ש-ExoPlayer יתזמן באופן דינמי את לולאת העבודה הראשית שלו לזמן שבו MediaCodecAudioRenderer יכול להתקדם.
  • סרטון:
    • תוקנה בעיה שבה Listener.onRenderedFirstFrame() מגיע מוקדם מדי כשמחליפים פלטפורמות באמצע ההפעלה.
    • תיקון הלוגיקה של חלופת המפענח ב-Dolby Vision, כדי להשתמש במפענח AV1 תואם במקרה הצורך (#1389).
    • תיקון חריגה בקודק שעלולה להיגרם מהפעלת רכיב לעיבוד וידאו באמצע ההפעלה.
  • טקסט:
    • תוקנה בעיה שבה המערכת דילגה על כתוביות שמתחילות לפני מיקום החיפוש. הבעיה הזו הופיעה רק ב-Media3 1.4.0-alpha01.
    • שינוי התנהגות ברירת המחדל של ניתוח הכתוביות כך שהוא יתבצע במהלך החילוץ במקום במהלך העיבוד (ההבדל בין חילוץ לעיבוד מופיע בתרשים הארכיטקטורה של ExoPlayer).
      • כדי לשנות את ההתנהגות הזו, אפשר להפעיל את שתי הפונקציות MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) ו-TextRenderer.experimentalSetLegacyDecodingEnabled(true). במסמכי התיעוד בנושא התאמה אישית מוסבר איך להוסיף את הרכיבים האלה למכונה של ExoPlayer. השיטות האלה (וכל התמיכה בפענוח כתוביות מדור קודם) יוסרו בגרסה עתידית.
      • באפליקציות עם הטמעות מותאמות אישית של SubtitleDecoder צריך לעדכן אותן כדי להטמיע את SubtitleParser במקום זאת (ואת SubtitleParser.Factory במקום SubtitleDecoderFactory).
    • ‫PGS: תיקון של פענוח אורך ההרצה כדי לפתור את הבעיה שבה 0 מפורש כאינדקס צבעים במקום כערך צבע מילולי (#1367).
    • ‫CEA-708: התעלמות מהערך rowLock. לפי המפרט של CEA-708-E S-2023, צריך להניח שגם rowLock וגם columnLock נכונים, בלי קשר לערכים שקיימים בסטרימינג (התמיכה ב-columnLock לא מוטמעת, אז בפועל מניחים שהערך תמיד שקרי).
      • השינוי הזה נכלל במקור בהערות המוצר של גרסה 1.3.0-alpha01, אבל הוא בוטל בטעות לפני ההשקה של גרסה 1.3.0-rc01. הבעיה תוקנה והשינוי חזר.
    • ‫CEA-708: נמנעת הוספה של שורות חדשות כפולות על ידי הטיפול הפשוט של ExoPlayer בפקודה set pen location (#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 ואילך.
    • אפשר להשתמש ב-null כפרמטר של ExoPlayer.setImageOutput() כדי למחוק ImageOutput שהוגדר קודם.
  • מקור נתונים:
    • הטמעת תמיכה במזהי URI של משאבים גולמיים מסוג android.resource://package/id, כאשר package שונה מהחבילה של האפליקציה הנוכחית. בעבר לא תועד שהפעולה הזו עובדת, אבל זו דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם.
    • בודקים באופן יזום ש-url הוא לא null בבנאים של DataSpec. הפרמטר הזה כבר סומן כ-non-null.
    • אפשרות ל-ByteArrayDataSource לפתור URI למערך בייטים במהלך open(), במקום להיות בתוך הקוד במהלך הבנייה (#1405).
  • DRM:
    • אפשר להגדיר LoadErrorHandlingPolicy ב-DefaultDrmSessionManagerProvider (#1271).
  • ההשפעה:
    • תמיכה בשינויי מהירות מרובים באותו EditedMediaItem או Composition ב-SpeedChangeEffect.
    • תמיכה בפלט HLG ו-PQ מקלט מפת סיביות (bitmap) ב-Ultra HDR.
    • הוספנו תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפר את פלט ה-surface של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
    • עדכון ההטמעה של מטריצת השכבה כדי שתהיה עקבית עם התיעוד, על ידי היפוך ערכי ה-x וה-y שחלים ב-setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את ערכי ה-x וה-y על ידי הכפלה ב--1.
    • תיקון באג שגורם לקריסה של TimestampWrapper כשמשתמשים בו עם ExoPlayer#setVideoEffects (#821).
    • משנים את מרחב הצבעים של SDR שמוגדר כברירת מחדל מצבעים לינאריים לסרטון BT 709 SDR חשמלי. צריך גם לספק אפשרות שלישית לשמירה על מרחב הצבעים המקורי.
    • אפשר להגדיר סדר z לא מוגדר של EditedMediaItemSequences (#1055).
    • שמירה על טווח בהירות עקבי בין קטעי תוכן שונים ב-HDR (באמצעות טווח HLG).
    • הוספת תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
    • אפשר להשתמש באפקטים של SeparableConvolution לפני API 26.
    • צריך להסיר את OverlaySettings.useHdr שלא בשימוש כי הטווח הדינמי של שכבת-העל והפריים חייב להיות זהה.
    • הוספת תמיכה ב-HDR ל-TextOverlay. אפשר לשנות את הבהירות של שכבת-העל של הטקסט באמצעות OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • תוסף IMA:
    • קידום API שנדרש לאפליקציות כדי להפעיל שידורי מודעות DAI לגרסה יציבה.
    • מוסיפים את replaceAdTagParameters(Map <String, String>) אל ImaServerSideAdInsertionMediaSource.AdLoader, שמאפשר להחליף פרמטרים של תגי מודעות בזמן הריצה.
    • תוקן באג שבו לא בוצעה קריאה ל-VideoAdPlayer.VideoAdPlayerCallback.onError() כשאירעה שגיאה בנגן במהלך הפעלת מודעה (#1334).
    • שדרוג גרסת IMA SDK ל-3.33.0 כדי לתקן NullPointerException כשמשתמשים ב-URI של תגי מודעות data:// (#700).
  • סשן:
    • משנים את ברירת המחדל של CommandButton.enabled ל-true ומוודאים שהערך יכול להישאר False בבקרים, גם אם הפקודה המשויכת זמינה.
    • הוספת קבועים של סמלים ל-CommandButton שצריך להשתמש בהם במקום במשאבים של סמלים מותאמים אישית.
    • הוספת MediaSessionService.isPlaybackOngoing() כדי לאפשר לאפליקציות לשלוח שאילתות אם צריך לעצור את השירות ב-onTaskRemoved() (#1219).
    • מוסיפים את MediaSessionService.pauseAllPlayersAndStopSelf() שמאפשר להשהות את ההפעלה של כל הסשנים ולקרוא ל-stopSelf() כדי לסיים את מחזור החיים של MediaSessionService.
    • צריך לשנות את MediaSessionService.onTaskRemoved(Intent) כדי לספק הטמעה בטוחה שמוגדרת כברירת מחדל, ששומרת על השירות פועל בחזית אם ההפעלה נמשכת, או מפסיקה את השירות במקרים אחרים.
    • הסתרת סרגל ההתקדמות בהתראת המדיה של שידורים חיים, על ידי אי-הגדרה של משך הזמן במטא-נתונים של הסשן בפלטפורמה (#1256).
    • כדי להשתמש באותו סדר עדיפויות ובאותה לוגיקה בבחירת מאפייני מטא-נתונים כמו ב-media1, צריך להתאים את ההמרה של MediaMetadata ל-MediaDescriptionCompat.
    • הוספת MediaSession.sendError() שמאפשר לשלוח שגיאות לא קריטיות לבקר Media3. כשמשתמשים בבקר ההתראות (ראו MediaSession.getMediaNotificationControllerInfo()), השגיאה בהתאמה אישית משמשת לעדכון ה-PlaybackState של סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (#543).
    • מוסיפים את MediaSession.Callback.onPlayerInteractionFinished() כדי להודיע לסשנים כשסדרה של אינטראקציות של שחקנים מבקר ספציפי הסתיימה.
    • מוסיפים את SessionError ומשתמשים בו ב-SessionResult וב-LibraryResult במקום בקוד השגיאה, כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר.
    • מפרסמים את הקוד של אפליקציית הבדיקה של בקר media3, שמאפשרת לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
    • העברת תוספות שהועברו אל MediaSession[Builder].setSessionExtras() של media3 אל PlaybackStateCompat.getExtras() של בקר media1.
    • מיפוי שגיאות קריטיות ולא קריטיות אל הסשן בפלטפורמה ומהסשן בפלטפורמה. ‫PlaybackException ממופה למצב שגיאה חמורה של PlaybackStateCompat. הערך SessionError שנשלח לבקר ההתראות של המדיה עם MediaSession.sendError(ControllerInfo, SessionError) ממופה לשגיאה לא חמורה ב-PlaybackStateCompat, כלומר קוד השגיאה וההודעה מוגדרים אבל מצב הסשן בפלטפורמה נשאר שונה מ-STATE_ERROR.
    • לאפשר להגדיר את פעילות הסשן לכל בקר כדי לשנות את פעילות הסשן הגלובלית. אפשר להגדיר את פעילות הסשן לבקר בזמן החיבור על ידי יצירת ConnectionResult עם AcceptedResultBuilder.setSessionActivivty(PendingIntent). אחרי החיבור, אפשר לעדכן את הפעילות בסשן באמצעות MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • שיפור השכפול של שגיאות בקריאות ל-MediaLibrarySession.Callback. עכשיו אפשר להגדיר שכפול שגיאות באמצעות MediaLibrarySession.Builder.setLibraryErrorReplicationMode() כדי לבחור את סוג השגיאה או לבטל את ההסכמה לשכפול שגיאות, שמופעל כברירת מחדל.
  • ממשק המשתמש:
    • הוספת תמיכה בהצגת תמונות ב-PlayerView כשמחוברים אל ExoPlayer (#1144).
    • הוספת התאמה אישית של סמלים שונים ב-PlayerControlView באמצעות מאפייני XML כדי לאפשר פריטים שונים שניתן לשרטט לכל מופע של PlayerView, במקום שינויים גלובליים (#1200).
    • עקיפת באג בפלטפורמה שגורם למתיחה או לחיתוך של הסרטון כשמשתמשים ב-SurfaceView בתוך AndroidView של Compose ב-API 34 (#1237).
  • הורדות:
    • מוודאים ש-DownloadHelper לא מדליף מופעים של Renderer שלא פורסמו, מה שעלול לגרום בסופו של דבר לקריסת האפליקציה עם IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224).
  • תוסף Cronet:
    • צריך לתקן את SocketTimeoutException ב-CronetDataSource. בגרסאות מסוימות של Cronet, הבקשה שמתקבלת מהקריאה החוזרת לא תמיד זהה. כתוצאה מכך, הקריאה החוזרת לא מסתיימת והבקשה נכשלת בגלל זמן קצוב לתפוגה (https://issuetracker.google.com/328442628).
  • תוסף HLS:
    • תוקן באג שבו דגימות EMSG בהמתנה לשינוי פתאומי הועברו ב-HlsSampleStreamWrapper עם היסט שגוי, מה שגרם ל-IndexOutOfBoundsException או ל-IllegalArgumentException (#1002).
    • תוקן באג שבו פלייליסטים לא ראשיים נטענים מחדש שוב ושוב בשידורי LL-HLS‏ (#1240).
    • תוקן באג שבו הפעלת CMCD ל-HLS עם קטעי אתחול גרמה ל-Source Error ול-IllegalArgumentException.
    • תוקן באג שבו פלייליסטים שאינם ראשיים לא מתרעננים במהלך הפעלה בשידור חי (#1240).
    • תוקן באג שבו הפעלת CMCD לשידורים חיים ב-HLS גורמת ל-ArrayIndexOutOfBoundsException (#1395).
  • תוסף DASH:
    • תוקן באג שבו הכנה מחדש של שידור חי עם כמה תקופות עלולה להוביל לשגיאה IndexOutOfBoundsException (#1329).
    • הוספת תמיכה בכתובות URL של רישיונות dashif:Laurl (#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.
    • צריך להסיר חלק מה-constructors של DataSpec. במקומה צריך להשתמש במדיניות DataSpec.Builder.
    • הסרת השיטה setContentTypePredicate(Predicate) מהממשקים DefaultHttpDataSource, OkHttpDataSource ו-CronetDataSource. במקום זאת, צריך להשתמש בשיטה המקבילה בכל XXXDataSource.Factory.
    • הסרה של OkHttpDataSource בנאים ו-OkHttpDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory.
    • הסרה של PlayerMessage.setHandler(Handler). במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper).
    • הסרת השדה Timeline.Window.isLive. במקום זאת, משתמשים ב-method‏ 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.
    • הסרת IntDef של RendererSupport.FormatSupport והקבועים FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE. במקום זאת, צריך להשתמש ב-IntDef ובקבועים המקבילים ב-androidx.media3.common.C (למשל C.FORMAT_HANDLED).
    • הסרת הממשק Bundleable. זה כולל הסרה של כל השדות הקבועים של Bundleable.Creator<Foo> CREATOR. במקום זאת, צריך להשתמש ב-Bundle toBundle() וב-static Foo fromBundle(Bundle) בכל סוג.

גרסה ‎1.4.0-rc01

‫10 ביולי 2024

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

גרסה ‎1.4.0-beta01

‫26 ביוני 2024

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

גרסה 1.4.0-alpha02

‫7 ביוני 2024

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

גרסה ‎1.4.0-alpha01

‫17 באפריל 2024

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

גרסה 1.3.0

גרסה 1.3.1

‫11 באפריל 2024

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

  • ספרייה משותפת:
    • כדי לאפשר תוויות מקומיות או תוויות חלופיות אחרות, צריך להוסיף את Format.labels.
  • ‫ExoPlayer:
    • פתרון בעיה שבה PreloadMediaPeriod לא יכול לשמור את הסטרימינג כשהוא נטען מראש שוב.
    • צריך להחיל את הערך הנכון של TrackSelectionResult על תקופת ההפעלה בבחירה מחדש של הטראק.
    • הפעלת רכיבי רינדור שמופעלים מוקדם רק אחרי התקדמות תקופת ההפעלה במעבר בין קובצי מדיה (#1017).
    • הוספת סוג החזרה חסר לכלל proguard -keepclasseswithmembers עבור DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • ‫Transformer:
    • הוספת פתרון עקיף לחריגה שנזרקה כי MediaMuxer לא תומך בחותמות זמן שליליות של מצגות לפני API 30.
  • בחירת טראק:
    • ‫DefaultTrackSelector: עדיפות לטראקים של וידאו עם קצב פריימים "סביר" (‎>=10fps) על פני טראקים עם קצב פריימים נמוך יותר או לא מוגדר. כך הנגן בוחר את טראק הווידאו "האמיתי" בקובצי MP4 שחולצו מתמונות עם תנועה, שיכולות להכיל שני טראקים של HEVC, כשאחד מהם ברזולוציה גבוהה יותר אבל עם מספר קטן מאוד של פריימים (#1051).
  • מחלצים:
    • תוקנה בעיה שבה לא בוצעה דילוג על ריפוד בזמן קריאת מקטעים בגודל אי-זוגי מקובצי WAV‏ (#1117).
    • ‫MP3: מאכלסים את Format.averageBitrate ממסגרות של מטא-נתונים כמו XING ו-VBRI.
    • MPEG-TS: ביטול שינוי שנועד לוודא שהפריים האחרון יעובד על ידי העברת יחידת הגישה האחרונה של סטרימינג לתור הדגימה (#7909). הסיבה לכך היא שהשינוי גורם לבעיות חדשות בשידורי HLS עם מסגרות I בלבד (‎#1150) ובשידורי HLS מסוג H.262 (‎#1126).
  • אודיו:
    • מתן הרשאה לשחזור של רכיב העיבוד על ידי השבתת הפחתת העומס, אם האתחול של טראק האודיו נכשל במצב הפחתת עומס.
  • סרטון:
    • הוספת פתרון עקיף לבעיה במכשירים Galaxy Tab S7 FE, ‏ Chromecast with 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).
  • ממשק המשתמש:
    • אם 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 כוללת את ה-commits האלה.

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

גרסה ‎1.3.0-rc01

‫22 בפברואר 2024

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

גרסה ‎1.3.0-beta01

‫7 בפברואר 2024

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

גרסה 1.3.0-alpha01

‫15 בינואר 2024

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

גרסה 1.2.0

גרסה 1.2.1

‫9 בינואר 2024

  • ‫ExoPlayer:
    • תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח של LiveConfiguration.min/maxOffset המשיכו לשנות את ההיסט בחזרה ל-min/maxOffset.
    • תיקון בעיה שבה פריסות הערוצים של OPUS ו-VORBIS שגויות ל-3, 5, 6, 7 ו-8 ערוצים (#8396).
    • תוקנה בעיה שבה בחירות של טראקים אחרי דילוג לאפס בשידור חי אפשרו בטעות לשידור להתחיל במיקום ברירת המחדל שלו (#9347).
    • תוקנה הבעיה שבה מופעים חדשים של CmcdData.Factory קיבלו ערכים שליליים של bufferedDurationUs ממקורות של מקטעים, וכתוצאה מכך נוצר IllegalArgumentException (#888).
  • ‫Transformer:
    • פתרון בעיה שבה המקודד נכשל בזמן ההגדרה בגלל הגדרה של קצב פעולה גבוה.
  • מחלצים:
    • כדי למנוע בחירה אוטומטית של טראקים משניים (שאי אפשר להפעיל) של HEVC בתמונות עם תנועה בפורמט JPEG להפעלה בגלל הרזולוציה הגבוהה שלהם, צריך לסמן אותם כ-ROLE_FLAG_ALTERNATE.
    • תיקון זיהוי שגוי של תמונת מפתח בשידורי TS H264 (#864).
    • תיקון של הערכת משך הזמן של סטרימינג בפורמט TS שארוך מ-47,721 שניות (#855).
  • אודיו:
    • תוקן הטיפול ב-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).
  • ממשק המשתמש:
    • תוקנה בעיה שבה הלחצנים להעברה קדימה ואחורה לא גלויים כשמשתמשים בהם עם Material Design ב-BottomSheetDialogFragment (#511).
    • תוקנה בעיה שבה המספרים בלחצן ההרצה קדימה של PlayerControlView לא היו מיושרים (#547).
  • תוסף DASH:
    • ניתוח של "f800" כמספר ערוצים של 5 ל-Dolby במניפסט DASH (#688).
  • תוספי מפענחים (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • ‫MIDI: תוקנה בעיה שבה הרצה קדימה מדלגת על אירועי Program Change‏ (#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 שבה פרמטרים של סוגים גנריים שניתנים לאיפוס וסוגים של רכיבי מערך שניתנים לאיפוס לא מזוהים כניתנים לאיפוס. דוגמאות: הפרמטרים TrackSelectorResult ו-SimpleDecoder של השיטה (#6792).
    • שינוי ברירת המחדל של ממשק המשתמש וההתנהגות של ההתראות ב-Util.shouldShowPlayButton, כך שיוצג לחצן "הפעלה" כשההפעלה מושהית באופן זמני (למשל, בגלל אובדן זמני של המיקוד באודיו). כדי לשמור על ההתנהגות הקודמת, אפשר להשתמש ב-PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) או ב-MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • כדי לתקן את הבעיה, צריך לשדרג את androidx.annotation:annotation-experimental לגרסה 1.3.1.https://issuetracker.google.com/251172715
    • מעבירים את ExoPlayer.setAudioAttributes לממשק של Player.
  • ‫ExoPlayer:
    • תיקון בעיות בחיפוש בסטרימינג של AC4 שנגרמו בגלל זיהוי שגוי של דגימות לפענוח בלבד (#11000).
    • הוספת מניעה של הפעלה במכשירי פלט אודיו לא מתאימים (למשל, הרמקול המובנה במכשירי Wear OS) כשהתכונה הזו מופעלת דרך ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. הסיבה להפסקת ההפעלה תתעדכן ל-Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT אם מנסים להפעיל את האודיו כשאין פלט מתאים, או אם כל הפלטים המתאימים מתנתקים במהלך ההפעלה. סיבת ההסתרה תוסר כשיחובר פלט מתאים.
    • מוסיפים את MediaSource.canUpdateMediaItem ו-MediaSource.updateMediaItem כדי לאשר עדכונים של MediaItem אחרי היצירה באמצעות Player.replaceMediaItem(s).
    • אפשר לעדכן את MediaItem לכל המחלקות של MediaSource שסופקו על ידי הספרייה דרך Player.replaceMediaItem(s) (#33, #9978).
    • משנים את השם של MimeTypes.TEXT_EXOPLAYER_CUES לשם MimeTypes.APPLICATION_MEDIA3_CUES.
    • מוסיפים PngExtractor ששולח וקורא קובץ PNG שלם אל TrackOutput כדוגמה אחת.
    • משפרים את ה-method‏ SequenceableLoader.continueLoading(long) בממשק SequenceableLoader כדי SequenceableLoader.continueLoading(LoadingInfo loadingInfo). האירוע LoadingInfo מכיל פרמטרים נוספים, כולל playbackSpeed ו-lastRebufferRealtimeMs, בנוסף לפרמטר הקיים playbackPositionUs.
    • משפרים את השיטה ChunkSource.getNextChunk(long, long, List, ChunkHolder) בממשק ChunkSource כדי ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • הוספת שדות נוספים לרישום ביומן של Common Media Client Data ‏ (CMCD): מחסור במאגר נתונים (bs), מועד אחרון (dl), מהירות ההפעלה (pr) והפעלה (su) (#8699).
    • הוספת עומק סיביות של בהירות וצבע ל-ColorInfo (#491).
    • הוספת שדות נוספים לרישום ביומן של Common Media Client Data ‏ (CMCD): בקשת האובייקט הבאה (nor) ובקשת הטווח הבאה (nrr) (#8699).
    • הוספת פונקציונליות להעברת נתוני Common Media Client Data ‏ (CMCD) באמצעות פרמטרים של שאילתה (#553).
    • תיקון של ConcurrentModificationException ב-ExperimentalBandwidthMeter (#612).
    • מוסיפים את הפרמטר MediaPeriodId אל CompositeMediaSource.getMediaTimeForChildMediaTime.
    • תמיכה ב-ClippingMediaSource (ובמקורות אחרים עם הפרשי זמן של תקופה/חלון) ב-ConcatenatingMediaSource2 (#11226).
    • משנים את BaseRenderer.onStreamChanged() כך שיקבל גם ארגומנט MediaPeriodId.
  • ‫Transformer:
    • ניתוח נתוני סיבוב של EXIF לקלט של תמונות.
    • הסרת סוג ההערה TransformationRequest.HdrMode והקבועים שמשויכים אליה. במקום זאת, צריך להשתמש ב-Composition.HdrMode ובקבועים שמשויכים אליו.
    • כדי לפתור בעיות בסיבוב, צריך לפשט את OverlaySettings.
    • הפרמטרים frameRate ו-durationUs של SampleConsumer.queueInputBitmap השתנו ל-TimestampIterator.
  • בחירת טראק:
    • מוסיפים את DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness כדי לאפשר או לאסור באופן מפורש התאמה לא חלקה. ברירת המחדל נשארת בהתנהגות הנוכחית שלה, true.
  • מחלצים:
    • ‫MPEG-TS: מוודאים שהפריים האחרון עובר רינדור על ידי העברת יחידת הגישה האחרונה של סטרימינג לתור הדגימה (#7909).
    • תיקון שגיאת הקלדה בקביעת rotationDegrees. הערך projectionPosePitch השתנה ל-projectionPoseRoll (#461).
    • הסרת ההנחה שאפשר לבדוק ישירות מופעים של Extractor באמצעות instanceof. אם רוצים גישה בזמן ריצה לפרטי ההטמעה של Extractor, צריך קודם להפעיל את Extractor.getUnderlyingInstance.
    • מוסיפים את BmpExtractor.
    • מוסיפים את WebpExtractor.
    • מוסיפים את HeifExtractor.
    • הוספת תמיכה ב-QuickTime classic ל-Mp4Extractor.
  • אודיו:
    • הוספת תמיכה ב-PCM big-endian של 24/32 ביט ב-MP4 וב-Matroska, וניתוח קידוד PCM של lpcm ב-MP4.
    • הוספת תמיכה בחילוץ אודיו בפורמט Vorbis ב-MP4.
    • מוסיפים את AudioSink.getFormatOffloadSupport(Format), שמאחזר את רמת התמיכה בהעברה שה-sink יכול לספק לפורמט באמצעות DefaultAudioOffloadSupportProvider. היא מחזירה את ה-AudioOffloadSupport החדש שמכיל את isFormatSupported, isGaplessSupported ו-isSpeedChangeSupported.
    • מוסיפים את AudioSink.setOffloadMode() שדרכו מוגדרת פריקת העומסים במקלט האודיו. ברירת המחדל היא AudioSink.OFFLOAD_MODE_DISABLED.
    • אפשר להפעיל את ההעברה דרך setAudioOffloadPreference ב-TrackSelectionParameters. אם ההעדפה שהוגדרה היא להפעיל, המכשיר תומך בהעברה של הפורמט, ובחירת הטראק היא טראק אודיו יחיד, אז העברת האודיו תופעל.
    • אם המדיניות audioOffloadModePreference מוגדרת לערך AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, אז DefaultTrackSelector תבחר רק טראק אודיו, ורק אם הפורמט של הטראק נתמך ב-offload. אם אין טראק של אודיו שנתמך ב-offload, לא ייבחר אף טראק.
    • התמיכה בהפעלה ללא הפסקות ב-offload מושבתת בגרסאות שקודמות לרמת API‏ 33 בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
    • הסרת הפרמטר enableOffload מהחתימה של השיטה DefaultRenderersFactory.buildAudioSink.
    • הסרת השיטה DefaultAudioSink.Builder.setOffloadMode.
    • הסרת הערך intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • הוספת תמיכה במטא-נתונים של Opus ללא הפסקות במהלך הפעלה של פריקה.
    • אפשרות לשחזור של ה-renderer על ידי השבתת ה-offload אם הכתיבה הראשונה נכשלה (#627).
    • הפעלת תזמון הפחתת עומס כברירת מחדל להפעלת אודיו בלבד בהפחתת עומס.
    • מוחקים את ExoPlayer.experimentalSetOffloadSchedulingEnabled ואת AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • השם של onExperimentalSleepingForOffloadChanged שונה ל-onSleepingForOffloadChanged והשם של onExperimentalOffloadedPlayback שונה ל-onOffloadedPlayback.
    • העברת ממשקים והגדרות של TrackSelectionParameters שקשורים למצב פריקת אודיו למחלקה פנימית של AudioOffloadPreferences.
    • מוסיפים קריאות חוזרות (callbacks) של onAudioTrackInitialized ו-onAudioTrackReleased אל AnalyticsListener, AudioRendererEventListener ו-AudioSink.Listener.
    • תיקון בעיה של גלישת מאגר נתונים (underflow) באודיו של DTS Express (#650).
    • תוקן באג שבו בדיקת היכולות של E-AC3-JOC זורקת IllegalArgumentException (#677).
  • סרטון:
    • מאפשרים ל-MediaCodecVideoRenderer להשתמש ב-VideoFrameProcessor.Factory בהתאמה אישית.
    • תוקן באג שבו לא ניתן היה לעבד את הפריים הראשון אם שידור האודיו התחיל בחותמות זמן שליליות (#291).
  • טקסט:
    • הסרה של ExoplayerCuesDecoder. עכשיו TextRenderer מטפל ישירות בטראקים של טקסט עם sampleMimeType = application/x-media3-cues, בלי צורך במופע של SubtitleDecoder.
  • מטא-נתונים:
    • לא תתבצע יותר קריאה ל-MetadataDecoder.decode עבור דגימות "לפענוח בלבד", כי ההטמעה חייבת להחזיר ערך null בכל מקרה.
  • ההשפעה:
    • הוספת VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) הוספה לתור של קלט מפת סיביות לפי חותמת זמן.
    • משנים את VideoFrameProcessor.registerInputStream() כך שלא יהיה חוסם. באפליקציות צריך להטמיע את VideoFrameProcessor.Listener#onInputStreamRegistered().
    • הפרמטרים frameRate ו-durationUs של VideoFrameProcessor.queueInputBitmap השתנו ל-TimestampIterator.
  • תוסף IMA:
    • תוקן באג שבו שידור חי ב-DASH עם כמה תקופות, שהוא לא הפריט הראשון בפלייליסט, יכול להוביל לחריגה (#571).
    • צריך לשחרר את StreamManager לפני שקוראים ל-AdsLoader.destroy()
    • מעדכנים את גרסת IMA SDK ל-3.31.0.
  • סשן:
    • הגדרת ההתנהגות של שירות ההתראות שפועל בחזית לערך FOREGROUND_SERVICE_IMMEDIATE ב-DefaultMediaNotificationProvider (#167).
    • צריך להשתמש רק ב-android.media.session.MediaSession.setMediaButtonBroadcastReceiver() מעל API 31 כדי למנוע בעיות עם API שהוצא משימוש במכשירי סמסונג (#167).
    • משתמשים בבקר ההתראות של המדיה כשרת proxy כדי להגדיר את הפקודות הזמינות ואת הפריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
    • המרת אירועים של לחצני מדיה שמתקבלים על ידי MediaSessionService.onStartCommand() ב-Media3, במקום לנתב אותם לסשן בפלטפורמה ובחזרה ל-Media3. כך, הבקר של המתקשר הוא תמיד הבקר של ההתראה על המדיה, והאפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות.
    • תוקן באג שבו MediaController.getCurrentPosition() לא מתקדם כשמחוברים ל-MediaSessionCompat מדור קודם.
    • כדאי להוסיף את MediaLibrarySession.getSubscribedControllers(mediaId) כדי שיהיה לך נוח.
    • צריך לשנות את MediaLibrarySession.Callback.onSubscribe() כדי לאשר את הזמינות של מזהה ההורה שאליו הבקר נרשם. אם הרישום מצליח, המינוי מתקבל ומתבצעת קריאה מיידית לפונקציה notifyChildrenChanged() כדי לעדכן את הדפדפן (#561).
    • הוספת מודול הדגמה של סשן ל-Automotive OS והפעלת הדגמה של סשן ל-Android Auto.
    • אל תגדירו את התור של סשן ה-framework כש-COMMAND_GET_TIMELINE לא זמין לבקר של ההתראות על מדיה. מכיוון ש-Android Auto הוא בקר הלקוח שקורא מהסשן של ה-framework, הלחצן queue לא מוצג בממשק המשתמש של Android Auto (#339).
    • שימוש ב-DataSourceBitmapLoader כברירת מחדל במקום ב-SimpleBitmapLoader (#271, #327).
    • הוספת MediaSession.Callback.onMediaButtonEvent(Intent) שמאפשר לאפליקציות לשנות את הטיפול באירועים של לחצני המדיה שמוגדר כברירת מחדל.
  • ממשק המשתמש:
    • הוספת הטמעה של Player.Listener למכשירי Wear OS שמטפלת בהפסקת ההפעלה בגלל Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT על ידי הפעלת תיבת דו-שיח של המערכת שמאפשרת למשתמש לחבר פלט אודיו מתאים (למשל, אוזניות Bluetooth). ההפעלה תתחדש באופן אוטומטי אם מכשיר מתאים יתחבר תוך פרק זמן שניתן להגדיר (ברירת המחדל היא 5 דקות).
  • הורדות:
    • צריך להצהיר על סוג השירות שפועל בחזית "סנכרון נתונים" באפליקציה DownloadService כדי שתהיה תאימות ל-Android 14. כשמשתמשים בשירות הזה, האפליקציה צריכה גם להוסיף את dataSync בתור foregroundServiceType במניפסט ולהוסיף את ההרשאה FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • תוסף HLS:
    • רענון הפלייליסט של HLS בשידור חי במרווח זמן שמחושב לפי שעת ההתחלה של הטעינה האחרונה, ולא לפי שעת הסיום של הטעינה האחרונה (#663).
  • תוסף DASH:
    • אפשר להשתמש בכמה מזהי DASH זהים בכתובת ה-URL של תבנית הפלח.
    • הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. הפורמט הזה תומך טוב יותר במיזוג כתוביות חופפות, כולל פתרון בעיות של הבהובים במעבר בין קטעי כתוביות. אפשר להפעיל את ההגדרה הזו באמצעות DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • תוסף RTSP:
    • תוקן מרוץ תהליכים שיכול היה לגרום לשגיאה IndexOutOfBoundsException כשעוברים ל-TCP, או להשהיית ההפעלה במצבים מסוימים.
    • בדיקת המצב בהגדרת RTSP כשמוחזר מצב טעינה של RtspMediaPeriod (#577).
    • התעלמות משיטות מותאמות אישית של בקשות RTSP בכותרת הציבורית של תגובת Options (#613).
    • שימוש בערך של זמן קצוב לתפוגה של תגובת הגדרת RTSP במרווח הזמן של שליחת בקשות RTSP Options לשמירה על החיבור (#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 וכותרת של הערה בתחילת זרם הנתונים (bitstream) להפעלה של קובצי Opus שהועברו, בהתאם ל-RFC 7845.
  • סרטון:
    • ‫H.265/HEVC: תיקון ניתוח מידע על תמונות עזר לטווח קצר ולטווח ארוך ב-SPS.
  • טקסט:
    • ‫CEA-608: שינוי הלוגיקה של חיתוך הכתוביות כך שרק הטקסט שמוצג יילקח בחשבון. בעבר, היסט הטאב והכניסה נכללו בהגבלת אורך הכתובית ל-32 תווים (מה שהיה נכון מבחינה טכנית לפי המפרט) (#11019).
  • תוסף IMA:
    • שדרוג גרסת IMA SDK ל-3.30.3.
  • סשן:
    • מוסיפים פריסה בהתאמה אישית למצב של הבקר ומספקים פונקציית getter כדי לגשת אליה. כשמשנים את הפריסה בהתאמה אישית, מתבצעת קריאה ל-MediaController.Listener.onCustomLayoutChanged. באפליקציות שרוצים לשלוח בהן פריסות שונות בהתאמה אישית לבקרים שונים של Media3, אפשר לעשות את זה ב-MediaSession.Callback.onConnect באמצעות AcceptedResultBuilder כדי לוודא שהפריסה בהתאמה אישית זמינה לבקר כשהחיבור מסתיים.
    • תוקנו מקרים שבהם MediaLibraryServiceLegacyStub שלח שגיאה אל Result שלא תמך בכך, מה שגרם ל-UnsupportedOperationException (#78).
    • תיקון הדרך שבה PlayerWrapper יוצר VolumeProviderCompat על ידי קביעת volumeControlType באמצעות פקודות מדור קודם (COMMAND_ADJUST_DEVICE_VOLUME ו-COMMAND_SET_DEVICE_VOLUME) ופקודות חדשות (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS ו-COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

גרסה 1.1.0

‫5 ביולי 2023

  • ספרייה משותפת:
    • הוספת סיבה לדיכוי של נתיב אודיו לא מתאים והפעלה כשהוא מוכן שינוי הסיבה לדיכוי ארוך מדי. (#15).
    • הוספת פקודות לנגן:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • הוספת שיטות עמוסות ל-Player שמאפשרות למשתמשים לציין דגלי עוצמת קול:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • הוספת Builder עבור DeviceInfo והוצאה משימוש של ה-constructor הקיים.
    • מוסיפים את DeviceInfo.routingControllerId כדי לציין את מזהה בקר הניתוב להפעלות מרחוק.
    • הוספת Player.replaceMediaItem(s) כקיצור דרך להוספה ולהסרה של פריטים באותו מיקום (#8046).
  • ‫ExoPlayer:
    • לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת לכך. משתמשים ב-ExoPlayer.Builder.setDeviceVolumeControlEnabled כדי לקבל גישה אל:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) וגם setDeviceVolume(int, int)
      • increaseDeviceVolume(int) וגם increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) וגם decreaseDeviceVolume(int, int)
    • מוסיפים את FilteringMediaSource שמאפשר לסנן את סוגי הטראקים הזמינים מ-MediaSource.
    • הוספת תמיכה בהכללת נתוני לקוח מדיה נפוצים (CMCD) בבקשות היוצאות של פורמטים של סטרימינג דינמי DASH,‏ HLS ו-SmoothStreaming. השדות הבאים שולבו: br,‏ bl,‏ cid,‏ rtp ו-sid (#8699). מבנה ה-API והשיטות של ה-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 methods shouldStartPlayback ול-onTracksSelected שמאפשרים לשייך את השיטות האלה ל-MediaPeriod הרלוונטי.
    • משנים את החתימה של ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם המזהים הייחודיים שמשמשים כמפתחות במפה. הפעולה הזו נדרשת כדי למנוע בעיות שקשורות לשידורים חיים עם כמה מקטעים.
    • הוצאה משימוש של EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) ו-BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). במקום זאת, אפשר לקרוא לגרסה של השיטות בלי mediaTimeOffsetUs. שימו לב שגם בגרסאות שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUs ול-endTimeUs של אובייקטי MediaLoadData שנשלחים על ידי ה-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).
    • תוקן באג שבו הטרנספורמציה נתקעה (מה שגרם לזמן קצוב לתפוגה של המולטיפלקסר) אם הסוף של שידור הווידאו סומן ברגע שבו פריים קלט המתין לעיבוד.
    • כדי להרחיב את התמיכה, אפשר לשלוח שאילתות לקודקים דרך MediaCodecList במקום להשתמש בכלי השירות של findDecoder/EncoderForFormat.
    • צריך להסיר את ההגדרה של B-frame ב-DefaultEncoderFactory כי היא לא פועלת במכשירים מסוימים.
  • בחירת טראק:
    • מוסיפים את DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange שמושבתת כברירת מחדל. כשהאפשרות מופעלת, DefaultTrackSelector תפעיל בחירת טראק חדש כשחלו שינויים ביכולות של מנוע הרינדור.
  • מחלצים:
    • ‫Ogg: תיקון באג בחיפוש בקבצים ארוכים (#391).
    • ‫FMP4: תיקון בעיה שבה TimestampAdjuster מאתחל היסט שגוי של חותמת זמן עם זמן דגימה של מטא-נתונים מאטום emsg (#356).
  • אודיו:
    • תוקן באג שבו חלק מההפעלות נכשלות כשמפעילים מנהור ו-AudioProcessors פעילים, למשל לחיתוך ללא רווחים (#10847).
    • הוספת מסגרות Opus לחבילות Ogg בהפעלות ישירות (העברה).
    • הערכת המיקום הנוכחי במצב שינה באמצעות תזמון פריקה.
    • מוסיפים את Renderer.release() ו-AudioSink.release() כדי לשחרר את המשאבים בסוף מחזור החיים של הנגן.
    • האזנה לשינויים ביכולות האודיו ב-DefaultAudioSink. מוסיפים פרמטר חובה context ב-constructor של DefaultAudioSink, שבאמצעותו DefaultAudioSink יירשם כמאזין ל-AudioCapabilitiesReceiver ויעדכן את המאפיין audioCapabilities שלו כשיקבל הודעה על שינוי ביכולות.
    • הפצת שינויים ביכולות האודיו באמצעות אירוע חדש onAudioCapabilitiesChanged בממשק AudioSink.Listener, וממשק חדש RendererCapabilities.Listener שמפעיל אירועי onRendererCapabilitiesChanged.
    • מוסיפים את ChannelMixingAudioProcessor כדי להחיל שינוי קנה מידה או ערבוב על ערוצי אודיו.
    • צריך להוסיף ערך int חדש DISCARD_REASON_AUDIO_BYPASS_POSSIBLE אל DecoderDiscardReasons כדי למחוק את מפענח האודיו כשמצב המעקף אפשרי אחרי שינוי ביכולות האודיו.
    • הוספת תמיכה בהפעלה ישירה של DTS Express ו-DTS:X‏ (#335).
  • סרטון:
    • הגדרת MediaCodecVideoRenderer לדיווח על VideoSize ברוחב ובגובה 0 כשהמעבד מושבת. הפונקציה Player.Listener.onVideoSizeChanged נקראת בהתאם כשמתבצע שינוי ב-Player.getVideoSize(). בעקבות השינוי הזה, גודל הסרטון של ExoPlayer עם MediaCodecVideoRenderer הוא ברוחב ובגובה 0 כש-Player.getCurrentTracks לא תומך בסרטון, או כשגודל טראק הסרטון הנתמך עדיין לא נקבע.
  • DRM:
    • מצמצמים את החשיפה של כמה שיטות פנימיות בלבד ב-DefaultDrmSession שלא צפויות להיקרא מחוץ לחבילת ה-DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • הוספת ספריית מולטיפלקסר חדשה שאפשר להשתמש בה כדי ליצור קובץ מאגר MP4.
  • תוסף IMA:
    • הפעלת שידורי DASH חיים עם כמה מקטעים ל-DAI. שימו לב שההטמעה הנוכחית עדיין לא תומכת בחיפוש בשידורים חיים (#10912).
    • תיקון באג שבו קבוצת מודעות חדשה מוכנסת לשידורים חיים כי מיקום התוכן המחושב בצירי זמן עוקבים משתנה מעט.
  • סשן:
    • מוסיפים את ה-helper method‏ MediaSession.getControllerForCurrentRequest כדי לקבל מידע על ה-controller שקורא כרגע ל-method‏ 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).
  • ממשק המשתמש:
    • מוסיפים את השיטות shouldShowPlayButton ו-handlePlayPauseButtonAction של Util כדי לכתוב רכיבים מותאמים אישית בממשק המשתמש עם לחצן הפעלה/השהיה.
  • תוסף RTSP:
    • ב-MPEG4-LATM, אם הערך של profile-level-id לא מופיע בהודעת ה-SDP של Describe Response, משתמשים בערך ברירת המחדל (#302).
    • שימוש ב-URI בסיסי לפתרון נתיב יחסי מסשן RTSP אם הוא קיים בכותרת התגובה של DESCRIBE (#11160).
  • תוסף DASH:
    • הסרת הזמן שחלף במדיה מ-MediaLoadData.startTimeMs ומ-MediaLoadData.endTimeMs בסטרימינג של DASH עם כמה תקופות.
    • תוקן באג שבו הכנה מחדש של מקור מדיה מסוג Dash בשידור חי עם כמה תקופות גרמה לשגיאה IndexOutOfBoundsException (#10838).
  • תוסף HLS:
    • מוסיפים את HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) כדי להגדיר זמן קצוב לתפוגה של השרשור שנטען, עד שה-TimestampAdjuster יתחיל לפעול. אם תהליך ההפעלה לא מסתיים לפני הזמן הקצוב לתפוגה, נזרקת שגיאה מסוג PlaybackException כדי למנוע מצב שבו ההפעלה נתקעת בלי סוף. כברירת מחדל, הזמן הקצוב לתפוגה מוגדר לאפס (#323).
  • כלי בדיקה:
    • צריך לבדוק אם סכמת ה-URI לא תלוית-רישיות ב-DataSourceContractTest.
  • הסרת סמלים שהוצאו משימוש:
    • צריך להסיר את ה-constructors של DefaultAudioSink ולהשתמש במקום זאת ב-DefaultAudioSink.Builder.
    • צריך להסיר את HlsMasterPlaylist ולהשתמש ב-HlsMultivariantPlaylist במקום זאת.
    • הסרה של Player.stop(boolean). במקום זאת, צריך להשתמש ב-Player.stop() וב-Player.clearMediaItems() (אם reset הוא true).
    • הסרנו שני בנאים (constructors) של SimpleCache שהוצאו משימוש. במקומם, צריך להשתמש בבנאי שלא הוצא משימוש ומקבל DatabaseProvider כדי לשפר את הביצועים.
    • צריך להסיר את ה-constructor של DefaultBandwidthMeter ולהשתמש ב-DefaultBandwidthMeter.Builder במקום זאת.
    • צריך להסיר את ה-constructors של DefaultDrmSessionManager ולהשתמש במקום זאת ב-DefaultDrmSessionManager.Builder.
    • הסרנו שני בנאים (constructors) של HttpDataSource.InvalidResponseCodeException שיצאו משימוש. צריך להשתמש בבנאי שלא יצא משימוש ומקבל שדות נוספים (cause,‏ responseBody) כדי לשפר את רישום השגיאות ביומן.
    • הסירו את DownloadHelper.forProgressive,‏ DownloadHelper.forHls,‏ DownloadHelper.forDash ו-DownloadHelper.forSmoothStreaming, והשתמשו ב-DownloadHelper.forMediaItem במקומם.
    • צריך להסיר את ה-constructor‏ DownloadService שהוצא משימוש, ולהשתמש ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטר channelDescriptionResourceId.
    • הסרת קבועי מחרוזת שהוצאו משימוש עבור ערכות תווים (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME ו-UTF16LE_NAME), שימוש בערכות תווים של Kotlin מהחבילה kotlin.text, java.nio.charset.StandardCharsets או com.google.common.base.Charsets במקום זאת.
    • צריך להסיר את ה-constructor‏ WorkManagerScheduler שהוצא משימוש, ולהשתמש במקומו ב-constructor שלא הוצא משימוש וכולל אפשרות לספק פרמטר Context.
    • הסרת ה-methods שהוצאו משימוש createVideoSampleFormat,‏ createAudioSampleFormat,‏ createContainerFormat ו-createSampleFormat, ששימשו ליצירת מופע של המחלקה Format. במקום זאת, צריך להשתמש ב-Format.Builder כדי ליצור מופעים של Format.
    • הסרת השיטות שהוצאו משימוש: copyWithMaxInputSize,‏ copyWithSubsampleOffsetUs,‏ copyWithLabel,‏ copyWithManifestFormatInfo,‏ copyWithGaplessInfo,‏ copyWithFrameRate,‏ copyWithDrmInitData,‏ copyWithMetadata,‏ copyWithBitrate ו-copyWithVideoSize. במקומן צריך להשתמש ב-Format.buildUpon() ובשיטות setter.
    • צריך להסיר את ExoPlayer.retry() שהוצא משימוש ולהשתמש במקומו ב-prepare().
    • הסרת ה-constructor של DefaultTrackSelector עם אפס ארגומנטים שהוצא משימוש, והחלפה שלו ב-DefaultTrackSelector(Context).
    • הסרת ה-constructor של OfflineLicenseHelper שהוצא משימוש, ושימוש ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) במקומו.
    • הסרת ה-constructor של DownloadManager שיצא משימוש, ובמקומו שימוש ב-constructor שמקבל Executor.
    • הסרת בנאים (constructors) של Cue שהוצאו משימוש, והחלפתם ב-Cue.Builder.
    • הסרת ה-constructor של OfflineLicenseHelper שהוצא משימוש, והחלפתו ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • הסרה של ארבע שיטות AnalyticsListener שיצאו משימוש:
      • ‫onDecoderEnabled, צריך להשתמש ב-onAudioEnabled או ב-onVideoEnabled במקום.
      • ‫onDecoderInitialized, צריך להשתמש ב-onAudioDecoderInitialized או ב-onVideoDecoderInitialized במקום זאת.
      • ‫onDecoderInputFormatChanged, צריך להשתמש ב-onAudioInputFormatChanged או ב-onVideoInputFormatChanged במקום זאת.
      • ‫onDecoderDisabled, צריך להשתמש ב-onAudioDisabled או ב-onVideoDisabled במקום.
    • מסירים את Player.Listener.onSeekProcessed ואת AnalyticsListener.onSeekProcessed שהוצאו משימוש, ומשתמשים ב-onPositionDiscontinuity עם DISCONTINUITY_REASON_SEEK במקומם.
    • צריך להסיר את ExoPlayer.setHandleWakeLock(boolean) ולהשתמש ב-setWakeMode(int) במקום זאת.
    • מסירים את DefaultLoadControl.Builder.createDefaultLoadControl() שהוצא משימוש ומשתמשים ב-build() במקומו.
    • צריך להסיר את MediaItem.PlaybackProperties שהוצא משימוש ולהשתמש במקומו ב-MediaItem.LocalConfiguration. השדה MediaItem.playbackProperties יצא משימוש, ועכשיו הוא מסוג MediaItem.LocalConfiguration.

גרסה ‎1.1.0-rc01

‫21 ביוני 2023

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

‫גרסה ‎1.1.0-beta01

‫7 ביוני 2023

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

גרסה 1.1.0-alpha01

‫10 במאי 2023

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

גרסה 1.0.0

גרסה 1.0.2

‫18 במאי 2023

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

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

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

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

גרסה 1.0.1

‫18 באפריל 2023

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

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

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

גרסה 1.0.0

‫22 במרץ 2023

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

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

אין שינויים מאז גרסה 1.0.0-rc02.

גרסה ‎1.0.0-rc02

‫2 במרץ 2023

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

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

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

גרסה ‎1.0.0-rc01

‫16 בפברואר 2023

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

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

  • ספריית ליבה:
    • שינוי לוגיקת הסדר של מפענח ה-renderer כדי לשמור על ההעדפות של MediaCodecSelector, גם אם מפענח מדווח שיכול להיות שהוא לא יוכל להפעיל את המדיה בצורה יעילה. לדוגמה, עם בורר ברירת המחדל, מפענח חומרה עם תמיכה פונקציונלית בלבד יועדף על פני מפענח תוכנה שתומך באופן מלא בפורמט (#10604).
    • מוסיפים את ExoPlayer.Builder.setPlaybackLooper שמגדיר שרשור הפעלה קיים למופע חדש של ExoPlayer.
    • אפשר למחוק את העזרים של מנהל ההורדות (#10776).
    • מוסיפים פרמטר ל-BasePlayer.seekTo כדי לציין גם את הפקודה שמשמשת לחיפוש.
    • שימוש בעיצוב בזמן טעינת פריטים שניתן לשרטט ב-API 21 ואילך (#220).
    • הוספת ConcatenatingMediaSource2 שמאפשר לשלב כמה קובצי מדיה בחלון אחד (#247).
  • מחלצים:
    • הפעלת ParserException במקום NullPointerException אם בטבלת הדגימה (stbl) חסר תיאור דגימה נדרש (stsd) במהלך ניתוח של אטומי trak.
    • דילוג נכון על דגימות כשמדלגים ישירות לפריים סנכרון ב-fMP4 (#10941).
  • אודיו:
    • צריך להשתמש בקצב העברת הנתונים של פורמט האודיו הדחוס כדי לחשב את שטח האחסון הזמני המינימלי של AudioTrack בהפעלות ישירות (passthrough).
  • טקסט:
    • תיקון של TextRenderer שמעביר אינדקס לא חוקי (שלילי) אל Subtitle.getEventTime אם קובץ כתוביות לא מכיל אותות.
    • ‫SubRip: הוספת תמיכה בקובצי UTF-16 אם הם מתחילים בתו byte order mark.
  • מטא-נתונים:
    • לנתח כמה ערכים מופרדים ב-null ממסגרות ID3, כפי שמותר ב-ID3 v2.4.
    • מוסיפים את MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable במקום MediaMetadata.folderType. סוג התיקייה יוצא משימוש בגרסה הבאה.
  • DASH:
    • הוספת ניתוח מלא של קבוצות התאמה של תמונות, כולל ספירת משבצות (#3752).
  • ממשק המשתמש:
    • תיקון של PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) הוצאה משימוש כדי לוודא ששינויים בחשיפה מועברים למאזין הרשום (#229).
    • תיקון הסדר של כפתורי הנגן המרכזיים ב-PlayerView כשמשתמשים בפריסה מימין לשמאל (RTL) (#227).
  • סשן:
    • מוסיפים את המחלקה המופשטת SimpleBasePlayer כדי להטמיע את הממשק Player לנגנים מותאמים אישית.
    • הוספת שיטת עזר להמרת טוקן לסשן של הפלטפורמה ל-Media3 SessionToken (#171).
    • שימוש ב-onMediaMetadataChanged כדי להפעיל עדכונים של סשן המדיה בפלטפורמה (#219).
    • הוספת סשן המדיה כארגומנט של getMediaButtons() של DefaultMediaNotificationProvider ושימוש ברשימות שלא ניתנות לשינוי לשם הבהרה (#216).
    • הוספת מאזין קריאה חוזרת (callback) של onSetMediaItems כדי לספק אמצעים לשינוי או להגדרה של רשימת MediaItem, אינדקס התחלה ומיקום לפי סשן לפני ההגדרה בנגן (#156).
    • מניעת זיהוי של לחיצה כפולה באירועים של לחצני מדיה שאינם Bluetooth‏ (#233).
    • הפיכת QueueTimeline ליציב יותר במקרה של מצב סשן קודם לא תקין (#241).
  • מטא-נתונים:
    • לנתח כמה ערכים מופרדים ב-null ממסגרות ID3, כפי שמותר ב-ID3 v2.4.
    • מוסיפים את MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable במקום MediaMetadata.folderType. סוג התיקייה יוצא משימוש בגרסה הבאה.
  • תוסף Cast:
    • שדרוג גרסת Cast SDK ל-21.2.0.
  • תוסף IMA:
    • כדי למנוע בעיות בשרשורים, צריך להסיר את מאזין הנגן של ImaServerSideAdInsertionMediaSource בשרשור האפליקציה.
    • מוסיפים את המאפיין focusSkipButtonWhenAvailable ל-ImaServerSideAdInsertionMediaSource.AdsLoader.Builder כדי לבקש שהמיקוד יהיה על כפתור הדילוג במכשירי טלוויזיה, ומגדירים אותו כ-true כברירת מחדל.
    • מוסיפים את השיטה focusSkipButton() ל-ImaServerSideAdInsertionMediaSource.AdsLoader כדי לבקש באופן פרוגרמטי להתמקד בלחצן הדילוג.
    • שדרוג גרסת IMA SDK ל-3.29.0.
  • אפליקציית הדגמה:
    • בקשת הרשאה לשליחת התראות על הורדות בזמן הריצה (#10884).

גרסה ‎1.0.0-beta03

‫22 בנובמבר 2022

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

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

  • ספריית ליבה:
    • הוספת ExoPlayer.isTunnelingEnabled כדי לבדוק אם מנהור מופעל בטראקים שנבחרו כרגע (#2518).
    • הוספת WrappingMediaSource כדי לפשט את העטיפה של MediaSource יחיד (#7279).
    • מחיקת המאגר הזמני הקודם לפני שההפעלה נתקעת כי אין מספיק זיכרון פנוי.
    • סגירת הבלוק doSomeWork של המעקב כשההעברה מופעלת.
    • תיקון בעיה במעקב אחרי סשנים עם חיפושים מהירים ב-PlaybackStatsListener (#180).
    • שליחת קריאה חוזרת (callback) חסרה של onMediaItemTransition כשקוראים ל-seekToNext או ל-seekToPrevious בפלייליסט עם פריט אחד (#10667).
    • מוסיפים את Player.getSurfaceSize, שמחזיר את גודל הפלטפורמה שבה הסרטון מוצג.
    • תיקון באג שבו הסרת מאזינים במהלך הפצת הנגן עלולה לגרום ל-IllegalStateException (#10758).
  • גרסה:
    • אכיפת גרסה מינימלית של compileSdkVersion כדי למנוע שגיאות קומפילציה (#10684).
    • הימנעות מפרסום בלוק כשהוא כלול ב-gradle build אחר.
  • בחירת טראק:
    • אם המסך לא תומך ב-Dolby Vision, עדיף להשתמש בטראקים אחרים. (#8944).
  • הורדות:
    • תיקון לולאה אינסופית פוטנציאלית ב-ProgressiveDownloader שנגרמה על ידי הורדה והפעלה בו-זמנית עם אותו PriorityTaskManager (#10570).
    • הצגת התראה על הורדה באופן מיידי (#183).
    • הגבלת ההסרות של הורדות מקבילות ל-1 כדי למנוע יצירת שרשורים מוגזמת (#10458).
  • סרטון:
    • אם המסך לא תומך ב-Dolby Vision, אפשר לנסות מפענח חלופי. (#9794).
  • אודיו:
    • שימוש ב-SingleThreadExecutor לשחרור מופעים של AudioTrack כדי למנוע שגיאות OutOfMemory כשמשחררים כמה נגנים בו-זמנית (#10057).
    • מוסיף את AudioOffloadListener.onExperimentalOffloadedPlayback למצב ההעברה של AudioTrack. (#134).
    • הגדרת AudioTrackBufferSizeProvider כממשק שגלוי לכולם.
    • מוסיפים את ExoPlayer.setPreferredAudioDevice כדי להגדיר את המכשיר המועדף להצגת מידע (#135).
    • משנים את השם של androidx.media3.exoplayer.audio.AudioProcessor לשם androidx.media3.common.audio.AudioProcessor.
    • מיפוי אודיו של 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל גרסאות Android (#10701).
  • מטא-נתונים:
    • עכשיו אפשר להגדיר את MetadataRenderer כך שיוצגו מטא-נתונים ברגע שהם זמינים. יוצרים מכונה עם MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) כדי לציין אם המעבד (renderer) יוציא מטא-נתונים מוקדם או בסנכרון עם מיקום הנגן.
  • DRM:
    • עקיפת באג בהטמעה של ClearKey ב-Android 13, שגורם להחזרה של כתובת URL לא ריקה אבל לא תקינה של רישיון.
    • תיקון שגיאת setMediaDrmSession failed: session not opened במעבר בין סכימות DRM בפלייליסט (למשל, Widevine ל-ClearKey).
  • טקסט:
    • ‫CEA-608: טיפול נכון בפקודות להחלפת שירות בשדה 2 (#10666).
  • DASH:
    • ניתוח של EventStream.presentationTimeOffset ממניפסטים (#10460).
  • ממשק המשתמש:
    • שימוש בשינויים הנוכחיים של הנגן כפי שהוגדרו מראש ב-TrackSelectionDialogBuilder (#10429).
  • סשן:
    • מוודאים שהפקודות תמיד מבוצעות בסדר הנכון, גם אם חלק מהן דורשות פתרון אסינכרוני (#85).
    • מוסיפים את DefaultMediaNotificationProvider.Builder כדי ליצור מופעים של DefaultMediaNotificationProvider. ה-builder יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראות ואת שם ערוץ ההתראות שבהם הספק משתמש. צריך גם להוסיף את השיטה DefaultMediaNotificationProvider.setSmallIcon(int) כדי להגדיר את הסמל הקטן של ההתראות. (#104).
    • לוודא שפקודות שנשלחו לפני MediaController.release() לא נמחקות (#99).
    • ‫SimpleBitmapLoader יכול לטעון מפת סיביות (bitmap) מכתובות URI של file:// (#108).
    • תיקון טענת נכוֹנוּת (assertion) שמונעת מ-MediaController לדלג על מודעה בפרק זמן מסוים (#122).
    • כשההפעלה מסתיימת, ה-MediaSessionService מפסיק לפעול בחזית ומוצגת התראה להפעלה מחדש של קובץ המדיה האחרון שהופעל (#112).
    • אל תפעילו שירות שפועל בחזית עם Intent בהמתנה להשהיה (#167).
    • הסתרה ידנית של "התג" שמשויך להתראה שנוצרה על ידי DefaultNotificationProvider ב-API 26 וב-API 27 (התג מוסתר באופן אוטומטי ב-API 28 ואילך) (#131).
    • תוקן באג שבו חיבור binder שני מ-MediaSession מדור קודם אל Media3 MediaController גורם ל-IllegalStateExceptions (#49).
  • RTSP:
    • הוספת טיפול בחבילות מקוטעות של 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:
    • הוספת טיימר כלב שמירה של מרבב כדי לזהות מתי יצירת דגימת פלט איטית מדי.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Transformer.Builder.setOutputMimeType(String). התכונה הזו הוסרה. סוג ה-MIME תמיד יהיה MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.

גרסה ‎1.0.0-beta02

‫21 ביולי 2022

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

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

  • ספריית ליבה:
    • מוודאים ששינוי של ShuffleOrder באמצעות ExoPlayer.setShuffleOrder גורם לקריאה ל-Player.Listener#onTimelineChanged באמצעות reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • במדיה פרוגרסיבית, כוללים רק טראקים נבחרים במיקום שנטען מראש (#10361).
    • אפשר להשתמש בכלי רישום בהתאמה אישית לכל פלט היומן של ExoPlayer (#9752).
    • תיקון ההטמעה של setDataSourceFactory ב-DefaultMediaSourceFactory, שלא פעלה במקרים מסוימים (#116).
  • מחלצים:
    • תיקון הניתוח של קבוצות תמונות עזר לטווח קצר ב-H265 (#10316).
    • תיקון הניתוח של קצבי העברת הנתונים מתיבות esds (#10381).
  • DASH:
    • ניתוח של כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
  • ממשק המשתמש:
    • מוודאים ש-TalkBack מקריא את אפשרות המהירות הפעילה כרגע בתפריט רכיבי ה-UI להפעלה (#10298).
  • RTSP:
    • הוספת טיפול בחבילות מקוטעות של VP8‏ (#110).
  • תוסף Leanback:
    • האזנה לשינויים ב-playWhenReady ב-LeanbackAdapter (10420).
  • העברה:
    • משתמשים ב-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 מכילה את השינויים האלה.

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

  • ספריית ליבה:
    • הפעלת תמיכה באבחון של פלטפורמת Android באמצעות MediaMetricsManager. ExoPlayer יעביר לפלטפורמה אירועי הפעלה ונתוני ביצועים, שיעזרו לספק מידע על ביצועי המערכת ועל תוצאות ניפוי הבאגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה גם אם המשתמש במכשיר הפעיל את שיתוף נתוני דפוסי שימוש וביצועים. אפליקציות יכולות לבטל את ההסכמה לתרום לניתוח הביצועים של הפלטפורמה ב-ExoPlayer באמצעות ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • תוקן באג שגרם לאיפוס תכוף מדי של טראקים כשמשתמשים ב-MergingMediaSource, לדוגמה כשמבצעים טעינת צד של כתוביות ומשנים את הכתוביות שנבחרו באמצע ההפעלה (#10248).
    • הפסקת הזיהוי של סוג הרשת 5G-NSA ב-API 29 ו-30. ההפעלות האלה יתבצעו ברשת 4G.
    • אין הרשאה להעביר את null אל MediaSource.Factory.setDrmSessionManagerProvider ואל MediaSource.Factory.setLoadErrorHandlingPolicy. אפשר להעביר באופן מפורש מופעים של DefaultDrmSessionManagerProvider ו-DefaultLoadErrorHandlingPolicy, אם צריך.
    • מוסיפים את MediaItem.RequestMetadata כדי לייצג את המטא-נתונים שנדרשים להפעלת מדיה כשלא ידוע מהו ה-LocalConfiguration המדויק. צריך גם להסיר את MediaMetadata.mediaUrl כי הוא כלול עכשיו ב-RequestMetadata.
    • מוסיפים את Player.Command.COMMAND_SET_MEDIA_ITEM כדי לאפשר לשחקנים להגדיר פריט אחד.
  • בחירת טראק:
    • לשטח את המחלקה 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 לא סטנדרטי.
    • משנים את סוג ההחזרה של AudioAttributes.getAudioAttributesV21() מ-android.media.AudioAttributes למחלקת wrapper חדשה של AudioAttributesV21, כדי למנוע אימות ART איטי ב-API < 21.
    • שליחת שאילתה לפלטפורמה (API 29 ואילך) או הנחה לגבי מספר הערוצים של קידוד האודיו להעברת אודיו כשהמספר של ערוצי האודיו בפורמט לא מוגדר, מה שקורה בהכנה ללא מקטעים של HLS‏ (10204).
    • מגדירים את AudioTrack עם מסכת הערוץ AudioFormat.CHANNEL_OUT_7POINT1POINT4 אם המפענח מוציא אודיו PCM של 12 ערוצים (#10322.
  • DRM
    • מוודאים שסשן ה-DRM תמיד מתעדכן בצורה נכונה כשמחפשים מיד אחרי שינוי פורמט (10274).
  • טקסט:
    • משנים את Player.getCurrentCues() כך שיחזיר את CueGroup במקום List<Cue>.
    • ‫SSA: תמיכה בהגדרת הסגנון OutlineColour כש-BorderStyle == 3 (כלומר, OutlineColour מגדיר את הרקע של הכתובית) (#8435).
    • ‫CEA-708: ניתוח נתונים לכמה בלוקים של שירותים והתעלמות מבלוקים שלא משויכים למספר השירות שנבחר כרגע.
    • הסרנו את RawCcExtractor, ששימש רק לטיפול בפורמט כתוביות פנימי של Google.
  • מחלצים:
    • הוספת תמיכה ב-AVI (#2092).
    • ‫Matroska: ניתוח DiscardPadding לטראקים של Opus.
    • ‫MP4: ניתוח קצבי העברת נתונים מתיבות esds.
    • ‫Ogg: אפשרות לשכפל את מזהה ה-Opus ואת כותרות התגובות (#10038).
  • ממשק המשתמש:
    • תיקון של העברת אירועים אל OnClickListener שמוגדרים ב-PlayerView במקרה ש-useController=false (#9605). צריך גם לתקן את העברת האירועים אל OnLongClickListener בכל הגדרות התצוגה.
    • תוקן טיפול שגוי ברצף של אירועי מגע שיוצאים מהגבולות של PlayerView לפני ACTION_UP כקליק (#9861).
    • תוקנה בעיית נגישות ב-PlayerView שבה לחיצה עלולה להפעיל או להשהות את ההפעלה במקום להסתיר את הפקדים (#8627).
    • משכתבים את TrackSelectionView ואת TrackSelectionDialogBuilder כדי שיעבדו עם הממשק Player במקום עם ExoPlayer. כך אפשר להשתמש בתצוגות עם הטמעות אחרות של Player, ולהסיר את התלות של מודול ממשק המשתמש במודול ExoPlayer. זהו שינוי תוכנה שעלול לגרום לכשל.
    • לא להציג טראקים של טקסט מאולץ בבורר הטראקים של PlayerView, ולהשאיר טראק מתאים של טקסט מאולץ אם נבחרה האפשרות "ללא" (#9432).
  • DASH:
    • ניתוח של מספר הערוצים מרכיבי DTS AudioChannelConfiguration. התיקון הזה מפעיל מחדש את העברת האודיו לשידורי DTS‏ (#10159).
    • לא לאפשר העברה של null אל DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. במקרה הצורך, אפשר להעביר מופעים של DefaultCompositeSequenceableLoaderFactory באופן מפורש.
  • ‫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).
    • הוספת חריגה מסוג checked exception כשמנתחים את התזמון של RTSP (#10165).
    • הוספת קורא RTP ל-VP9 (#47).
    • הוספת קורא RTP ל-OPUS (#53).
  • מקורות נתונים:
    • משנים את השם של DummyDataSource לשם PlaceholderDataSource.
    • פתרון עקיף לטיפול בהפרעות של OkHttp.
  • סשן:
    • מחליפים את MediaSession.MediaItemFiller ב-MediaSession.Callback.onAddMediaItems כדי לאפשר פתרון אסינכרוני של בקשות.
    • תמיכה בשיטות setMediaItems(s) כש-MediaController מתחבר לסשן מדיה מדור קודם.
    • הסרה של MediaController.setMediaUri ושל MediaSession.Callback.onSetMediaUri. אפשר להשיג את אותה פונקציונליות באמצעות MediaController.setMediaItem ו-MediaSession.Callback.onAddMediaItems.
    • העברת שיחות בגרסה הקודמת של MediaController להפעלת מדיה אל MediaSession.Callback.onAddMediaItems במקום אל onSetMediaUri.
    • מוסיפים את MediaNotification.Provider ו-DefaultMediaNotificationProvider כדי להתאים אישית את ההתראה.
    • מוסיפים את BitmapLoader ו-SimpleBitmapLoader כדי להוריד תמונות של גרפיקה.
    • מוסיפים את MediaSession.setCustomLayout() כדי לספק תאימות לאחור עם הסשן הקודם.
    • הוספת MediaSession.setSessionExtras() כדי לספק תכונות שוות ערך לסשן הקודם.
    • משנים את השם של MediaSession.MediaSessionCallback ל-MediaSession.Callback, את השם של MediaLibrarySession.MediaLibrarySessionCallback ל-MediaLibrarySession.Callback ואת השם של MediaSession.Builder.setSessionCallback ל-setCallback.
    • תיקון NPE ב-MediaControllerImplLegacy (#59).
    • עדכון פרטי המיקום של הסשן בציר הזמן שינוי(#51).
    • תיקון NPE ב-MediaControllerImplBase אחרי שחרור הבקר (#74).
  • הפעלת מודעות / IMA:
    • הפחתת קצב הדגימה של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, בהתאם להמלצות של Media Rating Council‏ (MRC).
  • תוסף FFmpeg:
    • עדכון גרסת CMake ל-3.21.0+ כדי למנוע באג ב-CMake שגורם לכשל בסנכרון Gradle של AndroidStudio (#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 במקרים אחרים.
    • הסרת ה-constructor‏ DefaultTrackSelector(ExoTrackSelection.Factory). במקומה צריך להשתמש במדיניות DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • הסרה של Transformer.Builder.setContext. במקום זאת, צריך להעביר את Context ל-constructor של Transformer.Builder.

גרסה 1.0.0-alpha03

‫14 במרץ 2022

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

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

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

גרסה 1.0.0-alpha02

‫2 במרץ 2022

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

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

  • ספריית הליבה:
    • מוסיפים את השיטה המוגנת DefaultRenderersFactory.getCodecAdapterFactory() כדי שמחלקות משנה של DefaultRenderersFactory שמבטלות את buildVideoRenderers() או את buildAudioRenderers() יוכלו לגשת למפעל המתאמים של ה-codec ולהעביר אותו למופעים של MediaCodecRenderer שהן יוצרות.
    • הפצה של שדות הכותרת של ICY ‏name ו-genre אל MediaMetadata.station ו-MediaMetadata.genre בהתאמה, כדי שהם יגיעו לאפליקציה דרך Player.Listener.onMediaMetadataChanged() (#9677).
    • הסרת מפתחות null מ-DefaultHttpDataSource#getResponseHeaders.
    • השהיה וניסיון חוזר כשנכשלת יצירה של מכונה של MediaCodec. הפתרון הזה עוקף בעיה שמתרחשת במכשירים מסוימים כשמעבירים משטח מ-codec מאובטח ל-codec אחר (#8696).
    • מוסיפים את MediaCodecAdapter.getMetrics() כדי לאפשר למשתמשים לקבל נתוני מדדים מ-MediaCodec. (#9766).
    • תיקון של פתרון יחסי התלות של Maven (#8353).
    • השבתת ההתאמה האוטומטית של המהירות בשידורים חיים שאין בהם תכונות של זמן אחזור קצר או בקשת משתמש להגדרת המהירות (#9329).
    • משנים את השם של DecoderCounters#inputBufferCount לשם queuedInputBufferCount.
    • הגדרת SimpleExoPlayer.renderers כפרטי. אפשר לגשת למרנדרים דרך ExoPlayer.getRenderer.
    • עדכנו כמה ערכים קבועים של AnalyticsListener.EventFlags כך שיתאימו לערכים ב-Player.EventFlags.
    • מפצלים את AnalyticsCollector לממשק ולהטמעה שמוגדרת כברירת מחדל, כדי לאפשר ל-R8 להסיר אותו אם הוא לא נדרש לאפליקציה.
  • בחירת טראק:
    • תמיכה בדגלים של תפקידי וידאו מועדפים בבחירת טראקים (#9402).
    • עדכון הלוגיקה של בחירת טראק הווידאו כך שתביא בחשבון את סוגי ה-MIME המועדפים ואת דגלי התפקידים כשבוחרים כמה טראקים של וידאו להתאמה (#9519).
    • עדכון הלוגיקה של בחירת טראק הווידאו והאודיו כך שייבחרו רק פורמטים לבחירות דינמיות שיש להם אותה רמה של תמיכה במפענח ובחומרה (#9565).
    • עדכון הלוגיקה של בחירת טראק הווידאו כך שתעדיף קודקים יעילים יותר אם מפענחים ראשיים עם שיפור מהירות באמצעות חומרה תומכים בכמה קודקים (#4835).
    • העדפות תוכן אודיו (לדוגמה, רצועת האודיו שמוגדרת כברירת מחדל או רצועה שתואמת לשפת המערכת) על פני אילוצים טכניים לבחירת רצועה (לדוגמה, סוג MIME מועדף או מספר ערוצים מקסימלי).
    • תוקנה בעיה בבחירת טראקים, שבה שינוי של קבוצת טראקים אחת לא השבית קבוצות טראקים אחרות מאותו סוג (#9675).
    • תוקנה בעיה בבחירת טראקים, שבה שילוב של שינויים ריקים ולא ריקים בטראקים לא הוחל בצורה נכונה (#9649).
    • איסור על כפילויות של TrackGroup בTrackGroupArray. תמיד אפשר להבדיל בין TrackGroups על ידי הגדרת id ב-constructor של TrackGroup. התיקון הזה פותר קריסה שמתרחשת כשממשיכים את ההפעלה אחרי שהאפליקציה הועברה לרקע עם שינוי פעיל של טראק (#9718).
    • שינוי הלוגיקה ב-AdaptiveTrackSelection כדי לאפשר שיפור באיכות כשיש רוחב פס מספיק ברשת, גם אם ההפעלה קרובה מאוד לשידור החי (#9784).
  • סרטון:
    • תיקון לוגיקת החלופה של המפענח ב-Dolby Vision, כדי להשתמש במפענח H264/H265 תואם במקרה הצורך.
  • אודיו:
    • תוקנה הלוגיקה של חזרה למפענח קודם ב-Dolby Atmos‏ (E-AC3-JOC) כדי להשתמש במפענח E-AC3 תואם במקרה הצורך.
    • משנים את ממשקי ה-API של AudioCapabilities כך שידרשו העברה מפורשת של AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES במקום null.
    • אפשר לערוך את החישוב של שטח האחסון הזמני של AudioTrack על ידי החדרת AudioTrackBufferSizeProvider ל-DefaultAudioSink. (#8891).
    • נסו ליצור שוב את 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).
  • ממשק המשתמש:
    • תיקון הצבע של המספרים בלחצני ההרצה קדימה ואחורה ב-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, עדיף להשתמש ב-DIGEST‏ (#9800).
    • טיפול במקרים שבהם התזמון של טראק RTSP לא זמין (#9775).
    • התעלמות מערכים לא חוקיים של כותרת RTP-Info (#9619).
  • ‫Transformer:
    • צריך להגדיל את גרסת ה-API המינימלית הנדרשת ל-21.
    • השדה TransformationException משמש עכשיו לתיאור שגיאות שמתרחשות במהלך טרנספורמציה.
    • מוסיפים את TransformationRequest כדי לציין את אפשרויות הטרנספורמציה.
    • אפשר לרשום כמה מאזינים.
    • תוקנה בעיה שבה Transformer נתקע כשפלט ה-codec נקרא באופן חלקי.
    • תיקון של NPE פוטנציאלי ב-Transformer.getProgress כששחרור המולטיפלקסר גורם לשגיאה.
    • הוספת אפליקציית הדגמה להחלת טרנספורמציות.
  • תוסף MediaSession:
    • כברירת מחדל, MediaSessionConnector מנקה עכשיו את הפלייליסט כשמפסיקים את ההפעלה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להפעיל את setClearMediaItemsOnStop(false) במחבר.
  • תוסף Cast:
    • תוקן באג שמנע מ-CastPlayer להפעיל את onIsPlayingChanged בצורה תקינה (#9792).
    • תמיכה במטא-נתונים של אודיו, כולל גרפיקה, באמצעות DefaultMediaItemConverter (#9663).
  • תוסף FFmpeg:
    • הגדרת build_ffmpeg.sh כך שיהיה תלוי בכלי ה-bin של LLVM במקום באלה של GNU (#9933).
  • תאימות ל-Android 12:
    • משדרגים את תוסף Cast כך שיהיה תלוי ב-com.google.android.gms:play-services-cast-framework:20.1.0. גרסאות קודמות של play-services-cast-framework לא תואמות לאפליקציות שמטרגטות את Android 12, והן יקרסו עם IllegalArgumentException בזמן יצירת PendingIntent (#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. במקום זאת, צריך להשתמש ב-constructor‏ ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • הסרה של ProgressiveMediaSource.Factory#setTag ושל ProgressiveMediaSource.Factory#setCustomCacheKey. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag וב-MediaItem.Builder#setCustomCacheKey.
    • מסירים את ה-constructors‏ DefaultRenderersFactory(Context, @ExtensionRendererMode int) ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). במקום זאת, צריך להשתמש ב-constructor‏ DefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererMode וב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • הסרת כל ה-constructors הציבוריים של CronetDataSource. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
  • צריך לשנות את IntDefs הבא ל-@Target(TYPE_USE) בלבד. יכול להיות שהפעולה הזו תגרום לשגיאה בקומפילציה של השימושים ב-Kotlin. כדי לתקן את השגיאה, צריך להעביר את ההערה כדי להוסיף הערה לסוג (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (בחבילה com.google.android.exoplayer2.ext.flac)
    • ‫@FlacExtractor.Flags (בחבילה com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

גרסה 1.0.0-alpha01

‫27 באוקטובר 2021

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

תכונות חדשות

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

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

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

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