Media3

ספריות תמיכה לתרחישי שימוש של מדיה.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסה אלפא
13 בנובמבר 2024 1.4.1 1.5.0-rc01 - -

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

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

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

מגניב

dependencies {
    def media3_version = "1.4.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
    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 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 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.4.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
    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 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 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.5

1.5.0-rc02 (19 בנובמבר 2024)

androidx.media3:media3-*:1.5.0-rc02 משוחרר.

גרסת 1.5.0-rc02 כוללת את ההוספות האלה.

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

  • חילוץ:
    • נוספה תמיכה בפורמט קובץ מדיה בסיסי של ISO ברמה 4 של AC-4 (#1265).
  • טקסט:
    • תיקון כתוביות CEA-608 משובשות בתוכן עם יותר מהודעת SEI אחת לכל דגימה.
    • תיקון תקלה בהפעלה של שידורי DASH עם מספר תקופות כשכתוביות CEA-608 מופעלות (#1863).
    • תיקון של כתוביות CEA-608 משובשות בקובצי MP4, שבהן כל דגימה מסומנת בטעות כדגימת סנכרון (#1863).
  • אפליקציית הדגמה
    • פתרון הבעיות של דליפות הזיכרון באפליקציית הדגמה לסרטוני Shorts (#1839).

1.5.0-rc01 (13 בנובמבר 2024)

androidx.media3:media3-*:1.5.0-rc01 משוחרר.

הגרסה 1.5.0-rc01 כוללת את ההוספות האלה.

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

  • ExoPlayer:
    • תיקון באג שבו פריטים או תקופות בפלייליסט בשידורי DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום לקיפאון של פריימים בסוף הפריט (‏1698).
    • מוסיפים setter ל-SntpClient כדי להגדיר את משך הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאופשר מחדש (#1794).
  • חילוץ:
    • תיקון של ניתוח משך הזמן של המדיה בתיבה mdhd בקובצי MP4 כדי לטפל בערכים של -1 (#1819).
    • נוספה תמיכה בזיהוי תיבת h263 בקובצי MP4 של וידאו H.263 (#1821).
  • DataSource:
    • DataSourceContractTest: בודקים ש-DataSource.getUri() מחזיר את ה-URI המפורט (כפי שמופיע בתיעוד). אם הוא שונה מה-URI המבוקש, אפשר לציין זאת בבדיקות באמצעות השיטה החדשה DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • DataSourceContractTest: טענת נכוֹנוּת (assert) שמציינת ש-DataSource.getUri() ו-getResponseHeaders() מחזירים את הערך 'פתוח' אחרי קריאה שנכשלה ל-open() (בגלל משאב 'לא נמצא') ולפני קריאה שלאחר מכן ל-close().
      • שינוי DataSourceContractTest.getNotFoundResources() מאפשר לכיתות משנה של בדיקות לספק כמה משאבים מסוג 'לא נמצא', וגם לספק כותרות צפויות. כך אפשר להבחין בין קוד HTTP 404 (עם כותרות) לבין 'השרת לא נמצא' (ללא כותרות).
  • טקסט:
    • תיקון של כתוביות CEA-608 שאינן מועברות כפלט בסטרימינג של H.264 MPEG-TS (הבעיה הזו נגרמה בגלל השינויים שבוצעו ב-1.5.0-alpha01 במסגרת https://github.com/androidx/media/commit/03a205f220ecf7681f85f8a752227e3986e257ff).
    • תמיכה בכתוביות CEA-608 בתוכן Dolby Vision (#1820).
  • תוסף RTSP:
    • תיקון קריסה בזמן ניתוח חבילות RTP עם תוספים לכותרות (#1225).

גרסה 1.5.0-beta01

30 באוקטובר 2024

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

  • ספרייה משותפת:
    • מסירים את ההערות @DoNotInline מתוך כיתות פנימיות שאינן ממוספרות באופן ידני, כדי למנוע כשלים באימות הכיתה בסביבת זמן הריצה. בגרסאות האחרונות של R8, קריאות מחוץ לקו כמו אלה מתבצעות באופן אוטומטי כדי למנוע כשלים בסביבת זמן הריצה (כך שאין צורך יותר לבצע קריאות מחוץ לקו באופן ידני). כל המשתמשים בספרייה ב-Gradle כבר צריכים להשתמש בגרסה של הפלאגין של Android Gradle שמשתמשת בגרסה של R8 שמבצעת את הפעולה הזו, בגלל compileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle יצטרכו לוודא שהשלב המקביל ל-R8 של דחיסה/ערפול מבצע תהליך אוטומטי דומה של הסרה מ-lining, כדי למנוע כשלים באימות הכיתות בסביבת זמן הריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
  • ExoPlayer:
    • תיקון של דיווחים על 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.
    • הוספת השיטה MediaSourceEventListener.EventDispatcher.dispatchEvent() כדי לאפשר להפעיל אירועים של רכיבי 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, בעוד ששגיאות ניתוח מתעלמות בשקט (זהו התנהגות קיימת).
  • Transformer:
    • מגדירים שהגדרת משך התמונה באמצעות MediaItem.Builder.setImageDurationMs תהיה חובה לייצוא תמונות.
    • הוספת תמיכה בייצוא של פערים ברצפים של EditedMediaItems של אודיו.
  • בחירת טראק:
    • DefaultTrackSelector: עדיפות לאודיו מבוסס-אובייקט על פני אודיו מבוסס-ערוץ, כשהגורמים האחרים זהים.
  • חילוץ:
    • תוקנה הבעיה בטיפול בדוגמאות של מודעות Preroll במיקומי התחלה של מדיה שאינם ציוני מפתח (keyframes) במהלך עיבוד רשימות עריכה בקובצי MP4‏ (#1659).
    • שיפור החישוב של קצב הפריימים באמצעות משך המדיה מהתיבה mdhd ב-Mp4Extractor וב-FragmentedMp4Extractor (#1531).
    • תיקון שינוי קנה המידה השגוי של media_time ברשימות עריכה של קובצי MP4. קובץ segment_duration כבר עבר שינוי קנה מידה בצורה נכונה לפי ציר הזמן של הסרט, אבל קובץ media_time עובר עכשיו שינוי קנה מידה בצורה נכונה לפי ציר הזמן של הטראק, כפי שמצוין בתקן של פורמט ה-MP4 (#1792).
    • טיפול בפריימים לא בסדר בנוסחה של endIndices עבור קובצי MP4 עם רשימת עריכה (#1797).
  • אודיו:
    • פתרון בעיות של רעשי פופ שעשויים להתרחש במהלך דילוגים.
    • תיקון הצטברות שגיאות קיצור באלגוריתמים של Sonic להארכת זמן או לשינוי גובה הצליל.
    • תיקון באג ב-SpeedChangingAudioProcessor שגורם לירידה בפריימים של הפלט.
  • סרטון:
    • הוספת פתרון זמני לבעיה במכשיר Galaxy Tab S7 FE שגורמת לסימון של שידורי H264 מאובטחים של 60fps כלא נתמכים (#1619).
    • הוספת פתרון לבעיה בקודקים שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות לסיום הסטרימינג.
  • טקסט:
    • מוודאים שמוצגים חותמות זמן של כתוביות גדולות מאוד בפורמט WebVTT ב-HLS (שגורמות לחריגה מ-long של 64 ביט כאשר הן מיוצגות מיקרו-שניות ומוכפלות בבסיס הזמן של MPEG‏ 90,000) (#1763).
  • מטא-נתונים:
    • מקצים את הסוג C.TRACK_TYPE_METADATA לטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
  • DRM:
    • תיקון IllegalStateException מ-DefaultDrmSession.requiresSecureDecoder אחרי שסשן DRM לא הצליח להיפתח. הבעיה הזו נגרמה ב-1.5.0-alpha01.
  • מכשירים למיזוג (muxers):
  • תוסף IMA:
    • תוקנה באג שבו שידורי DAI שהוכנסו בצד השרת ללא מודעה מוקדמת עלולים לגרום לשגיאה ArrayIndexOutOfBoundsException כשהסרטון מופעל אחרי המודעה האחרונה בסרטון (#1741).
  • סשן:
    • תוקן באג שגרם לכך שהפקודות בהתאמה אישית שנשלחו מ-MediaBrowser נשלחו ל-MediaSessionCompat.Callback במקום לגרסה MediaBrowserServiceCompat של השיטה כשהיו מחוברים לשירות קודם. כתוצאה מכך, MediaBrowser לא קיבל את ערך ההחזרה בפועל שנשלח בחזרה מהשירות הקודם (#1474).
    • טיפול ב-IllegalArgumentException שמופיע במכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור לכוונות של לחצני מדיה (#1730).
    • מוסיפים לחצני פקודות לפריטי מדיה. כך מתווסף Media3 API למה שהיה ידוע בתור Custom browse actions עם הספרייה הקודמת עם MediaBrowserCompat. חשוב לזכור שב-Media3, לחצני הפקודה של פריטי המדיה זמינים גם ל-MediaBrowser וגם ל-MediaController. פעולות גלישה בהתאמה אישית של AAOS
    • תיקון באג שבו לפעמים בקר Media3 לא הצליח לאפשר לאפליקציית סשן להפעיל שירות בחזית אחרי שליחת הבקשה play().
    • מגבילים את CommandButton.Builder.setIconUri כך שיקבל רק URI של תוכן.
    • העברת הנחיות החיבור של דפדפן Media3 אל MediaBrowserCompat הראשוני כשמתחברים ל-MediaBrowserCompat מדור קודם. השירות יכול לקבל את הטיפים לחיבור שמועברים כטיפים ברמה הבסיסית (root) בקריאה הראשונה ל-onGetRoot().
    • תוקן באג שבו MediaBrowser שמחובר לשירות דפדפן מדור קודם לא קיבל הודעת שגיאה שנשלחה מהשירות אחרי שהדפדפן הזמין parentid.
    • שיפור ההתנהגות של יכולת הפעולה ההדדית, כך שדפדפן Media3 שמחובר ל-MediaBrowserService מדור קודם לא יגיש בקשה לשליחת צאצאים של parentId פעמיים כשנרשמים לחשבון הורה.
  • ממשק משתמש:
    • יש ליצור את הסרטון המוארך/חתוך בפתרון החלופי PlayerView-in-Compose-AndroidView, בגלל בעיות במעברים משותפים שמבוססים על XML. אפליקציות שמשתמשות ב-PlayerView בתוך AndroidView צריכות לבצע קריאה ל-PlayerView.setEnableComposeSurfaceSyncWorkaround כדי להביע הסכמה (#1237,‏ #1594).
    • מוסיפים את setFullscreenButtonState ל-PlayerView כדי לאפשר עדכונים של הסמל של לחצן המסך המלא על פי דרישה, כלומר מחוץ למסגרת ולא בתגובה לאינטראקציה של לחיצה (#1590,‏ #184).
    • תיקון באג שבו האפשרות 'ללא' בבחירת הטקסט לא פועלת אם יש העדפות מוגדרות מראש באפליקציה לבחירת טראק טקסט.
  • תוסף Smooth Streaming:
    • תוקנה שגיאה מסוג Bad magic number for Bundle בהפעלת שידורי SmoothStreaming עם טראקים של טקסט (#1779).
  • תוסף RTSP:
    • תיקון ההסרה של פרטי המשתמשים בכתובות URL שמכילות תווים מקודדים של @ (#1138).
  • תוספים למפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • הוספת תמיכה בדפים בגודל 16KB לתוספי מקודדים ב-Android 15 (#1685).
  • תוסף Cast:
    • הפסקת הניקוי של ציר הזמן אחרי שהסשן של ההעברה (cast) מתנתק, כדי לאפשר לאפליקציה השולחת להמשיך את ההפעלה באופן מקומי אחרי ניתוק.
    • מאכלסים את DeviceInfo של CastPlayer כשמציינים Context. כך תוכלו לקשר את MediaSession ל-RoutingSession, שנחוץ לשילוב של Output Switcher (#1056).
  • מסירים את הסמלים הלא נתמכים:
    • הסרת קונסטרוקטורים של DefaultEncoderFactory שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultEncoderFactory.Builder.

גרסה 1.5.0-alpha01

10 בספטמבר 2024

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

  • ספרייה משותפת:
    • הוספת ForwardingSimpleBasePlayer שמאפשרת העברה לנגן אחר עם התאמות קטנות, תוך שמירה על עקביות מלאה ועל טיפול מלא במאזינים (#1183).
    • מחליפים את SimpleBasePlayer.State.playlist בשיטה getPlaylist().
    • מוסיפים שינוי מברירת המחדל עבור SimpleBasePlayer.State.Builder.setPlaylist() כדי לציין ישירות את Timeline ואת הערכים הנוכחיים של Tracks ו-Metadata במקום ליצור מבנה של פלייליסט.
    • הגדלת הערך של minSdk ל-21 (Android Lollipop). זה תואם לכל שאר הספריות של AndroidX.
    • הוספת ארטיפקט androidx.media3:media3-common-ktx שמספק פונקציונליות ספציפית ל-Kotlin שמבוססת על הספרייה המשותפת
    • מוסיפים לספרייה media3-common-ktx את פונקציית התוסף Player.listen להשהיה כדי להפעיל פונקציית קורוטין להאזנה ל-Player.Events.
  • 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) עד להפעלת הטיפול ב-Audio Focus. כך אפשר לוודא שהשיחה לא תיחסם אם לא מפעילים את הטיפול ב-Focus אודיו (#1616).
    • מתן אפשרות להפעלה ללא קשר למשך הזמן שנשמר במאגר כשהטעינה נכשלת (#1571).
    • מוסיפים את AnalyticsListener.onRendererReadyChanged() כדי לסמן מתי מנועי עיבוד גרפי ספציפיים מאפשרים להפעיל את ההפעלה.
  • Transformer:
    • מוסיפים את SurfaceAssetLoader, שתומך בהוספת נתוני וידאו לתור ב-Transformer באמצעות Surface.
    • ImageAssetLoader מדווח על קלט לא נתמך דרך AssetLoader.onError במקום להפעיל IllegalStateException.
  • חילוץ:
    • מאפשרים ל-Mp4Extractor ול-FragmentedMp4Extractor לזהות דגימות H264 שלא משמשות כקובץ עזר לדגימות הבאות.
    • הוספנו אפשרות להפעיל דילוג מבוסס-אינדקס ב-AmrExtractor.
    • קבצי MP3 עם יותר מ-128KB בין מסגרות תקינות נחשבים כמקוצרים (במקום לא חוקיים). כלומר, קבצים עם נתונים שאינם MP3 בסוף, ללא מטא-נתונים אחרים שמייצגים את אורך הבייטים של ה-MP3, עכשיו מפסיקים את ההפעלה בסוף הנתונים של ה-MP3 במקום להיכשל עם ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563).
  • DataSource:
    • עדכון HttpEngineDataSource כדי לאפשר שימוש החל מגרסה S extension 7 במקום רמת API 34 (#1262).
  • אודיו:
    • הגדרה אוטומטית של מטא-נתונים של עוצמת קול בתקן CTA-2075 בקודק, אם הם נמצאים במדיה.
    • מוודאים שחלה ירידה חלקה בעוצמת הקול כשעוברים לקטעים אחרים.
  • סרטון:
    • MediaCodecVideoRenderer מונע פענוח של דגימות שלא עברו רינדור ולא משמשות לדגימות אחרות כמקור עזר.
    • ב-API 35 ואילך, MediaCodecAdapter יכול לקבל עכשיו null Surface ב-configure ולבצע קריאה לשיטה חדשה detachOutputSurface כדי להסיר Surface שהוגדר בעבר, אם הקודק תומך בכך (MediaCodecInfo.detachedSurfaceSupported).
    • אם MediaCodecAdapter מספק ערכים של יחס גובה-רוחב של פיקסלים, צריך להשתמש בהם בזמן העיבוד של onOutputFormatChanged (#1371).
  • טקסט:
  • תמונה:
    • מוסיפים את ExternallyLoadedImageDecoder כדי לשפר את השילוב עם ספריות חיצוניות לטעינה של תמונות, כמו Glide או Coil.
  • DataSource:
    • הוספת FileDescriptorDataSource, DataSource חדש שאפשר להשתמש בו כדי לקרוא מ-FileDescriptor (#3757).
  • אפקט:
    • הוספת DefaultVideoFrameProcessor פתרון זמני לבעיות קלות של SurfaceTexture התאמה לעומס. SurfaceTexture עשוי לכלול שינוי גודל קטן שמקצץ גבול של texel אחד מסביב לקצה של מאגר חתוך. עכשיו הבעיה מטופלת כך שהפלט קרוב יותר לצפוי.
    • מפעילים את ההאצה DefaultVideoFrameProcessor.queueInputBitmap(). כתוצאה מכך, ייצוא תמונות לסרטונים באמצעות Transformer מהיר יותר.
  • תוסף IMA:
    • תוקן באג שגרם לכך שניקוי הפלייליסט עלול לגרום ל-ArrayIndexOutOfBoundsException ב-ImaServerSideAdInsertionMediaSource.
  • סשן:
    • מוסיפים את MediaButtonReceiver.shouldStartForegroundService(Intent) כדי לאפשר לאפליקציות לבטל פקודה להפעלה שמגיעה להמשך ההפעלה על ידי שינוי השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר לדכא את ההפעלה שלו בלי שהמערכת תגרום לקריסה של השירות באמצעות ForegroundServiceDidNotStartInTimeException (#1528).
  • תוסף DASH:
    • הוספת תמיכה לתקופות שמתחילות באמצע קטע (#1440).
  • תוספים למפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • מוסיפים את מודול המפענח של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות הספרייה המקורית libiamf לסינתז אודיו.
      • ההפעלה מופעלת בפריסת סטריאו וגם ב-5.1 עם מיקום סראונד, יחד עם מעקב אופציונלי אחר תנועת הראש, אבל בשלב זה אין תמיכה בהפעלה בינארית.
  • תוסף Cast:
    • להפסיק את ניקוי ציר הזמן אחרי שהסשן של ההעברה (cast) מתנתק, כדי לאפשר לאפליקציה השולחת להמשיך את ההפעלה באופן מקומי אחרי הניתוק.
    • מאכלסים את DeviceInfo של CastPlayer כשמציינים Context. כך תוכלו לקשר את MediaSession ל-RoutingSession, שנחוץ לשילוב של Output Switcher (#1056).
  • כלי בדיקה:
    • DataSourceContractTest כולל עכשיו בדיקות לאימות:
      • מקור הנתונים read position מתעדכן.
      • מאגר הפלט offset מופעל בצורה תקינה.
  • מסירים את הסמלים הלא נתמכים:
    • מסירים את Player.hasPrevious, ‏ Player.hasPreviousWindow() שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasPreviousMediaItem().
    • הסרת השיטה Player.previous() שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • הסרת השיטה DrmSessionEventListener.onDrmSessionAcquired שיצאה משימוש.

גרסה 1.4.0

גרסה 1.4.1

27 באוגוסט 2024

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

  • ExoPlayer:
    • טיפול אסינכרוני בקריאות חזרה של טעינה מראש ב-PreloadMediaSource (#1568).
    • מתן אפשרות להפעלה ללא קשר למשך הזמן שנשמר במאגר כשהטעינה נכשלת (#1571).
  • חילוץ:
    • MP3: תיקון השגיאה Searched too many bytes על ידי התעלמות נכונה מנתונים לא מסוג MP3 שבסוף הקובץ, על סמך שדה האורך בפריים Info (#1480).
  • טקסט:
    • TTML: תוקנה הטיפול בערכי אחוזים של tts:fontSize כדי לוודא שהם עוברים בירושה בצורה נכונה מצמתי הורה עם ערכי אחוזים של tts:fontSize.
    • תיקון של IndexOutOfBoundsException ב-LegacySubtitleUtil עקב טיפול שגוי במקרה שבו שעת ההתחלה המבוקשת של הפלט גדולה משעת האירוע הסופית ב-Subtitle או שווה לה (#1516).
  • DRM:
    • תיקון שגיאה android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE במכשירים עם API מגרסה 31 ואילך שמפעילים תוכן L1 Widevine. השגיאה הזו נגרמת מהטמעה חלקית של השיטה MediaDrm.requiresSecureDecoder של המסגרת (#1603).
  • אפקט:
    • מוסיפים שיטה מסוג 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 כוללת את ההוספות האלה.

  • ספרייה משותפת:
    • להעביר קריאות seek שנחשבות ללא פעולה לשיטות המוגנות BasePlayer.seekTo() ו-SimpleBasePlayer.handleSeek() במקום להתעלם מהן. אם אתם מטמיעים את השיטות האלה בנגן מותאם אישית, יכול להיות שתצטרכו לטפל בקריאות הנוספות האלה באמצעות mediaItemIndex == C.INDEX_UNSET.
    • הסרת התלות בתהליך ה-compile ב-desugaring משופר של 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. אין צורך להגדיר את הדגל הזה, כי הנגנים והמקודדים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. כדי להחליט אם להציג דגימה, יש לבדוק אם זמן האחסון הזמני הוא לפחות BaseRenderer.getLastResetPositionUs() בהטמעות בהתאמה אישית של Renderer. הטמעות בהתאמה אישית של SimpleDecoder יכולות לבדוק את isAtLeastOutputStartTimeUs() לפי הצורך, או לסמן מאגרים אחרים באמצעות DecoderOutputBuffer.shouldBeSkipped כדי לדלג עליהם.
    • מאפשרים ל-TargetPreloadStatusControl.getTargetPreloadStatus(T) להחזיר ערך null כדי לציין שלא צריך לטעון מראש את MediaSource עם rankingData הנתון.
    • מוסיפים את remove(MediaSource) ל-BasePreloadManager.
    • מוסיפים את reset() ל-BasePreloadManager כדי לשחרר את כל המקורות שנמצאים בהחזקה, תוך שמירה על המכונה של מנהל ההטענה המקדימה.
    • מוסיפים את ExoPlayer.setPriority() (וגם את Builder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManager ואת החשיבות של MediaCodec מ-API 35.
    • תוקנה בעיה בעדכון של זמן האחזור האחרון, שהובילה למפתח שגוי של bs (מחסור ב-buffer) ב-CMCD‏ (#1124).
    • מוסיפים את הערך PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) כדי לציין שהמקור נטען עד הסוף. כך אפשר להטמיע את DefaultPreloadManager ואת PreloadMediaSource.PreloadControl בהתאמה אישית כדי לטעון מראש את המקור הבא או לבצע פעולות אחרות.
    • תוקן באג שגרם לכך שדילוג על קטעי שתיקה בסוף פריטים יכול להפעיל חריגה בהפעלה.
    • מוסיפים את clear אל PreloadMediaSource כדי לבטל את תקופת הטעינה מראש.
    • הוספת קוד שגיאה חדש PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED שמשמש כשמשתמשים מחדש במשאבי הקודק למשימות בעדיפות גבוהה יותר.
    • מאפשרים ל-AdsMediaSource לטעון מודעות Preroll לפני שהשלב הראשוני של הכנת מדיה לתוכן מסתיים (#1358).
    • תוקן באג שבו ההפעלה הועברה אל STATE_ENDED כשהתכוננו מחדש שידור חי של DASH בכמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט.
    • משנים את השם של onTimelineRefreshed() ל-onSourcePrepared() ושל onPrepared() ל-onTracksSelected() בקובץ PreloadMediaSource.PreloadControl. צריך גם לשנות את השמות של הגדרות ה-IntDef בקובץ DefaultPreloadManager.Stage בהתאם.
    • נוספה תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההפעלה של המעבד, ולהשהות את ההפעלה עד שהמעבדים יוכלו להתקדם. אפשר להפעיל את התכונה הזו באמצעות experimentalSetDynamicSchedulingEnabled() כשמגדירים את מופע ExoPlayer.
    • מוסיפים את Renderer.getDurationToProgressUs(). אפשר להטמיע את השיטה הזו ב-Renderer כדי להחזיר ל-ExoPlayer את משך הזמן שבו ההפעלה צריכה להתקדם כדי שהעיבוד יוכל להתקדם. אם ExoPlayer מוגדר עם experimentalSetDynamicSchedulingEnabled(), ה-method הזה ייקרא על ידי 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. אם משתמשים בשדה הזה לפרטי codec, צריך להשתמש ב-DefaultDecoderFactory.listener במקום זאת. במקרה של חריגה בקודק, פרטי הקודק יהיו זמינים ב-ExportException.codecInfo.
  • חילוץ:
    • MPEG-TS: כדי לוודא שהפריים האחרון יומר, מעבירים את יחידת הגישה האחרונה של הסטרימינג לתור הדגימות (#7909). שילוב תיקונים לפתרון הבעיות שהתגלו בשידורי HLS מסוג I-frame בלבד(#1150) ובשידורי HLS מסוג H.262 (#1126).
    • MP3: עדיפות לגודל הנתונים מסגרת Info על פני הגודל שדווח על ידי המקור (למשל, גודל הקובץ או כותרת Content-Length של HTTP). כך אפשר להחריג נתונים של טריילרים שלא ניתן להפעיל (למשל גרפיקה של אלבום) מהחישובים של דילוגים בקצב נתונים קבוע, וכך הדילוגים יהיו מדויקים יותר (#1376).
    • MP3: משתמשים במספר הפריימים ובנתונים אחרים בפריים Info (אם הוא קיים) כדי לחשב קצב העברת נתונים ממוצע לחיפוש בקצב העברת נתונים קבוע, במקום להסיק מסקנות מקצב העברת הנתונים של הפריים אחרי הפריים Info, שעשוי להיות קטן באופן מלאכותי, למשל פריים PCUT (#1376).
    • תיקון החילוץ של פורמט אודיו מסוג PCM במאגרי AVI.
  • אודיו:
    • תיקון מאפייני הקידוד של DTS:X Profile 2 להפעלה של העברה ישירה (passthrough) (#1299).
    • בהפעלה אופלורדינג, צריך לאפס את שדה המעקב להשלמת הסטרימינג ב-DefaultAudioSink לפני שמפעילים את AudioTrack.stop(), כדי ש-AudioTrack.StreamEventCallback#onPresentationEnded יזהה בצורה נכונה מתי כל הנתונים בהמתנה הושמעו.
    • תוקן באג ב-SilenceSkippingAudioProcessor שבו מעברים בין פורמטים שונים של אודיו (לדוגמה, סטריאו למונו) עלולים לגרום למעבד להוציא חריגה (#1352).
    • מטמיעים את MediaCodecAudioRenderer.getDurationToProgressUs() כדי ש-ExoPlayer יתזמן באופן דינמי את לולאת העבודה הראשית שלו למועד שבו MediaCodecAudioRenderer יכול להתקדם.
  • סרטון:
    • תוקנה בעיה שבה ההודעה Listener.onRenderedFirstFrame() מגיעה מוקדם מדי כשעוברים בין מכשירים במהלך ההפעלה.
    • תיקון הלוגיקה של חלופה למפענח עבור Dolby Vision, כך שייעשה שימוש במפענח AV1 תואם במקרה הצורך (#1389).
    • תיקון חריגה בקודק שעלולה להיגרם כתוצאה מהפעלת עיבוד וידאו במהלך ההפעלה.
  • טקסט:
    • תוקנה בעיה שבה כתוביות שמתחילות לפני מיקום דילוג מושמטים. הבעיה הזו הופיעה רק ב-Media3 1.4.0-alpha01.
    • שינוי התנהגות ברירת המחדל של ניתוח הכתוביות כך שתתבצע במהלך החילוץ במקום במהלך העיבוד (הבדלים בין חילוץ לעיבוד מפורטים בתרשים הארכיטקטוני של ExoPlayer).
      • אפשר לשנות את השינוי הזה על ידי קריאה גם ל-MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) וגם ל-TextRenderer.experimentalSetLegacyDecodingEnabled(true). במאמר מסמכי התיעוד בנושא התאמה אישית מוסבר איך לחבר את הרכיבים האלה למכונה של ExoPlayer. השיטות האלה (וכל התמיכה בקודקים ישנים של כתוביות) יוסרו בגרסה עתידית.
      • באפליקציות עם הטמעות מותאמות אישית של SubtitleDecoder צריך לעדכן אותן כך שיוטמע בהן SubtitleParser במקום זאת (ו-SubtitleParser.Factory במקום SubtitleDecoderFactory).
    • PGS: תוקנה פענוח האורך של רצף הנתונים כדי לפתור את 0 כאינדקס צבע, במקום כערך צבע מילולי (#1367).
    • CEA-708: התעלמות מערך rowLock. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגם rowLock וגם columnLock הם נכונים, ללא קשר לערכים שקיימים בסטרימינג (התמיכה ב-columnLock לא מיושמת, ולכן ההנחה היא שהוא תמיד יהיה שגוי).
      • השינוי הזה נכלל במקור בנתוני הגרסה של 1.3.0-alpha01, אבל הוא בוטל בטעות לפני השקת 1.3.0-rc01. הבעיה תוקנה, והשינוי מופיע שוב.
    • CEA-708: יש להימנע מהוספה של שורות חדשות כפולות כתוצאה מהטיפול הפשוט של ExoPlayer בפקודה 'set pen location' (#1315).
    • תיקון IllegalArgumentException מ-LegacySubtitleUtil כשדוגמת כתוביות WebVTT לא מכילה אותות, למשל כחלק מזרם DASH (#1516).
  • מטא-נתונים:
    • תיקון המיפוי של קובצי MP4 לתגי מיון של ID3. בעבר, תגי ה-MP4 'מיון לפי אלבום' (soal), 'מיון לפי אומן' (soar) ו 'מיון לפי אומן אלבום' (soaa) מופו בטעות לתגי ה-ID3‏ TSO2,‏ TSOA ו-TSOP (#1302).
    • תיקון הקריאה של תגי gnre (ז'אנר) ו-tmpo (קצב) מספריים ב-MP4‏ (/iTunes) כשהערך ארוך יותר מבייט אחד.
    • להעביר את המסגרת TCON של ID3 אל MediaMetadata.genre (#1305).
  • תמונה:
    • הוספת תמיכה בפריסת תמונות ממוזערות של DASH שאינן ריבועיות (#1300).
    • הוספנו תמיכה ב-AVIF לגרסאות API 34 ואילך.
    • מאפשרים להשתמש ב-null כפרמטר של ExoPlayer.setImageOutput() כדי לנקות את הערך של ImageOutput שהוגדר קודם.
  • DataSource:
    • מטמיעים תמיכה ב-URI של משאבים גולמיים מסוג android.resource://package/id, כאשר package שונה מחבילת האפליקציה הנוכחית. בעבר לא תיעדנו את האפשרות הזו, אבל היא דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם.
    • בודקים בקדימה ש-url הוא לא null בקונסטרוקטור של DataSpec. הפרמטר הזה כבר סומן כלא null.
    • מאפשרים ל-ByteArrayDataSource לפתור URI למערך בייטים במהלך open(), במקום להקידוד אותו באופן קבוע בזמן היצירה (#1405).
  • DRM:
    • אפשר להגדיר LoadErrorHandlingPolicy ב-DefaultDrmSessionManagerProvider (#1271).
  • אפקט:
    • תמיכה במספר שינויי מהירות באותו EditedMediaItem או Composition ב-SpeedChangeEffect.
    • תמיכה בפלט HLG ו-PQ מהזנת ביטים של HDR אולטרה.
    • הוספת תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמאפשרת לשפר את הפלט של שטח התצוגה בפורמט HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
    • מעדכנים את ההטמעה של מטריצת שכבת-העל כך שתהיה עקבית עם המסמכים, על ידי היפוך ערכי ה-x וה-y שחלים על setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את הערכים של x ו-y על ידי הכפלה שלהם ב--1.
    • תוקן באג שבו TimestampWrapper קורס כשמשתמשים בו עם ExoPlayer#setVideoEffects (#821).
    • שינוי מרחב העבודה של צבעים SDR שמוגדר כברירת מחדל מצבעים לינאריים לווידאו SDR חשמלי מסוג BT 709. אפשר גם לספק אפשרות שלישית לשמירת מרחב הצבע המקורי.
    • אפשר להגדיר סדר z לא ידוע של EditedMediaItemSequences‏ (#1055).
    • שמירה על טווח בהירות עקבי בקטעים שונים של תוכן HDR (באמצעות טווח HLG).
    • הוספת תמיכה בשכבות-על של Ultra HDR (bitmap) בתוכן HDR.
    • מתן הרשאה לשימוש באפקטים של SeparableConvolution לפני API 26.
    • מסירים את OverlaySettings.useHdr שלא בשימוש, כי הטווח הדינמי של שכבת-העל והפריים חייב להיות זהה.
    • הוספת תמיכה ב-HDR ל-TextOverlay. אפשר לשנות את הלחות של שכבת-העל של הטקסט באמצעות OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • תוסף IMA:
    • שדרוג הסטטוס של ממשק ה-API שנחוץ לאפליקציות להפעלת מודעות בסטרימינג דינמי ל'יציב'.
    • מוסיפים את replaceAdTagParameters(Map <String, String>) ל-ImaServerSideAdInsertionMediaSource.AdLoader כדי לאפשר החלפה של פרמטרים של תגי מודעות במהלך זמן הריצה.
    • תוקן באג שבו לא התבצעה קריאה ל-VideoAdPlayer.VideoAdPlayerCallback.onError() כשאירעה שגיאה בנגן במהלך הפעלת מודעה (#1334).
    • יש לשדרג את גרסת IMA SDK ל-3.33.0 כדי לתקן שגיאת NullPointerException שמופיעה כשמשתמשים במזהי URI של תגי מודעות מסוג data:// (#700).
  • סשן:
    • משנים את ברירת המחדל של CommandButton.enabled ל-true ומוודאים שהערך יכול להישאר שקר במכשירי הבקרה גם אם הפקודה המשויכת זמינה.
    • מוסיפים ערכי קבוע של סמלים עבור CommandButton, שצריך להשתמש בהם במקום במקורות של סמלים מותאמים אישית.
    • מוסיפים את MediaSessionService.isPlaybackOngoing() כדי לאפשר לאפליקציות לבדוק אם צריך להפסיק את השירות ב-onTaskRemoved() (#1219).
    • מוסיפים את MediaSessionService.pauseAllPlayersAndStopSelf() שמאפשר להשהות בנוחות את ההפעלה של כל הסשנים, וקוראים ל-stopSelf() כדי לסיים את מחזור החיים של MediaSessionService.
    • אפשר לשנות את הערך של MediaSessionService.onTaskRemoved(Intent) כדי לספק הטמעה בטוחה של ברירת המחדל, שבה השירות ימשיך לפעול בחזית אם ההפעלה נמשכת, או יכבה אותו במקרה אחר.
    • כדי להסתיר את סרגל החיפוש בהתראה על מדיה של שידורים חיים, לא מגדירים את משך הזמן במטא-נתונים של הסשן בפלטפורמה (#1256).
    • התאמת ההמרה של MediaMetadata ל-MediaDescriptionCompat, כדי להשתמש באותו סדר ובאותה לוגיקה מועדפים בבחירת מאפייני המטא-נתונים כמו ב-media1.
    • מוסיפים את MediaSession.sendError() שמאפשר לשלוח שגיאות לא קטלניות למתג Media3. כשמשתמשים ב-Notification Controller (ראו MediaSession.getMediaNotificationControllerInfo()), השגיאה בהתאמה אישית משמשת לעדכון הערך של PlaybackState בסשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (#543).
    • מוסיפים את MediaSession.Callback.onPlayerInteractionFinished() כדי להודיע לסשנים כשסדרה של אינטראקציות של שחקן מבקר מסוים מסתיימת.
    • מוסיפים את SessionError ומשתמשים בו ב-SessionResult וב-LibraryResult במקום בקוד השגיאה, כדי לספק מידע נוסף על השגיאה ועל האופן שבו אפשר לפתור אותה, אם אפשר.
    • פרסום הקוד של אפליקציית הבדיקה של בקר media3, שאפשר להשתמש בה כדי לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
    • העברת נתוני ה-extras שהועברו ל-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 ב-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 באפליקציית הדגמה של סרטוני Shorts.
    • אפשר להגדיר את מצב החזרה באמצעות ארגומנטים של Intent משורת הפקודה (#1266).
    • אם המכשיר תומך בכך, משתמשים ב-HttpEngineDataSource בתור HttpDataSource.
  • מסירים את הסמלים הלא נתמכים:
    • מסירים את CronetDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
    • מסירים חלק מהמגדירים של DataSpec. במקום זאת, אתם צריכים להשתמש ב-DataSpec.Builder.
    • מסירים את השיטה setContentTypePredicate(Predicate) מהחשבונות DefaultHttpDataSource, ‏ OkHttpDataSource ו-CronetDataSource. במקום זאת, צריך להשתמש בשיטה המקבילה בכל XXXDataSource.Factory.
    • מסירים את המאפיינים OkHttpDataSource ו-OkHttpDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory.
    • מסירים את PlayerMessage.setHandler(Handler). במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper).
    • מסירים את השדה Timeline.Window.isLive. במקום זאת, משתמשים ב-method‏ isLive().
    • מסירים את ה-constructors של DefaultHttpDataSource. במקום זאת, אתם צריכים להשתמש ב-DefaultHttpDataSource.Factory.
    • מסירים את DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. במקום זאת, אתם צריכים להשתמש ב-DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • מסירים את MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). במקום זאת, אתם צריכים להשתמש ב-MediaCodecInfo.canReuseCodec(Format, Format).
    • מסירים את השיטה DrmSessionManager.DUMMY ו-getDummyDrmSessionManager(). במקום זאת, אתם צריכים להשתמש ב-DrmSessionManager.DRM_UNSUPPORTED.
    • מסירים את AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),‏ AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),‏ AudioRendererEventListener.onAudioInputFormatChanged(Format),‏ VideoRendererEventListener.onVideoInputFormatChanged(Format). במקום זאת, צריך להשתמש באופרלודים שמקבלים DecoderReuseEvaluation.
    • מסירים את RendererSupport.FormatSupport IntDef ואת הקבועים FORMAT_HANDLED,‏ FORMAT_EXCEEDS_CAPABILITIES, ‏ FORMAT_UNSUPPORTED_DRM,‏ FORMAT_UNSUPPORTED_SUBTYPE, ‏ FORMAT_UNSUPPORTED_TYPE. במקום זאת, צריך להשתמש ב-IntDef ובקבועים המקבילים ב-androidx.media3.common.C (למשל C.FORMAT_HANDLED).
    • מסירים את הממשק Bundleable. זה כולל הסרה של כל השדות הקבועים מסוג Bundleable.Creator<Foo> CREATOR. במקום זאת, מבצעי הקריאה צריכים להשתמש בשיטות Bundle toBundle() ו-static Foo fromBundle(Bundle) לכל סוג.

גרסה 1.4.0-rc01

10 ביולי 2024

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

גרסה 1.4.0-beta01

26 ביוני 2024

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

גרסה 1.4.0-alpha02

7 ביוני 2024

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

גרסה 1.4.0-alpha01

17 באפריל 2024

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

גרסה 1.3.0

גרסה 1.3.1

11 באפריל 2024

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

  • ספרייה משותפת:
    • מוסיפים את Format.labels כדי לאפשר תוויות מותאמות לאזור או תוויות חלופיות אחרות.
  • ExoPlayer:
    • תוקנה בעיה שבה PreloadMediaPeriod לא יכול לשמור את הסטרימינג כשהוא נטען מראש שוב.
    • מחילים את הערך המתאים של TrackSelectionResult על תקופת ההפעלה בבחירת הטראק מחדש.
    • כדאי להפעיל מנועי עיבוד מראש רק אחרי שמקדמים את פרק הזמן של ההפעלה במעבר בין פריטי מדיה (#1017).
    • מוסיפים את סוג ההחזרה החסר לכלל -keepclasseswithmembers של Proguard עבור DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformer:
    • הוספת פתרון עקיף לחריג שהופעל בגלל ש-MediaMuxer לא תומך בחותמות זמן של הצגה שליליות לפני API 30.
  • בחירת טראק:
    • DefaultTrackSelector: עדיפות לטראקים של וידאו עם קצב פריימים 'סביר' (‎10fps ומעלה) על פני אלה עם קצב פריימים נמוך יותר או קצב פריימים לא מוגדר. כך מוודאים שהנגן יבחר את הטראק 'האמיתי' של הווידאו בקובצי MP4 שחולצו מתמונות סטילס בתנועה, שיכולים להכיל שני טראקים של HEVC, כאשר אחד מהם ברזולוציה גבוהה יותר אבל מכיל מספר קטן מאוד של פריימים (#1051).
  • חילוץ:
    • תוקנה בעיה שבה לא דילוג על מילוי (padding) בקריאת קטעים בגודל לא רגיל מקובצי 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 כוללת את ההוספות האלה.

  • ספרייה משותפת:
    • מטמיעים תמיכה ב-android.resource://package/[type/]name URIs של משאבים גולמיים, כאשר 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 כברירת מחדל עם ImageOutput ו-ImageDecoder.Factory.DEFAULT של null.
    • יצירת אירוע Player.Listener.onPositionDiscontinuity כשהשתקה מועברת (#765).
    • הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את האפשרות הזו באמצעות MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • תמיכה במקורות מדיה מותאמים באמצעות PreloadMediaSource.
    • מטמיעים את HttpEngineDataSource, HttpDataSource באמצעות ה-API של HttpEngine.
    • מניעת יצירת תת-סוגים של CompositeSequenceableLoader. הרכיב הזה הוכן בעבר להרחבה, אבל אף פעם לא נוצרה לו קבוצת משנה בספרייה. אפשר לבצע התאמות אישיות על ידי עטיפת מופע באמצעות דפוס decorator והטמעת CompositeSequenceableLoaderFactory מותאם אישית.
    • תיקון בעיה שבה חזרה על אותה שעה גורמת למחיקת המטא-נתונים של הפריט הזה (#1007).
    • משנים את השם של השיטות experimentalSetSubtitleParserFactory ב-BundledChunkExtractor.Factory וב-DefaultHlsExtractorFactory ל-setSubtitleParserFactory ואוסרים על העברה של null. משתמשים בשיטות החדשות של experimentalParseSubtitlesDuringExtraction(boolean) כדי לשלוט בהתנהגות הניתוח.
    • הוספת תמיכה בהתאמה אישית של SubtitleParser.Factory שמשמש במהלך החילוץ. אפשר לעשות זאת באמצעות MediaSource.Factory.setSubtitleParserFactory().
    • הוספת קידומת של מקור לכל השדות Format.id שנוצרו מ-MergingMediaSource. כך אפשר לזהות איזה מקור יצר את הערך Format (#883).
    • תיקון של ביטוי ה-regex שמשמש לאימות שמות של מפתחות בהתאמה אישית של נתוני לקוח של מדיה משותפת (CMCD). לשם כך, משנים אותו כך שיבדוק רק מקפים (#1028).
    • הפסקת הקידוד הכפול של פרמטרים של שאילתות CMCD (#1075).
  • Transformer:
    • נוספה תמיכה בתמונות שטוחות של סרטוני H.265/HEVC SEF בהילוך איטי.
    • הגברת מהירות המרת הקוד, במיוחד לעריכות מסוג 'הסרת סרטון'.
    • מוסיפים ממשק API כדי לוודא שקובץ הפלט יתחיל בפריים של הסרטון. כך תוכלו לשפר את התאימות של הפלט של פעולות החיתוך להטמעות של נגני וידאו שלא מציגים את הפריים הראשון של הסרטון עד לחותמת הזמן של הצגתו (#829).
    • הוספנו תמיכה באופטימיזציה של פעולות חיתוך של נכס MP4 יחיד.
    • מוסיפים תמיכה כדי לוודא שחותמת הזמן הראשונה בקובץ הפלט תופיע בפריים של הסרטון. תיקון של קבצי פלט שמתחילים בפריים שחור בנגני iOS (#829).
  • בחירת טראק:
    • מוסיפים את הערך DefaultTrackSelector.selectImageTrack כדי לאפשר בחירת טראק תמונה.
    • מוסיפים את הערך TrackSelectionParameters.isPrioritizeImageOverVideoEnabled כדי לקבוע אם לבחור טראק תמונה אם יש גם טראק תמונה וגם טראק וידאו. ערך ברירת המחדל הוא false, כלומר יש עדיפות לבחירת טראק וידאו.
  • חילוץ:
    • הוספת ניתוח AV1C נוסף למחולל ה-MP4 כדי לאחזר את הערכים ColorInfo.colorSpace,‏ ColorInfo.colorTransfer ו-ColorInfo.colorRange (#692).
    • MP3: שימוש בחיפוש של קצב נתונים קבוע (CBR) בקבצים עם כותרת Info (הערך המקביל ל-CBR של הכותרת Xing). בעבר השתמשנו בטבלת החיפוש מהכותרת Info, אבל התוצאה היא חיפוש פחות מדויק מאשר אם מתעלמים ממנה ומניחים שהקובץ הוא CBR.
    • MPEG2-TS: נוספה תמיכה ב-DTS, ב-DTS-LBR וב-DTS:X Profile2 (#275).
    • חילוץ סוגי אודיו מתיאורי TS ומיפוי שלהם לדגלים של תפקידים, כדי לאפשר למשתמשים לבחור טראקים של אודיו בצורה מושכלת יותר (#973).
  • אודיו:
    • שיפור האלגוריתם לדילוג על קטעי שקט באמצעות עלייה חלקה בעוצמת הקול, שמירה על קטעי שקט מינימליים ומספר טבעי יותר של קטעי שקט (‏#7423).
    • דיווח גורמי יותר על הפסקות השתיקה שקופצות (#1035).
  • סרטון:
    • משנים את ה-constructor של MediaCodecVideoRenderer שמקבל ארגומנטים מסוג VideoFrameProcessor.Factory ומחליפים אותו ב-constructor שמקבל ארגומנטים מסוג VideoSinkProvider. אפליקציות שרוצות להחדיר VideoFrameProcessor.Factory מותאם אישית יכולות ליצור מופע של CompositingVideoSinkProvider שמשתמש ב-VideoFrameProcessor.Factory המותאם אישית ולהעביר את ספק מקור הווידאו אל MediaCodecVideoRenderer.
  • טקסט:
    • תיקון הסריאליזציה של הנחיות של קובצי bitmap כדי לפתור את השגיאה 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:
    • הפעלה מיידית של קטעי 'lead ברור' ללא הצפנה בתוכן DRM כברירת מחדל, גם אם המפתחות לקטעים המוצפנים מאוחר יותר עדיין לא מוכנים. כתוצאה מכך, יכול להיות שיחולו השהיות במהלך ההפעלה אם המפתחות עדיין לא יהיו מוכנים כשמיקום ההפעלה יגיע לדגימות המוצפנות (אבל בעבר ההפעלה לא הייתה מתחילה בכלל בשלב הזה). אפשר להשבית את ההתנהגות הזו באמצעות MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey או DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
  • תוסף IMA:
    • תוקנה בעיה שבה לא ניתן להפעיל מודעות DASH ו-HLS ללא סיומת הקובץ המתאימה.
  • סשן:
    • השבתת זיהוי לחיצות כפולות באפליקציות לטלוויזיה (#962).
    • תוקנה בעיה שבה MediaItem.RequestMetadata עם רק רכיבי פרטים נוספים שאינם null לא מועבר בין בקרי מדיה לסשנים.
    • מוסיפים למבנה MediaLibrarySession.Builder קונסטרוקטור שמקבל רק 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).
    • תוקנה בעיה שבה בחירות הטראקים אחרי דילוג ל-0 בשידור חי מאפשרות לשידור להתחיל במיקום ברירת המחדל באופן שגוי (‎#9347).
    • תוקנה הבעיה שבה מופעים ערכים שליליים של bufferedDurationUs במופעים חדשים של CmcdData.Factory ממקורות של קטעי קוד, וכתוצאה מכך מתקבלת הודעת השגיאה 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 של רישיון https://default.url מזויף של ClearKey ל-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 ב-Manifest של DASH (#688).
  • תוספים למפענח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • MIDI: תוקנה בעיה שבה דילוג קדימה מדלג על אירועי שינוי תוכנית (#704).
    • עוברים ל-FFmpeg 6.0 ומעדכנים את NDK הנתמך לגרסה r26b (#707, #867).
  • תוסף Cast:
    • טיהור היצירה של Timeline כדי שהאפליקציה לא תקרוס כשהטעינה של המדיה נכשלת במכשיר ההעברה (#708).

גרסה 1.2.0

15 בנובמבר 2023

  • ספרייה משותפת:
    • מוסיפים פרמטר @Nullable Throwable לשיטות בממשק Log.Logger. הפרמטר message לשיטות האלה כבר לא מכיל מידע על Throwable שמועברים לשיטות Log.{d,i,w,e}(), כך שבהטמעות יהיה צורך לצרף את המידע הזה באופן ידני אם רוצים (אפשר להשתמש ב-Logger.appendThrowableString(String, Throwable)).
    • תיקון בעיה בתאימות ל-Kotlin שבה פרמטרים של סוגים כלליים שאפשר להעביר להם ערכים null וסוגי רכיבי מערך שאפשר להעביר להם ערכים null לא מזוהים כערכים null. דוגמאות לכך הן הפרמטרים של השיטות 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 כמדגם אחד.
    • משפרים את השיטה SequenceableLoader.continueLoading(long) בממשק SequenceableLoader ל-SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo מכיל פרמטרים נוספים, כולל playbackSpeed ו-lastRebufferRealtimeMs בנוסף ל-playbackPositionUs הקיים.
    • משפרים את השיטה ChunkSource.getNextChunk(long, long, List, ChunkHolder) בממשק ChunkSource ל-ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • הוספת שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (CMCD): רעב במאגר (bs), מועד אחרון (dl), קצב הפעלה (pr) והפעלה (su) (#8699).
    • מוסיפים עומק ביט של לומה וצבע ל-ColorInfo (#491).
    • הוספת שדות נוספים לרישום ביומן של נתוני הלקוח הנפוצים של מדיה (CMCD): בקשת האובייקט הבאה (nor) ובקשת הטווח הבאה (nrr) (#8699).
    • הוספת פונקציונליות להעברת נתוני Common Media Client Data ‏ (CMCD) באמצעות פרמטרים של שאילתות (#553).
    • תיקון של ConcurrentModificationException ב-ExperimentalBandwidthMeter (#612).
    • מוסיפים את הפרמטר MediaPeriodId ל-CompositeMediaSource.getMediaTimeForChildMediaTime.
    • תמיכה ב-ClippingMediaSource (ובמקורות אחרים עם עיכובים בזמן חלון/תקופות) ב-ConcatenatingMediaSource2 (#11226).
    • משנים את BaseRenderer.onStreamChanged() כך שתקבל גם ארגומנטים של MediaPeriodId.
  • Transformer:
    • ניתוח נתוני סיבוב של EXIF עבור קלט תמונות.
    • מסירים את סוג ההערה TransformationRequest.HdrMode ואת הקבועים המשויכים אליו. במקום זאת, צריך להשתמש ב-Composition.HdrMode ובקבועים המשויכים אליו.
    • פשטו את OverlaySettings כדי לפתור בעיות של סיבוב.
    • הפרמטרים frameRate ו-durationUs של SampleConsumer.queueInputBitmap השתנו ל-TimestampIterator.
  • בחירת טראק:
    • מוסיפים את הערך DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness כדי לאפשר או לאסור באופן מפורש התאמה לא חלקה. ברירת המחדל תישאר בהתנהגות הנוכחית שלה, true.
  • חילוץ:
    • MPEG-TS: כדי לוודא שהפריים האחרון יומר, מעבירים את יחידת הגישה האחרונה של הסטרימינג לתור הדגימות (#7909).
    • תיקון שגיאת הקלדה בזמן שקובע את הערך של rotationDegrees. projectionPosePitch השתנה ל-projectionPoseRoll (#461).
    • מסירים את ההנחה שאפשר לבדוק ישירות מכונות Extractor באמצעות instanceof. כדי לקבל גישה בסביבת זמן הריצה לפרטי ההטמעה של Extractor, צריך קודם לבצע קריאה ל-Extractor.getUnderlyingInstance.
    • מוסיפים את BmpExtractor.
    • מוסיפים את WebpExtractor.
    • מוסיפים את HeifExtractor.
    • מוסיפים תמיכה ב-QuickTime classic ל-Mp4Extractor.
  • אודיו:
    • הוספת תמיכה ב-PCM big-endian של 24/32 ביט ב-MP4 וב-Matroska, וניתוח קידוד PCM עבור lpcm ב-MP4.
    • הוספת תמיכה בחילוץ אודיו מסוג Vorbis ב-MP4.
    • מוסיפים את AudioSink.getFormatOffloadSupport(Format) שמאחזר את רמת התמיכה בהעברת עומס (offload) שהסינק יכול לספק לפורמט באמצעות DefaultAudioOffloadSupportProvider. הפונקציה מחזירה את הערך החדש של AudioOffloadSupport שמכיל את הערכים isFormatSupported,‏ isGaplessSupported ו-isSpeedChangeSupported.
    • מוסיפים את AudioSink.setOffloadMode() דרכו מוגדרת ההגדרה של העברת העומס (offload) בבורר האודיו. ברירת המחדל היא AudioSink.OFFLOAD_MODE_DISABLED.
    • אפשר להפעיל את העברת הנתונים דרך setAudioOffloadPreference ב-TrackSelectionParameters. אם ההעדפה מוגדרת כ'מופעלת', המכשיר תומך בהעברת נתונים מהמכשיר לענן בפורמט הזה ובוחרים טראק אודיו יחיד, העברת הנתונים מהמכשיר לענן תופעל.
    • אם הערך של audioOffloadModePreference מוגדר כ-AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, הערך של DefaultTrackSelector יבחר טראק אודיו רק אם הפורמט של הטראק נתמך בהעברה. אם אין תמיכה בטראק אודיו בהעברה, לא נבחר טראק.
    • השבתת התמיכה בנגינה ללא הפסקות בהעברה (offload) במכשירים עם גרסת API לפני 33, בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
    • מסירים את הפרמטר enableOffload מחתימת השיטה DefaultRenderersFactory.buildAudioSink.
    • מסירים את השיטה DefaultAudioSink.Builder.setOffloadMode.
    • מסירים את הערך של intdef‏ DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • הוספת תמיכה במטא-נתונים של Opus ללא הפסקות במהלך הפעלה של תוכן שהועבר.
    • מתן אפשרות לשחזור של המרת הקוד על ידי השבתת העברת הנתונים אם היא נכשלה בכתיבה הראשונה (#627).
    • הפעלת תזמון העברה אופליין כברירת מחדל להפעלה אופליין של אודיו בלבד.
    • מוחקים את ExoPlayer.experimentalSetOffloadSchedulingEnabled וגם את AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • השם של onExperimentalSleepingForOffloadChanged השתנה ל-onSleepingForOffloadChanged והשם של onExperimentalOffloadedPlayback השתנה ל-onOffloadedPlayback.
    • העברת הממשקים וההגדרות של TrackSelectionParameters שקשורים למצב העברת אודיו לכיתה פנימית של AudioOffloadPreferences.
    • מוסיפים את הפונקציות החוזרות onAudioTrackInitialized ו-onAudioTrackReleased ל-AnalyticsListener, ל-AudioRendererEventListener ול-AudioSink.Listener.
    • תיקון בעיה של מצב 'זרימה נמוכה מדי' במאגר האודיו של DTS Express (מספר הבעיה: 650).
    • תיקון באג שבו בדיקת היכולות של E-AC3-JOC גורמת להצגת השגיאה IllegalArgumentException (#677).
  • סרטון:
    • מתן הרשאה ל-MediaCodecVideoRenderer להשתמש ב-VideoFrameProcessor.Factory בהתאמה אישית.
    • תוקן באג שבו לא ניתן היה ליצור את הפריים הראשון אם שידור האודיו מתחיל בחותמות זמן שליליות (#291).
  • טקסט:
    • מסירים את ExoplayerCuesDecoder. טראקי טקסט עם sampleMimeType = application/x-media3-cues מטופלים עכשיו ישירות על ידי TextRenderer, בלי צורך במכונה של SubtitleDecoder.
  • מטא-נתונים:
    • לא תתבצע יותר קריאה ל-MetadataDecoder.decode לדוגמיות 'פענוח בלבד', כי ההטמעה חייבת להחזיר null בכל מקרה.
  • אפקט:
    • הוספת VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) לצבירת קלט של קובצי bitmap לפי חותמת זמן.
    • משנים את VideoFrameProcessor.registerInputStream() למצב לא חוסם. אפליקציות חייבות ליישם את VideoFrameProcessor.Listener#onInputStreamRegistered().
    • הפרמטרים frameRate ו-durationUs של VideoFrameProcessor.queueInputBitmap השתנו ל-TimestampIterator.
  • תוסף IMA:
    • תוקנה באג שבו שידור חי של DASH בכמה תקופות, שאינו הפריט הראשון בפלייליסט, עלול להוביל לחריגה (‎#571).
    • שחרור של StreamManager לפני קריאה ל-AdsLoader.destroy()
    • יש לשדרג את גרסת IMA SDK ל-3.31.0.
  • סשן:
    • מגדירים את התנהגות השירות בחזית של ההתראות ל-FOREGROUND_SERVICE_IMMEDIATE בקובץ DefaultMediaNotificationProvider (#167).
    • כדי להימנע מבעיות ב-API שהוצא משימוש במכשירי Samsung, צריך להשתמש רק ב-android.media.session.MediaSession.setMediaButtonBroadcastReceiver() בגרסה API 31 ואילך (#167).
    • משתמשים בבורר ההתראות של המדיה כשרתי proxy כדי להגדיר את הפקודות הזמינות ואת הפריסה בהתאמה אישית שמשמש לאכלוס ההתראה וסשן הפלטפורמה.
    • המרת אירועים של לחצני מדיה שמתקבלים על ידי MediaSessionService.onStartCommand() ב-Media3, במקום לנתב אותם לסשן בפלטפורמה ובחזרה ל-Media3. כך, הבקרה על מבצע הקריאה תמיד תהיה הבקרה על התראת המדיה, והאפליקציות יוכלו לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות.
    • תוקן באג שבו MediaController.getCurrentPosition() לא מתקדם כשמחובר ל-MediaSessionCompat מדור קודם.
    • אפשר להוסיף את MediaLibrarySession.getSubscribedControllers(mediaId) לנוחות.
    • משנים את הערך של MediaLibrarySession.Callback.onSubscribe() כדי לאמת את הזמינות של מזהה ההורה שהבקר נרשם אליו. אם הפעולה תתבצע בהצלחה, המינוי יאושר והפונקציה notifyChildrenChanged() תופעל באופן מיידי כדי להודיע לדפדפן (#561).
    • מוסיפים מודול הדגמה של סשן ל-Automotive OS ומפעילים הדגמה של סשן ב-Android Auto.
    • אין להגדיר את התור של סשן המסגרת כשהערך COMMAND_GET_TIMELINE לא זמין לבקר ההתראות של המדיה. כש-Android Auto הוא בקר הלקוח שקורא מהסשן של המסגרת, המשמעות היא שהלחצן queue בממשק המשתמש של Android Auto לא מוצג (#339).
    • להשתמש ב-DataSourceBitmapLoader כברירת מחדל במקום ב-SimpleBitmapLoader (#271, ‏ #327).
    • מוסיפים את MediaSession.Callback.onMediaButtonEvent(Intent) שמאפשר לאפליקציות לשנות את ברירת המחדל לטיפול באירועים של לחצן המדיה.
  • ממשק משתמש:
    • מוסיפים הטמעה של Player.Listener למכשירי Wear OS, שמטפלת בהשתקה של ההפעלה עקב Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT על ידי הפעלת תיבת דו-שיח מערכתית שמאפשרת למשתמש לחבר פלט אודיו מתאים (למשל, אוזניות Bluetooth). ההפעלה תתחדש באופן אוטומטי אם מכשיר מתאים יתחבר תוך פרק זמן קצוב מראש (ברירת המחדל היא 5 דקות).
  • הורדות:
    • כדי לתמוך ב-Android 14, צריך להצהיר על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור DownloadService. כשמשתמשים בשירות הזה, צריך גם להוסיף את dataSync בתור foregroundServiceType במניפסט ולהוסיף את ההרשאה FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • תוסף HLS:
    • רענון הפלייליסט של השידור החי ב-HLS עם מרווח זמן שמחושב משעת ההתחלה של הטעינה האחרונה, ולא משעת השלמת הטעינה האחרונה (#663).
  • תוסף DASH:
    • מתן אפשרות להשתמש בכמה מזהים זהים של DASH בכתובת ה-URL של תבנית הפלח.
    • הוספת תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. ב-VP9 יש תמיכה משופרת במיזוג של כתוביות חופפות, כולל פתרון של הבהוב במעבר בין קטעי כתוביות. אפשר להפעיל את התכונה הזו באמצעות DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • תוסף RTSP:
    • תיקון מצב מרוץ שעלול להוביל ל-IndexOutOfBoundsException כשחוזרים ל-TCP, או להשהיית ההפעלה במצבים מסוימים.
    • צריך לבדוק את הסטטוס בהגדרת ה-RTSP כשמחזירים את סטטוס הטעינה של RtspMediaPeriod (#577).
    • התעלמות משיטות בקשה מותאמות אישית של Rtsp בכותרת הציבורית של תגובת האפשרויות (#613).
    • שימוש בערך הזמן הקצוב לתפוגה של תגובת ההגדרה של RTSP במרווח הזמן של שליחת בקשות RTSP Options לצורך שמירת החיבור (#662).
  • תוספים למפענח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • פרסום המודול של מפענח ה-MIDI, שמספק תמיכה בהפעלה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסינתז אודיו.
    • מוסיפים את הערך DecoderOutputBuffer.shouldBeSkipped כדי לסמן ישירות מאגרי פלט שלא צריך להציג. מומלץ להשתמש ב-C.BUFFER_FLAG_DECODE_ONLY במקום ב-C.BUFFER_FLAG_DECODE_ONLY, שיוצא משימוש.
    • מוסיפים את Decoder.setOutputStartTimeUs ו-SimpleDecoder.isAtLeastOutputStartTimeUs כדי לאפשר למפענחים להשמיט דגימות לפענוח בלבד לפני שעת ההתחלה. מומלץ להשתמש באפשרות הזו במקום ב-Buffer.isDecodeOnly, שיוצא משימוש.
    • תיקון באג בפרסום של פריט ה-artifact של מפענח ה-MIDI במאגר Maven. השם של הארטיפקט משתנה ל-media3-exoplayer-midi (#734).
  • תוסף Leanback:
    • תוקן באג שבו השבתת משטח יכולה לגרום לקוד ArithmeticException ב-Leanback (#617).
  • כלי בדיקה:
    • איך מגדירים את TestExoPlayerBuilder ו-FakeClock כך שיתואמו לבדיקות UI של Espresso ולבדיקות UI של 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 מקריים לאחר ניקוי הפלייליסט.
    • הוספת שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (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: שינוי הלוגיקה של חיתוך האותיות כך שתתייחס רק לטקסט גלוי. בעבר, המערכת כללה את ההזחה וההזזה באמצעות Tab כשהגבילה את אורך ההנחיה ל-32 תווים (הדבר היה נכון מבחינה טכנית לפי המפרט) (#11019).
  • תוסף IMA:
    • יש לשדרג את גרסת IMA SDK ל-3.30.3.
  • סשן:
    • מוסיפים פריסה בהתאמה אישית למצב של הבקר ומספקים פונקציית getter כדי לגשת אליה. כשהפריסה בהתאמה אישית משתנה, מתבצעת קריאה לפונקציה MediaController.Listener.onCustomLayoutChanged. אפליקציות שרוצות לשלוח פריסות מותאמות אישית שונות למתג Media3 שונה יכולות לעשות זאת ב-MediaSession.Callback.onConnect באמצעות AcceptedResultBuilder כדי לוודא שהפריסה המותאמת אישית תהיה זמינה למתג כשהחיבור יושלם.
    • תיקון מקרים שבהם MediaLibraryServiceLegacyStub שלח שגיאה ל-Result שלא תמך בכך, וכתוצאה מכך נוצר UnsupportedOperationException (#78).
    • תיקון האופן שבו PlayerWrapper יוצרת VolumeProviderCompat על ידי קביעת volumeControlType גם באמצעות פקודות מדור קודם (COMMAND_ADJUST_DEVICE_VOLUME ו-COMMAND_SET_DEVICE_VOLUME) וגם באמצעות פקודות חדשות (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS ו-COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

גרסה 1.1.0

5 ביולי 2023

  • ספרייה משותפת:
    • Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#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.
    • מוסיפים פרמטרים לשיטות LoadControlshouldStartPlayback ו-onTracksSelected שמאפשרים לשייך את השיטות האלה ל-MediaPeriod הרלוונטי.
    • משנים את החתימה של ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID ששימשו כמפתחות במפה. הפעולה הזו נדרשת כדי למנוע בעיות במקביליות בשידורים חיים שמתפרסים על פני כמה תקופות.
    • הוצאה משימוש של EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) ו-BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). במקום זאת, אפשר להפעיל את הווריאנט של השיטות ללא mediaTimeOffsetUs. שימו לב שגם לגבי הווריאנטים שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUs ול-endTimeUs של אובייקטי ה-MediaLoadData שנשלחים על ידי המפנה.
    • משנים את השם של ExoTrackSelection.blacklist ל-excludeTrack ואת השם של isBlacklisted ל-isTrackExcluded.
    • תיקון התנהגות לא עקבית בין ExoPlayer.setMediaItem(s) ל-addMediaItem(s) כשמפעילים אותם בפלייליסט ריק.
  • Transformer:
    • מסירים את Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). במקום זאת, צריך להשתמש ב-ExoPlayerAssetLoader.Factory(MediaSource.Factory) וב-Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • מסירים את Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • תוקן באג שגרם לכך שהטרנספורמציה יכלה להיתקע (ולגרום ל-muxer לחרוג מזמן הקצוב) אם סוף מקור הווידאו אותת בזמן שפריים קלט היה בהמתנה לעיבוד.
    • כדי להרחיב את התמיכה, שולחים שאילתות לקודקים דרך MediaCodecList במקום להשתמש בכלים של findDecoder/EncoderForFormat.
    • מסירים את ההגדרה של פריימים מסוג B ב-DefaultEncoderFactory כי היא לא פועלת במכשירים מסוימים.
  • בחירת טראק:
    • מוסיפים את הערך DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, שהוא מושבת כברירת מחדל. כשהאפשרות DefaultTrackSelector מופעלת, היא תגרום לבחירת טראק חדש כשיכולות ה-Renderer ישתנו.
  • חילוץ:
    • Ogg: תוקן באג שקשור לחיפוש בקבצים ארוכים (#391).
    • FMP4: תיקון בעיה שבה TimestampAdjuster מאתחלת את הפרש הזמן הלא נכון של חותמת הזמן לפי זמן הדגימה של המטא-נתונים מ-atom של 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() משתנה. בעקבות השינוי הזה, הרוחב והגובה של MediaCodecVideoRenderer ב-ExoPlayer הם 0 כשPlayer.getCurrentTracks לא תומך בווידאו, או כשהגודל של טראק הווידאו הנתמך עדיין לא נקבע.
  • DRM:
    • צמצום החשיפה של כמה שיטות פנימיות בלבד ב-DefaultDrmSession שלא צפויות להיקרא מחוץ לחבילת ה-DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • הוספת ספריית muxer חדשה שאפשר להשתמש בה כדי ליצור קובץ מאגר MP4.
  • תוסף IMA:
    • הפעלת שידורי DASH חיים בכמה תקופות ל-DAI. חשוב לדעת שההטמעה הנוכחית עדיין לא תומכת בדילוג בשידורים חיים (#10912).
    • תיקון באג שבו קבוצת מודעות חדשה מוכנסת לשידורים חיים כי מיקום התוכן המחושב בכרונולוגיות רצופות משתנה במעט.
  • סשן:
    • מוסיפים את שיטת העזר MediaSession.getControllerForCurrentRequest כדי לקבל מידע על הבקר שמפעיל כרגע את השיטה Player.
    • מוסיפים את androidx.media3.session.MediaButtonReceiver כדי לאפשר לאפליקציות להטמיע המשך של ההפעלה באמצעות אירועים של לחצן מדיה שנשלחים, למשל, על ידי אוזניות Bluetooth (#167).
    • הוספת הטמעת ברירת מחדל ל-MediaSession.Callback.onAddMediaItems כדי לאפשר העברה של MediaItems המבוקש אל Player אם יש לו LocalConfiguration (למשל, URI) (#282).
    • הוספת לחצני הפקודה 'דילוג לקודם' ו'דילוג לבא' לתצוגה הקומפקטית של התראות המדיה כברירת מחדל ב-Android 12 וגרסאות קודמות (#410).
    • הוספת הטמעת ברירת מחדל ל-MediaSession.Callback.onAddMediaItems כדי לאפשר העברה של MediaItems המבוקש אל Player אם יש לו LocalConfiguration (למשל, URI) (#282).
    • הוספת לחצני הפקודה 'דילוג לקודם' ו'דילוג לבא' לתצוגה הקומפקטית של התראות המדיה כברירת מחדל ב-Android 12 וגרסאות קודמות (#410).
  • ממשק משתמש:
    • מוסיפים את השיטות של Util‏ shouldShowPlayButton ו-handlePlayPauseButtonAction כדי לכתוב רכיבי ממשק משתמש מותאמים אישית עם לחצן הפעלה/השהיה.
  • תוסף RTSP:
    • עבור MPEG4-LATM, משתמשים בערך ברירת המחדל של profile-level-id אם הוא לא מופיע בהודעת ה-SDP של התשובה לתיאור (#302).
    • משתמשים ב-URI הבסיסי לפתרון נתיב יחסי מסשן ה-RTSP, אם הוא מופיע בכותרת התגובה של DESCRIBE (#11160).
  • תוסף DASH:
    • מסירים את הפרש הזמן של המדיה מ-MediaLoadData.startTimeMs ומ-MediaLoadData.endTimeMs בשידורי DASH עם כמה תקופות.
    • תוקן באג שבו הכנת מחדש של מקור מדיה של Dash בשידור חי בכמה תקופות גרמה להצגת השגיאה IndexOutOfBoundsException (#10838).
  • תוסף HLS:
    • מוסיפים את הערך HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) כדי להגדיר זמן קצוב לחוץ (timeout) לשרשור הטעינה, שימתין להפעלה של TimestampAdjuster. אם האיפוס לא מסתיים לפני שתוקף הזמן הקצוב לתפוגה פג, מתבצעת הטלת PlaybackException כדי למנוע השהיה אינסופית בהפעלה. כברירת מחדל, זמן הקצאת הזמן מוגדר לאפס (#323).
  • כלי בדיקה:
    • בודקים אם סכימת ה-URI לא תלויה ברישיות (case insensitive) ב-DataSourceContractTest.
  • מסירים את הסמלים הלא נתמכים:
    • מסירים את ה-constructors של DefaultAudioSink ומשתמשים ב-DefaultAudioSink.Builder במקום זאת.
    • מסירים את HlsMasterPlaylist ומשתמשים ב-HlsMultivariantPlaylist במקום זאת.
    • מסירים את Player.stop(boolean). במקום זאת, צריך להשתמש ב-Player.stop() וב-Player.clearMediaItems() (אם reset הוא true).
    • כדי לשפר את הביצועים, מסירים שני קונסטרוקטורים של SimpleCache שהוצאו משימוש, ומשתמשים במקום זאת ב-constructor שלא הוצא משימוש ומקבל DatabaseProvider.
    • מסירים את המבנה DefaultBandwidthMeter, ומשתמשים ב-DefaultBandwidthMeter.Builder במקום זאת.
    • מסירים את ה-constructors של DefaultDrmSessionManager ומשתמשים ב-DefaultDrmSessionManager.Builder במקום זאת.
    • מסירים שני מגדירי HttpDataSource.InvalidResponseCodeException שהוצאו משימוש, ומשתמשים במגדיר שלא הוצא משימוש שמקבל שדות נוספים(cause, responseBody) כדי לשפר את הרישום ביומן של השגיאות.
    • מסירים את DownloadHelper.forProgressive,‏ DownloadHelper.forHls,‏ DownloadHelper.forDash ו-DownloadHelper.forSmoothStreaming, ובמקום זאת משתמשים ב-DownloadHelper.forMediaItem.
    • מסירים את ה-constructor של DownloadService שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש שכולל את האפשרות לספק פרמטר channelDescriptionResourceId.
    • מסירים את ערכי הקבועים של מחרוזות שהוצאו משימוש עבור Charsets‏ (ASCII_NAME,‏ UTF8_NAME, ‏ ISO88591_NAME, ‏ UTF16_NAME ו-UTF16LE_NAME), ובמקום זאת משתמשים ב-Kotlin Charsets מחבילת kotlin.text, ‏ java.nio.charset.StandardCharsets או com.google.common.base.Charsets.
    • מסירים את ה-constructor של WorkManagerScheduler שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש שכולל את האפשרות לספק פרמטר Context במקום זאת.
    • מסירים את השיטות הלא נתמכות createVideoSampleFormat,‏ createAudioSampleFormat,‏ createContainerFormat ו-createSampleFormat, ששימשו ליצירת מופע של הכיתה Format. במקום זאת, צריך להשתמש ב-Format.Builder כדי ליצור מכונות של Format.
    • מסירים את השיטות הוצאו משימוש copyWithMaxInputSize,‏ copyWithSubsampleOffsetUs, ‏ copyWithLabel,‏ copyWithManifestFormatInfo, ‏ copyWithGaplessInfo,‏ copyWithFrameRate, ‏ copyWithDrmInitData, ‏ copyWithMetadata,‏ copyWithBitrate ו-copyWithVideoSize, ובמקום זאת משתמשים ב-Format.buildUpon() ובשיטות setter.
    • מסירים את ExoPlayer.retry() שהוצא משימוש, ומשתמשים ב-prepare() במקום זאת.
    • הסרת המבנה היצירה DefaultTrackSelector עם אפס ארגומנטים שהוצא משימוש, ושימוש ב-DefaultTrackSelector(Context) במקום זאת.
    • מסירים את ה-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 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

הגרסה הזו תואמת לגרסה 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).
  • מקף:
    • תיקון הטיפול בזמני צפייה ריקים של פלחים (#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 ללא הפסקות במכשירי Samsung (‏8594).
    • תוקן באג שבו מהירויות ההפעלה שהוגדרו מיד אחרי השבתת האודיו עשויות להתבטל על ידי שינוי מהירות קודם (‏10882).
  • סרטון:
    • ממפים את הפורמט HEVC HDR10 אל HEVCProfileMain10HDR10 במקום אל HEVCProfileMain10.
    • הוספת פתרון זמני לבעיה במכשיר ב-Chromecast with Google TV וב-Lenovo M10 FHD Plus, שגורמת לסימון של שידורי AVC ב-60fps כלא נתמכים (#10898).
    • תיקון בעיות בביצועים של שחרור פריימים כשמפעילים מדיה בקצב פריימים גבוה בהרבה מקצב הרענון של המסך.
  • העברה (cast):
    • תיקון של STATE_IDLE חולף במעבר בין פריטי מדיה (#245).
  • RTSP:
    • תיקון של IllegalArgumentException שנזרק בניתוח של הודעות תגובה לא חוקיות של RTSP (#10971).
  • סשן:
    • תוקן באג שבו לחצן ההפעלה/ההשהיה בהתראה לא מתעדכן בהתאם למצב הנגן (‏192).
  • תוסף IMA:
    • תיקון באג שגרם לכך שסטרימינג של מודעות דינמיות ללא מודעות לא התחיל כי לא התקבל האירוע LOADED הראשון (ובמקרה ללא מודעות, האירוע היחיד).

גרסה 1.0.0-rc01

16 בפברואר 2023

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

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

  • ספריית הליבה:
    • לשנות את הלוגיקה של סדר המקודדים במעבד הגרפי כדי לשמור על ההעדפות של MediaCodecSelector, גם אם מקודד מדווח שהוא לא יכול להפעיל את המדיה בצורה יעילה. לדוגמה, בבורר ברירת המחדל, מקודד חומרה עם תמיכה פונקציונלית בלבד יועדף על פני מקודד תוכנה שתומך בפורמט באופן מלא (#10604).
    • מוסיפים את ExoPlayer.Builder.setPlaybackLooper שמגדיר שרשור השמעה קיים למכונה חדשה של ExoPlayer.
    • אפשר למחוק את העזרים של מנהל ההורדות (#10776).
    • מוסיפים פרמטר ל-BasePlayer.seekTo כדי לציין גם את הפקודה שמשמשת לסריקה.
    • שימוש בעיצוב בזמן טעינת drawables ב-API מגרסה 21 ואילך (#220).
    • הוספת ConcatenatingMediaSource2 שמאפשרת לשלב כמה פריטי מדיה בחלון אחד (#247).
  • חילוץ:
    • המערכת תשליך ParserException במקום NullPointerException אם בטבלת הדגימות (stbl) חסר תיאור דגימה נדרש (stsd) בזמן ניתוח אטומי trak.
    • דילוג תקין על דגימות כשמחפשים ישירות פריים סנכרון ב-fMP4 (‏10941).
  • אודיו:
    • משתמשים ב-bitrate של פורמט האודיו הנדחס כדי לחשב את גודל המאגר המינימלי של AudioTrack בהפעלות ישירות (passthrough).
  • טקסט:
    • תיקון של TextRenderer שמעביר אינדקס לא חוקי (שלילי) ל-Subtitle.getEventTime אם קובץ הכתוביות לא מכיל אותות.
    • SubRip: הוספת תמיכה בקבצים מסוג UTF-16 אם הם מתחילים בסימון של סדר הבייטים.
  • מטא-נתונים:
    • ניתוח של מספר ערכים מופרדים באפס ממסגרות ID3, כפי שמתאפשר לפי התקן ID3 v2.4.
    • מוסיפים את הערך MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable כתחליף ל-MediaMetadata.folderType. סוג התיקייה יוסר משימוש בגרסה הבאה.
  • מקף:
    • הוספת ניתוח מלא של קבוצות של התאמות תמונות, כולל מספרי המשבצות (#3752).
  • ממשק משתמש:
    • מתקנים את השיטה הקודמת PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) כדי לוודא ששינויים בסטטוס החשיפה מועברים למאזין הרשום (#229).
    • תיקון הסדר של פקדי הנגן במרכז ב-PlayerView כשמשתמשים בפריסה מימין לשמאל (RTL) (#227).
  • סשן:
    • מוסיפים את הממשק המופשט SimpleBasePlayer כדי להטמיע את ממשק Player לנגני וידאו מותאמים אישית.
    • הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3 SessionToken (#171).
    • משתמשים ב-onMediaMetadataChanged כדי להפעיל עדכונים של סשן המדיה בפלטפורמה (#219).
    • מוסיפים את סשן המדיה כארגומנטים של getMediaButtons() ב-DefaultMediaNotificationProvider, ומשתמשים ברשימות שלא משתנות כדי לשפר את הבהירות (#216).
    • הוספת מאזין להודעות חזרה (callback) של onSetMediaItems כדי לספק אמצעי לשינוי או הגדרה של רשימת MediaItem, האינדקס ההתחלתי והמיקום לפי סשן לפני ההגדרה ב-Player (#156).
    • להימנע מזיהוי הקשה כפולה לאירועים של לחצני מדיה שאינם Bluetooth (#233).
    • שיפור של QueueTimeline במקרה של מצב סשן לא תקין מהדור קודם (#241).
  • מטא-נתונים:
    • ניתוח של מספר ערכים מופרדים באפס ממסגרות ID3, כפי שמתאפשר לפי התקן ID3 v2.4.
    • מוסיפים את הערך MediaMetadata.mediaType כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים.
    • מוסיפים את MediaMetadata.isBrowsable כתחליף ל-MediaMetadata.folderType. סוג התיקייה יוסר משימוש בגרסה הבאה.
  • תוסף Cast:
    • יש לשדרג את גרסת ה-SDK של Cast ל-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 כדי לבדוק אם תכונת ה-tunneling מופעלת בטראקים שנבחרו כרגע (#2518).
    • אפשר להוסיף את WrappingMediaSource כדי לפשט את האריזה של MediaSource יחיד (#7279).
    • ביטול מאגר הנתונים האחורי לפני שההפעלה נתקעת בגלל חוסר בזיכרון זמין.
    • סוגרים את הבלוק 'doSomeWork' של המעקב אחרי ביצועים כשהעברת העומס מופעלת.
    • תיקון בעיה במעקב אחר סשנים עם דילוגים מהירים ב-PlaybackStatsListener (#180).
    • שליחת קריאה חוזרת חסרה של onMediaItemTransition כשקוראים לפונקציה seekToNext או seekToPrevious בפלייליסט עם פריט אחד (#10667).
    • מוסיפים את הפונקציה Player.getSurfaceSize שמחזירה את גודל המשטח שבו מתבצע העיבוד של הסרטון.
    • תוקנה באג שבו הסרת מאזינים במהלך השקת הנגן עלולה לגרום ל-IllegalStateException (#10758).
  • גרסת build:
    • צריך לאכוף את הערך המינימלי compileSdkVersion כדי למנוע שגיאות הידור (#10684).
    • הימנעות מחסימת פרסום כשהקוד נכלל ב-build אחר של Gradle.
  • בחירת טראק:
    • אם המסך לא תומך ב-Dolby Vision, עדיף להשתמש בטראקים אחרים. (#8944).
  • הורדות:
    • תיקון לולאה אינסופית פוטנציאלית ב-ProgressiveDownloader שנגרמת כתוצאה מהורדה ומהפעלה בו-זמנית של אותו PriorityTaskManager (#10570).
    • התראה על הורדה תופיע באופן מיידי (#183).
    • הגבלת ההסרות של הורדות במקביל ל-1 כדי למנוע יצירת שרשורים מיותרים (#10458).
  • סרטון:
    • אם המסך לא תומך ב-Dolby Vision, נסו לנסות ממיר חלופי. (#9794).
  • אודיו:
    • כדי למנוע שגיאות של OutOfMemory כשמשחררים כמה נגני וידאו בו-זמנית, צריך להשתמש ב-SingleThreadExecutor כדי לשחרר מכונות AudioTrack (#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:
    • פתרון לבעיה ב-bug בהטמעת ClearKey ב-Android 13, שמחזירה כתובת URL של רישיון לא ריקה אבל לא חוקית.
    • תיקון השגיאה setMediaDrmSession failed: session not opened כשעוברים בין סכמות DRM בפלייליסט (למשל, מ-Widevine ל-ClearKey).
  • טקסט:
    • CEA-608: חשוב לוודא שהטיפול בפקודות של החלפת שירות בשדה 2 תקין (#10666).
  • מקף:
    • ניתוח EventStream.presentationTimeOffset ממניפסטים (#10460).
  • ממשק משתמש:
    • שימוש בהגדרות הנגן הקיימות כערכים מוגדרים מראש ב-TrackSelectionDialogBuilder (#10429).
  • סשן:
    • חשוב לוודא שהפקודות תמיד מתבצעות בסדר הנכון, גם אם חלק מהן דורשות פתרון לא סנכרוני (#85).
    • מוסיפים את DefaultMediaNotificationProvider.Builder כדי ליצור מכונות DefaultMediaNotificationProvider. ה-builder יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראה ואת שם ערוץ ההתראה שבהם הספק משתמש. בנוסף, מוסיפים את השיטה DefaultMediaNotificationProvider.setSmallIcon(int) כדי להגדיר את הסמל הקטן של ההתראות. (#104).
    • מוודאים שהפקודות שנשלחות לפני MediaController.release() לא נמחקות (#99).
    • SimpleBitmapLoader יכול לטעון מפות סיביות ממזהי URI של file:// (#108).
    • תיקון טענת הנכוֹנוּת (assertion) שמונעת מ-MediaController לדלג מעל מודעה בתקופה מסוימת (#122).
    • בסיום ההפעלה, ה-MediaSessionService מופסק בחזית מוצגת התראה להפעלה מחדש של פריט המדיה האחרון שהופעל (#112).
    • אסור להפעיל שירות שפועל בחזית עם כוונה בהמתנה להשהיה (#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:
    • הוספת טיימר של Watchdog למק"ס כדי לזהות מתי היצירה של דגימת פלט איטית מדי.
  • מסירים את הסמלים הלא נתמכים:
    • מסירים את Transformer.Builder.setOutputMimeType(String). התכונה הזו הוסרה. סוג ה-MIME יהיה תמיד MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.

גרסה 1.0.0-beta02

21 ביולי 2022

androidx.media3:media3-*:1.0.0-beta02 משוחרר. גרסה 1.0.0-beta02 כוללת את ההצהרות האלה.

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

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

גרסה 1.0.0-beta01

16 ביוני 2022

androidx.media3:media3-*:1.0.0-beta01 משוחרר. גרסה 1.0.0-beta01 כוללת את ההצהרות האלה.

הגרסה הזו תואמת לגרסה 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 UI mode לא נכללים באילוצים האלה, והפורמט עם מספר הערוצים הגבוה ביותר יקבל עדיפות. כדי להפעיל את התכונה הזו, צריך ליצור את המופע של DefaultTrackSelector באמצעות Context.
  • סרטון:
    • משנים את השם של DummySurface ל-PlaceholderSurface.
    • מוסיפים תמיכה ב-AV1 ל-MediaCodecVideoRenderer.getCodecMaxInputSize.
  • אודיו:
    • שימוש במפענח אודיו LG AC3 שמפרסם סוג MIME לא סטנדרטי.
    • כדי למנוע אימות ART איטי ב-API בגרסה 21 ואילך, צריך לשנות את סוג ההחזרה של AudioAttributes.getAudioAttributesV21() מ-android.media.AudioAttributes למעטפת חדשה מסוג AudioAttributesV21.
    • שולחים שאילתה לפלטפורמה (API מגרסה 29 ואילך) או מניחים את מספר הערוצים לקידוד האודיו להעברת אודיו (passthrough) כשמספר הערוצים בפורמט האודיו לא מוגדר, מצב שקורה בהכנה ללא קטעים של 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).
  • ממשק משתמש:
    • תיקון העברת אירועים ל-OnClickListeners שהוגדרו ב-PlayerView במקרה ש-useController=false (#9605). צריך גם לתקן את השליחה של האירועים אל OnLongClickListener לכל הגדרות התצוגה.
    • תוקנה בעיה שבה רצף של אירועי מגע שיוצאים מהגבולות של PlayerView לפני ACTION_UP מטופל כקליק (‎#9861).
    • תיקון בעיית נגישות ב-PlayerView שבה הקשה עלולה להפעיל או להשבית את ההפעלה במקום להסתיר את רכיבי ה-UI להפעלה (#8627).
    • כותבים מחדש את TrackSelectionView ו-TrackSelectionDialogBuilder כך שיעבדו עם הממשק Player במקום עם ExoPlayer. כך אפשר להשתמש בתצוגות עם הטמעות אחרות של Player, ומבטלים את התלות של מודול ממשק המשתמש במודול ExoPlayer. זהו שינוי שגורם לשינוי משמעותי.
    • לא להציג טראקים של טקסט משולב בבורר הטראקים PlayerView, ולהשאיר טראק מתאים של טקסט משולב אם נבחרה האפשרות 'ללא' (#9432).
  • מקף:
    • ניתוח מספר הערוצים מרכיבי AudioChannelConfiguration של DTS. הפעולה הזו מפעילה מחדש את העברת האודיו בשידורי DTS (#10159).
    • אסור להעביר את null אל DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. אם צריך, אפשר להעביר מכונות של DefaultCompositeSequenceableLoaderFactory באופן מפורש.
  • HLS:
    • חזרה להכנה של קטעים אם המאפיין CODECS של הפלייליסט לא מכיל את קודק האודיו (#10065).
    • אסור להעביר את null אל HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,‏ HlsMediaSource.Factory.setPlaylistParserFactory ו-HlsMediaSource.Factory.setPlaylistTrackerFactory. אם צריך, אפשר להעביר באופן מפורש מכונות של DefaultCompositeSequenceableLoaderFactory, ‏ DefaultHlsPlaylistParserFactory או הפניה ל-DefaultHlsPlaylistTracker.FACTORY.
  • Smooth Streaming:
    • אסור להעביר את null אל SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. אם צריך, אפשר להעביר מכונות של DefaultCompositeSequenceableLoaderFactory באופן מפורש.
  • RTSP:
    • הוספת קורא RTP ל-H263 (#63).
    • הוספת קורא RTP ל-MPEG4 (#35).
    • הוספת קורא RTP ל-HEVC (#36).
    • הוספת קורא RTP ל-AMR. בשלב זה יש תמיכה רק בזרמי AMR עם ערוץ מונו ולא עם מעבר בין ערוצים. אין תמיכה ב-payload של RTP מורכב מסוג AMR. (#46)
    • הוספת קורא RTP ל-VP8 (#47).
    • הוספת קורא RTP ל-WAV (#56).
    • תיקון כותרת ההרשאה הבסיסית של RTSP. (#9544).
    • הפסקת הבדיקה של שדות SDP חובה, כי ExoPlayer לא זקוק להם (#10049).
    • השלכת חריגה מאומתת בזמן ניתוח התזמון של RTSP (#10165).
    • הוספת קורא RTP ל-VP9 (#47).
    • הוספת קורא RTP ל-OPUS (#53).
  • מקורות נתונים:
    • משנים את השם של DummyDataSource ל-PlaceholderDataSource.
    • פתרון עקיף לטיפול בהפרעות ב-OkHttp.
  • סשן:
    • מחליפים את MediaSession.MediaItemFiller ב-MediaSession.Callback.onAddMediaItems כדי לאפשר פתרון אסינכרוני של בקשות.
    • תמיכה בשיטות setMediaItems(s) כש-MediaController מתחבר לסשן מדיה מדור קודם.
    • מסירים את MediaController.setMediaUri ו-MediaSession.Callback.onSetMediaUri. אפשר להשיג את אותה פונקציונליות באמצעות MediaController.setMediaItem ו-MediaSession.Callback.onAddMediaItems.
    • העברת שיחות MediaController מהגרסה הקודמת להפעלת מדיה אל MediaSession.Callback.onAddMediaItems במקום אל onSetMediaUri.
    • מוסיפים את MediaNotification.Provider ו-DefaultMediaNotificationProvider כדי להתאים אישית את ההתראה.
    • מוסיפים את BitmapLoader ואת SimpleBitmapLoader כדי להוריד תמונות של גרפיקה.
    • מוסיפים את MediaSession.setCustomLayout() כדי לספק תאימות לאחור עם הסשן הקודם.
    • מוסיפים את MediaSession.setSessionExtras() כדי לספק שוויון תכונות עם סשן הקודם.
    • משנים את השם של MediaSession.MediaSessionCallback ל-MediaSession.Callback, של MediaLibrarySession.MediaLibrarySessionCallback ל-MediaLibrarySession.Callback ושל MediaSession.Builder.setSessionCallback ל-setCallback.
    • תיקון שגיאת NPE ב-MediaControllerImplLegacy (#59).
    • עדכון פרטי המיקום של הסשן כשציר הזמן משתנה(#51).
    • תיקון NPE ב-MediaControllerImplBase אחרי שחרור הבקר (#74).
  • הפעלת מודעות / IMA:
    • הפחתת קצב הבדיקה של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, כדי לעמוד בהמלצות של המועצה לדירוג מדיה (MRC).
  • תוסף FFmpeg:
    • מעדכנים את גרסת CMake ל-3.21.0+ כדי למנוע באג ב-CMake שגורם לכישלון הסנכרון של Gradle ב-AndroidStudio‏ (#9933).
  • מסירים את הסמלים הלא נתמכים:
    • מסירים את Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). במקום זאת, אתם צריכים להשתמש ב-Player.Listener.onTracksChanged(Tracks).
    • מסירים את Player.getCurrentTrackGroups ו-Player.getCurrentTrackSelections. במקום זאת, אתם צריכים להשתמש ב-Player.getCurrentTracks. אפשר גם להמשיך להשתמש ב-ExoPlayer.getCurrentTrackGroups וב-ExoPlayer.getCurrentTrackSelections, אבל השיטות האלה עדיין לא הוצאו משימוש.
    • מסירים את הקבועים DownloadHelper,‏ DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT ו-DEFAULT_TRACK_SELECTOR_PARAMETERS. אם אפשר, צריך להשתמש ב-getDefaultTrackSelectorParameters(Context) במקום ב-DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • מסירים את המבנה DefaultTrackSelector(ExoTrackSelection.Factory). במקום זאת, אתם צריכים להשתמש ב-DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • מסירים את Transformer.Builder.setContext. במקום זאת, צריך להעביר את Context למבנה Transformer.Builder.

גרסה 1.0.0-alpha03

14 במרץ 2022

androidx.media3:media3-*:1.0.0-alpha03 משוחרר. גרסה 1.0.0-alpha03 כוללת את ההצהרות האלה.

הגרסה הזו תואמת לגרסה 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() יוכלו לגשת למפעל המתאם של הקודק ולהעביר אותו למופעי MediaCodecRenderer שהם יוצרים.
    • להעביר את שדות הכותרת של ICY‏ name ו-genre אל MediaMetadata.station ו-MediaMetadata.genre, בהתאמה, כדי שהם יגיעו לאפליקציה דרך Player.Listener.onMediaMetadataChanged() (#9677).
    • מסירים מפתחות null מ-DefaultHttpDataSource#getResponseHeaders.
    • שינה וניסיון חוזר כשיוצרים מכונה של MediaCodec והיא נכשלת. כך אפשר לעקוף בעיה שמתרחשת במכשירים מסוימים כשעוברים מקודק מאובטח לקודק אחר (#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.
    • אפשר להזריק AudioTrackBufferSizeProvider ל-DefaultAudioSink כדי להתאים אישית את החישוב של גודל המאגר הזמני AudioTrack. (#8891).
    • מנסים שוב ליצור את AudioTrack אם גודל המאגר הזמני המבוקש היה גדול מ-1MB. (#9712).
  • חילוץ:
    • WAV: נוספה תמיכה בסטרימינג של RF64‏ (#9543).
    • תיקון ניתוח שגוי של יחידות NAL של SPS ב-H.265 (‎#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).
  • מקף:
    • הוספת נכסים חיוניים ונכסים משלימים שעברו ניתוח אל Representation (#9579).
    • תמיכה בתפקיד הטראק forced-subtitle (#9727).
    • המערכת תפסיק לפרש את תפקיד הטראק main בתור C.SELECTION_FLAG_DEFAULT.
    • תיקון הלוגיקה של החרגת כתובת URL בסיסית למניפסטים שלא מכריזים על מרחב השמות של DVB (‎#9856).
    • תמיכה בכתובות URL יחסיות של MPD.Location (#9939).
  • HLS:
    • איך מאכלסים בצורה נכונה את השדה Format.label בשידורי HLS של אודיו בלבד (#9608).
    • מומלץ להשתמש בהכנה ללא קטעים כברירת מחדל כדי לשפר את זמן ההפעלה. אם הגרסאות שלכם מכילות טראקים של כתוביות מעורבבות שלא הוגדרו בפלייליסט הראשי, עליכם להוסיף אותם לפלייליסט הראשי כדי שהן יהיו זמינות להפעלה, או להשבית את ההכנה ללא קטעים באמצעות HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • תמיכה בחיפוש מדויק לפי פריים מפתח ב-HLS (#2882).
  • RTSP:
    • לספק ממשק API ללקוח כדי לשנות את SocketFactory שמשמש לכל חיבור לשרת (#9606).
    • אם שתי השיטות קיימות, עדיף להשתמש בשיטת האימות DIGEST במקום ב-BASIC (#9800).
    • טיפול במקרים שבהם תזמון הטראק ב-RTSP לא זמין (#9775).
    • התעלמות מערכי כותרות RTP-Info לא חוקיים (#9619).
  • Transformer:
    • הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
    • עכשיו נעשה שימוש ב-TransformationException כדי לתאר שגיאות שמתרחשות במהלך טרנספורמציה.
    • מוסיפים את TransformationRequest כדי לציין את אפשרויות הטרנספורמציה.
    • מאפשרים לרשום מספר מאזינים.
    • תיקון בעיה שבה הטרנספורמר נתקע כשפלט הקודק נקרא באופן חלקי.
    • תיקון של שגיאת NPE פוטנציאלית ב-Transformer.getProgress כשמשחררים את ה-muxer.
    • הוספת אפליקציית הדגמה להחלה של טרנספורמציות.
  • תוסף MediaSession:
    • כברירת מחדל, כעת הלחצן MediaSessionConnector מנקה את הפלייליסט כשמפסיק את ההפעלה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להפעיל את השיטה setClearMediaItemsOnStop(false) במחבר.
  • תוסף Cast:
    • תוקן באג שגרם לכך ש-CastPlayer לא יכול היה לקרוא ל-onIsPlayingChanged בצורה תקינה (#9792).
    • תמיכה במטא-נתונים של אודיו, כולל גרפיקה, באמצעות DefaultMediaItemConverter (#9663).
  • תוסף FFmpeg:
    • שינוי התלות של build_ffmpeg.sh ב-bin utils של 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). במקום זאת, צריך להשתמש ב-DefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererMode וב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • מסירים את כל המאפיינים הציבוריים של CronetDataSource. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
  • משנים את IntDefs הבא ל-@Target(TYPE_USE) בלבד. הפעולה הזו עשויה לשבש את הידור השימושים ב-Kotlin. כדי לפתור את הבעיה, צריך להעביר את ההערה כדי להוסיף אותה לסוג (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (בחבילה com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (בחבילה com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

גרסה 1.0.0-alpha01

27 באוקטובר 2021

androidx.media3:media3-*:1.0.0-alpha01 משוחרר. גרסה 1.0.0-alpha01 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

תכונות חדשות

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. כך אפשר לשלב ישירות בין נגני מדיה לסשנים של מדיה, בלי צורך להשתמש בכיתה של מתאם או מחבר.