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).
- טקסט:
- אפליקציית הדגמה
- פתרון הבעיות של דליפות הזיכרון באפליקציית הדגמה לסרטוני Shorts (#1839).
1.5.0-rc01 (13 בנובמבר 2024)
androidx.media3:media3-*:1.5.0-rc01
משוחרר.
הגרסה 1.5.0-rc01 כוללת את ההוספות האלה.
הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.5.0-beta01:
- ExoPlayer:
- חילוץ:
- 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).
- תיקון של כתוביות CEA-608 שאינן מועברות כפלט בסטרימינג של H.264 MPEG-TS (הבעיה הזו נגרמה בגלל השינויים שבוצעו ב-
- תוסף 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
, בעוד ששגיאות ניתוח מתעלמות בשקט (זהו התנהגות קיימת).
- בטיפול החדש בכתוביות (במהלך החילוץ), ניתוחים משויכים (למשל, נתוני כתוביות לא חוקיים) ושגיאות טעינה (למשל, HTTP 404) מונפקים באמצעות פונקציות חזרה (callbacks) של
- תיקון של דיווחים על
- 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 ביט כאשר הן מיוצגות מיקרו-שניות ומוכפלות בבסיס הזמן של MPEG90,000
) (#1763).
- מוודאים שמוצגים חותמות זמן של כתוביות גדולות מאוד בפורמט WebVTT ב-HLS (שגורמות לחריגה מ-
- מטא-נתונים:
- מקצים את הסוג
C.TRACK_TYPE_METADATA
לטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
- מקצים את הסוג
- DRM:
- תיקון
IllegalStateException
מ-DefaultDrmSession.requiresSecureDecoder
אחרי שסשן DRM לא הצליח להיפתח. הבעיה הזו נגרמה ב-1.5.0-alpha01
.
- תיקון
- מכשירים למיזוג (muxers):
- תוסף IMA:
- תוקנה באג שבו שידורי DAI שהוכנסו בצד השרת ללא מודעה מוקדמת עלולים לגרום לשגיאה
ArrayIndexOutOfBoundsException
כשהסרטון מופעל אחרי המודעה האחרונה בסרטון (#1741).
- תוקנה באג שבו שידורי DAI שהוכנסו בצד השרת ללא מודעה מוקדמת עלולים לגרום לשגיאה
- סשן:
- תוקן באג שגרם לכך שהפקודות בהתאמה אישית שנשלחו מ-
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).
- טקסט:
- מוסיפים
VoiceSpan
בהתאמה אישית ומאכלסים אותו עבור קטעי הקול ב-WebVTT (#1632).
- מוסיפים
- תמונה:
- מוסיפים את
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 עם מיקום סראונד, יחד עם מעקב אופציונלי אחר תנועת הראש, אבל בשלב זה אין תמיכה בהפעלה בינארית.
- מוסיפים את מודול המפענח של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות הספרייה המקורית libiamf לסינתז אודיו.
- תוסף 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:
- חילוץ:
- MP3: תיקון השגיאה
Searched too many bytes
על ידי התעלמות נכונה מנתונים לא מסוג MP3 שבסוף הקובץ, על סמך שדה האורך בפרייםInfo
(#1480).
- MP3: תיקון השגיאה
- טקסט:
- TTML: תוקנה הטיפול בערכי אחוזים של
tts:fontSize
כדי לוודא שהם עוברים בירושה בצורה נכונה מצמתי הורה עם ערכי אחוזים שלtts:fontSize
. - תיקון של
IndexOutOfBoundsException
ב-LegacySubtitleUtil
עקב טיפול שגוי במקרה שבו שעת ההתחלה המבוקשת של הפלט גדולה משעת האירוע הסופית ב-Subtitle
או שווה לה (#1516).
- TTML: תוקנה הטיפול בערכי אחוזים של
- DRM:
- תיקון שגיאה
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
במכשירים עם API מגרסה 31 ואילך שמפעילים תוכן L1 Widevine. השגיאה הזו נגרמת מהטמעה חלקית של השיטהMediaDrm.requiresSecureDecoder
של המסגרת (#1603).
- תיקון שגיאה
- אפקט:
- מוסיפים שיטה מסוג
release()
ל-GlObjectsProvider
.
- מוסיפים שיטה מסוג
- סשן:
- תוסף 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
.
- להעביר קריאות seek שנחשבות ללא פעולה לשיטות המוגנות
- 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
) מופו בטעות לתגי ה-ID3TSO2
,TSOA
ו-TSOP
(#1302). - תיקון הקריאה של תגי
gnre
(ז'אנר) ו-tmpo
(קצב) מספריים ב-MP4 (/iTunes) כשהערך ארוך יותר מבייט אחד. - להעביר את המסגרת
TCON
של ID3 אלMediaMetadata.genre
(#1305).
- תיקון המיפוי של קובצי MP4 לתגי מיון של ID3. בעבר, תגי ה-MP4 'מיון לפי אלבום' (
- תמונה:
- הוספת תמיכה בפריסת תמונות ממוזערות של DASH שאינן ריבועיות (#1300).
- הוספנו תמיכה ב-AVIF לגרסאות API 34 ואילך.
- מאפשרים להשתמש ב-
null
כפרמטר שלExoPlayer.setImageOutput()
כדי לנקות את הערך שלImageOutput
שהוגדר קודם.
- DataSource:
- מטמיעים תמיכה ב-URI של משאבים גולמיים מסוג
android.resource://package/id
, כאשרpackage
שונה מחבילת האפליקציה הנוכחית. בעבר לא תיעדנו את האפשרות הזו, אבל היא דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם. - בודקים בקדימה ש-
url
הוא לא null בקונסטרוקטור שלDataSpec
. הפרמטר הזה כבר סומן כלא null. - מאפשרים ל-
ByteArrayDataSource
לפתור URI למערך בייטים במהלךopen()
, במקום להקידוד אותו באופן קבוע בזמן היצירה (#1405).
- מטמיעים תמיכה ב-URI של משאבים גולמיים מסוג
- 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).
- תוקן באג שבו דגימות EMSG בהמתנה להפסקה הוענקו ב-
- תוסף DASH:
- תוסף 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
. במקום זאת, משתמשים ב-methodisLive()
. - מסירים את ה-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).
- WebVTT: מניעת יצירת מופעים נוספים של
- DRM:
- פתרון לבעיה של
NoSuchMethodError
שעשויה להופיע על ידי המסגרתMediaDrm
במקוםResourceBusyException
אוNotProvisionedException
במכשירי Android 14 מסוימים (#1145).
- פתרון לבעיה של
- אפקט:
- שיפור מיפוי הטונים מ-PQ ל-SDR על ידי המרת מרחבי צבעים.
- סשן:
- ממשק משתמש:
- אם
Locale
לא מצליח לזהות שם תצוגה, המערכת תשתמש בשם השפה של טראק האודיו כחלופה (#988).
- אם
- תוסף DASH:
- מאכלסים את כל הרכיבים מסוג
Label
מהמניפסט ב-Format.labels
(#1054).
- מאכלסים את כל הרכיבים מסוג
- תוסף RTSP:
- דילוג על ערכים ריקים של פרטי סשן (תגי i) בניתוח SDP (#1087).
- תוספים למפענח (FFmpeg, VP9, AV1, MIDI וכו'):
- משביתים את התוסף MIDI כיחסי תלות מקומיים כברירת מחדל, כי צריך להגדיר מאגר Maven נוסף. משתמשים שזקוקים למודול הזה מתוך יחסי תלות מקומיים יכולים להפעיל אותו מחדש.
גרסה 1.3.0
6 במרץ 2024
androidx.media3:media3-*:1.3.0
משוחרר.
גרסת 1.3.0 כוללת את ההוספות האלה.
- ספרייה משותפת:
- מטמיעים תמיכה ב-
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).
- הוספת ניתוח AV1C נוסף למחולל ה-MP4 כדי לאחזר את הערכים
- אודיו:
- סרטון:
- משנים את ה-constructor של
MediaCodecVideoRenderer
שמקבל ארגומנטים מסוגVideoFrameProcessor.Factory
ומחליפים אותו ב-constructor שמקבל ארגומנטים מסוגVideoSinkProvider
. אפליקציות שרוצות להחדירVideoFrameProcessor.Factory
מותאם אישית יכולות ליצור מופע שלCompositingVideoSinkProvider
שמשתמש ב-VideoFrameProcessor.Factory
המותאם אישית ולהעביר את ספק מקור הווידאו אלMediaCodecVideoRenderer
.
- משנים את ה-constructor של
- טקסט:
- תיקון הסריאליזציה של הנחיות של קובצי bitmap כדי לפתור את השגיאה
Tried to marshall a Parcel that contained Binder objects
בזמן השימוש ב-DefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: התעלמות מערך
rowLock
. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגםrowLock
וגםcolumnLock
הם נכונים, ללא קשר לערכים שקיימים בסטרימינג (התמיכה ב-columnLock
לא מיושמת, ולכן ההנחה היא שהוא תמיד יהיה שגוי).
- תיקון הסריאליזציה של הנחיות של קובצי bitmap כדי לפתור את השגיאה
- תמונה:
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות בתצוגת הרשת חתוכות, ותמונות ממוזערות נשלחות ל-
ImageOutput
קרוב למועד הצגתן.
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות בתצוגת הרשת חתוכות, ותמונות ממוזערות נשלחות ל-
- DRM:
- הפעלה מיידית של קטעי 'lead ברור' ללא הצפנה בתוכן DRM כברירת מחדל, גם אם המפתחות לקטעים המוצפנים מאוחר יותר עדיין לא מוכנים. כתוצאה מכך, יכול להיות שיחולו השהיות במהלך ההפעלה אם המפתחות עדיין לא יהיו מוכנים כשמיקום ההפעלה יגיע לדגימות המוצפנות (אבל בעבר ההפעלה לא הייתה מתחילה בכלל בשלב הזה). אפשר להשבית את ההתנהגות הזו באמצעות
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
אוDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- הפעלה מיידית של קטעי 'lead ברור' ללא הצפנה בתוכן DRM כברירת מחדל, גם אם המפתחות לקטעים המוצפנים מאוחר יותר עדיין לא מוכנים. כתוצאה מכך, יכול להיות שיחולו השהיות במהלך ההפעלה אם המפתחות עדיין לא יהיו מוכנים כשמיקום ההפעלה יגיע לדגימות המוצפנות (אבל בעבר ההפעלה לא הייתה מתחילה בכלל בשלב הזה). אפשר להשבית את ההתנהגות הזו באמצעות
- תוסף 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).
- כדי למנוע את הבחירה האוטומטית של טראקים משניים (לא ניתנים להפעלה) בפורמט HEVC בתמונות JPEG עם תנועה, מסמנים אותם בתווית
- אודיו:
- תיקון הטיפול ב-EOS עבור
SilenceSkippingAudioProcessor
כשמתבצעת קריאה לכמה פעמים (#712).
- תיקון הטיפול ב-EOS עבור
- סרטון:
- הוספת פתרון זמני לבעיה במכשירים Galaxy Tab S7 FE, Chromecast with Google TV ו-Lenovo M10 FHD Plus, שגורמת לסימון של שידורי AVC ב-60fps כלא נתמכים (#693).
- מטא-נתונים:
- תיקון באג שבו השדה
MediaMetadata
מאוכלס רק מתגובות Vorbis עם מפתחות של אותיות רישיות (#876). - הבאג הזה מאפשר לזהות את השגיאה
OutOfMemoryError
בזמן ניתוח של פריימים גדולים מאוד של ID3, כך שההפעלה יכולה להמשיך בלי פרטי התג במקום שההפעלה תיכשל לחלוטין.
- תיקון באג שבו השדה
- DRM:
- הרחבנו את הפתרון החלופי ל-URL של רישיון
https://default.url
מזויף של ClearKey ל-API 33 ואילך (בעבר הפתרון החלופי הופעל רק ב-API 33 בדיוק) (#837). - תיקון של
ERROR_DRM_SESSION_NOT_OPENED
במעבר מתוכן מוצפן לתוכן ללא הצפנה בלי משטח שמחובר לנגן. השגיאה נגרמה משימוש שגוי במפענח מאובטח כדי להפעיל את התוכן הלא מוצפן.
- הרחבנו את הפתרון החלופי ל-URL של רישיון
- סשן:
- מוסיפים את המפתחות והערכים המותאמים אישית ב-
MediaMetadataCompat
עדMediaMetadata.extras
וב-MediaMetadata.extras
עדMediaMetadataCompat
(#756, #802). - תיקון של שידור
notifyChildrenChanged
עבור בקרי מדור קודם (#644). - תיקון באג שבו הגדרת זמן שלילי למונה
setWhen
מושבת של ההתראה גרמה לקריסה במכשירים מסוימים (מספר פנייה 903). - תיקון של השגיאה
IllegalStateException
כשלא הושלם החיבור של בקר ההתראות של המדיה כשמתבצע הבקשה הראשונה לעדכון ההתראות (#917).
- מוסיפים את המפתחות והערכים המותאמים אישית ב-
- ממשק משתמש:
- תוסף DASH:
- לנתח את הערך 'f800' כמספר ערוצים של 5 עבור Dolby ב-Manifest של DASH (#688).
- תוספים למפענח (FFmpeg, VP9, AV1, MIDI וכו'):
- תוסף 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).
- הוספת תמיכה ב-PCM big-endian של 24/32 ביט ב-MP4 וב-Matroska, וניתוח קידוד PCM עבור
- סרטון:
- מתן הרשאה ל-
MediaCodecVideoRenderer
להשתמש ב-VideoFrameProcessor.Factory
בהתאמה אישית. - תוקן באג שבו לא ניתן היה ליצור את הפריים הראשון אם שידור האודיו מתחיל בחותמות זמן שליליות (#291).
- מתן הרשאה ל-
- טקסט:
- מסירים את
ExoplayerCuesDecoder
. טראקי טקסט עםsampleMimeType = application/x-media3-cues
מטופלים עכשיו ישירות על ידיTextRenderer
, בלי צורך במכונה שלSubtitleDecoder
.
- מסירים את
- מטא-נתונים:
- לא תתבצע יותר קריאה ל-
MetadataDecoder.decode
לדוגמיות 'פענוח בלבד', כי ההטמעה חייבת להחזיר null בכל מקרה.
- לא תתבצע יותר קריאה ל-
- אפקט:
- הוספת
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
לצבירת קלט של קובצי 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).
- כדי לתמוך ב-Android 14, צריך להצהיר על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור
- תוסף 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).
- מוסיפים פריסה בהתאמה אישית למצב של הבקר ומספקים פונקציית getter כדי לגשת אליה. כשהפריסה בהתאמה אישית משתנה, מתבצעת קריאה לפונקציה
גרסה 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()
כדי להפעיל רישום מפתחות בהתאמה אישית.
- רישום ביומן של CMCD מושבת כברירת מחדל. כדי להפעיל אותו, צריך להשתמש ב-
- הוספת פעולה נוספת למניפסט של הדגמה הראשית כדי שיהיה קל יותר להפעיל את אפליקציית הדגמה באמצעות קובץ
*.exolist.json
מותאם אישית (#439). - מוסיפים את
ExoPlayer.setVideoEffects()
לשימוש ב-Effect
במהלך הפעלת הסרטון. - מעדכנים את
SampleQueue
כך ש-sourceId
יישמר כ-long
במקום כ-int
. הפעולה הזו משנה את החתימות של השיטות הציבוריותSampleQueue.sourceId
ו-SampleQueue.peekSourceId
. - מוסיפים פרמטרים לשיטות
LoadControl
shouldStartPlayback
ו-onTracksSelected
שמאפשרים לשייך את השיטות האלה ל-MediaPeriod
הרלוונטי. - משנים את החתימה של
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID ששימשו כמפתחות במפה. הפעולה הזו נדרשת כדי למנוע בעיות במקביליות בשידורים חיים שמתפרסים על פני כמה תקופות. - הוצאה משימוש של
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
ו-BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. במקום זאת, אפשר להפעיל את הווריאנט של השיטות ללאmediaTimeOffsetUs
. שימו לב שגם לגבי הווריאנטים שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUs
ול-endTimeUs
של אובייקטי ה-MediaLoadData
שנשלחים על ידי המפנה. - משנים את השם של
ExoTrackSelection.blacklist
ל-excludeTrack
ואת השם שלisBlacklisted
ל-isTrackExcluded
. - תיקון התנהגות לא עקבית בין
ExoPlayer.setMediaItem(s)
ל-addMediaItem(s)
כשמפעילים אותם בפלייליסט ריק.
- מתן הרשאה ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם הבעתם הסכמה מפורשת לכך. באמצעות
- Transformer:
- מסירים את
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. במקום זאת, צריך להשתמש ב-ExoPlayerAssetLoader.Factory(MediaSource.Factory)
וב-Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - מסירים את
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - תוקן באג שגרם לכך שהטרנספורמציה יכלה להיתקע (ולגרום ל-muxer לחרוג מזמן הקצוב) אם סוף מקור הווידאו אותת בזמן שפריים קלט היה בהמתנה לעיבוד.
- כדי להרחיב את התמיכה, שולחים שאילתות לקודקים דרך
MediaCodecList
במקום להשתמש בכלים שלfindDecoder/EncoderForFormat
. - מסירים את ההגדרה של פריימים מסוג B ב-
DefaultEncoderFactory
כי היא לא פועלת במכשירים מסוימים.
- מסירים את
- בחירת טראק:
- מוסיפים את הערך
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, שהוא מושבת כברירת מחדל. כשהאפשרותDefaultTrackSelector
מופעלת, היא תגרום לבחירת טראק חדש כשיכולות ה-Renderer ישתנו.
- מוסיפים את הערך
- חילוץ:
- אודיו:
- תיקון באג שבו חלק מהפעלות נכשלו כשהמנהרה מופעלת ו-
AudioProcessors
פעילים, למשל כשחותכים ללא הפסקות (#10847). - אנקפסולציה של פריימים של Opus באריזות Ogg בהפעלות ישירות (העברה לענן).
- חיזוי המיקום הנוכחי במהלך השינה באמצעות תזמון העברה.
- מוסיפים את
Renderer.release()
ו-AudioSink.release()
כדי לשחרר את המשאבים בסוף מחזור החיים של הנגן. - האזנה לשינויים ביכולות האודיו ב-
DefaultAudioSink
. מוסיפים פרמטר נדרשcontext
ב-constructor שלDefaultAudioSink
, שבעזרתוDefaultAudioSink
ירשם כמאזין ל-AudioCapabilitiesReceiver
ויעדכן את המאפייןaudioCapabilities
שלו כשיתקבל דיווח על שינוי ביכולות. - להפיץ שינויים ביכולות האודיו באמצעות אירוע חדש
onAudioCapabilitiesChanged
בממשקAudioSink.Listener
, וממשק חדשRendererCapabilities.Listener
שמפעיל אירועיonRendererCapabilitiesChanged
. - מוסיפים את
ChannelMixingAudioProcessor
כדי להחיל שינוי קנה מידה/מיקס על ערוצי אודיו. - מוסיפים ערך int חדש
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
ל-DecoderDiscardReasons
כדי לבטל את פענוח האודיו כשאפשר להשתמש במצב עקיפה אחרי שיכולות האודיו משתנות. - נוספה תמיכה בהפעלה ישירה של DTS Express ו-DTS:X (#335).
- תיקון באג שבו חלק מהפעלות נכשלו כשהמנהרה מופעלת ו-
- סרטון:
- כשהמרת הפורמט מושבתת, גורמים ל-
MediaCodecVideoRenderer
לדווח עלVideoSize
עם רוחב וגובה של 0.Player.Listener.onVideoSizeChanged
נקרא בהתאם כשPlayer.getVideoSize()
משתנה. בעקבות השינוי הזה, הרוחב והגובה של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
כדי לכתוב רכיבי ממשק משתמש מותאמים אישית עם לחצן הפעלה/השהיה.
- מוסיפים את השיטות של Util
- תוסף RTSP:
- תוסף DASH:
- מסירים את הפרש הזמן של המדיה מ-
MediaLoadData.startTimeMs
ומ-MediaLoadData.endTimeMs
בשידורי DASH עם כמה תקופות. - תוקן באג שבו הכנת מחדש של מקור מדיה של Dash בשידור חי בכמה תקופות גרמה להצגת השגיאה
IndexOutOfBoundsException
(#10838).
- מסירים את הפרש הזמן של המדיה מ-
- תוסף HLS:
- מוסיפים את הערך
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
כדי להגדיר זמן קצוב לחוץ (timeout) לשרשור הטעינה, שימתין להפעלה שלTimestampAdjuster
. אם האיפוס לא מסתיים לפני שתוקף הזמן הקצוב לתפוגה פג, מתבצעת הטלתPlaybackException
כדי למנוע השהיה אינסופית בהפעלה. כברירת מחדל, זמן הקצאת הזמן מוגדר לאפס (#323).
- מוסיפים את הערך
- כלי בדיקה:
- בודקים אם סכימת ה-URI לא תלויה ברישיות (case insensitive) ב-
DataSourceContractTest
.
- בודקים אם סכימת ה-URI לא תלויה ברישיות (case insensitive) ב-
- מסירים את הסמלים הלא נתמכים:
- מסירים את ה-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
.
- מסירים את ה-constructors של
גרסה 1.1.0-rc01
21 ביוני 2023
משתמשים בגרסה היציבה 1.1.0.
גרסה 1.1.0-beta01
7 ביוני 2023
משתמשים בגרסה היציבה 1.1.0.
גרסה 1.1.0-alpha01
10 במאי 2023
משתמשים בגרסה היציבה 1.1.0.
גרסה 1.0.0
גרסה 1.0.2
18 במאי 2023
androidx.media3:media3-*:1.0.2
משוחרר.
גרסה 1.0.2 כוללת את ההצהרות האלה.
הגרסה הזו תואמת לגרסה 2.18.7 של ExoPlayer.
הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.0.1:
- ספריית הליבה:
- מוסיפים את
Buffer.isLastSample()
שמציין אםBuffer
מכיל את הדגלC.BUFFER_FLAG_LAST_SAMPLE
. - תיקון בעיה שבה יכול להיות שהפריים האחרון לא יומר אם הדגימה האחרונה עם הפריימים תוסר מהתור בלי לקרוא את הדגימה 'סוף הסטרימינג'. (#11079).
- מוסיפים את
- חילוץ:
- תיקון הניתוח של H.265 SPS בקובצי MPEG-TS באמצעות שימוש חוזר בלוגיקה לניתוח שכבר משמשת את החולצים של RTSP ו-MP4 (#303).
- טקסט:
- SSA: נוספה תמיכה בקובצי UTF-16 אם הם מתחילים בסימון של סדר הבייטים (#319).
- סשן:
- תוקנה בעיה שבה
MediaController
לא מעדכן את הפקודות הזמינות שלו כשמחובר ל-MediaSessionCompat
מדור קודם שמעדכן את הפעולות שלו. - תיקון באג שגרם ל-
MediaLibraryService
להחזיר null בקריאה מ-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.
- ספריית הליבה:
- הורדות:
- אפשר להגדיר את ההפרש המקסימלי בין זמן ההתחלה של שני פלחים שרוצים למזג ב-
SegmentDownloader
ובתת-הסוגים (#248).
- אפשר להגדיר את ההפרש המקסימלי בין זמן ההתחלה של שני פלחים שרוצים למזג ב-
- אודיו:
- סרטון:
- ממפים את הפורמט HEVC HDR10 אל
HEVCProfileMain10HDR10
במקום אלHEVCProfileMain10
. - הוספת פתרון זמני לבעיה במכשיר ב-Chromecast with Google TV וב-Lenovo M10 FHD Plus, שגורמת לסימון של שידורי AVC ב-60fps כלא נתמכים (#10898).
- תיקון בעיות בביצועים של שחרור פריימים כשמפעילים מדיה בקצב פריימים גבוה בהרבה מקצב הרענון של המסך.
- ממפים את הפורמט HEVC HDR10 אל
- העברה (cast):
- תיקון של
STATE_IDLE
חולף במעבר בין פריטי מדיה (#245).
- תיקון של
- RTSP:
- תיקון של IllegalArgumentException שנזרק בניתוח של הודעות תגובה לא חוקיות של RTSP (#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).
- משתמשים ב-bitrate של פורמט האודיו הנדחס כדי לחשב את גודל המאגר המינימלי של
- טקסט:
- תיקון של
TextRenderer
שמעביר אינדקס לא חוקי (שלילי) ל-Subtitle.getEventTime
אם קובץ הכתוביות לא מכיל אותות. - SubRip: הוספת תמיכה בקבצים מסוג UTF-16 אם הם מתחילים בסימון של סדר הבייטים.
- תיקון של
- מטא-נתונים:
- ניתוח של מספר ערכים מופרדים באפס ממסגרות ID3, כפי שמתאפשר לפי התקן ID3 v2.4.
- מוסיפים את הערך
MediaMetadata.mediaType
כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsable
כתחליף ל-MediaMetadata.folderType
. סוג התיקייה יוסר משימוש בגרסה הבאה.
- מקף:
- הוספת ניתוח מלא של קבוצות של התאמות תמונות, כולל מספרי המשבצות (#3752).
- ממשק משתמש:
- סשן:
- מוסיפים את הממשק המופשט
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).
- הורדות:
- סרטון:
- אם המסך לא תומך ב-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).
- כדי למנוע שגיאות של OutOfMemory כשמשחררים כמה נגני וידאו בו-זמנית, צריך להשתמש ב-
- מטא-נתונים:
- עכשיו אפשר להגדיר את
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:
- IMA:
- תוסף FFmpeg:
- הוספת דגלים נדרשים חדשים כדי לקשר ספריות FFmpeg ל-NDK מגרסה 23.1.7779620 ואילך (#9933).
- תוסף AV1:
- עדכון הגרסה של CMake כדי למנוע אי-תאימות עם הגרסאות האחרונות של Android Studio (#9933).
- תוסף Cast:
- מטמיעים את
getDeviceInfo()
כדי לזהות אתCastPlayer
כששולטים בהפעלה באמצעותMediaController
(#142).
- מטמיעים את
- Transformer:
- הוספת טיימר של Watchdog למק"ס כדי לזהות מתי היצירה של דגימת פלט איטית מדי.
- מסירים את הסמלים הלא נתמכים:
- מסירים את
Transformer.Builder.setOutputMimeType(String)
. התכונה הזו הוסרה. סוג ה-MIME יהיה תמיד MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.
- מסירים את
גרסה 1.0.0-beta02
21 ביולי 2022
androidx.media3:media3-*:1.0.0-beta02
משוחרר.
גרסה 1.0.0-beta02 כוללת את ההצהרות האלה.
הגרסה הזו תואמת לגרסה 2.18.1 של ExoPlayer.
- ספריית הליבה:
- מוודאים שהחלפת
ShuffleOrder
ב-ExoPlayer.setShuffleOrder
תוביל לשיחה אלPlayer.Listener#onTimelineChanged
באמצעותreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - לגבי מדיה פרוגרסיבית, צריך לכלול רק טראקים נבחרים במיקום שנשמר במטמון (#10361).
- מתן הרשאה ליומן בהתאמה אישית לכל הפלט של יומני ExoPlayer (#9752).
- תיקון ההטמעה של
setDataSourceFactory
ב-DefaultMediaSourceFactory
, שלא פעלה במקרים מסוימים (#116).
- מוודאים שהחלפת
- חילוץ:
- מקף:
- ניתוח כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
- ממשק משתמש:
- מוודאים ש-TalkBack מקריא את אפשרות המהירות הפעילה כרגע בתפריט פקדי ההפעלה (#10298).
- RTSP:
- הוספת טיפול בחבילות מפוצלות של VP8 (#110).
- תוסף Leanback:
- האזנה לשינויים ב-
playWhenReady
ב-LeanbackAdapter
(10420).
- האזנה לשינויים ב-
- העברה (cast):
גרסה 1.0.0-beta01
16 ביוני 2022
androidx.media3:media3-*:1.0.0-beta01
משוחרר.
גרסה 1.0.0-beta01 כוללת את ההצהרות האלה.
הגרסה הזו תואמת לגרסה 2.18.0 של ExoPlayer.
- ספריית הליבה:
- מפעילים את התמיכה באבחון של פלטפורמת Android באמצעות
MediaMetricsManager
. ExoPlayer יעביר את נתוני הביצועים ואת אירועי ההפעלה לפלטפורמה, כדי לספק מידע על ביצועי המערכת ועל ניפוי באגים במכשיר. Google עשויה לאסוף את הנתונים האלה גם אם המשתמש במכשיר מפעיל את שיתוף נתוני השימוש וניתוח הביצועים. אפליקציות יכולות לבטל את ההסכמה לתרום לניתוח הנתונים של הפלטפורמה ב-ExoPlayer באמצעותExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - תיקון באג שבו הטראקים מתאפסים לעיתים קרובות מדי כשמשתמשים ב-
MergingMediaSource
, למשל כשמעלים כתוביות מחוץ לאפליקציה ומשנים את הכתוביות שנבחרו במהלך ההפעלה (10248). - הפסקת זיהוי סוג הרשת 5G-NSA בממשקי ה-API 29 ו-30. ההפעלות האלה יתבצעו בהנחה שיש חיבור לרשת 4G.
- אסור להעביר את
null
אלMediaSource.Factory.setDrmSessionManagerProvider
ו-MediaSource.Factory.setLoadErrorHandlingPolicy
. אם צריך, אפשר להעביר באופן מפורש מופעים שלDefaultDrmSessionManagerProvider
ו-DefaultLoadErrorHandlingPolicy
. - מוסיפים את
MediaItem.RequestMetadata
כדי לייצג את המטא-נתונים הנדרשים להפעלת מדיה כשה-LocalConfiguration
המדויק לא ידוע. צריך להסיר גם אתMediaMetadata.mediaUrl
כי הוא נכלל עכשיו ב-RequestMetadata
. - מוסיפים את
Player.Command.COMMAND_SET_MEDIA_ITEM
כדי לאפשר לשחקנים להגדיר פריט אחד בלבד.
- מפעילים את התמיכה באבחון של פלטפורמת Android באמצעות
- בחירת טראק:
- משטחים את הכיתה
TrackSelectionOverrides
לכיתהTrackSelectionParameters
, ומקדמים את הכיתהTrackSelectionOverride
לכיתה ברמה העליונה. - משנים את השם של
TracksInfo
ל-Tracks
ואת השם שלTracksInfo.TrackGroupInfo
ל-Tracks.Group
. השם שלPlayer.getCurrentTracksInfo
ושלPlayer.Listener.onTracksInfoChanged
השתנה גם כן ל-Player.getCurrentTracks
ול-Player.Listener.onTracksChanged
. זה כולל 'ביטול ההוצאה משימוש' של שם השיטהPlayer.Listener.onTracksChanged
, אבל עם סוגים שונים של פרמטרים. - משנים את
DefaultTrackSelector.buildUponParameters
ו-DefaultTrackSelector.Parameters.buildUpon
כך שיחזירו את הערךDefaultTrackSelector.Parameters.Builder
במקום את הערךDefaultTrackSelector.ParametersBuilder
שהוצא משימוש. - מוסיפים את הערך
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
, שמופעל כברירת מחדל. כשהאפשרות הזו מופעלת, ה-DefaultTrackSelector
יעדיף טראקים של אודיו שמספר הערוצים שלהם לא חורג מיכולות הפלט של המכשיר. במכשירים ניידים, ה-DefaultTrackSelector
יעדיף אודיו סטריאו/מונו על פני פורמטים של אודיו בכמה ערוצים, אלא אם אפשר להוסיף לו מיקום (Android 12L ואילך) או שהוא פורמט של צליל סראונד של Dolby. בנוסף, במכשירים שתומכים בהמרת אודיו למרחב תלת-ממדי, ה-DefaultTrackSelector
יעקוב אחרי שינויים במאפייני ה-Spatializer ויפעיל בחירת טראק חדשה במקרה של שינויים כאלה. מכשירים עםtelevision
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.
- משנים את
- חילוץ:
- ממשק משתמש:
- תיקון העברת אירועים ל-
OnClickListener
s שהוגדרו ב-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).
- מעדכנים את גרסת CMake ל-
- מסירים את הסמלים הלא נתמכים:
- מסירים את
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. במקום זאת, אתם צריכים להשתמש ב-Player.Listener.onTracksChanged(Tracks)
. - מסירים את
Player.getCurrentTrackGroups
ו-Player.getCurrentTrackSelections
. במקום זאת, אתם צריכים להשתמש ב-Player.getCurrentTracks
. אפשר גם להמשיך להשתמש ב-ExoPlayer.getCurrentTrackGroups
וב-ExoPlayer.getCurrentTrackSelections
, אבל השיטות האלה עדיין לא הוצאו משימוש. - מסירים את הקבועים
DownloadHelper
,DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
ו-DEFAULT_TRACK_SELECTOR_PARAMETERS
. אם אפשר, צריך להשתמש ב-getDefaultTrackSelectorParameters(Context)
במקום ב-DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
. - מסירים את המבנה
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
. תמיד אפשר להבדיל ביןTrackGroup
s על ידי הגדרת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).
- חילוץ:
- טקסט:
- DRM:
- הסרת
playbackLooper
מהחשבוןDrmSessionManager.(pre)acquireSession
. כשאפליקציה משתמשת ב-DrmSessionManager
ב-MediaSource
מותאם אישית, צריך להעביר אתplaybackLooper
אלDrmSessionManager.setPlayer
במקום זאת.
- הסרת
- הפעלת מודעות / IMA:
- הוספנו תמיכה בהטמעת מודעות דינמיות (DAI) ב-IMA (#8213).
- הוספת שיטה ל-
AdPlaybackState
כדי לאפשר איפוס של קבוצת מודעות, כך שאפשר יהיה להפעיל אותה שוב (#9615). - אכיפת מהירות הפעלה של 1.0 במהלך הפעלת מודעות (#9018).
- תוקנה בעיה שבה קבוצת מודעות שלא היטלטלה גרמה לאיפוס מיידי של ההפעלה (מספר הבעיה: 9929).
- ממשק משתמש:
- מקף:
- הוספת נכסים חיוניים ונכסים משלימים שעברו ניתוח אל
Representation
(#9579). - תמיכה בתפקיד הטראק
forced-subtitle
(#9727). - המערכת תפסיק לפרש את תפקיד הטראק
main
בתורC.SELECTION_FLAG_DEFAULT
. - תיקון הלוגיקה של החרגת כתובת URL בסיסית למניפסטים שלא מכריזים על מרחב השמות של DVB (#9856).
- תמיכה בכתובות URL יחסיות של
MPD.Location
(#9939).
- הוספת נכסים חיוניים ונכסים משלימים שעברו ניתוח אל
- HLS:
- איך מאכלסים בצורה נכונה את השדה
Format.label
בשידורי HLS של אודיו בלבד (#9608). - מומלץ להשתמש בהכנה ללא קטעים כברירת מחדל כדי לשפר את זמן ההפעלה. אם הגרסאות שלכם מכילות טראקים של כתוביות מעורבבות שלא הוגדרו בפלייליסט הראשי, עליכם להוסיף אותם לפלייליסט הראשי כדי שהן יהיו זמינות להפעלה, או להשבית את ההכנה ללא קטעים באמצעות
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - תמיכה בחיפוש מדויק לפי פריים מפתח ב-HLS (#2882).
- איך מאכלסים בצורה נכונה את השדה
- RTSP:
- Transformer:
- הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
- עכשיו נעשה שימוש ב-
TransformationException
כדי לתאר שגיאות שמתרחשות במהלך טרנספורמציה. - מוסיפים את
TransformationRequest
כדי לציין את אפשרויות הטרנספורמציה. - מאפשרים לרשום מספר מאזינים.
- תיקון בעיה שבה הטרנספורמר נתקע כשפלט הקודק נקרא באופן חלקי.
- תיקון של שגיאת NPE פוטנציאלית ב-
Transformer.getProgress
כשמשחררים את ה-muxer. - הוספת אפליקציית הדגמה להחלה של טרנספורמציות.
- תוסף MediaSession:
- כברירת מחדל, כעת הלחצן
MediaSessionConnector
מנקה את הפלייליסט כשמפסיק את ההפעלה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להפעיל את השיטהsetClearMediaItemsOnStop(false)
במחבר.
- כברירת מחדל, כעת הלחצן
- תוסף Cast:
- תוסף 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).
- משדרגים את תוסף Cast כך שיהיה תלוי ב-
- מסירים את הסמלים הלא נתמכים:
- מסירים את
Player.EventListener
. במקום זאת, אתם צריכים להשתמש ב-Player.Listener
. - מסירים את
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
ו-MediaSourceFactory#setDrmUserAgent
. במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#setDrmSessionManagerProvider
. - מסירים את
MediaSourceFactory#setStreamKeys
. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setStreamKeys
. - מסירים את
MediaSourceFactory#createMediaSource(Uri)
. במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#createMediaSource(MediaItem)
. - מסירים את
setTag
מהחשבונותDashMediaSource
, HlsMediaSource
ו-SsMediaSource
. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag
. - מסירים את
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. משתמשים ב-MediaItem.Builder#setLiveConfiguration
וב-MediaItem.LiveConfiguration.Builder#setTargetOffsetMs
כדי לשנות את המניפסט, או ב-DashMediaSource#setFallbackTargetLiveOffsetMs
כדי לספק ערך חלופי. - מסירים את
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. אי אפשר יותר לבטל את ההצטרפות לאכיפת השרשור. - מסירים את
ActionFile
ואתActionFileUpgradeUtil
. כדי להשתמש ב-ActionFileUpgradeUtil
למיזוג קובצי פעולה מדור קודם ל-DefaultDownloadIndex
, צריך להשתמש ב-ExoPlayer בגרסה 2.16.1 ואילך. - מסירים את
ProgressiveMediaSource#setExtractorsFactory
. במקום זאת, צריך להשתמש ב-constructorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - מסירים את
ProgressiveMediaSource.Factory#setTag
ואתProgressiveMediaSource.Factory#setCustomCacheKey
. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag
וב-MediaItem.Builder#setCustomCacheKey
. - מסירים את ה-constructors
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. במקום זאת, צריך להשתמש ב-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
. כך אפשר לשלב ישירות בין נגני מדיה לסשנים של מדיה, בלי צורך להשתמש בכיתה של מתאם או מחבר.