מדיה3
העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
---|---|---|---|---|
2 ביולי 2025 | 1.7.1 | - | 1.8.0-beta01 | 1.8.0-alpha01 |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Media3, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle
של האפליקציה או המודול:
מגניב
dependencies { def media3_version = "1.6.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For 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.6.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For 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.8.0
גרסה 1.8.0-beta01
2 ביולי 2025
androidx.media3:media3-*:1.8.0-beta01
משוחרר.
גרסה 1.8.0-beta01 מכילה את הקומטים האלה.
- ספרייה משותפת:
- הוספת תמיכה בהחלפת הנגן ב-
ForwardingSimpleBasePlayer
.
- הוספת תמיכה בהחלפת הנגן ב-
- ExoPlayer:
- הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-
Context
שעבר אלExoPlayer.Builder
. - הפעלה של תזמון דינמי כברירת מחדל במצב ניקוי.
- כדי להימנע מטעינה מחדש מיותרת של מקור כשמקדמים לסוף של פריט.
- שימוש ב-
MediaCodec.BUFFER_FLAG_DECODE_ONLY
כברירת מחדל במצב ניקוי. - Throw
IllegalStateException
כשמפעילים אתPreloadMediaSource
על ידיExoPlayer
עם שרשור הפעלה ששונה משרשור הטעינה מראש (#2495). - הוספת
cloneAndMove
ל-ShuffleMode
עם הטמעה שמוגדרת כברירת מחדל (#2226). - שינוי התנהגות ברירת המחדל של
Renderer.getMinDurationToProgressUs
כך שיחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render
. - תוקן באג שגרם לכך שתזמון פנימי עיכב את המסגרת האחרונה כשמנסים להגיע לסוף בזמן שההפעלה מושהית. בשלב הזה, תיקון הבאג תקף רק אם ההגדרה
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
מופעלת.
- הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-
- Transformer:
- מוסיפים את התג
CodecDbLite
שמאפשר לבצע אופטימיזציות ספציפיות לערכת השבבים של הגדרות קידוד הווידאו. - מוסיפים את הדגל
setEnableCodecDbLite
ל-DefaultEncoderFactory
כדי להפעיל את האופטימיזציה של ההגדרות של CodecDB Lite. כברירת מחדל, הדגל הזה מוגדר כ-false.
- מוסיפים את התג
- מחולצי נתונים:
- הוספת תמיכה בהזזה קדימה ואחורה ב-MP4 מפוצל עם כמה אטומי
sidx
. אפשר להפעיל את ההתנהגות הזו באמצעות הדגלFLAG_MERGE_FRAGMENTED_SIDX
ב-FragmentedMp4Extractor
(מספר 9373). - התעלמות מטבלאות ריקות של מיקום בקובצי FLAC (כולל כאלה שמכילות רק נקודות מיקום של placeholder), וחזרה לחיפוש בינארי אם משך הקובץ ידוע (#2327).
- תוקן ניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
- מעדכנים את
WavExtractor
כך שישתמש בנתוני SubFormat של תוסף הכותרת עבור פורמט האודיו כשמנתחים קובץ מסוגWAVE_FORMAT_EXTENSIBLE
. - MP4: נוספה תמיכה בתיבות
ipcm
ו-fpcm
שמגדירות טראקים של אודיו PCM גולמי (אין תמיכה ב-PCM של נקודה צפה ב-64 ביט). - MP4: טיפול בחלק של הסיבוב במטריצות טרנספורמציה של
tkhd
שגם מסובבות את הסרטון וגם משקפות אותו. כך אפשר לוודא שהסרטונים המשתקפים שצולמו במצלמה הקדמית של האייפון יוצגו בצורה נכונה, אבל ההשתקפות שלהם בציר ה-Y לא יהיו נכונות (#2012).
- הוספת תמיכה בהזזה קדימה ואחורה ב-MP4 מפוצל עם כמה אטומי
- אודיו:
- הוספת תמיכה בכל פורמטי הדגימות של PCM ליניארי ב-
ChannelMappingAudioProcessor
וב-TrimmingAudioProcessor
. - הוספנו תמיכה בפערים באודיו ב-
CompositionPlayer
. - הסרת שיחה שגויה אל
BaseAudioProcessor#flush()
מ-BaseAudioProcessor#reset()
.
- הוספת תמיכה בכל פורמטי הדגימות של PCM ליניארי ב-
- סרטון:
- שיפור השחרור החלק של פריים וידאו בהפעלה, כשדגימות האודיו לא מתחילות בדיוק במיקום המבוקש.
- הוספת פתרון עקיף לבעיה של משטחים מנותקים למכשירי realme (#2059).
- טקסט:
- תיקון של מצב שבו ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה אבל נטען בהמשך, ואחריו יש כמה קטעים ריקים של כתוביות (#2517).
- מטא-נתונים:
- הוספנו תמיכה באחזור משך המדיה ו-
Timeline
אלMetadataRetriever
והעברנו אותו אל API מבוסס-מופע,AutoCloseable
. משתמשים ב-Builder
החדש כדי ליצור מופע עבורMediaItem
, ואז קוראים ל-retrieveTrackGroups()
, ל-retrieveTimeline()
ול-retrieveDurationUs()
כדי לקבלListenableFuture
s עבור המטא-נתונים. השיטות הסטטיות הקודמות הוצאו משימוש (#2462).
- הוספנו תמיכה באחזור משך המדיה ו-
- תמונה:
- כדי למנוע קריסה של האפליקציה עם
Canvas: trying to draw too large bitmap.
מ-PlayerView
כשמנסים להציג תמונות גדולות מאוד (למשל 50MP), כדאי להגביל את מפות הסיביות המפוענחות לגודל המסך ב-BitmapFactoryImageDecoder
. - משנים את החתימה של
DefaultRenderersFactory.getImageDecoderFactory()
כך שתקבל פרמטרContext
. - צריך להתאים את גודל הפלט המקסימלי של מפת הסיביות שמשמש ב-
CompositionPlayer
לזה שכבר משמש ב-Transformer
(כלומר,CompositionPlayer
לא מתחשב בגודל התצוגה כשמפענחים מפות סיביות, בניגוד ל-ExoPlayer
).
- כדי למנוע קריסה של האפליקציה עם
- Muxers:
- תוקן באג שבו דגלי הדגימה הנכונים לא הוגדרו לדגימות אודיו ב-MP4 מפוצל.
- סשן:
- תוקן באג שבו קריאה לפונקציה
setSessionExtras
מהשרשור הראשי בזמן הפעלת הנגן משרשור אפליקציה אחר, שונה מהשרשור הראשי, גרמה לשגיאהIllegalStateException
(מספר 2265). - לא להציג באופן אוטומטי התראה אם הנגן מוגדר עם פריטי מדיה בלי להכין או להפעיל אותם
(#2423https://github.com/androidx/media/issues/2423). אפשר להגדיר את ההתנהגות הזו באמצעות
MediaSessionService.setShowNotificationForIdlePlayer
. - הוספת
PlaybackException
מותאם אישית לכל הבקרים או לבקרים נבחרים. - תוקן באג שבו חיפוש בשידור חי ב-
MediaController
עלול לגרום ל-IllegalArgumentException
. - בשידורים חיים, הפסקנו לפרסם את מיקום ההפעלה ואת האפשרות לחיפוש בפריט הנוכחי עבור בקרי מדיה של פלטפורמות, כדי למנוע הצגת מיקום לא מדויק בממשק המשתמש של Android Auto (ובבקרים אחרים שמשתמשים במידע הזה מתוך סשן המדיה של הפלטפורמה) (#1758).
- תוקן באג שבו קריאה לפונקציה
- תוסף Cronet:
- הוספת טיפול אוטומטי בקובצי Cookie (#5975).
- תוסף HLS:
- תוקן ניתוח של פלייליסטים כדי לאפשר שימוש ב-
\f
(הזנת טופס) בערכי מאפיינים של מחרוזות במירכאות (מס' 2420). - תמיכה בעדכון מודעות מעברון עם אותו מזהה (מס' 2427).
- תוקן באג שבו שגיאות בטעינת פלייליסטים לא מועברות לפעמים אחרי שנגמרים הקטעים לטעינה בשידור חי (#2401https://github.com/androidx/media/issues/2401).
- קיבוץ של גרסאות שונות של כתוביות לפי תג NAME, בדומה לקיבוץ של גרסאות שונות של אודיו (#1666).
- תוקן ניתוח של פלייליסטים כדי לאפשר שימוש ב-
- תוסף DASH:
- תוסף RTSP:
- תוקנה בעיה שגרמה לכך שהמערכת לא השתמשה ב-URI של המיקום שסופק במהלך עיבוד תגובת HTTP 302 (מס' 2398).
RtspClient
- תוקנה בעיה שגרמה לכך שהמערכת לא השתמשה ב-URI של המיקום שסופק במהלך עיבוד תגובת HTTP 302 (מס' 2398).
- תוספי פענוח (FFmpeg, VP9, AV1 וכו'):
- תוקן באג שבו
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
לא משפיע על תוספים של פענוח אודיו (#2258).
- תוקן באג שבו
- תוסף Cast:
- הוספת תמיכה ב-
setVolume()
וב-getVolume()
(#2279). - מונעים מ-CastPlayer להיכנס ל-STATE_BUFFERING כשהציר הזמני ריק.
- הוספת תמיכה ב-
- כלי בדיקה:
- מוסיפים את
advance(player).untilPositionAtLeast
ואתuntilMediaItemIndex
אלTestPlayerRunHelper
כדי להעביר את הנגן קדימה עד שמגיעים למיקום שצוין. ברוב המקרים, השיטות האלה מהימנות יותר מהשיטות הקיימותuntilPosition
ו-untilStartOfMediaItem
. - מעבירים את
FakeDownloader
למודולtest-utils-robolectric
כדי להשתמש בו מחדש בבדיקות אחרות.
- מוסיפים את
גרסה 1.8.0-alpha01
19 במאי 2025
androidx.media3:media3-*:1.8.0-alpha01
משוחרר.
גרסה 1.8.0-alpha01 מכילה את הקומטים האלה.
- ExoPlayer:
- מוסיפים את אמצעי התשלום
ExoPlayer.setScrubbingModeEnabled(boolean)
. כך מתבצעת אופטימיזציה של נגן המדיה לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל ההתקדמות). אפשר להתאים אישית את ההתנהגות של מצב ההזזה באמצעותsetScrubbingModeParameters(..)
ב-ExoPlayer
וב-ExoPlayer.Builder
. - אפשרות להתאים אישית את טווח הסבילות של חיפוש חלקי במצב ניקוי.
- הגדלת קצב ההפעלה של קודק במצב חיפוש.
- תוקן באג שבו יכול להיות ששגיאות בהכנה בתוכן של
AdsMediaSource
לא ידווחו אף פעם (#2337). - תיקון דליפת זיכרון ב-
MergingMediaSource
, למשל בשימוש בהעלאת כתוביות (#2338). - הוספה של האפשרות
CmcdConfiguration.Factory
להחזירnull
כדי להשבית את הרישום ביומן של CMCD עבור פריטי מדיה ספציפיים (#2386). - הגדלת גודל ברירת המחדל של מאגר התמונות מ-128kB (טעות בהעתקה והדבקה מתוך רצועות טקסט) ל-26MB, שזה מספיק גדול לתמונות Ultra HDR של 50MP (#2417).
- הוספת
PreCacheHelper
שמאפשרת לאפליקציות לשמור מראש במטמון מדיה יחידה עם מיקום התחלה ומשך מוגדרים.
- מוסיפים את אמצעי התשלום
- Transformer:
- כדי למלא פער ראשוני (שנוסף באמצעות
addGap()
) באודיו שקט, צריך עכשיו להגדיר במפורש אתexperimentalSetForceAudioTrack(true)
ב-EditedMediaItemSequence.Builder
. אם הפער נמצא באמצע הרצף, לא צריך להשתמש בדגל הזה. - העברת הממשק
Muxer
מ-media3-transformer
אלmedia3-muxer
. - הופכים את ההגדרה
MediaItem.Builder().setImageDuration(long)
לחובה כדי לייבא פריט מדיה כתמונה. - Add
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
שכולל רשימת עריכה של MP4 כשמבצעים חיתוך, כדי להנחות את השחקנים להתעלם מדגימות בין מסגרת המפתח לפני נקודת ההתחלה של החיתוך לבין נקודת ההתחלה של החיתוך. - עדכון אפליקציית ההדגמה של יצירת מוזיקה כדי להשתמש ב-Kotlin וב-Jetpack Compose, והוספה של
VideoCompositorSettings
מותאם אישית כדי לסדר רצפים בפריסה של 2x2 או בפריסת תמונה בתוך תמונה.
- כדי למלא פער ראשוני (שנוסף באמצעות
- מחולצי נתונים:
- MP3: נעשה שימוש במשך ובגודל הנתונים מ-Xing, VBRI וממטא-נתונים דומים של קצב העברת נתונים משתנה שלא ניתן לחיפוש, כשמבצעים חזרה לחיפוש של קצב העברת נתונים קבוע בגלל
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194).
- MP3: נעשה שימוש במשך ובגודל הנתונים מ-Xing, VBRI וממטא-נתונים דומים של קצב העברת נתונים משתנה שלא ניתן לחיפוש, כשמבצעים חזרה לחיפוש של קצב העברת נתונים קבוע בגלל
- אודיו:
- אפשרות להגברה או להנמכה של עוצמת הקול באופן קבוע ב-DefaultAudioMixer.
- הגדרת
ChannelMappingAudioProcessor
,TrimmingAudioProcessor
ו-ToFloatPcmAudioProcessor
כגלויים לכולם (#2339). - כדי לזהות חוסרים ב-
DefaultAudioSink
במקום להסתמך על הערכה, צריך להשתמש ב-AudioTrack#getUnderrunCount()
ב-AudioTrackPositionTracker
. - שיפור ההחלקה של חותמות הזמן של האודיו במקרים של סחיפה לא צפויה במיקום ממכשיר פלט האודיו.
- תוקן באג שגרם לבעיה בסנכרון האודיו והווידאו ב-10 השניות הראשונות אחרי הפסקה והמשך ההפעלה, כשמחוברים למכשירי Bluetooth.
- תוקן באג שגרם לכך ש-
AnalyticsListener.onAudioPositionAdvancing
לא דיווח על הזמן שבו האודיו התחיל להתקדם, אלא על הזמן של המדידה הראשונה.
- סרטון:
- הוספת
ExoPlayer
API ניסיוני כדי לכלול את הדגלMediaCodec.BUFFER_FLAG_DECODE_ONLY
כשמכניסים למאגרים קלט של נתוני פענוח בלבד. הדגל הזה יאותת למפענח לדלג על מאגרי הנתונים הזמניים של פענוח בלבד, וכך יתאפשר מעבר מהיר יותר בין נקודות שונות בסרטון. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
. - שיפור הבדיקות של ביצועי קודקים של קודקים של וידאו בתוכנה. יכול להיות שבעקבות זאת חלק מהטראקים יסומנו בסימן
EXCEEDS_CAPABILITIES
. - תיקון שגיאות הפעלה של VP9 Widevine במכשירים מסוימים (#2408).
- הוספת
- טקסט:
- תוקנו בעיות ב-SSA וב-SubRip שגרמו להצגת רמזים על התקדמות כשמפעילים כתוביות (#2309).
- תוקנה בעיה שגרמה להיתקעות של ההפעלה כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם טראק כתוביות ריק (#2328).
- תוקנה בעיה שגרמה לשיבוש בכתוביות בפורמט CEA-608 בהפעלת סטרימינג בפורמט H.262 שמכיל B-frames (#2372).
- הוספת תמיכה בכתוביות SSA עם
CodecId = S_TEXT/SSA
בקובצי Matroska. בעבר,MatroskaExtractor
תמך רק ב-CodecId = S_TEXT/ASS
, שמייצג את הווריאציה 'המתקדמת' (גרסה 4 ומעלה) של כתוביות SubStation Alpha (אבל לוגיקת הניתוח של ExoPlayer זהה בשתי הווריאציות) (מס' 2384). - הוספנו תמיכה במאפיין
layer
בקובצי כתוביות של SubStation Alpha (SSA), שמשמש להגדרת סדר השכבות של רמזים כשכמה רמזים מוצגים על המסך בו-זמנית (מס' 2124).
- ההשפעה:
- מוסיפים
Presentation.createForShortSide(int)
שיוצרPresentation
שמבטיח שהצד הקצר ביותר תמיד יתאים לערך הנתון, ללא קשר לכיוון הקלט.
- מוסיפים
- Muxers:
-
writeSampleData()
API משתמש עכשיו במחלקהBufferInfo
ספציפית ל-muxer במקום ב-MediaCodec.BufferInfo
. - מוסיפים את
Muxer.Factory#supportsWritingNegativeTimestampsInEditList
, שערך ברירת המחדל שלו הוא false.
-
- IMA extension:
- תוקנה באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
- תוקן באג שגרם לכך שההפעלה של קבוצות מודעות אחרי סיום חלון ה-VOD נתקעה.
קבוצות של מודעות עם שעת התחלה אחרי חלון הזמן לא מתווספות יותר לתור של
MediaPeriodQueue
(#2215).
- סשן:
- תוקן באג שבו העברת ערך null אל
getLibraryRoot
שלMediaBrowser
שמחובר אלMediaBrowserServiceCompat
מדור קודם הפיקהNullPointerException
. - תוקן באג שבו שליחת פעולות בהתאמה אישית, תוצאת חיפוש או בקשת getItem גרמו לקריסת אפליקציית הסשן מדור קודם עם
ClassNotFoundException
. - תוקן באג שגרם לכך ש
MediaItem.LocalConfiguration.uri
שותף לMediaMetadata
של סשנים בפלטפורמה. כדי לשתף URI בכוונה כדי לאפשר לבקרי גישה לשלוח בקשה חוזרת למדיה, צריך להגדיר אתMediaItem.RequestMetadata.mediaUri
.
- תוקן באג שבו העברת ערך null אל
- UI:
- תוקן באג בכלי הכתיבה שגרם לפער בין הגדרת מצבי הלחצנים הראשוניים לבין השינוי במצב (למשל צורות הסמלים או ההפעלה). שינויים שבוצעו בנגן מחוץ לתקופת הצפייה נלקחים בחשבון (#2313).
- מוסיפים מחזיקי מצב ורכיבים שניתנים להרכבה למודול
media3-ui-compose
עבורSeekBackButtonState
ו-SeekForwardButtonState
. - הוספת תמיכה במצב ניקוי של ExoPlayer ל-
PlayerControlView
. אם האפשרות הזו מופעלת, הנגן עובר למצב גלילה כשמשתמש מתחיל לגרור את סרגל הגלילה, שולח קריאה ל-player.seekTo
לכל תנועה ואז יוצא ממצב הגלילה כשהמגע מוסר מהמסך. אפשר להפעיל את השילוב הזה באמצעותtime_bar_scrubbing_enabled = true
ב-XML או באמצעות ה-methodsetTimeBarScrubbingEnabled(boolean)
מ-Java/Kotlin. - גורמים ל-
PlayerSurface
לקבל ארגומנטPlayer
שניתן להקצות לו ערך null.
- הורדות:
- הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין שידור הדרגתי עם
DownloadHelper
ולבקשDownloadRequest
מהעוזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם צריך להוריד. התגובהDownloadRequest
מכילה את טווח הבייטים שפוענח, שאפשר ליצור איתוProgressiveDownloader
ולהוריד את התוכן בהתאם. - מוסיפים את
DownloadHelper.Factory
שבו מחליפים את השיטות הסטטיותDownloadHelper.forMediaItem()
. - מוסיפים
Factory
להטמעות שלSegmentDownloader
. - הוספת תמיכה בהורדה חלקית של סטרימינג אדפטיבי. אפליקציות יכולות להכין סטרימינג אדפטיבי עם
DownloadHelper
ולבקשDownloadRequest
מהכלי העזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכלול. הערך שמוחזרDownloadRequest
כולל את טווח הזמן שנקבע, שאפשר ליצור באמצעותוSegmentDownloader
קונקרטי ולהוריד את התוכן בהתאם.
- הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין שידור הדרגתי עם
- תוסף HLS:
- תמיכה ב-X-ASSET-LIST ובשידורים חיים באמצעות
HlsInterstitialsAdsLoader
.
- תמיכה ב-X-ASSET-LIST ובשידורים חיים באמצעות
- תוסף RTSP:
- הוספת תמיכה בניתוח של SessionDescriptions שמכילים שורות עם תווי רווח לבן בסוף (#2357).
- תוסף Cast:
- הוספת תמיכה ב-
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
ו-setDeviceMuted()
(#2089).
- הוספת תמיכה ב-
- כלי בדיקה:
- בוצעה הסרה של
transformer.TestUtil.addAudioDecoders(String...)
,transformer.TestUtil.addAudioEncoders(String...)
ו-transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)
. במקום זאת, צריך להשתמש ב-ShadowMediaCodecConfig
כדי להגדיר מקודדים ומפענחים של צלליות. - הקידומת exotest הוחלפה בקידומת media3 בשמות של קודקים שדווחו על ידי
ShadowMediaCodecConfig
.
- בוצעה הסרה של
- הסרת סמלים שהוצאו משימוש:
- הסרנו את בנאי
SegmentDownloader
שיצא משימושSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
ואת הבנאים התואמים במחלקות המשנה שלוDashDownloader
,HlsDownloader
ו-SsDownloader
. - הוסרו
Player.hasNext()
, Player.hasNextWindow()
שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasNextMediaItem()
. - הוסר
Player.next()
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem()
. - הוסר
Player.seekToPreviousWindow()
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem()
. - הוסר
Player.seekToNextWindow()
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem()
. - הוסר מודול
BaseAudioProcessor
שהוצא משימוש ב-exoplayer
. משתמשים ב-BaseAudioProcessor
במודולcommon
. - צריך להסיר את ה-constructor
MediaCodecVideoRenderer
שיצא משימושMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
.
- הסרנו את בנאי
גרסה 1.7.0
גרסה 1.7.1
16 במאי 2025
הגרסה הזו כוללת את אותו קוד כמו גרסה 1.6.1, והיא מתפרסמת כדי להבטיח שהיא תופיע כגרסה 'חדשה יותר' מגרסה 1.7.0, שהייתה גרסת אלפא שסומנה בטעות כגרסה יציבה (ראו בהמשך).
גרסה 1.7.0
16 במאי 2025
הגרסה הזו הייתה אמורה להיות 1.7.0-alpha01
, אבל היא תויגה בטעות כ-1.7.0-alpha01
(כלומר, יציבה) ב-maven.google.com. אל תשתמשו בה.1.7.0
להישאר בגרסה 1.6.1 או לשדרג לגרסה 1.7.1 (שכוללת את אותו קוד כמו גרסה 1.6.1).
גרסה 1.6.0
1.6.1
14 באפריל 2025
androidx.media3:media3-*:1.6.1
משוחרר.
גרסה 1.6.1 מכילה את ההתחייבויות האלה.
- ספרייה משותפת:
- הוספנו את method
PlaybackParameters.withPitch(float)
כדי להקל על העתקה שלPlaybackParameters
עם ערך חדש שלpitch
(מס' 2257).
- הוספנו את method
- ExoPlayer:
- תוקנה בעיה שגרמה לכשל במעבר בין פריטי מדיה בגלל שגיאת רכיב עיבוד שניתנת לשחזור במהלך האתחול של פריט המדיה הבא (#2229).
- נפתרה בעיה שבה
ProgressiveMediaPeriod
מחזירה את השגיאהIllegalStateException
כש-PreloadMediaSource
מנסה לקרוא ל-getBufferedDurationUs()
לפני שהוא מוכן (#2315). - תיקון השליחה של
CmcdData
בבקשות למניפסט עבור DASH, HLS ו-SmoothStreaming (#2253). - מוודאים שאפשר להשתמש ב-
AdPlaybackState.withAdDurationsUs(long[][])
אחרי הסרת קבוצות המודעות. המשתמש עדיין צריך להעביר מערך של משכי זמן עבור קבוצות מודעות שהוסרו, שיכול להיות ריק או null (#2267).
- מחולצי נתונים:
- MP4: צריך לנתח את
alternate_group
מהתיבהtkhd
ולהציג אותו כרשומהMp4AlternateGroupData
בכל טראק שלFormat.metadata
(מספר 2242).
- MP4: צריך לנתח את
- אודיו:
- תוקנה בעיה בהעברה לזיכרון הווירטואלי שבה המיקום עלול להיתקע כשמפעילים פלייליסט של תוכן קצר (#1920).
- סשן:
- הורדת הזמן הקצוב לתפוגה של צבירת נתוני קריאות חוזרות (callback) של פלטפורמה
MediaSession
מ-500 ל-100 מילי-שניות, והוספת הגדרת ניסוי כדי לאפשר לאפליקציות להגדיר את הערך הזה. - תוקנה הבעיה שבה ההתראות מופיעות מחדש אחרי שהמשתמש סגר אותן (#2302).
- תוקן באג שבו הסשן החזיר ציר זמן עם פריט יחיד כשהנגן העוטף היה ריק. המצב הזה קורה כשאין
COMMAND_GET_TIMELINE
בנגן העוטף, אבל ישCOMMAND_GET_CURRENT_MEDIA_ITEM
והנגן העוטף ריק (#2320). - תוקן באג שבו קריאה ל-
MediaSessionService.setMediaNotificationProvider
מתעלמת בשקט אחרי אינטראקציות אחרות עם השירות כמוsetForegroundServiceTimeoutMs
(מספר 2305).
- הורדת הזמן הקצוב לתפוגה של צבירת נתוני קריאות חוזרות (callback) של פלטפורמה
- UI:
- מפעילים את
PlayerSurface
כדי לעבוד עםExoPlayer.setVideoEffects
ועםCompositionPlayer
. - תיקון באג שבו אי אפשר להרכיב מחדש את
PlayerSurface
עםPlayer
חדש.
- מפעילים את
- תוסף HLS:
- תוקנה בעיה שבה משך הזמן של חתיכות לא הוגדר ב-
CmcdData
עבור מדיה בפורמט HLS, מה שגרם לכשל באימות כשמעבדים פלחים של מדיה מוצפנת (#2312).
- תוקנה בעיה שבה משך הזמן של חתיכות לא הוגדר ב-
- תוסף RTSP:
- הוספת תמיכה ב-URI עם סכימת RTSPT כדרך להגדיר את סשן RTSP לשימוש ב-TCP (#1484).
- תוסף Cast:
- הוספת תמיכה במטא-נתונים של פלייליסטים (#2235).
1.6.0
26 במרץ 2025
androidx.media3:media3-*:1.6.0
משוחרר.
גרסה 1.6.0 מכילה את ההעברות האלה.
- ספרייה משותפת:
- מוסיפים את
AudioManagerCompat
ו-AudioFocusRequestCompat
כדי להחליף את המחלקות המקבילות ב-androidx.media
. - שדרוג Kotlin מגרסה 1.9.20 לגרסה 2.0.20 ושימוש בפלאגין Compose Compiler Gradle. שדרוג הספרייה KotlinX Coroutines מגרסה 1.8.1 לגרסה 1.9.0.
- השיטה
Format.toBundle(boolean excludeMetadata)
הוסרה. במקומה, צריך להשתמש ב-Format.toBundle()
. - תיקון באג ב-
SimpleBasePlayer
שבו הגדרה שלcurrentMediaItemIndex
חדש ב-State
אחריsetPlaylist
עםnull
MediaMetadata
לא מעריכה מחדש את המטא-נתונים (#1940). - שינוי הגישה ממוגנת לציבורית כדי להקל על הטיפול בעדכונים בכיתות אחרות (#2128).
SimpleBasePlayer.State
- מוסיפים את
- ExoPlayer:
- הוספנו את
MediaExtractorCompat
, מחלקה חדשה שמספקת תכונות שוות ערך לפלטפורמהMediaExtractor
. - הוספנו תמיכה ניסיונית בחימום מראש של ExoPlayer להפעלה באמצעות
MediaCodecVideoRenderer
. אפשר להגדיר אתDefaultRenderersFactory
דרךexperimentalSetEnableMediaCodecVideoRendererPrewarming
כדי לספקMediaCodecVideoRenderer
משני ל-ExoPlayer
. אם האפשרות הזו מופעלת,ExoPlayer
הסרטון של פריטי מדיה עוקבים עובר עיבוד מראש במהלך ההפעלה כדי לצמצם את זמן האחזור של המעבר בין פריטי מדיה. - צריך להקטין את ערכי ברירת המחדל של
bufferForPlaybackMs
ושלbufferForPlaybackAfterRebufferMs
ב-DefaultLoadControl
ל-1,000 ו-2,000 מילישניות בהתאמה. - מאתחלים את
DeviceInfo
ואת עוצמת הקול במכשיר באופן אסינכרוני (אם ההגדרה הזו מופעלת באמצעותsetDeviceVolumeControlEnabled
). הערכים האלה לא זמינים באופן מיידי אחריExoPlayer.Builder.build()
, ו-Player.Listener
מודיע על שינויים באמצעותonDeviceInfoChanged
ו-onDeviceVolumeChanged
. - מזהה סשן האודיו הראשוני כבר לא זמין באופן מיידי אחרי יצירת נגן. אם צריך, אפשר להשתמש בלחצן
AnalyticsListener.onAudioSessionIdChanged
כדי להאזין לעדכון הראשוני. - חשוב לקחת בחשבון את השפה כשבוחרים רצועת וידאו. כברירת מחדל, המערכת בוחרת טראק וידאו 'ראשי' שתואם לשפה של טראק האודיו שנבחר, אם יש כזה. אפשר להגדיר העדפות שפה ספציפיות לסרטונים באמצעות התג
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
. - מוסיפים את הפרמטר
selectedAudioLanguage
לשיטהDefaultTrackSelector.selectVideoTrack()
. - מוסיפים את הפרמטר
retryCount
ל-MediaSourceEventListener.onLoadStarted
ואת השיטות המתאימותMediaSourceEventListener.EventDispatcher
. - תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- מעבירים את
BasePreloadManager.Listener
לרמה העליונהPreloadManagerListener
. - אפשר להטמיע את
RenderersFactory.createSecondaryRenderer
כדי לספק מעבדים משניים לחימום מראש. חימום מראש מאפשר מעברים מהירים יותר בין פריטי מדיה במהלך ההפעלה. - הפעלת שליחה של
CmcdData
לבקשות של קובצי מניפסט בפורמטים של סטרימינג אדפטיבי DASH, HLS ו-SmoothStreaming (מס' 1951). - צריך לספק
MediaCodecInfo
של הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec
(#1963). - משנים את
AdsMediaSource
כדי לאפשר ל-AdPlaybackStates
לגדול על ידי הוספת קבוצות של מודעות. המערכת מזהה שינויים לא תקינים וזורקת חריגה. - תוקנה בעיה שבה יכול להיות שיוצגו פריימים נוספים של פענוח בלבד ברצף מהיר כשעוברים לתוכן מדיה אחרי מודעה באמצע הסרטון.
-
DefaultRenderersFactory
add twoMetadataRenderer
instances to כדי לאפשר לאפליקציות לקבל כברירת מחדל שתי סכימות שונות של מטא-נתונים. - הערכה מחדש של השאלה אם צריך לבטל את הטעינה המתמשכת של מקטע כשמשהים את ההפעלה (#1785).
- הוספת אפשרות ל-
ClippingMediaSource
כדי לאפשר חיתוך במדיה שלא ניתן להעביר בה קדימה או אחורה. - תוקן באג שבו חיפוש באמצעות חימום מראש יכול לחסום מעבר לפריט מדיה הבא.
- תוקן באג שגרם לכך שהערך
ExoPlayer.isLoading()
נשארtrue
גם אחרי שהסטטוס השתנה ל-STATE_IDLE
או ל-STATE_ENDED
(#2133). - הוספה של
lastRebufferRealtimeMs
אלLoadControl.Parameter
(#2113).
- הוספנו את
- Transformer:
- הוספת תמיכה בהעברה של נתונים מפורמט אחד לפורמט אחר (transmuxing) לפורמטים חלופיים שתואמים לאחור.
- הוספת תמיכה בהמרת קידוד ובהמרת פורמט של Dolby Vision (פרופיל 8).
- מעדכנים את הפרמטרים של
VideoFrameProcessor.registerInputStream
ושלVideoFrameProcessor.Listener.onInputStreamRegistered
כדי להשתמש ב-Format
. - יצירת מטא-נתונים סטטיים של HDR כשמשתמשים ב-
DefaultEncoderFactory
. - כדי להפעיל תמיכה באבחון של פלטפורמת Android, משתמשים במדיניות
MediaMetricsManager
. הכלי Transformer מעביר אירועי עריכה ונתוני ביצועים לפלטפורמה, וכך מספק מידע על ביצועי המערכת ועל ניפוי באגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את האפשרות לשיתוף נתונים על אופן השימוש בנתונים וניתוח הביצועים. אפליקציות יכולות לבחור שלא לתרום לניתוח של פלטפורמת Transformer באמצעותTransformer.Builder.setUsePlatformDiagnostics(false)
. - פיצול של
InAppMuxer
ל-InAppMp4Muxer
ול-InAppFragmentedMp4Muxer
. משתמשים ב-InAppMp4Muxer
כדי ליצור קובץ MP4 לא מקוטע, וב-InAppFragmentedMp4Muxer
כדי ליצור קובץ MP4 מקוטע. - העברת הממשק
Muxer
מ-media3-muxer
אלmedia3-transformer
. - להוסיף את
MediaProjectionAssetLoader
, שמספק מדיה מ-MediaProjection
להקלטת מסך, ולהוסיף תמיכה בהקלטת מסך לאפליקציית ההדגמה של Transformer. - הוספת
#getInputFormat()
לממשקCodec
. - להעביר את האחריות לשחרור
GlObjectsProvider
למתקשר ב-DefaultVideoFrameProcessor
וב-DefaultVideoCompositor
כשזה אפשרי.
- מחולצי נתונים:
- AVI: תוקן הטיפול בקבצים עם אודיו דחוס בקצב העברת נתונים קבוע, שבהם כותרת הזרם מאחסנת את מספר הבייטים במקום את מספר המקטעים.
- תיקון הטיפול ביחידות NAL עם אורכים שמבוטאים בבייט אחד או ב-2 בייטים (במקום ב-4).
- תוקנה בעיה ב-
ArrayIndexOutOfBoundsException
ברשימות עריכה של MP4, כשברשימת העריכה מתחיל פריים לא מסונכרן ללא פריים מסונכרן קודם (#2062). - תוקנה בעיה שבה סטרימינג של TS יכול להיתקע במכשירים מסוימים (#2069).
- FLAC: נוספה תמיכה בקובצי FLAC בפורמט 32 ביט. בעבר, הפעלת הסרטונים האלה ב-
IllegalStateException: Playback stuck buffering and not loading
נכשלה (מספר 2197).
- אודיו:
- הפונקציה
onAudioPositionAdvancing
נקראת עכשיו כשההפעלה מתחדשת (בעבר היא נקראה כשההפעלה הושהתה). - לא לעקוף את
SonicAudioProcessor
כש-SpeedChangingAudioProcessor
מוגדר עם פרמטרים שמוגדרים כברירת מחדל. - תוקנה בעיית חוסר (underflow) ב-
Sonic#getOutputSize()
שיכולה לגרום להשהיה שלDefaultAudioSink
. - צריך לתקן את
MediaCodecAudioRenderer.getDurationToProgressUs()
ואתDecoderAudioRenderer.getDurationToProgressUs()
כדי שההתקדמות תאופס בצורה נכונה בהתאם למשכי הזמן שצוינו. - הפיכת המספר
androidx.media3.common.audio.SonicAudioProcessor
לקבוע. - הוספת תמיכה ב-PCM עם נקודה צפה ל-
ChannelMappingAudioProcessor
ול-TrimmingAudioProcessor
.
- הפונקציה
- סרטון:
- משנים את
MediaCodecVideoRenderer.shouldUsePlaceholderSurface
ל-protected כדי שאפליקציות יוכלו לבטל את ההגדרה ולחסום את השימוש באזורים של placeholder (#1905). - הוספת ניתוח תלות ניסיוני של דגימות AV1
ExoPlayer
כדי להאיץ את החיפוש. מפעילים אותו באמצעות ה-API החדש שלDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
. - הוספת
ExoPlayer
API ניסיוני להשמטת מאגרי קלט של מפענחMediaCodecVideoRenderer
שלא נדרשים. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
. - תוקנה בעיה שבה נגן ללא משטח היה מוכן באופן מיידי ופענוח הפריימים בהמתנה היה איטי מאוד (#1973).
- החרגה של מכשירי Xiaomi ו-OPPO ממצב משטח מנותק כדי למנוע הבהוב במסך (#2059).
- משנים את
- טקסט:
- הוספת תמיכה בכתוביות VobSub (#8260).
- הפסקנו לטעון מראש את כל קובצי הכתוביות שהוגדרו עם
MediaItem.Builder.setSubtitleConfigurations
, ועכשיו נטען רק קובץ אחד אם הוא נבחר על ידי בחירת טראק (#1721). - TTML: נוספה תמיכה בהפניה אל
tts:origin
ו-tts:extent
באמצעותstyle
(#2953). - הגבלת חותמות הזמן בפורמטים WebVTT ו-SubRip ל-3 ספרות אחרי הנקודה העשרונית בדיוק. בעבר, ניתחנו באופן שגוי כל מספר של מקומות אחרי הנקודה העשרונית, אבל תמיד הנחנו שהערך הוא באלפיות השנייה, מה שהוביל לחותמות זמן שגויות (#1997).
- תוקנה בעיה שגורמת להפסקת ההפעלה כשפלייליסט מכיל פריטים שנחתכו עם כתוביות CEA-608 או CEA-708.
- תוקן באג
IllegalStateException
שקורה כשקובץ SSA מכיל רמז עם משך אפס (זמן התחלה וזמן סיום זהים) (#2052). - הסתרת שגיאות בניתוח כתוביות (ורישום שלהן ביומן) כשהכתוביות משולבות באותו קובץ עם אודיו ווידאו (#2052).
- תוקן הטיפול בתווי UTF-8 מרובי-בייט בקובצי WebVTT באמצעות סיומי שורה של CR (#2167).
- DRM:
- תוקנה שגיאה
MediaCodec$CryptoException: Operation not supported in this configuration
בהפעלת תוכן ClearKey במכשירים עם API בגרסה < 27 (#1732).
- תוקנה שגיאה
- ההשפעה:
- הפונקציונליות של
OverlaySettings
הועברה אלStaticOverlaySettings
. OverlaySettings
יכול להיות מחולק למחלקות משנה כדי לאפשר הגדרות דינמיות של שכבות-על.
- הפונקציונליות של
- Muxers:
- העברנו את
MuxerException
מחוץ לממשקMuxer
כדי להימנע משם מלא ארוך מאוד. - השם של השיטה
setSampleCopyEnabled()
השתנה לsetSampleCopyingEnabled()
ב-Mp4Muxer.Builder
וב-FragmentedMp4Muxer.Builder
. - הפונקציות
Mp4Muxer.addTrack()
ו-FragmentedMp4Muxer.addTrack()
מחזירות עכשיו מזהה של רצועתint
במקוםTrackToken
. - הפונקציות
Mp4Muxer
ו-FragmentedMp4Muxer
לא מטמיעות יותר את הממשקMuxer
. - השבתה של
Mp4Muxer
חלוקה לקבוצות והעתקה כברירת מחדל. - תיקון באג ב-
FragmentedMp4Muxer
שגורם ליצירה של הרבה פרגמנטים כשנכתב רק טראק אודיו.
- העברנו את
- סשן:
- שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה לפני שתפוג ההמתנה, בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להתקשר אל
player.pause()
כדי לעצור את השירות שפועל בחזית לפניstopSelf()
כשמבטלים אתonTaskRemoved
. במקום זאת, צריך להשתמש ב-MediaSessionService.pauseAllPlayersAndStopSelf()
. - ההתראה תישאר גלויה כשההפעלה תעבור למצב שגיאה או למצב עצירה. ההתראה מוסרת רק אם הפלייליסט נמחק או אם הנגן נסגר.
- שיפור הטיפול בפעולות MediaSession של פלטפורמת Android ACTION_PLAY ו-ACTION_PAUSE, כך שרק אחת מהן תוגדר בהתאם לפקודות הזמינות, וגם תתקבל אם רק אחת מהן מוגדרת.
- מוסיפים את
Context
כפרמטר ל-MediaButtonReceiver.shouldStartForegroundService
(מספר 1887). - תוקן באג שגרם לכך שקריאה לשיטה
Player
בחיבורMediaController
לסשן מדור קודם גרמה להסרת שינויים מעדכון בהמתנה. - הגדרת
MediaSession.setSessionActivity(PendingIntent)
לקבלת ערך null (#2109). - תוקן באג שגרם לכך שהתראה לא עדכנית נשארה גלויה כשמנקים את הפלייליסט (#2211).
- שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה לפני שתפוג ההמתנה, בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להתקשר אל
- UI:
- מוסיפים מחזיקי מצב ופונקציות Composable למודול
media3-ui-compose
עבורPlayerSurface
, PresentationState
, PlayPauseButtonState
,NextButtonState
, PreviousButtonState
, RepeatButtonState
,ShuffleButtonState
ו-PlaybackSpeedState
.
- מוסיפים מחזיקי מצב ופונקציות Composable למודול
- הורדות:
- תוקן באג ב-
CacheWriter
שגורם למקורות נתונים להישאר פתוחים ולאזורי מטמון להינעל אם מקור הנתונים מחזירException
שאינוIOException
(#9760).
- תוקן באג ב-
- תוסף HLS:
- הוספת גרסה ראשונה של
HlsInterstitialsAdsLoader
. הכלי Ads Loader קורא את מודעות המעברון בפורמט HLS של רשימת השמעה של מדיה בפורמט HLS וממפה אותן ל-AdPlaybackState
שמועבר ל-AdsMediaSource
. הגרסה הראשונית הזו תומכת רק בסטרימינג של HLS VOD עם מאפייניX-ASSET-URI
. - מוסיפים
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
. אפליקציות יכולות להשתמש בו כדי ליצור מופעים שמשתמשים ב-AdsMediaSource
בצורה נוחה ובטוחה.HlsInterstitialsAdsLoader
- ניתוח תג
SUPPLEMENTAL-CODECS
מרשימת השמעה של HLS כדי לזהות פורמטים של Dolby Vision (מס' 1785). - הקלה בתנאי לחיפוש סנכרון מיקומים בשידור HLS (#2209).
- הוספת גרסה ראשונה של
- תוסף DASH:
- נוספה תמיכה בפורמט AC-4 Level-4 ל-DASH (#1898).
- תוקנה בעיה בחישוב מרווח העדכון להוספת מודעות בשידורים חיים עם כמה תקופות (#1698).
- ניתוח מאפיין
scte214:supplementalCodecs
ממניפסט DASH כדי לזהות פורמטים של Dolby Vision (#1785). - שיפור הטיפול במעברים בין תקופות בשידורים חיים שבהם התקופה מכילה דוגמאות מדיה מעבר למשך התקופה המוצהר (#1698).
- תוקנה הבעיה שבה קבוצות התאמה שסומנו ב-
adaptation-set-switching
אבל עם שפות שונות או דגלי תפקיד שונים מוזגו יחד (#2222).
- תוספי פענוח (FFmpeg, VP9, AV1 וכו'):
- נוסף מודול לפענוח MPEG-H שמשתמש בפענוח MPEG-H מובנה כדי לפענח אודיו MPEG-H (#1826).
- תוסף MIDI:
- העברת מופעים מותאמים אישית של
AudioSink
ושלAudioRendererEventListener
אלMidiRenderer
.
- העברת מופעים מותאמים אישית של
- תוסף Cast:
- העלאה של התלות
play-services-cast-framework
לגרסה 21.5.0 כדי לתקן קריסה שלFLAG_MUTABLE
באפליקציות שמטרגטות API מגרסה 34 ומעלה במכשירים שבהם Google Play Services מותקן אבל מושבת (#2178).
- העלאה של התלות
- אפליקציית הדגמה:
- הרחבת
demo-compose
באמצעות לחצנים נוספים ושיפור השילוב שלPlayerSurface
עם תמיכה בהתאמת גודל ובהפעלת הצמצם.
- הרחבת
- הסרת סמלים שהוצאו משימוש:
- הסרת השיטה
AudioMixer.create()
שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultAudioMixer.Factory().create()
. - מסירים את השיטות הבאות שהוצאו משימוש
Transformer.Builder
:- במקום זאת, אפשר להשתמש ב-
setTransformationRequest()
, ב-setAudioMimeType()
, ב-setVideoMimeType()
וב-setHdrMode()
. -
setAudioProcessors()
, מגדירים את מעבד האודיו ב-EditedMediaItem.Builder.setEffects()
ומעבירים אותו ל-Transformer.start()
במקום זאת. -
setVideoEffects()
, מגדירים אפקט וידאו ב-EditedMediaItem.Builder.setEffects()
ומעבירים אותו ל-Transformer.start()
במקום. -
setRemoveAudio()
, אפשר להשתמש ב-EditedMediaItem.Builder.setRemoveAudio()
כדי להסיר את האודיו מ-EditedMediaItem
שמועבר אלTransformer.start()
במקום זאת. setRemoveVideo()
, אפשר להשתמש ב-EditedMediaItem.Builder.setRemoveVideo()
כדי להסיר את הסרטון מ-EditedMediaItem
שהועבר אלTransformer.start()
.setFlattenForSlowMotion()
, במקום זאת צריך להשתמש ב-EditedMediaItem.Builder.setFlattenForSlowMotion()
כדי לשטח אתEditedMediaItem
שמועבר אלTransformer.start()
.setListener()
, צריך להשתמש ב-addListener()
, ב-removeListener()
או ב-removeAllListeners()
.
- במקום זאת, אפשר להשתמש ב-
- מסירים את השיטות הבאות שהוצאו משימוש
Transformer.Listener
:onTransformationCompleted(MediaItem)
, במקומה צריך להשתמש ב-onCompleted(Composition, ExportResult)
.onTransformationCompleted(MediaItem, TransformationResult)
, במקומה צריך להשתמש ב-onCompleted(Composition, ExportResult)
.onTransformationError(MediaItem, Exception)
, במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationException)
, במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationResult, TransformationException)
, במקומה צריך להשתמש ב-onError(Composition, ExportResult, ExportException)
.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
, במקומה צריך להשתמש ב-onFallbackApplied(Composition, TransformationRequest, TransformationRequest)
.
- הסרת הכיתה
TransformationResult
שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportResult
. - הסרת הכיתה
TransformationException
שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-ExportException
. - הסרה של
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.PROGRESS_STATE_NOT_STARTED
. - הסרה של
Transformer.setListener()
שהוצא משימוש. במקום זאת, אפשר להשתמש ב-Transformer.addListener()
, ב-Transformer.removeListener()
או ב-Transformer.removeAllListeners()
. - הסרה של
Transformer.startTransformation()
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Transformer.start(MediaItem, String)
. - הסרה של
SingleFrameGlShaderProgram
שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-BaseGlShaderProgram
. - הסרה של
Transformer.flattenForSlowMotion
. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItem.flattenForSlowMotion
. - הוסרו
ExoPlayer.VideoComponent
, ExoPlayer.AudioComponent
,ExoPlayer.TextComponent
ו-ExoPlayer.DeviceComponent
. - בוצעה הסרה של
androidx.media3.exoplayer.audio.SonicAudioProcessor
. - הוסרו השיטות הבאות שהוצאו משימוש
DownloadHelper
:- הקונסטרוקטור
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
, צריך להשתמש ב-DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
במקומו. getRendererCapabilities(RenderersFactory)
, אפשר ליצורDefaultRendererCapabilitiesList
עםRenderersFactory
ולקרוא ל-DefaultRendererCapabilitiesList.getRendererCapabilities()
כדי להשיג פונקציונליות שוות ערך.
- הקונסטרוקטור
- הוסרה השיטה
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
. במקום זאת, צריך להשתמש ב-PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
ולהעביר את הערך(MediaSession.Token) compatToken.getToken()
.
- הסרת השיטה
1.6.0-rc02
19 במרץ 2025
משתמשים בגרסה יציבה 1.6.0.
1.6.0-rc01
12 במרץ 2025
משתמשים בגרסה יציבה 1.6.0.
1.6.0-beta01
26 בפברואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha03
6 בפברואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha02
30 בינואר 2025
משתמשים בגרסה יציבה 1.6.0.
גרסה 1.6.0-alpha01
20 בדצמבר 2024
משתמשים בגרסה יציבה 1.6.0.
גירסה 1.5
גירסה 1.5.1
19 בדצמבר 2024
androidx.media3:media3-*:1.5.1
משוחרר.
גרסה 1.5.1 מכילה את ההתחייבויות האלה.
- ExoPlayer:
- השבתנו את השימוש בפענוח אסינכרוני ב-MediaCodec כדי למנוע בעיות של פסק זמן בקודק שדווחו ב-API של הפלטפורמה הזו (מספר 1641).
- מחולצי נתונים:
- MP3: הפעלת קובץ לא נעצרת לפני הזמן כשתוכן העניינים של מסגרת
VBRI
לא כולל את כל נתוני ה-MP3 בקובץ (#1904).
- MP3: הפעלת קובץ לא נעצרת לפני הזמן כשתוכן העניינים של מסגרת
- סרטון:
- החזרת השימוש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו
MediaCodecAdapter
כשמספקים אותם במהלך העיבוד שלonOutputFormatChanged
(#1371).
- החזרת השימוש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו
- טקסט:
- תוקן באג ב-
ReplacingCuesResolver.discardCuesBeforeTimeUs
שבו רמז פעיל ב-timeUs
(התחיל לפני אבל עדיין לא הסתיים) נפסל באופן שגוי (#1939).
- תוקן באג ב-
- מטא-נתונים:
- חילוץ של מספרי דיסקים/טראקים וז'אנר מתגובות Vorbis אל
MediaMetadata
(#1958).
- חילוץ של מספרי דיסקים/טראקים וז'אנר מתגובות Vorbis אל
גרסה 1.5.0
27 בנובמבר 2024
androidx.media3:media3-*:1.5.0
משוחרר.
גרסה 1.5.0 מכילה את ההתחייבויות האלה.
- ספרייה משותפת:
- הוספנו
ForwardingSimpleBasePlayer
שמאפשר להעביר קדימה לשחקן אחר עם שינויים קלים, תוך שמירה על עקביות מלאה וטיפול במאזינים (#1183). - מחליפים את
SimpleBasePlayer.State.playlist
בשיטהgetPlaylist()
. - מוסיפים חריגה ל-
SimpleBasePlayer.State.Builder.setPlaylist()
כדי לציין ישירותTimeline
וTracks
נוכחיים וMetadata
במקום ליצור מבנה של פלייליסט. - הגדלה של
minSdk
ל-21 (Android Lollipop). ההתנהגות הזו תואמת לכל הספריות האחרות של AndroidX. - הוספה של ארטיפקט
androidx.media3:media3-common-ktx
שמספק פונקציונליות ספציפית ל-Kotlin שנבנתה על בסיס הספרייה Common - Add
Player.listen
suspending extension function to spin a coroutine to listen toPlayer.Events
to themedia3-common-ktx
library. - הסרת הערות
@DoNotInline
ממחלקות פנימיות שהוצאו מההקשר שלהן באופן ידני כדי למנוע כשלים באימות מחלקות בזמן ריצה. בגרסאות האחרונות של R8 שיחות לא מוטמעות כאלה מושבתות אוטומטית כדי למנוע כשלים בזמן הריצה (כך שלא צריך יותר להשבית אותן ידנית). כל המשתמשים בספרייה ב-Gradle צריכים כבר להשתמש בגרסה של Android Gradle Plugin שמשתמשת בגרסה של R8 שמבצעת את הפעולה הזו, בגללcompileSdk = 35
. משתמשים בספרייה עם מערכות build שאינן Gradle צריכים לוודא ששלב הכיווץ או הטשטוש המקביל ל-R8 מבצע תהליך דומה של הוצאה אוטומטית של קוד מתוך שורות, כדי למנוע כשלים באימות של מחלקות בזמן ריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
- הוספנו
- ExoPlayer:
- עכשיו אפשר להתקשר אל
MediaCodecRenderer.onProcessedStreamChange()
לכל פריט מדיה. בעבר, לא הייתה קריאה ל-first. כדי להפעיל את האפשרות הזו, צריך להשתמש בMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
. - מוסיפים את
PreloadMediaSource.PreloadControl.onPreloadError
כדי לאפשר הטמעות שלPreloadMediaSource.PreloadControl
לבצע פעולות כשמתרחשת שגיאה. - מוסיפים את
BasePreloadManager.Listener
כדי להפיץ אירועי טעינה מראש לאפליקציות. - אפשר לשנות את הזמן הקצוב לתפוגה של לקוח SNTP ולנסות שוב כתובות חלופיות אם חלף הזמן הקצוב לתפוגה (#1540).
- הסרנו את השדה
MediaCodecAdapter.Configuration.flags
כי הערך שלו תמיד היה אפס. - המשתמש יכול לבחור את הרמקול המובנה להשמעה ב-Wear OS API 35 ומעלה (אם המכשיר תומך בכך).
- דחיית חסימת השיחה אל
Context.getSystemService(Context.AUDIO_SERVICE)
עד להפעלת הטיפול במיקוד האודיו. כך מוודאים שהשיחה לא תיחסם אם הטיפול במיקוד האודיו לא מופעל (#1616). - אפשרות להפעלה ללא קשר למשך הזמן של הנתונים שנטענו בזיכרון כשמתרחש כשל בטעינה (#1571).
- מוסיפים את התג
AnalyticsListener.onRendererReadyChanged()
כדי לציין מתי רכיבי עיבוד נפרדים מאפשרים שההפעלה תהיה מוכנה. - תוקנה בעיה שבה לפעמים
MediaCodec.CryptoException
דווחה כ'שגיאה לא צפויה בסביבת זמן הריצה' כש-MediaCodec
הופעל במצב אסינכרוני (התנהגות ברירת המחדל ב-API 31 ואילך). - מעבירים את הערך
bufferedDurationUs
במקוםbufferedPositionUs
עםPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
. בנוסף, הערךDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
משתנה ל-DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
, ואז האפליקציות צריכות להעביר ערך שמייצג משך זמן ספציפי ממיקום ההתחלה שמוגדר כברירת מחדל, שבמהלכו מקור המדיה המתאים צריך להיטען מראש באמצעות IntDef הזה, במקום מיקום. - הוספת הטמעה של
ForwardingRenderer
שמעבירה את כל הקריאות לשיטות לרכיב עיבוד אחר (1703). - הוספת טעינה מראש של הפריט הבא בפלייליסט. אפליקציות יכולות להפעיל טעינה מראש על ידי קריאה ל-
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, אם בחרתם להשתמש באפשרות הזו,DefaultLoadControl
מגביל את הטעינה מראש כך שהיא תתחיל ותימשך רק כשהנגן לא נטען לצורך הפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה שלLoadControl.shouldContinuePreloading()
בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl
). הטמעת ברירת המחדל שלLoadControl
משביתה את הטעינה מראש אם אפליקציה משתמשת בהטמעה מותאמת אישית שלLoadControl
. - נוספה שיטה
MediaSourceEventListener.EventDispatcher.dispatchEvent()
כדי לאפשר הפעלה של אירועים של listeners מסוג subclass (1736). - מוסיפים
DefaultPreloadManager.Builder
שיוצר את המופעיםDefaultPreloadManager
ו-ExoPlayer
עם הגדרות משותפות באופן עקבי. - צריך להסיר את הפרמטר
Renderer[]
מ-LoadControl.onTracksSelected()
כי ההטמעה שלDefaultLoadControl
יכולה לאחזר את סוגי הסטרימינג מ-ExoTrackSelection[]
. - הוצא משימוש
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
וסימנו את השיטה כסופית כדי למנוע החלפות. במקומה צריך להשתמש במדיניות החדשהDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
. - דיווח על אירועי
MediaSourceEventListener
ממקורות משניים ב-MergingMediaSource
. התוצאה היא שאירועים של load start/error/cancelled/completed מדווחים על כתוביות שהועלו (אלה שנוספו באמצעותMediaItem.LocalConfiguration.subtitleConfigurations
), ועשויים להופיע כאירועי טעינה כפולים שנשלחים מ-AnalyticsListener
. - למנוע מצב שבו שגיאות בכתוביות ובמטא-נתונים יגרמו להפסקת ההפעלה.
במקום זאת, הטראק הבעייתי מושבת וההפעלה של הטראקים הנותרים נמשכת (#1722).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
onLoadError
. - בטיפול מיושן בכתוביות (במהלך העיבוד), רק שגיאות טעינה משויכות מועברות באמצעות קריאות חוזרות (callback) של
onLoadError
, ושגיאות ניתוח מתעלמים מהן בשקט (זו התנהגות שהייתה קיימת קודם).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
- תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- הוספנו פונקציית setter ל-
SntpClient
כדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (#1794).
- עכשיו אפשר להתקשר אל
- Transformer:
- מוסיפים את
SurfaceAssetLoader
, שתומך בהוספת נתוני וידאו לתור של Transformer באמצעותSurface
. -
ImageAssetLoader
מדווח על קלט לא נתמך באמצעותAssetLoader.onError
במקום להציגIllegalStateException
. - הופכים את הגדרת משך הזמן של התמונה באמצעות
MediaItem.Builder.setImageDurationMs
לחובה לייצוא תמונות. - הוספת תמיכה בייצוא של פערים ברצפים של פריטי מדיה שערכתם.
- מוסיפים את
- בחירת טראק:
-
DefaultTrackSelector
: עדיף להשתמש באודיו מבוסס-אובייקט על פני אודיו מבוסס-ערוץ, אם שאר הגורמים שווים.
-
- מחולצי נתונים:
- אפשר ל-
Mp4Extractor
ול-FragmentedMp4Extractor
לזהות דגימות H264 שלא נעשה בהן שימוש כהפניה בדגימות הבאות. - הוספנו אפשרות להפעיל חיפוש מבוסס-אינדקס ב-
AmrExtractor
. - קובצי MP3 עם יותר מ-128kB בין מסגרות תקינות נחשבים לקטומים (במקום לא תקינים). המשמעות היא שקבצים עם נתונים שאינם בפורמט MP3 בסוף, ללא מטא-נתונים אחרים שמציינים את אורך הבייטים של ה-MP3, מפסיקים עכשיו את ההפעלה בסוף הנתונים של ה-MP3 במקום להיכשל עם
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563). - תוקנה בעיה שקשורה לטיפול בדוגמאות של פרסומות לפני הסרטון במיקומי התחלה של מדיה שאינם פריימים מרכזיים, כשמעבדים רשימות עריכה בקובצי MP4 (#1659).
- שיפור החישוב של קצב הפריימים באמצעות משך המדיה מהתיבה
mdhd
ב-Mp4Extractor
וב-FragmentedMp4Extractor
(#1531). - תיקון קנה מידה שגוי של
media_time
ברשימות עריכה של MP4. הערךsegment_duration
כבר הותאם בצורה נכונה באמצעות קנה המידה של הסרט, אבל הערךmedia_time
מותאם עכשיו בצורה נכונה באמצעות קנה המידה של הרצועה, כפי שצוין בתקן של פורמט MP4 (מס' 1792). - טיפול בפריימים לא מסודרים בחישוב
endIndices
עבור MP4 עם רשימת עריכה (#1797). - תוקן ניתוח של משך המדיה בתיבה
mdhd
של קובצי MP4 כדי לטפל בערכים-1
(#1819). - נוספה תמיכה בזיהוי תיבת
h263
בקובצי MP4 עבור סרטוני H.263 (#1821). - הוספת תמיכה בפורמט קובץ מדיה בסיסי ISO ברמה 4 של AC-4 (#1265).
- אפשר ל-
- DataSource:
- בוצע עדכון של
HttpEngineDataSource
כדי לאפשר שימוש החל מגרסה S extension 7 במקום רמת API 34 (#1262). -
DataSourceContractTest
: מוודאים ש-DataSource.getUri()
מחזיר את ה-URI שפוענח (כפי שמתואר במסמכים). אם כתובת ה-URI שונה מכתובת ה-URI שצוינה בבקשה, אפשר לציין את זה בבדיקות באמצעות השיטה החדשהDataSourceContractTest.TestResource.Builder.setResolvedUri()
. -
DataSourceContractTest
: מוודאים שהפונקציותDataSource.getUri()
ו-getResponseHeaders()
מחזירות את הערך open אחרי קריאה שנכשלה לפונקציהopen()
(בגלל משאב שלא נמצא) ולפני קריאה עוקבת לפונקציהclose()
.- החלפת הערך של
DataSourceContractTest.getNotFoundResources()
מאפשרת למחלקות משנה של בדיקות לספק כמה משאבים מסוג 'לא נמצא', וגם לספק את כל הכותרות הצפויות. כך אפשר להבחין בין שגיאת HTTP 404 (עם כותרות) לבין השגיאה 'השרת לא נמצא' (ללא כותרות).
- החלפת הערך של
- בוצע עדכון של
- אודיו:
- הגדרה אוטומטית של מטא-נתונים של עוצמת הקול לפי תקן CTA-2075 ב-Codec אם הם קיימים במדיה.
- מוודאים שההנמכה של עוצמת הקול תהיה הדרגתית כשמחפשים מיקום מסוים בסרטון.
- איך לפתור בעיות שקשורות לצלילי פופ שיכולים להופיע במהלך חיפוש.
- תיקון שגיאות של קיטוע מצטבר באלגוריתם של Sonic לשינוי מהירות/גובה הצליל.
- תוקן באג ב-
SpeedChangingAudioProcessor
שגורם להשמטת פריימים של פלט.
- סרטון:
-
MediaCodecVideoRenderer
לא מפענח דגימות שלא מוצגות ולא משמשות כהפניה לדגימות אחרות. - ב-API 35 ומעלה, יכול להיות שעכשיו
MediaCodecAdapter
יקבלnull
Surface
ב-configure
וקריאות לשיטה חדשהdetachOutputSurface
כדי להסירSurface
שהוגדר קודם אם רכיב ה-codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported
). - צריך להשתמש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו, אם הם זמינים, כשמעבדים את
onOutputFormatChanged
(#1371).MediaCodecAdapter
- נוספה דרך לעקיפת בעיה במכשיר Galaxy Tab S7 FE שגורמת לסימון של סטרימינג מאובטח של H264 ב-60fps כלא נתמך (#1619).
- הוספת פתרון עקיף לבעיה ב-codecs שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות של סוף הסטרימינג.
-
- טקסט:
- מוסיפים תג מותאם אישית
VoiceSpan
ומאכלסים אותו בנתונים עבור טווחים של קול ב-WebVTT (#1632). - מוודאים שקובצי WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שגולשות מעבר ל-64 ביט
long
כשמייצגים אותן כמיקרו-שניות ומכפילים אותן בבסיס הזמן של MPEG90,000
) מוצגות (#1763). - תמיכה בכתוביות CEA-608 בתוכן Dolby Vision (#1820).
- תוקן באג שגורם להשהיית ההפעלה בשידורי DASH מרובי תקופות כשהכתוביות בפורמט CEA-608 מופעלות (#1863).
- מוסיפים תג מותאם אישית
- מטא-נתונים:
- מקצים את הסוג
C.TRACK_TYPE_METADATA
לטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
- מקצים את הסוג
- תמונה:
- הוספת
ExternallyLoadedImageDecoder
לשילוב פשוט עם ספריות חיצוניות לטעינת תמונות כמו Glide או Coil.
- הוספת
- DataSource:
- הוספנו את
FileDescriptorDataSource
,DataSource
חדש שאפשר להשתמש בו כדי לקרוא מFileDescriptor
(#3757).
- הוספנו את
- ההשפעה:
- הוספת פתרון עקיף לבעיה
DefaultVideoFrameProcessor
של שינוי קנה מידה קלSurfaceTexture
SurfaceTexture
עשוי לכלול שינוי קנה מידה קטן שגורם לחיתוך של גבול ברוחב 1 טקסל מסביב לקצה של מאגר חתוך. הטיפול בבעיה הזו מתבצע עכשיו כך שהפלט קרוב יותר למה שמצופה. - האצה
DefaultVideoFrameProcessor.queueInputBitmap()
. כתוצאה מכך, ייצוא תמונות לסרטונים באמצעותTransformer
מהיר יותר.
- הוספת פתרון עקיף לבעיה
- IMA extension:
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
ArrayIndexOutOfBoundsException
ב-ImaServerSideAdInsertionMediaSource
. - תוקן באג שבו הפעלה של סטרימינג של DAI עם הוספה בצד השרת ללא פרסומת לפני הסרטון, אחרי הפרסומת האחרונה באמצע הסרטון, עלולה לגרום לשגיאה
ArrayIndexOutOfBoundsException
(מס' 1741).
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
- סשן:
- כדי לאפשר לאפליקציות להשבית פקודת הפעלה שמגיעה להן להמשך הפעלה, צריך להוסיף את
MediaButtonReceiver.shouldStartForegroundService(Intent)
כדי לבטל את השיטה הזו. כברירת מחדל, השירות תמיד מופעל ואי אפשר להפסיק את ההפעלה בלי שהמערכת תקרוס בגלל השירות עםForegroundServiceDidNotStartInTimeException
(#1528). - תוקן באג שגרם לכך שפקודות מותאמות אישית שנשלחו מ-
MediaBrowser
הועברו ל-MediaSessionCompat.Callback
במקום לגרסהMediaBrowserServiceCompat
של השיטה, כשהיה חיבור לשירות מדור קודם. כתוצאה מכך,MediaBrowser
לא קיבל את ערך ההחזרה בפועל שנשלח על ידי השירות מדור קודם (#1474). - טיפול בחריגה
IllegalArgumentException
שמופעלת על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור לכוונות של לחצן מדיה (#1730). - הוספת לחצני פקודות לפריטי מדיה. הפעולה הזו מוסיפה את Media3 API למה שהיה ידוע בתור
Custom browse actions
עם ספריית הישנה עםMediaBrowserCompat
. שימו לב: לחצני פקודות של Media3 לפריטי מדיה זמינים גם ל-MediaBrowser
וגם ל-MediaController
. מידע נוסף על פעולות מותאמות אישית של עיון ב-AAOS - תוקן באג שבו לפעמים בקר Media3 לא הצליח לאפשר לאפליקציית סשן להפעיל שירות בחזית אחרי שליחת בקשה
play()
. - הגבלת
CommandButton.Builder.setIconUri
לקבלת כתובות URI של תוכן בלבד. - העברת רמזים לחיבור של דפדפן Media3 אל
MediaBrowserCompat
הראשוני כשמתחברים אלMediaBrowserCompat
מדור קודם. השירות יכול לקבל את רמזי החיבור שמועברים כרמזי שורש עם הקריאה הראשונה ל-onGetRoot()
. - תוקן באג שבו
MediaBrowser
שמחובר לשירות דפדפן מדור קודם, לא קיבל שגיאה שנשלחה על ידי השירות אחרי שהדפדפן נרשם ל-parentid
. - שיפור ההתנהגות של יכולת הפעולה ההדדית, כך שדפדפן Media3 שמחובר ל-
MediaBrowserService
מדור קודם לא יבקש את הצאצאים שלparentId
פעמיים כשנרשמים למינוי של הורה.
- כדי לאפשר לאפליקציות להשבית פקודת הפעלה שמגיעה להן להמשך הפעלה, צריך להוסיף את
- UI:
- הפעלנו את הפתרון העקיף של סרטון מתוח או חתוך ב-
PlayerView
-in-Compose-AndroidView
, בגלל בעיות במעברים משותפים מבוססי XML. אפליקציות שמשתמשות ב-PlayerView
בתוךAndroidView
צריכות לשלוח קריאה ל-PlayerView.setEnableComposeSurfaceSyncWorkaround
כדי להביע הסכמה (#1237, #1594). - הוספנו את
setFullscreenButtonState
ל-PlayerView
כדי לאפשר עדכונים של הסמל של הלחצן למסך מלא לפי דרישה, כלומר מחוץ לפס ומבלי להגיב לאינטראקציה של לחיצה (#1590, #184). - תיקון באג שבו האפשרות 'ללא' בבחירת הטקסט לא פועלת אם יש העדפות לבחירת רצועת טקסט שהוגדרו באפליקציה.
- הפעלנו את הפתרון העקיף של סרטון מתוח או חתוך ב-
- תוסף DASH:
- הוספת תמיכה בתקופות שמתחילות באמצע פלח (#1440).
- תוסף Smooth Streaming:
- תוקנה שגיאה
Bad magic number for Bundle
בהפעלת סטרימינג של SmoothStreaming עם טראקים של טקסט (מס' 1779).
- תוקנה שגיאה
- תוסף RTSP:
- תוספי פענוח (FFmpeg, VP9, AV1 וכו'):
- מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות הספרייה המקורית libiamf כדי לבצע סינתזה של אודיו.
- ההפעלה מופעלת עם פריסת סטריאו וגם עם 5.1 עם מרחביות, יחד עם מעקב ראש אופציונלי, אבל כרגע אין תמיכה בהפעלה בינאורלית.
- הוספת תמיכה בדפים בגודל 16KB לתוספי פענוח ב-Android 15 (מס' 1685).
- מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות הספרייה המקורית libiamf כדי לבצע סינתזה של אודיו.
- תוסף Cast:
- הפסקת ניקוי ציר הזמן אחרי ניתוק CastSession, שמאפשר לאפליקציית השולח להמשיך את ההפעלה באופן מקומי אחרי הניתוק.
- מאכלסים את
DeviceInfo
של CastPlayer כשמספקיםContext
. הפעולה הזו מאפשרת לקשר אתMediaSession
אלRoutingSession
, שנדרש לשילוב של הכלי להחלפת פלט (#1056).
- כלי בדיקה:
-
DataSourceContractTest
כולל עכשיו בדיקות לאימות:- מקור הנתונים
read position
עודכן. - מאגר הפלט
offset
מוחל בצורה נכונה.
- מקור הנתונים
-
- אפליקציית הדגמה
- פתרון בעיות של דליפות זיכרון באפליקציית הדגמה של סרטונים קצרים (#1839).
- הסרת סמלים שהוצאו משימוש:
- הסרת
Player.hasPrevious
שהוצא משימוש,Player.hasPreviousWindow()
. במקום זאת, אתם צריכים להשתמש ב-Player.hasPreviousMediaItem()
. - הסרת השיטה
Player.previous()
שיצאה משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem()
. - הסרת השיטה
DrmSessionEventListener.onDrmSessionAcquired
שיצאה משימוש. - הסרת קונסטרוקטורים של
DefaultEncoderFactory
שיצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultEncoderFactory.Builder
.
- הסרת
גרסה 1.5.0-rc02
19 בנובמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-rc01
13 בנובמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-beta01
30 באוקטובר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.5.0-alpha01
10 בספטמבר 2024
משתמשים בגרסה יציבה 1.5.0.
גרסה 1.4.0
גרסה 1.4.1
27 באוגוסט 2024
androidx.media3:media3-*:1.4.1
משוחרר.
גרסה 1.4.1 מכילה את הקומטים האלה.
- ExoPlayer:
- מחולצי נתונים:
- 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) ב-framework.
- תיקון שגיאה
- ההשפעה:
- מוסיפים אמצעי תשלום
release()
ל-GlObjectsProvider
.
- מוסיפים אמצעי תשלום
- סשן:
- תוסף RTSP:
- דילוג על תיאורי מדיה לא תקינים בניתוח SDP (#1087).
גרסה 1.4.0
25 ביולי 2024
androidx.media3:media3-*:1.4.0
משוחרר.
גרסה 1.4.0 מכילה את הקומטים האלה.
- ספרייה משותפת:
- העברת שיחות חיפוש שמונחות כשיחות ללא פעולה לשיטות המוגנות
BasePlayer.seekTo()
ו-SimpleBasePlayer.handleSeek()
במקום להתעלם מהן. אם מטמיעים את השיטות האלה בנגן בהתאמה אישית, יכול להיות שיהיה צורך לטפל בקריאות הנוספות האלה באמצעותmediaItemIndex == C.INDEX_UNSET
. - הסרת תלות בהידור של ביטול סוכר משופר ב-Java 8 (#1312).
- חשוב לוודא שהמשך שהועבר אל
MediaItem.Builder.setImageDurationMs()
לא רלוונטי לMediaItem
שאינו תמונה (כפי שמתואר במסמכים). - הוספת
Format.customData
לאחסון מידע מותאם אישית שסופק על ידי האפליקציה לגבי מופעים שלFormat
.
- העברת שיחות חיפוש שמונחות כשיחות ללא פעולה לשיטות המוגנות
- ExoPlayer:
- מוסיפים את
BasePreloadManager
שמתאם את הטעינה מראש של כמה מקורות על סמך העדיפויות שמוגדרות על ידיrankingData
. אפשר להתאים אישית את המחלקה הזו באמצעות הרחבה שלה. מוסיפים אתDefaultPreloadManager
שמשתמש ב-PreloadMediaSource
כדי לטעון מראש דגימות מדיה של המקורות לזיכרון, ומשתמש במספר שלםrankingData
שמציין את האינדקס של פריט בממשק המשתמש. - מוסיפים
PlayerId
לרוב השיטות שלLoadControl
כדי לאפשר הטמעות שלLoadControl
לתמיכה במספר נגנים. - הסרה של
Buffer.isDecodeOnly()
ושלC.BUFFER_FLAG_DECODE_ONLY
. אין צורך להגדיר את הדגל הזה, כי רכיבי ה-renderer והמפענחים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. ביישומים מותאמים אישית שלRenderer
צריך לבדוק אם זמן ההשהיה הוא לפחותBaseRenderer.getLastResetPositionUs()
כדי להחליט אם להציג דוגמה. הטמעות מותאמות אישית שלSimpleDecoder
יכולות לבדוק אם יש צורך בכך או לסמן מאגרי נתונים זמניים אחרים ב-DecoderOutputBuffer.shouldBeSkipped
כדי לדלג עליהם.isAtLeastOutputStartTimeUs()
- הפונקציה מאפשרת להחזיר ערך null כדי לציין שלא צריך לטעון מראש
MediaSource
עםrankingData
הנתון.TargetPreloadStatusControl.getTargetPreloadStatus(T)
- הוספה של
remove(MediaSource)
אלBasePreloadManager
. - מוסיפים את
reset()
אלBasePreloadManager
כדי לבטל את ההחזקה של כל המקורות תוך שמירה על מופע מנהל הטעינה מראש. - מוסיפים
ExoPlayer.setPriority()
(ו-Builder.setPriority()
) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManager
ואת חשיבות MediaCodec מ-API 35. - תוקנה בעיה בעדכון של הזמן האחרון של טעינת הנתונים מחדש, שגרמה למפתח
bs
(buffer starvation) שגוי ב-CMCD (#1124). - מוסיפים את הערך
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
כדי לציין שהמקור נטען עד הסוף. ההרשאה הזו מאפשרת להטמעות שלDefaultPreloadManager
ושלPreloadMediaSource.PreloadControl
לטעון מראש את המקור הבא או לבצע פעולות אחרות. - תוקן באג שבו דילוג על השתקה בסוף פריטים יכול להפעיל חריגה בהפעלה.
- כדי לבטל את תקופת הטעינה מראש, מוסיפים את
clear
אלPreloadMediaSource
. - הוספת קוד שגיאה חדש
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
שמשמש כאשר משאבי codec מוחזרים למשימות בעדיפות גבוהה יותר. - מאפשרים ל-
AdsMediaSource
לטעון מודעות לפני הסרטון לפני השלמת ההכנה של תוכן המדיה הראשוני (#1358). - תוקן באג שגרם לכך שההפעלה עברה ל-
STATE_ENDED
כשמכינים מחדש שידור חי בפורמט DASH עם כמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט. - שינוי השם של
onTimelineRefreshed()
ל-onSourcePrepared()
ושלonPrepared()
ל-onTracksSelected()
ב-PreloadMediaSource.PreloadControl
. צריך גם לשנות את השם של IntDefs ב-DefaultPreloadManager.Stage
בהתאם. - הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההתעוררות של המעבד, ולדחות את ההתעוררות עד שהרכיבים הגרפיים יוכלו להתקדם.
אפשר להפעיל את ההגדרה הזו באמצעות
experimentalSetDynamicSchedulingEnabled()
כשמגדירים את מופע ExoPlayer. - מוסיפים
Renderer.getDurationToProgressUs()
. Renderer
יכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שצריך להעביר את ההפעלה כדי שהרכיב יתקדם. אםExoPlayer
מוגדר עםexperimentalSetDynamicSchedulingEnabled()
, אזExoPlayer
יקרא לשיטה הזו כשהוא יחשב את הזמן לתזמון של משימת העבודה שלו. - הוספת
MediaCodecAdapter#OnBufferAvailableListener
להתראה כשהמאגרי קלט ופלט זמינים לשימוש על ידיMediaCodecRenderer
. MediaCodecRenderer
ישלח אות ל-ExoPlayer
כשהוא יקבל את הקריאות החוזרות האלה, ואםExoPlayer
מוגדר עםexperimentalSetDynamicSchedulingEnabled()
, אזExoPlayer
יתזמן את לולאת העבודה שלו כך שרכיבי הרינדור יוכלו להתקדם. - שימוש במחלקת נתונים לשיטות
LoadControl
במקום בפרמטרים נפרדים. - מוסיפים את
ExoPlayer.isReleased()
כדי לבדוק אם בוצעה קריאה ל-Exoplayer.release()
. - מוסיפים
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
כדי להגדיר את המיקום המקסימלי שבוseekToPrevious()
מחפש את הפריט הקודם (#1425). - תוקנו כמה אי-התאמות במיקוד האודיו, למשל, לא מדווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
- תיקון בעיות פוטנציאליות
IndexOutOfBoundsException
שנגרמות בגלל דוחות של כלי חילוץ על רצועות נוספות אחרי שלב ההכנה הראשוני (#1476). -
Effects
ב-ExoPlayer.setVideoEffect()
יקבלו את חותמות הזמן בלי ההיסט של הרנדר (#1098). - תוקנה בעיה פוטנציאלית
IllegalArgumentException
בטיפול בשגיאת הפעלה שהתרחשה במהלך קריאה מראש של פריט אחר בפלייליסט (#1483).
- מוסיפים את
- Transformer:
- מוסיפים את התווים
audioConversionProcess
ו-videoConversionProcess
ל-ExportResult
כדי לציין איך נוצר כל טראק בקובץ הפלט. - הפחתת הבדיקות של רמת H.264 באופטימיזציה של חיתוך.
- הוספנו תמיכה במעבר בין מדיה מסוג SDR ל-HDR ברצף.
- הוספת תמיכה באפקטים של אודיו ברמת הקומפוזיציה.
- הוספת תמיכה בטרנסקוד של תמונות Ultra HDR לסרטוני HDR.
- תוקנה הבעיה שבה הפונקציה
DefaultAudioMixer
לא מחזירה את מספר הבייטים הנכון אחרי איפוס ושימוש חוזר. - פתרון לבעיה במפענח שבה מספר ערוצי האודיו הוגבל לסטריאו כשמטפלים בקלט PCM.
- כשבוחרים טראקים ב-
ExoPlayerAssetLoader
, מתעלמים ממגבלות על מספר ערוצי האודיו כי הן חלות רק על הפעלה. - החלפת הממשק
androidx.media3.transformer.Muxer
בממשקandroidx.media3.muxer.Muxer
והסרתandroidx.media3.transformer.Muxer
. - תיקון טעינת תמונות HEIC מסכימות URI של תוכן. (#1373).
- משנים את משך הזמן של טראק האודיו ב
AudioGraphInput
כדי לשפר את הסנכרון בין האודיו לווידאו. - הסרת השדה
ExportResult.processedInputs
. אם אתם משתמשים בשדה הזה לפרטי קודק, אתם צריכים להשתמש במקום זאת ב-DefaultDecoderFactory.listener
. במקרה של חריגה ב-codec, פרטי ה-codec יהיו זמינים ב-ExportException.codecInfo
.
- מוסיפים את התווים
- מחולצי נתונים:
- MPEG-TS: כדי להריץ את השינוי קדימה, צריך להעביר את יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909). שילוב תיקונים לפתרון הבעיות שצצו בשידורים בפרוטוקול HLS עם פריימים מסוג I בלבד(#1150) ובשידורים בפרוטוקול HLS עם פריימים מסוג H.262 (#1126).
- MP3: עדיף להשתמש בגודל הנתונים מתוך מסגרת
Info
במקום בגודל שמופיע בזרם הבסיסי (למשל, גודל הקובץ או כותרת ה-HTTPContent-Length
). כך אפשר להחריג נתונים של טריילרים שלא ניתן להפעיל (למשל, עטיפות של אלבומים) מחישובים של חיפוש קצב העברת נתונים קבוע, וכך החיפושים מדויקים יותר (#1376). - MP3: כדי לחשב את קצב העברת הנתונים הממוצע לחיפוש קצב העברת נתונים קבוע, צריך להשתמש במספר הפריימים ובנתונים אחרים בפריימים
Info
(אם יש כאלה), ולא להסיק מקצב העברת הנתונים של הפריימים אחרי פריימיםInfo
, כי יכול להיות שהוא קטן באופן מלאכותי, למשל פריימיםPCUT
(#1376). - תיקון חילוץ של פורמט אודיו PCM במאגרי AVI.
- אודיו:
- תיקון מאפייני קידוד של DTS:X Profile 2 להפעלה בשיטת passthrough (#1299).
- במקרה של הפעלה שהועברה, צריך לאפס את שדה המעקב של השלמת הסטרימינג ב-
DefaultAudioSink
לפני הקריאה ל-AudioTrack.stop()
, כדי ש-AudioTrack.StreamEventCallback#onPresentationEnded
יזהה בצורה נכונה מתי כל הנתונים בהמתנה הופעלו. - תוקן באג ב-
SilenceSkippingAudioProcessor
שבו מעברים בין פורמטים שונים של אודיו (לדוגמה, מסטריאו למונו) עלולים לגרום למעבד להחזיר חריגה (מס' 1352). - מטמיעים את
MediaCodecAudioRenderer.getDurationToProgressUs()
כדי שמערכת ExoPlayer תתזמן באופן דינמי את לולאת העבודה הראשית שלה לזמן שבו MediaCodecAudioRenderer יכולה להתקדם.
- סרטון:
- נפתרה בעיה שגרמה לכך שההודעה
Listener.onRenderedFirstFrame()
הגיעה מוקדם מדי כשעוברים בין מכשירים באמצע ההפעלה. - תיקון הלוגיקה של חזרה למפענח חלופי ב-Dolby Vision כדי להשתמש במפענח AV1 תואם אם צריך (#1389).
- תוקנה חריגה של קודק שיכולה להיגרם מהפעלה של רכיב עיבוד סרטונים באמצע ההפעלה.
- נפתרה בעיה שגרמה לכך שההודעה
- טקסט:
- נפתרה בעיה שגרמה לדילוג על כתוביות שהתחילו לפני מיקום החיפוש. הבעיה הזו הופיעה רק ב-Media3 גרסה 1.4.0-alpha01.
- שינוי התנהגות ברירת המחדל של ניתוח כתוביות כך שהיא מתרחשת במהלך החילוץ ולא במהלך העיבוד (בתרשים הארכיטקטורה של ExoPlayer מוסבר ההבדל בין חילוץ לעיבוד).
- אפשר לשנות את ההתנהגות הזו על ידי קריאה לשני
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
ול-TextRenderer.experimentalSetLegacyDecodingEnabled(true)
. במסמכי התיעוד בנושא התאמה אישית מוסבר איך להטמיע את הרכיבים האלה במופע שלExoPlayer
. השיטות האלה (וכל התמיכה בפענוח של כתוביות מדור קודם) יוסרו בגרסה עתידית. - אפליקציות עם הטמעות מותאמות אישית של
SubtitleDecoder
צריכות לעדכן אותן כדי להטמיע במקומן אתSubtitleParser
(ואתSubtitleParser.Factory
במקוםSubtitleDecoderFactory
).
- אפשר לשנות את ההתנהגות הזו על ידי קריאה לשני
- PGS: תיקון של פענוח אורך הרצף כדי לפתור את
0
כמדד צבע, במקום כערך צבע מילולי (#1367). - CEA-708: התעלמות מהערך
rowLock
. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגםrowLock
וגםcolumnLock
הם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLock
לא מיושמת, ולכן למעשה תמיד מניחים שהוא false).- המידע הזה נכלל במקור בהערות לגרסה
1.3.0-alpha01
, אבל השינוי בוטל בטעות לפני פרסום גרסה1.3.0-rc01
. הבעיה תוקנה והשינוי מופיע שוב.
- המידע הזה נכלל במקור בהערות לגרסה
- CEA-708: נמנעת הוספה של שורות חדשות כפולות בגלל הטיפול הנאיבי של ExoPlayer בפקודה 'הגדרת מיקום העט' (#1315).
- תיקון
IllegalArgumentException
מתוךLegacySubtitleUtil
כשדוגמה של כתוביות בפורמט WebVTT לא מכילה רמזים, למשל כחלק מזרם DASH (#1516).
- מטא-נתונים:
- תיקון המיפוי של MP4 לתגי מיון ID3. בעבר, תגי MP4 של 'מיון אלבומים' (
soal
), 'מיון אומנים' (soar
) ו 'מיון אומנים באלבום' (soaa
) מופו באופן שגוי לתגי ID3TSO2
,TSOA
ו-TSOP
(#1302). - תוקנה קריאה של תגי MP4 (/iTunes) מספריים
gnre
(ז'אנר) ו-tmpo
(טמפו) כשהערך ארוך מבייט אחד. - העברת מסגרת ID3
TCON
אלMediaMetadata.genre
(מספר 1305).
- תיקון המיפוי של MP4 לתגי מיון ID3. בעבר, תגי MP4 של 'מיון אלבומים' (
- תמונה:
- הוספת תמיכה ברשתות של תמונות ממוזערות בפורמט DASH שאינן ריבועיות (#1300).
- הוספנו תמיכה ב-AVIF ל-API מגרסה 34 ואילך.
- כדי לנקות
ImageOutput
שהוגדר בעבר, מאשרים אתnull
כפרמטר שלExoPlayer.setImageOutput()
.
- 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 מקלט של מפת סיביות בפורמט Ultra HDR.
- הוספת תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפרת את פלט פני השטח של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
- מעדכנים את ההטמעה של מטריצת השכבות כך שתהיה עקבית עם התיעוד, על ידי היפוך הערכים של x ו-y שמוחלים ב-
setOverlayFrameAnchor()
. אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor()
, צריך להפוך את ערכי x ו-y על ידי הכפלה שלהם ב--1
. - תוקן באג שגרם לקריסה של
TimestampWrapper
כשמשתמשים בו עםExoPlayer#setVideoEffects
(#821). - שינוי מרחב העבודה של צבעי SDR שמוגדר כברירת מחדל מצבעים ליניאריים לסרטון SDR חשמלי בתקן BT 709. צריך גם לספק אפשרות שלישית לשמירה על מרחב הצבעים המקורי.
- אפשר להגדיר סדר Z לא קבוע של EditedMediaItemSequences (#1055).
- שמירה על טווח בהירות עקבי בין פריטי תוכן שונים ב-HDR (השימוש הוא בטווח HLG).
- הוספת תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
- יש הרשאה לשימוש באפקטים של
SeparableConvolution
לפני API 26. - מסירים את
OverlaySettings.useHdr
שלא בשימוש כי הטווח הדינמי של שכבת העל והמסגרת חייב להיות זהה. - הוספת תמיכה ב-HDR ל-
TextOverlay
. אפשר לשנות את בהירות שכבת-העל של הטקסט באמצעותOverlaySettings.Builder.setHdrLuminanceMultiplier()
.
- תמיכה בכמה שינויים במהירות באותו תג
- IMA extension:
- קידום של API שנדרש כדי שאפליקציות יוכלו להפעיל סטרימינג של מודעות DAI לגרסה יציבה.
- מוסיפים
replaceAdTagParameters(Map <String, String>)
ל-ImaServerSideAdInsertionMediaSource.AdLoader
שמאפשר להחליף פרמטרים של תג פרסום בזמן ריצה. - תוקן באג שגרם לכך שהפונקציה
VideoAdPlayer.VideoAdPlayerCallback.onError()
לא נקראה כשהתרחשה שגיאת הפעלה במהלך הפעלת מודעה (#1334). - העלאה של גרסת IMA SDK ל-3.33.0 כדי לתקן
NullPointerException
כשמשתמשים בכתובות URI של תגי מודעותdata://
(#700).
- סשן:
- משנים את ברירת המחדל של
CommandButton.enabled
ל-true
ומוודאים שהערך יכול להישאר false לבקרים גם אם הפקודה המשויכת זמינה. - הוספת קבועים של סמלים עבור
CommandButton
שצריך להשתמש בהם במקום במשאבי סמלים מותאמים אישית. - הוספנו את
MediaSessionService.isPlaybackOngoing()
כדי לאפשר לאפליקציות לשלוח שאילתות לגבי הצורך בהפסקת השירות ב-onTaskRemoved()
(#1219). - הוספנו את
MediaSessionService.pauseAllPlayersAndStopSelf()
שמאפשר להשהות את ההפעלה של כל הסשנים, ואתstopSelf()
שמאפשר לסיים את מחזור החיים שלMediaSessionService
. - מחליפים את
MediaSessionService.onTaskRemoved(Intent)
כדי לספק הטמעה בטוחה כברירת מחדל, שמאפשרת להמשיך להפעיל את השירות בחזית אם ההפעלה נמשכת, או להפסיק את השירות אחרת. - הסתרת סרגל הניווט בהתראה על מדיה לשידורים חיים על ידי אי הגדרת משך הזמן במטא-נתונים של סשן הפלטפורמה (#1256).
- התאמת ההמרה של
MediaMetadata
ל-MediaDescriptionCompat
, כדי להשתמש באותו סדר מועדף ובאותה לוגיקה כשבוחרים מאפייני מטא-נתונים כמו במדיה 1. - הוספה של
MediaSession.sendError()
שמאפשרת שליחה של שגיאות לא קריטיות אל הבקר Media3. כשמשתמשים בבקר ההתראות (ראוMediaSession.getMediaNotificationControllerInfo()
), השגיאה המותאמת אישית משמשת לעדכוןPlaybackState
של סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (#543). - מוסיפים את התג
MediaSession.Callback.onPlayerInteractionFinished()
כדי להודיע על סיום סדרה של אינטראקציות עם הנגן מבקר מסוים. - מוסיפים את
SessionError
ומשתמשים בו ב-SessionResult
וב-LibraryResult
במקום קוד השגיאה כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר. - פרסום הקוד של אפליקציית הבדיקה של media3 controller שאפשר להשתמש בה כדי לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
- העברת נתונים נוספים שהועברו אל
MediaSession[Builder].setSessionExtras()
של media3 אלMediaSession[Builder].setSessionExtras()
של media1.PlaybackStateCompat.getExtras()
- מיפוי שגיאות קריטיות ולא קריטיות אל סשן הפלטפורמה וממנו. הערך
PlaybackException
ממופה למצב שגיאה קריטית שלPlaybackStateCompat
. הודעה מסוגSessionError
שנשלחת לבקר של הודעת המדיה עםMediaSession.sendError(ControllerInfo, SessionError)
ממופה לשגיאה לא קריטית ב-PlaybackStateCompat
, כלומר קוד השגיאה וההודעה מוגדרים אבל מצב הפעלת הפלטפורמה נשאר שונה מ-STATE_ERROR
. - מאפשרים להגדיר את פעילות הסשן לכל בקר כדי לבטל את פעילות הסשן הגלובלית. אפשר להגדיר את הפעילות בסשן לבקר בזמן החיבור על ידי יצירת
ConnectionResult
עםAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. אחרי ההתחברות, אפשר לעדכן את פעילות הסשן באמצעותMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - שיפור השכפול של שגיאות בשיחות אל
MediaLibrarySession.Callback
. מעכשיו אפשר להגדיר שכפול שגיאות באמצעותMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
כדי לבחור את סוג השגיאה או לבטל את שכפול השגיאות, שמופעל כברירת מחדל.
- משנים את ברירת המחדל של
- UI:
- הוספת תמיכה בהצגת תמונות ל-
PlayerView
כשהוא מחובר ל-ExoPlayer
(מס' 1144). - הוספת התאמה אישית של סמלים שונים ב-
PlayerControlView
באמצעות מאפייני xml כדי לאפשר שימוש בנכסי drawable שונים לכל מופע שלPlayerView
, במקום שינויים גלובליים (#1200). - פתרון לבעיה בפלטפורמה שגורמת למתיחה או לחיתוך של סרטון כשמשתמשים ב-
SurfaceView
בתוך ComposeAndroidView
ב-API 34 (#1237).
- הוספת תמיכה בהצגת תמונות ל-
- הורדות:
- מוודאים ש-
DownloadHelper
לא גורם לדליפה של מופעיRenderer
שלא פורסמו, מה שעלול לגרום בסופו של דבר לקריסת האפליקציה עםIllegalStateException: Too many receivers, total of 1000, registered for pid
(מספר 1224).
- מוודאים ש-
- תוסף Cronet:
- תיקון של
SocketTimeoutException
ב-CronetDataSource
. בגרסאות מסוימות של Cronet, הבקשה שמועברת על ידי הקריאה החוזרת לא תמיד זהה. הבעיה הזו גורמת לכך שהקריאה החוזרת לא מושלמת והבקשה פגה (https://issuetracker.google.com/328442628).
- תיקון של
- תוסף HLS:
- תוקן באג שבו דגימות EMSG בהמתנה שחיכו לנקודת אי-רציפות הועברו ב-
HlsSampleStreamWrapper
עם היסט שגוי שגרם ל-IndexOutOfBoundsException
או ל-IllegalArgumentException
(#1002). - תוקן באג שבו פלייליסטים לא ראשיים נטענים מחדש בשידורים בפרוטוקול LL-HLS (#1240).
- נפתרה בעיה שבה הפעלת CMCD עבור HLS עם פלחי אתחול הניבה
Source Error
ו-IllegalArgumentException
. - תוקן באג שגרם לכך שפלייליסטים שמופעלים ולא מוגדרים כראשיים לא רעננו במהלך הפעלה בשידור חי (#1240).
- תוקן באג שבו הפעלת CMCD לשידורים חיים ב-HLS גורמת לבעיה
ArrayIndexOutOfBoundsException
(#1395).
- תוקן באג שבו דגימות EMSG בהמתנה שחיכו לנקודת אי-רציפות הועברו ב-
- תוסף DASH:
- תוסף Cast:
- תוקן באג שהמיר את שם האלבום של
MediaQueueItem
לאומן בפריט המדיה Media3 (#1255).
- תוקן באג שהמיר את שם האלבום של
- כלי בדיקה:
- הטמעה של
onInit()
ו-onRelease()
ב-FakeRenderer
. - שינוי
TestPlayerRunHelper.runUntil()/playUntil()
שיטות כך שיכשלו בשגיאות לא קריטיות (למשל, אלה שמדווחות ל-AnalyticsListener.onVideoCodecError()
). אפשר להשתמש בשרשרת השיטות החדשהTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
כדי להשבית את ההתנהגות הזו.
- הטמעה של
- אפליקציית הדגמה:
- משתמשים ב-
DefaultPreloadManager
באפליקציית ההדגמה של סרטונים קצרים. - אפשר להגדיר מצב חזרה עם ארגומנטים של
Intent
משורת הפקודה (מס' 1266). - אם המכשיר תומך ב-
HttpEngineDataSource
, אפשר להשתמש בו כHttpDataSource
.
- משתמשים ב-
- הסרת סמלים שהוצאו משימוש:
- הסרה של
CronetDataSourceFactory
. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory
. - צריך להסיר חלק מהבנאים
DataSpec
. במקום זאת, אתם צריכים להשתמש ב-DataSpec.Builder
. - הסרת אמצעי התשלום
setContentTypePredicate(Predicate)
מהחשבונותDefaultHttpDataSource
,OkHttpDataSource
וCronetDataSource
. במקום זאת, צריך להשתמש בשיטה המקבילה בכלXXXDataSource.Factory
. - מסירים את הקונסטרקטורים של
OkHttpDataSource
ואתOkHttpDataSourceFactory
. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory
. - הסרה של
PlayerMessage.setHandler(Handler)
. במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper)
. - הסרת השדה
Timeline.Window.isLive
. במקום זאת, משתמשים בשיטהisLive()
. - הסרת בנאי
DefaultHttpDataSource
. במקום זאת, אתם צריכים להשתמש ב-DefaultHttpDataSource.Factory
. - הסרה של
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. במקום זאת, אתם צריכים להשתמש ב-DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
. - הסרה של
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. במקום זאת, אתם צריכים להשתמש ב-MediaCodecInfo.canReuseCodec(Format, Format)
. - הסרת השיטות
DrmSessionManager.DUMMY
ו-getDummyDrmSessionManager()
. במקום זאת, אתם צריכים להשתמש ב-DrmSessionManager.DRM_UNSUPPORTED
. - הסרה של
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
. במקום זאת, משתמשים בעומסים העודפים שמקבליםDecoderReuseEvaluation
. - הסרה של
RendererSupport.FormatSupport
IntDef ושל הקבועיםFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
. במקום זאת, צריך להשתמש ב-IntDef ובקבועים המקבילים ב-androidx.media3.common.C
(למשל,C.FORMAT_HANDLED
). - הסרת הממשק
Bundleable
. זה כולל הסרה של כל השדות הקבועיםBundleable.Creator<Foo> CREATOR
. במקום זאת, המתקשרים צריכים להשתמש בשיטותBundle toBundle()
ו-static Foo fromBundle(Bundle)
בכל סוג.
- הסרה של
גרסה 1.4.0-rc01
10 ביולי 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-beta01
26 ביוני 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-alpha02
7 ביוני 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.4.0-alpha01
17 באפריל 2024
משתמשים בגרסה יציבה 1.4.0.
גרסה 1.3.0
גרסה 1.3.1
11 באפריל 2024
androidx.media3:media3-*:1.3.1
משוחרר.
גרסה 1.3.1 מכילה את ההתחייבויות האלה.
- ספרייה משותפת:
- מוסיפים
Format.labels
כדי לאפשר תוויות חלופיות או תוויות בשפות מקומיות.
- מוסיפים
- ExoPlayer:
- תוקנה בעיה שבה לא ניתן לשמור את הזרמים כשמבצעים טעינה מראש של
PreloadMediaPeriod
שוב. - במהלך בחירה מחדש של רצועה, צריך להחיל את
TrackSelectionResult
המתאים לתקופת ההפעלה. - התחלת רכיבי עיבוד עם הפעלה מוקדמת רק אחרי קידום תקופת ההפעלה כשעוברים בין פריטי מדיה (#1017).
- הוספת סוג החזרה חסר לכלל proguard
-keepclasseswithmembers
עבורDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- תוקנה בעיה שבה לא ניתן לשמור את הזרמים כשמבצעים טעינה מראש של
- Transformer:
- הוספת פתרון עקיף לחריג שנוצר בגלל ש-
MediaMuxer
לא תומך בחותמות זמן שליליות של הצגה לפני API 30.
- הוספת פתרון עקיף לחריג שנוצר בגלל ש-
- בחירת טראק:
-
DefaultTrackSelector
: עדיפות למסלולי וידאו עם קצב פריימים 'סביר' (>=10fps) על פני מסלולים עם קצב פריימים נמוך יותר או לא מוגדר. כך נמנע מצב שבו הנגן בוחר את רצועת הווידאו 'האמיתית' בקובצי MP4 שחולצו מתמונות נעות, שיכולים להכיל שתי רצועות HEVC, שאחת מהן היא ברזולוציה גבוהה יותר אבל מכילה מספר קטן מאוד של פריימים (#1051).
-
- מחולצי נתונים:
- תוקנה בעיה שבה לא בוצע דילוג על ריווח כשקוראים נתחים בגודל אי-זוגי מקובצי WAV (#1117).
- MP3: מאכלסים את
Format.averageBitrate
מתוך מסגרות של מטא-נתונים כמוXING
ו-VBRI
. - MPEG-TS: שינוי שנועד להבטיח שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909). הסיבה לכך היא שהשינוי גורם לבעיות חדשות בזרמי HLS של I-frame בלבד (מספר 1150) ובזרמי HLS של H.262 (מספר 1126).
- אודיו:
- מתן הרשאה לשחזור של רכיב ה-Renderer על ידי השבתת ההעברה אם לא ניתן לאתחל את טראק האודיו במצב העברה.
- סרטון:
- נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE, Chromecast עם Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון סטרימינג של H265 ב-60fps כלא נתמך
- נוסף פתרון עקיף שמבטיח שהפריים הראשון תמיד יעבור רינדור בזמן המנהור, גם אם המכשיר לא עושה זאת באופן אוטומטי כנדרש על ידי ה-API (#1169). (#966).
- תוקנה בעיה שבה טיפול בפרטי צבע HDR גורם להתנהגות לא תקינה של קודק ומונע מעברים בין פורמטים של רצועות וידאו SDR (מס' 1158).
- טקסט:
- WebVTT: מניעה של יצירת מופעים נוספים של
CuesWithTiming
מ-WebvttParser.parse
על ידי רמזים עוקבים ישירות (#1177).
- WebVTT: מניעה של יצירת מופעים נוספים של
- DRM:
- פתרון לבעיה
NoSuchMethodError
שיכולה להתרחש ב-MediaDrm
במקום ב-ResourceBusyException
או ב-NotProvisionedException
בחלק ממכשירי Android 14 (#1145).
- פתרון לבעיה
- ההשפעה:
- שיפור במיפוי הטונים מ-PQ ל-SDR על ידי המרת מרחבי צבעים.
- סשן:
- UI:
- אם אי אפשר לזהות שם תצוגה של
Locale
, המערכת תחזור לשם השפה של טראק האודיו (#988).
- אם אי אפשר לזהות שם תצוגה של
- תוסף DASH:
- מאכלסים את כל רכיבי
Label
מהמניפסט ב-Format.labels
(#1054).
- מאכלסים את כל רכיבי
- תוסף RTSP:
- דילוג על ערכים ריקים של פרטי סשן (תגי i) בניתוח SDP (#1087).
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- ההשבתה של תוסף ה-MIDI כהסתמכות מקומית מוגדרת כברירת מחדל כי צריך להגדיר מאגר Maven נוסף. משתמשים שצריכים את המודול הזה כתלות מקומית יכולים להפעיל אותו מחדש.
גרסה 1.3.0
6 במרץ 2024
androidx.media3:media3-*:1.3.0
משוחרר.
גרסה 1.3.0 מכילה את ההתחייבויות האלה.
- ספרייה משותפת:
- הטמעת תמיכה בכתובות URI של משאבים מסוג
android.resource://package/[type/]name
raw כאשרpackage
שונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו תמיד הייתה מתועדת כפועלת, אבל עד עכשיו היא לא הוטמעה בצורה נכונה. - מבצעים נורמליזציה של סוגי MIME שמוגדרים על ידי קוד האפליקציה או נקראים ממדיה, כך שיהיו באותיות קטנות בלבד.
- הגדרת מודעות עם
MediaItem
מלא במקוםUri
יחיד ב-AdPlaybackState
. - הגדלת הערך של
minSdk
ל-19 (Android KitKat). השינוי הזה תואם לכל שאר הספריות של AndroidX, והוא נדרש כדי שנוכל לשדרג לגרסאות האחרונות של התלות שלנו ב-AndroidX. - מאכלסים את שני השדות
artworkUri
ו-artworkData
ב-MediaMetadata.Builder.populate(MediaMetadata)
אם לפחות אחד מהם לא מכיל ערך null (#964).
- הטמעת תמיכה בכתובות URI של משאבים מסוג
- ExoPlayer:
- מוסיפים את
PreloadMediaSource
ו-PreloadMediaPeriod
שמאפשרים לאפליקציות לטעון מראש מקור מדיה של תוכן במיקום התחלה ספציפי לפני ההפעלה. PreloadMediaSource
דואג להכין את מקור המדיה של התוכן לקבלתTimeline
, להכין את התקופה ולשמור אותה במטמון במיקום ההתחלתי שצוין, לבחור רצועות ולטעון את נתוני המדיה לתקופה. האפליקציות שולטות בהתקדמות הטעינה מראש באמצעות הטמעה שלPreloadMediaSource.PreloadControl
ומגדירות את המקור שנטען מראש בנגן להפעלה. - הוספת
ExoPlayer.setImageOutput
שמאפשרת לאפליקציות להגדיר אתImageRenderer.ImageOutput
. DefaultRenderersFactory
מספק עכשיוImageRenderer
לנגן כברירת מחדל עםImageOutput
ו-ImageDecoder.Factory.DEFAULT
שהערכים שלהם הם null.- פליטת אירוע
Player.Listener.onPositionDiscontinuity
כשמדלגים על השתקה (#765). - נוספה תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את האפשרות הזו באמצעות
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - תמיכה במקורות מדיה דינמיים באמצעות
PreloadMediaSource
. - מטמיעים את
HttpEngineDataSource
, שהואHttpDataSource
באמצעות ה-API של HttpEngine. - מניעת יצירת מחלקות משנה
CompositeSequenceableLoader
. הרכיב הזה היה ניתן להרחבה בעבר, אבל אף פעם לא נוצר ממנו מחלקת משנה בספרייה. אפשר לבצע התאמות אישיות על ידי עטיפת מופע באמצעות תבנית מעטפת ויישום שלCompositeSequenceableLoaderFactory
מותאם אישית. - תוקנה בעיה שבה חזרה על אותה שעה גורמת לניקוי המטא-נתונים של הפריט (#1007).
- משנים את השם של שיטות
experimentalSetSubtitleParserFactory
ב-BundledChunkExtractor.Factory
וב-DefaultHlsExtractorFactory
ל-setSubtitleParserFactory
ואוסרים על העברתnull
. משתמשים בשיטות החדשותexperimentalParseSubtitlesDuringExtraction(boolean)
כדי לשלוט בהתנהגות הניתוח. - הוספת תמיכה בהתאמה אישית של
SubtitleParser.Factory
שמשמש במהלך החילוץ. אפשר לעשות זאת באמצעותMediaSource.Factory.setSubtitleParserFactory()
. - הוספת קידומת מקור לכל השדות
Format.id
שנוצרו מ-MergingMediaSource
. כך אפשר לזהות איזה מקור הפיק אתFormat
(מס' 883). - תיקנו את הביטוי הרגולרי שמשמש לאימות שמות של מפתחות מותאמים אישית של נתוני Common Media Client (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 של
- טקסט:
- תוקן תהליך הסריאליזציה של רמזים של מפת סיביות כדי לפתור את השגיאה
Tried to marshall a Parcel that contained Binder objects
כשמשתמשים ב-DefaultExtractorsFactory.setTextTrackTranscodingEnabled
(מספר 836). - CEA-708: התעלמות מהערך
rowLock
. במפרט CEA-708-E S-2023 מצוין שצריך להניח שגםrowLock
וגםcolumnLock
הם true, ללא קשר לערכים שמופיעים בסטרימינג (התמיכה ב-columnLock
לא מיושמת, ולכן למעשה תמיד מניחים שהוא false).
- תוקן תהליך הסריאליזציה של רמזים של מפת סיביות כדי לפתור את השגיאה
- תמונה:
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות ברשת נחתכות, ותמונות ממוזערות בודדות מסופקות ל-
ImageOutput
קרוב לזמני ההצגה שלהן.
- הוספת תמיכה בתמונות ממוזערות של DASH. התמונות ברשת נחתכות, ותמונות ממוזערות בודדות מסופקות ל-
- DRM:
- ההגדרה שמוגדרת כברירת מחדל היא הפעלה מיידית של דוגמאות לא מוצפנות של 'הובלה ברורה' בתוכן DRM, גם אם המפתחות של הדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדוגמאות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
אוDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- ההגדרה שמוגדרת כברירת מחדל היא הפעלה מיידית של דוגמאות לא מוצפנות של 'הובלה ברורה' בתוכן DRM, גם אם המפתחות של הדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדוגמאות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות
- IMA extension:
- תוקנה בעיה שגרמה לכך שלא ניתן היה להפעיל מודעות בפורמטים DASH ו-HLS ללא סיומת הקובץ המתאימה.
- סשן:
- השבתת זיהוי של לחיצה כפולה באפליקציות לטלוויזיה (#962).
- תוקנה הבעיה שבה
MediaItem.RequestMetadata
עם תוספים לא ריקים בלבד לא מועבר בין בקרי מדיה לסשנים. - מוסיפים קונסטרוקטור ל-
MediaLibrarySession.Builder
שמקבל רקContext
במקוםMediaLibraryService
.
- תוסף HLS:
- הפחתת רמת החשיפה של
HlsMediaPeriod
ל-package-private. לא מומלץ להסתמך על הסוג הזה ישירות מחוץ לחבילת HLS. - שיפור היעילות של מעבר לתחילת קטע (#1031).
- הפחתת רמת החשיפה של
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- MIDI decoder: Ignore SysEx event messages (#710).
- כלי בדיקה:
- לא להשהות את ההפעלה ב-
TestPlayerRunHelper.playUntilPosition
. הבדיקה שומרת על מצב ההפעלה, אבל היא מושהית עד שהבדיקה תוכל להוסיף טענות ופעולות נוספות.
- לא להשהות את ההפעלה ב-
- אפליקציית הדגמה:
- מוסיפים מודול הדגמה של תוכן קצר כדי להדגים את השימוש ב-
PreloadMediaSource
בתרחיש השימוש בתוכן קצר.
- מוסיפים מודול הדגמה של תוכן קצר כדי להדגים את השימוש ב-
גרסה 1.3.0-rc01
22 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-beta01
7 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-alpha01
15 בינואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.2.0
גרסה 1.2.1
9 בינואר 2024
- ExoPlayer:
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
LiveConfiguration.min/maxOffset
ממשיכים לשנות את ההיסט בחזרה ל-min/maxOffset
. - תוקנה בעיה שבה פריסות הערוצים של OPUS ו-VORBIS היו שגויות עבור 3, 5, 6, 7 ו-8 ערוצים (#8396).
- נפתרה בעיה שגרמה לכך שכשבוחרים רצועות אחרי מעבר למיקום אפס בשידור חי, השידור מתחיל במיקום ברירת המחדל שלו (#9347).
- תוקנה הבעיה שבה מופעים חדשים של
CmcdData.Factory
קיבלו ערכים שליליים שלbufferedDurationUs
ממקורות של נתחי נתונים, וכתוצאה מכך התקבלה שגיאהIllegalArgumentException
(מס' 888).
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
- Transformer:
- פתרון לבעיה שבה המקודד נכשל בזמן ההגדרה בגלל הגדרה של קצב הפעלה גבוה.
- מחולצי נתונים:
- אודיו:
- תוקן הטיפול ב-EOS עבור
SilenceSkippingAudioProcessor
כשמתבצעות כמה קריאות (#712).
- תוקן הטיפול ב-EOS עבור
- סרטון:
- נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE, Chromecast with Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג ב-AVC בקצב של 60fps כסטרימינג שלא נתמך (#693).
- מטא-נתונים:
- תוקן באג שבו
MediaMetadata
אוכלס רק מתגובות Vorbis עם מפתחות באותיות רישיות (#876). - הבעיה הזו מתרחשת ב-
OutOfMemoryError
כשמנתחים פריימים גדולים מאוד של ID3, כלומר אפשר להמשיך בהפעלה בלי פרטי התג במקום שההפעלה תיכשל לחלוטין.
- תוקן באג שבו
- DRM:
- הארכת הפתרון העקיף לבעיה של כתובת URL של רישיון ClearKey
https://default.url
שנוצרת באופן שגוי ל-API 33 ומעלה (בעבר הפתרון העקיף חל רק על API 33 בדיוק) (#837). - תיקון
ERROR_DRM_SESSION_NOT_OPENED
כשעוברים מתוכן מוצפן לתוכן לא מוצפן בלי שמשטח מחובר לנגן. השגיאה נבעה משימוש שגוי במפענח מאובטח להפעלת תוכן לא מוצפן.
- הארכת הפתרון העקיף לבעיה של כתובת URL של רישיון ClearKey
- סשן:
- מציבים את המפתחות והערכים המותאמים אישית ב-
MediaMetadataCompat
עדMediaMetadata.extras
וב-MediaMetadata.extras
עדMediaMetadataCompat
(#756, #802). - תיקון שידור
notifyChildrenChanged
לבקרי משחקים מדור קודם (#644). - תוקן באג שבו הגדרת זמן שלילי לטיימר
setWhen
מושבת של ההתראה גרמה לקריסה במכשירים מסוימים (#903). - תוקנה בעיה
IllegalStateException
שבה לא הושלם החיבור של אמצעי הבקרה של התראות המדיה כשמתבקש עדכון ההתראה הראשון (#917).
- מציבים את המפתחות והערכים המותאמים אישית ב-
- UI:
- תוסף DASH:
- ניתוח המחרוזת f800 כספירת ערוצים של 5 עבור Dolby במניפסט DASH (#688).
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- תוסף Cast:
- הוסרה אפשרות ליצור
Timeline
כדי למנוע קריסה של האפליקציה בזמן טעינה, אם טעינת המדיה נכשלת במכשיר Cast (#708).
- הוסרה אפשרות ליצור
גרסה 1.2.0
15 בנובמבר 2023
- ספרייה משותפת:
- מוסיפים פרמטר
@Nullable Throwable
לשיטות בממשקLog.Logger
. הפרמטרmessage
בשיטות האלה לא מכיל יותר מידע עלThrowable
שמועבר לשיטותLog.{d,i,w,e}()
, ולכן אם רוצים, צריך להוסיף את המידע הזה באופן ידני בהטמעות (אפשר להשתמש ב-Logger.appendThrowableString(String, Throwable)
). - תוקנה בעיית תאימות ל-Kotlin שבה פרמטרים של סוגים גנריים שניתנים לאיפוס וסוגים של רכיבי מערך שניתנים לאיפוס לא מזוהים כניתנים לאיפוס. דוגמאות הן פרמטרים של שיטות
TrackSelectorResult
ו-SimpleDecoder
(מס' 6792). - שינוי התנהגות ברירת המחדל של ממשק המשתמש וההתראות ב-
Util.shouldShowPlayButton
כדי להציג לחצן 'הפעלה' בזמן שההפעלה מושהית באופן זמני (למשל, בגלל אובדן זמני של מיקוד האודיו). אפשר לשמור על ההתנהגות הקודמת באמצעותPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
אוMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(מס' 11213). - שדרוג
androidx.annotation:annotation-experimental
ל-1.3.1
כדי לתקן את https://issuetracker.google.com/251172715. - מעבירים את
ExoPlayer.setAudioAttributes
לממשקPlayer
.
- מוסיפים פרמטר
- ExoPlayer:
- תוקנו בעיות בהזזה בשידורי AC4 שנגרמו בגלל זיהוי לא נכון של דגימות של פענוח בלבד (#11000).
- הוספנו אפשרות להשבית את ההפעלה במכשירי פלט אודיו לא מתאימים (למשל, הרמקול המובנה במכשירי Wear OS) כשהתכונה הזו מופעלת דרך
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. הסיבה לביטול ההפעלה תתעדכן ל-Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
אם תתבצע פעולת הפעלה כשאין פלט אודיו מתאים, או אם כל הפלטים המתאימים ינותקו במהלך ההפעלה. סיבת ההשבתה תוסר כשמחברים פלט מתאים. - מוסיפים את התגים
MediaSource.canUpdateMediaItem
ו-MediaSource.updateMediaItem
כדי לאשר עדכונים שלMediaItem
אחרי היצירה דרךPlayer.replaceMediaItem(s)
. - אפשר לעדכן את כל המחלקות
MediaSource
שסופקו על ידי הספרייהMediaItem
באמצעות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)
שמאחזר את רמת התמיכה בהעברה לשרת שהיעד יכול לספק לפורמט באמצעותDefaultAudioOffloadSupportProvider
. הפונקציה מחזירה אתAudioOffloadSupport
החדש שמכיל אתisFormatSupported
,isGaplessSupported
ו-isSpeedChangeSupported
. - מוסיפים
AudioSink.setOffloadMode()
שדרכו מוגדרת ההגדרה של העברת העומס למעבד בקלט האודיו. ברירת המחדל היא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 gapless במהלך הפעלת העברה.
- מתן אפשרות לשחזור של רכיב ה-Renderer על ידי השבתת ההעברה אם היא נכשלה בכתיבה הראשונה (#627).
- הפעלת תזמון העברה כברירת מחדל להפעלה של תוכן שהועבר במצב אודיו בלבד.
- מוחקים את
ExoPlayer.experimentalSetOffloadSchedulingEnabled
ואתAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - השם של
onExperimentalSleepingForOffloadChanged
השתנה ל-onSleepingForOffloadChanged
ושלonExperimentalOffloadedPlayback
ל-onOffloadedPlayback
. - העברת ממשקי
TrackSelectionParameters
והגדרות שקשורים למצב העברת אודיו ל-offload אל מחלקה פנימיתAudioOffloadPreferences
. - הוספת קריאות חוזרות (callback) של
onAudioTrackInitialized
ו-onAudioTrackReleased
אלAnalyticsListener
, אלAudioRendererEventListener
ואלAudioSink.Listener
. - תיקון בעיה של חוסר נתונים בזיכרון המטמון של אודיו ב-DTS Express (#650).
- תוקן באג שבו בדיקת היכולות של E-AC3-JOC מחזירה את השגיאה
IllegalArgumentException
(#677).
- הוספנו תמיכה ב-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>)
queuing bitmap input by timestamp. - משנים את
VideoFrameProcessor.registerInputStream()
כך שלא יחסום את התהליך. באפליקציות צריך להטמיע אתVideoFrameProcessor.Listener#onInputStreamRegistered()
. - הפרמטרים
frameRate
ו-durationUs
שלVideoFrameProcessor.queueInputBitmap
השתנו ל-TimestampIterator
.
- הוספה של
- IMA extension:
- תוקנה באג שבו שידור חי בפורמט DASH עם כמה תקופות שלא מופיע כפריט הראשון בפלייליסט יכול להחזיר חריגה (#571).
- צריך להפעיל את StreamManager לפני שמתקשרים אל
AdsLoader.destroy()
- העלאת גרסת IMA SDK ל-3.31.0.
- סשן:
- מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך
FOREGROUND_SERVICE_IMMEDIATE
ב-DefaultMediaNotificationProvider
(#167). - כדי להימנע מבעיות ב-API שהוצא משימוש במכשירי Samsung, צריך להשתמש רק ב-
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
מעל API 31 (#167). - משתמשים בבקר של התראות המדיה כפרוקסי כדי להגדיר פקודות זמינות ופריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
- המרת אירועים של לחצני מדיה שמתקבלים על ידי
MediaSessionService.onStartCommand()
ב-Media3 במקום לנתב אותם לסשן של הפלטפורמה ובחזרה ל-Media3. כך, בקר השיחות הוא תמיד בקר ההתראות על מדיה, ואפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות. - תוקן באג שגרם לכך ש-
MediaController.getCurrentPosition()
לא התקדם כשחיברו אותו ל-MediaSessionCompat
מדור קודם. - מוסיפים את
MediaLibrarySession.getSubscribedControllers(mediaId)
לנוחותכם. - מחליפים את
MediaLibrarySession.Callback.onSubscribe()
כדי להצהיר על הזמינות של מזהה ההורה שהבקר רשום אליו. אם הפעולה מצליחה, המינוי מתקבל והפונקציהnotifyChildrenChanged()
נקראת באופן מיידי כדי לעדכן את הדפדפן (#561). - הוספת מודול הדגמה של סשן ל-Automotive OS והפעלת הדגמה של סשן ל-Android Auto.
- אל תגדירו את התור של סשן ה-framework אם
COMMAND_GET_TIMELINE
לא זמין לבקר של התראת המדיה. כש-Android Auto משמש כבקר לקוח שקורא מהסשן של המסגרת, התוצאה היא שכפתורqueue
בממשק המשתמש של Android Auto לא מוצג (מס' 339). - להשתמש ב-
DataSourceBitmapLoader
כברירת מחדל במקום ב-SimpleBitmapLoader
(מס' 271, מס' 327). - הוספה של
MediaSession.Callback.onMediaButtonEvent(Intent)
שמאפשר לאפליקציות לבטל את הטיפול באירועים של לחצני המדיה שמוגדר כברירת מחדל.
- מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך
- UI:
- הוספת הטמעה של
Player.Listener
למכשירי Wear OS שמטפלת בהשבתת ההפעלה בגללPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
על ידי הפעלת תיבת דו-שיח במערכת שמאפשרת למשתמש לחבר פלט שמע מתאים (למשל אוזניות Bluetooth). ההאזנה תתחדש אוטומטית אם מכשיר מתאים יחובר תוך פרק זמן קצוב שניתן להגדרה (ברירת המחדל היא 5 דקות).
- הוספת הטמעה של
- הורדות:
- הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור
DownloadService
לצורך תאימות ל-Android 14. במהלך השימוש בשירות הזה, האפליקציה צריכה גם להוסיף אתdataSync
כ-foregroundServiceType
במניפסט, ולהוסיף את ההרשאהFOREGROUND_SERVICE_DATA_SYNC
(#11239).
- הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור
- תוסף HLS:
- רענון של פלייליסט HLS לשידור חי במרווח זמן שמחושב לפי שעת ההתחלה של הטעינה האחרונה ולא לפי שעת הסיום של הטעינה האחרונה (#663).
- תוסף DASH:
- אפשר להשתמש בכמה מזהים זהים של DASH בכתובת URL של תבנית פלח.
- נוספה תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. הגרסה הזו כוללת תמיכה טובה יותר במיזוג של כתוביות חופפות, כולל פתרון של הבהובים במעבר בין מקטעי כתוביות. אפשר להפעיל את האפשרות הזו באמצעות
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(מספר 288).
- תוסף RTSP:
- תיקון מצב מירוץ שעלול לגרום ל-
IndexOutOfBoundsException
כשמתבצעת חזרה ל-TCP, או להשהיית ההפעלה במצבים מסוימים. - בדיקת המצב בהגדרת RTSP כשמוחזר מצב הטעינה של
RtspMediaPeriod
(#577). - המערכת מתעלמת משיטות מותאמות אישית של בקשות Rtsp בתגובה של הכותרת הציבורית של אפשרויות (#613).
- שימוש בערך הזמן הקצוב לתגובה של הגדרת RTSP במרווח הזמן של שליחת בקשות RTSP Options של keep-alive (#662).
- תיקון מצב מירוץ שעלול לגרום ל-
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- שחרור מודול מפענח ה-MIDI, שמספק תמיכה בהשמעה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסינתזת אודיו.
- מוסיפים
DecoderOutputBuffer.shouldBeSkipped
כדי לסמן ישירות מאגרי פלט שלא צריך להציג. האפשרות הזו עדיפה עלC.BUFFER_FLAG_DECODE_ONLY
, שתוצא משימוש. - מוסיפים את
Decoder.setOutputStartTimeUs
ואתSimpleDecoder.isAtLeastOutputStartTimeUs
כדי לאפשר למפענחים להשמיט דגימות של פענוח בלבד לפני שעת ההתחלה. מומלץ להשתמש בשיטה הזו במקום בשיטהBuffer.isDecodeOnly
, שתצא משימוש. - תיקון באג בפרסום ארטיפקט של פענוח MIDI במאגר Maven. שם הארטיפקט שונה ל-
media3-exoplayer-midi
(מס' 734).
- תוסף Leanback:
- תוקן באג שבו השבתה של משטח עלולה לגרום לשגיאה
ArithmeticException
בקוד Leanback (מס' 617).
- תוקן באג שבו השבתה של משטח עלולה לגרום לשגיאה
- כלי בדיקה:
- התאמה של
TestExoPlayerBuilder
ו-FakeClock
לבדיקות ממשק משתמש של Espresso ולבדיקות ממשק משתמש של Compose. תוקן באג שגרם לכך שההפעלה התקדמה באופן לא דטרמיניסטי במהלך אינטראקציות עם תצוגת Espresso או Compose.
- התאמה של
- הסרת סמלים שהוצאו משימוש:
- הסרה של
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
ושלTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. במקום זאת, צריך להשתמש ב-Composition.Builder.setHdrMode(int)
ולהעביר אתComposition
אלTransformer.start(Composition, String)
. - מסירים את השיטה
DownloadNotificationHelper.buildProgressNotification
שהיא הוצאה משימוש, ומשתמשים בשיטה שלא הוצאה משימוש שמקבלת פרמטרnotMetRequirements
במקום זאת.
- הסרה של
גרסה 1.2.0-rc01
1 בנובמבר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-beta01
19 באוקטובר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-alpha02
29 בספטמבר 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.2.0-alpha01
17 באוגוסט 2023
משתמשים בגרסה יציבה 1.2.0.
גרסה 1.1.0
גרסה 1.1.1
16 באוגוסט 2023
- ספרייה משותפת:
- הסרה של תלות
multidex
שנוספה בטעות מכל המודולים (#499).
- הסרה של תלות
- ExoPlayer:
- תוקנה בעיה ב-
PlaybackStatsListener
שבה נוצרים ערכיPlaybackStats
שגויים אחרי ניקוי הפלייליסט. - הוספת שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (CMCD): פורמט סטרימינג (sf), סוג סטרימינג (st), גרסה (v), קצב העברת נתונים עליון (tb), משך האובייקט (d), קצב העברת נתונים שנמדד (mtp) וסוג האובייקט (ot) (#8699).
- תוקנה בעיה ב-
- אודיו:
- תוקן באג שגרם לכך שהמצב
Player.getState()
לא השתנה אף פעם ל-STATE_ENDED
בזמן הפעלת קבצים קצרים מאוד (#538).
- תוקן באג שגרם לכך שהמצב
- העברת אודיו:
- צריך להוסיף לפני זרם הביטים את דפי הכותרת של מזהה Ogg ואת דפי הכותרת של התגובה להשמעת Opus שהועברה בהתאם ל-RFC 7845.
- סרטון:
- H.265/HEVC: תוקן ניתוח של פרטי תמונת עזר לטווח קצר ולטווח ארוך של SPS.
- טקסט:
- CEA-608: שינוי הלוגיקה של חיתוך רמזים כך שרק טקסט גלוי ייחשב. בעבר, כשמגבילים את אורך הרמז ל-32 תווים (מה שהיה נכון מבחינה טכנית לפי המפרט) (#11019), המערכת כללה את ההזחה ואת ההיסט של הטאב.
- IMA extension:
- העלאה של גרסת IMA SDK ל-3.30.3.
- סשן:
- מוסיפים פריסה בהתאמה אישית למצב של בקר ומספקים getter כדי לגשת אליה. כשהפריסה המותאמת אישית משתנה, מתבצעת קריאה ל-
MediaController.Listener.onCustomLayoutChanged
. אפליקציות שרוצות לשלוח פריסות מותאמות אישית שונות לבקר Media3 שונה יכולות לעשות זאת ב-MediaSession.Callback.onConnect
באמצעותAcceptedResultBuilder
כדי לוודא שהפריסה המותאמת אישית זמינה לבקר כשהחיבור מסתיים. - תוקנו מקרים שבהם
MediaLibraryServiceLegacyStub
שלח שגיאה אלResult
שלא תמך בכך, מה שיצרUnsupportedOperationException
(מס' 78). - תוקנה הדרך שבה
PlayerWrapper
יוצרVolumeProviderCompat
על ידי קביעתvolumeControlType
באמצעות פקודות מדור קודם (COMMAND_ADJUST_DEVICE_VOLUME
ו-COMMAND_SET_DEVICE_VOLUME
) ופקודות חדשות (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
ו-COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- מוסיפים פריסה בהתאמה אישית למצב של בקר ומספקים 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
והוצאה משימוש של בנאי קיים. - מוסיפים
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
שנשלחים על ידי ה-dispatcher. - שינוי השם של
ExoTrackSelection.blacklist
ל-excludeTrack
ושלisBlacklisted
ל-isTrackExcluded
. - תיקון התנהגות לא עקבית בין
ExoPlayer.setMediaItem(s)
לביןaddMediaItem(s)
כשקוראים להן בפלייליסט ריק.
- אפשר לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת. משתמשים ב
- Transformer:
- הסרה של
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. במקום זאת, צריך להשתמש ב-ExoPlayerAssetLoader.Factory(MediaSource.Factory)
וב-Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
. - הסרה של
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - תוקן באג שגרם לכך שהטרנספורמציה נתקעה (מה שהוביל לפסק זמן של המרבב) אם סוף הווידאו בסטרימינג סומן ברגע שפריים קלט המתין לעיבוד.
- כדי להרחיב את התמיכה, אפשר להשתמש ב-
MediaCodecList
כדי לשלוח שאילתות לגבי רכיבי codec במקום להשתמש בכלי השירותfindDecoder/EncoderForFormat
. - הסרת ההגדרה של B-frame ב-
DefaultEncoderFactory
כי היא לא פועלת בחלק מהמכשירים.
- הסרה של
- בחירת טראק:
- הוספה
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
מושבתת כברירת מחדל. כשהאפשרות הזו מופעלת, התגDefaultTrackSelector
יפעיל בחירה חדשה של רצועה כשהיכולות של רכיב ה-Renderer ישתנו.
- הוספה
- מחולצי נתונים:
- אודיו:
- תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל ו
AudioProcessors
פעילים, למשל בחיתוך ללא הפסקה (#10847). - העברת נתוני Opus למארזים של Ogg בהפעלות ישירות (העברה).
- אפשר לחשב את המיקום הנוכחי במהלך השינה באמצעות תזמון העברה.
- מוסיפים את
Renderer.release()
ו-AudioSink.release()
כדי לשחרר את המשאבים בסוף מחזור החיים של השחקן. - האזנה לשינויים ביכולות האודיו ב-
DefaultAudioSink
. מוסיפים פרמטר חובהcontext
לקונסטרוקטור שלDefaultAudioSink
, שבאמצעותוDefaultAudioSink
יירשם כמאזין ל-AudioCapabilitiesReceiver
ויעדכן את המאפייןaudioCapabilities
שלו כשמתקבל עדכון לגבי שינוי ביכולות. - הפצת שינויים ביכולות האודיו באמצעות אירוע חדש
onAudioCapabilitiesChanged
בממשקAudioSink.Listener
וממשק חדשRendererCapabilities.Listener
שמפעיל אירועיםonRendererCapabilitiesChanged
. - מוסיפים
ChannelMixingAudioProcessor
כדי להחיל שינוי גודל או מיקס על ערוצי אודיו. - הוספת ערך int חדש
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
אלDecoderDiscardReasons
כדי לבטל את קידוד האודיו כשמצב מעקף אפשרי אחרי שינוי יכולות האודיו. - נוספה תמיכה בהפעלה ישירה של DTS Express ו-DTS:X (#335).
- תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל ו
- סרטון:
- כשמעבד התצוגה מושבת, דוח
MediaCodecVideoRenderer
צריך להחזירVideoSize
עם רוחב וגובה של 0. Player.Listener.onVideoSizeChanged
נקרא בהתאם כש-Player.getVideoSize()
משתנה. בעקבות השינוי הזה, הגודל של הווידאו ב-ExoPlayer עםMediaCodecVideoRenderer
הוא 0 ברוחב ובגובה אםPlayer.getCurrentTracks
לא תומך בווידאו, או אם הגודל של טראק הווידאו הנתמך עדיין לא נקבע.
- כשמעבד התצוגה מושבת, דוח
- DRM:
- צריך לצמצם את רמת החשיפה של כמה שיטות פנימיות בלבד ב-
DefaultDrmSession
שלא צפויות להיקרא מחוץ לחבילת ה-DRM:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- צריך לצמצם את רמת החשיפה של כמה שיטות פנימיות בלבד ב-
- Muxer:
- הוספה של ספריית muxer חדשה שאפשר להשתמש בה כדי ליצור קובץ מאגר תגים מסוג MP4.
- IMA extension:
- הפעלת שידורים חיים בפורמט DASH עם כמה תקופות לצורך DAI. שימו לב: ההטמעה הנוכחית עדיין לא תומכת בהזזה בשידורים חיים (#10912).
- תוקנה באג שגרם להוספה של קבוצת מודעות חדשה לשידורים חיים כי מיקום התוכן המחושב בציר זמן רציף השתנה מעט.
- סשן:
- מוסיפים את שיטת העזרה
MediaSession.getControllerForCurrentRequest
כדי לקבל מידע על בקר שקורא כרגע לשיטהPlayer
. - הוספת
androidx.media3.session.MediaButtonReceiver
כדי לאפשר לאפליקציות להטמיע חידוש של הפעלת מדיה באמצעות אירועים של לחצני מדיה שנשלחים, למשל, מאוזניות Bluetooth (#167). - הוספת הטמעה שמוגדרת כברירת מחדל ל-
MediaSession.Callback.onAddMediaItems
כדי לאפשר העברה שלMediaItems
שנדרש ל-Player
אם יש להםLocalConfiguration
(למשל, URI) (#282). - הוספת לחצני פקודה 'דילוג לקטע הקודם' ו'דילוג לקטע הבא' בתצוגת התראות מדיה קומפקטית כברירת מחדל ב-Android 12 ובגרסאות קודמות (#410).
- הוספת הטמעה שמוגדרת כברירת מחדל ל-
MediaSession.Callback.onAddMediaItems
כדי לאפשר העברה שלMediaItems
שנדרש ל-Player
אם יש להםLocalConfiguration
(למשל, URI) (#282). - הוספת לחצני פקודה 'דילוג לקטע הקודם' ו'דילוג לקטע הבא' בתצוגת התראות מדיה קומפקטית כברירת מחדל ב-Android 12 ובגרסאות קודמות (#410).
- מוסיפים את שיטת העזרה
- UI:
- מוסיפים את השיטות Util
shouldShowPlayButton
ו-handlePlayPauseButtonAction
כדי לכתוב רכיבי ממשק משתמש בהתאמה אישית עם לחצן הפעלה/השהיה.
- מוסיפים את השיטות Util
- תוסף RTSP:
- תוסף DASH:
- מסירים את ההיסט של הזמן של המדיה מהתגים
MediaLoadData.startTimeMs
ו-MediaLoadData.endTimeMs
עבור זרמי DASH מרובי תקופות. - תוקן באג שגרם לכך שהכנה מחדש של מקור מדיה של Dash בשידור חי עם כמה תקופות הניבה
IndexOutOfBoundsException
(#10838).
- מסירים את ההיסט של הזמן של המדיה מהתגים
- תוסף HLS:
- מוסיפים את
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
כדי להגדיר זמן קצוב לתהליך הטעינה להמתנה לאתחול שלTimestampAdjuster
. אם האתחול לא מסתיים לפני שהזמן הקצוב לתפוגה מסתיים, מוצגPlaybackException
כדי למנוע מצב שבו ההפעלה נתקעת ללא סוף. ערך ברירת המחדל של הזמן הקצוב לתפוגה הוא אפס (#323).
- מוסיפים את
- כלי בדיקה:
- בודקים אם סכימת ה-URI לא תלויה באותיות רישיות ב-
DataSourceContractTest
.
- בודקים אם סכימת ה-URI לא תלויה באותיות רישיות ב-
- הסרת סמלים שהוצאו משימוש:
- מסירים את ה-constructors
DefaultAudioSink
ומשתמשים במקומם ב-DefaultAudioSink.Builder
. - מסירים את
HlsMasterPlaylist
ומשתמשים ב-HlsMultivariantPlaylist
במקומה. - הסרה של
Player.stop(boolean)
. במקום זאת, צריך להשתמש ב-Player.stop()
וב-Player.clearMediaItems()
(אםreset
הואtrue
). - כדי לשפר את הביצועים, מסירים שני constructors של
SimpleCache
שהוצאו משימוש ומשתמשים ב-constructor שלא הוצא משימוש שמקבלDatabaseProvider
במקום זאת. - מסירים את ה-constructor
DefaultBandwidthMeter
ומשתמשים ב-DefaultBandwidthMeter.Builder
במקומו. - מסירים את ה-constructors
DefaultDrmSessionManager
ומשתמשים ב-DefaultDrmSessionManager.Builder
במקומם. - הסרנו שני בנאים שיצאו משימוש
HttpDataSource.InvalidResponseCodeException
ואנחנו משתמשים בבנאי שלא יצא משימוש שמקבל שדות נוספים(cause
,responseBody
) כדי לשפר את רישום השגיאות. - הסרה של
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
ו-DownloadHelper.forSmoothStreaming
, שימוש ב-DownloadHelper.forMediaItem
במקום. - מסירים את ה-constructor
DownloadService
שהוצא משימוש ומשתמשים ב-constructor שלא הוצא משימוש, שכולל את האפשרות לספק פרמטרchannelDescriptionResourceId
. - הסרה של קבועי מחרוזות שהוצאו משימוש עבור ערכות תווים (
ASCII_NAME
,UTF8_NAME
, ISO88591_NAME
, UTF16_NAME
ו-UTF16LE_NAME
), שימוש בערכות תווים של Kotlin מהחבילהkotlin.text
, ב-java.nio.charset.StandardCharsets
או ב-com.google.common.base.Charsets
במקום זאת. - מסירים את ה-constructor
WorkManagerScheduler
שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטרContext
במקום זאת. - הוסרו השיטות שהוצאו משימוש
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
ו-createSampleFormat
, ששימשו ליצירת מופע של המחלקהFormat
. במקום זאת, משתמשים ב-Format.Builder
כדי ליצור מופעים שלFormat
. - מסירים את השיטות שהוצאו משימוש:
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
, copyWithLabel
,copyWithManifestFormatInfo
, copyWithGaplessInfo
,copyWithFrameRate
, copyWithDrmInitData
, copyWithMetadata
,copyWithBitrate
ו-copyWithVideoSize
, ומשתמשים ב-Format.buildUpon()
ובשיטות setter במקום. - מסירים את
ExoPlayer.retry()
שהוצא משימוש ומשתמשים ב-prepare()
במקומו. - הוסר בנאי
DefaultTrackSelector
מיושן ללא ארגומנטים. במקומו צריך להשתמש ב-DefaultTrackSelector(Context)
. - מסירים את הבונה
OfflineLicenseHelper
שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
במקומו. - מסירים את ה-constructor
DownloadManager
שהוצא משימוש ומשתמשים ב-constructor שמקבלExecutor
במקום זאת. - מסירים את ה-constructors של
Cue
שהוצאו משימוש, ומשתמשים ב-Cue.Builder
במקומם. - מסירים את הבונה
OfflineLicenseHelper
שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
במקומו. - הסרת ארבע שיטות
AnalyticsListener
שיצאו משימוש:onDecoderEnabled
, אפשר להשתמש במקום זאת ב-onAudioEnabled
או ב-onVideoEnabled
.onDecoderInitialized
, במקומה יש להשתמש ב-onAudioDecoderInitialized
ו/או ב-onVideoDecoderInitialized
.onDecoderInputFormatChanged
, אפשר להשתמש במקום זאת ב-onAudioInputFormatChanged
ו/או ב-onVideoInputFormatChanged
.onDecoderDisabled
, אפשר להשתמש במקום זאת ב-onAudioDisabled
או ב-onVideoDisabled
.
- מסירים את
Player.Listener.onSeekProcessed
ו-AnalyticsListener.onSeekProcessed
שהוצאו משימוש, ומשתמשים ב-onPositionDiscontinuity
עםDISCONTINUITY_REASON_SEEK
במקום זאת. - מסירים את
ExoPlayer.setHandleWakeLock(boolean)
ומשתמשים ב-setWakeMode(int)
במקום. - מסירים את
DefaultLoadControl.Builder.createDefaultLoadControl()
שהוצא משימוש ומשתמשים ב-build()
במקום. - צריך להסיר את
MediaItem.PlaybackProperties
שהוצא משימוש ולהשתמש ב-MediaItem.LocalConfiguration
במקומו. השדה שיצא משימושMediaItem.playbackProperties
הוא עכשיו מסוגMediaItem.LocalConfiguration
.
- מסירים את ה-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 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.7.
הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.0.1:
- ספריית ליבה:
- מוסיפים את
Buffer.isLastSample()
כדי לציין אםBuffer
מכיל את הדגלC.BUFFER_FLAG_LAST_SAMPLE
. - תוקנה הבעיה שבה יכול להיות שהפריים האחרון לא יעבור רינדור אם הדגימה האחרונה עם <0x0A>פריים מוצאת מהתור בלי לקרוא את הדגימה של 'סוף הסטרימינג'. (#11079).
- מוסיפים את
- מחולצי נתונים:
- תוקן ניתוח של H.265 SPS בקובצי MPEG-TS על ידי שימוש חוזר בלוגיקת הניתוח שכבר נמצאת בשימוש בכלי החילוץ של RTSP ו-MP4 (#303).
- טקסט:
- SSA: הוספת תמיכה בקובצי UTF-16 אם הם מתחילים בסימן סדר בתים (#319).
- סשן:
- תוקנה בעיה שגרמה לכך ש-
MediaController
לא עדכן את הפקודות הזמינות שלו כשהוא מחובר ל-MediaSessionCompat
מדור קודם שמעדכן את הפעולות שלו. - תיקון באג שגרם לכך שהפונקציה
MediaLibraryService
לא החזירה ערך null עבור קריאה מממשק המשתמש של המערכת אלCallback.onGetLibraryRoot
עםparams.isRecent == true
ב-API 30 (#355). - תיקון דליפת זיכרון של
MediaSessionService
אוMediaLibraryService
(#346). - תוקן באג שבו עדכון משולב של
Timeline
ומיקום ב-MediaSession
עלול לגרום ל-MediaController
להחזירIllegalStateException
.
- תוקנה בעיה שגרמה לכך ש-
גרסה 1.0.1
18 באפריל 2023
androidx.media3:media3-*:1.0.1
משוחרר.
גרסה 1.0.1 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.6.
- ספריית ליבה:
- איפוס של שינוי ברירת המחדל של שידור חי כשמבצעים חיפוש למיקום ברירת המחדל (#11051).
- תוקן באג שבו זרמי דגימות ריקים במדיה עלולים לגרום להפעלה להיתקע.
- סשן:
- תוקן באג שבו פרסום של כמה פריטים זהים בתור שנוצרה על ידי
MediaSessionCompat
מדור קודם גורם לחריגה ב-MediaController
(מס' 290). - הוספת העברה חסרה של
MediaSession.broadcastCustomCommand
אלMediaControllerCompat.Callback.onSessionEvent
מדור קודם (#293). - תוקן באג שבו קריאה ל-
MediaSession.setPlayer
לא מעדכנת את הפקודות הזמינות. - תוקנה בעיה שבה מופעים של
TrackSelectionOverride
שנשלחו מ-MediaController
מתעלמים אם הם מפנים לקבוצה עםFormat.metadata
(#296). - פתרון בעיה שבה
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
צריך להיות זמין כדי לגשת למטא-נתונים דרךMediaSessionCompat
מהדור הקודם. - תוקנה בעיה שבה מופעים של
MediaSession
בשרשור ברקע גורמים לקריסות כשמשתמשים בהם ב-MediaSessionService
(מס' 318). - תוקנה בעיה שבה ספרייה הכריזה על מקלט של לחצן מדיה בלי שהאפליקציה התכוונה לכך (#314).
- תוקן באג שבו פרסום של כמה פריטים זהים בתור שנוצרה על ידי
- DASH:
- תיקון הטיפול בציר זמן של פלח ריק (#11014).
- RTSP:
- אם הגדרת RTSP עם UDP נכשלת עם שגיאת RTSP 461 UnsupportedTransport (#11069), צריך לנסות שוב עם TCP.
גרסה 1.0.0
22 במרץ 2023
androidx.media3:media3-*:1.0.0
משוחרר.
גרסה 1.0.0 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.5.
אין שינויים מאז גרסה 1.0.0-rc02.
גרסה 1.0.0-rc02
2 במרץ 2023
androidx.media3:media3-*:1.0.0-rc02
משוחרר.
גרסה 1.0.0-rc02 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.4.
- ספריית ליבה:
- הורדות:
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
SegmentDownloader
ובמחלקות משנה (#248).
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
- אודיו:
- סרטון:
- מיפוי של פורמט HEVC HDR10 אל
HEVCProfileMain10HDR10
במקום אלHEVCProfileMain10
. - נוספה דרך לעקיפת בעיה במכשיר Chromecast with Google TV וב-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג AVC ב-60fps כלא נתמך (#10898).
- תוקנו בעיות בביצועים של שחרור פריימים בהפעלת מדיה עם קצב פריימים גבוה בהרבה מקצב הרענון של המסך.
- מיפוי של פורמט HEVC HDR10 אל
- הפעלת Cast:
- תיקון של
STATE_IDLE
זמני במעבר בין פריטי מדיה (#245).
- תיקון של
- RTSP:
- Catch the IllegalArgumentException thrown in parsing of invalid RTSP Describe response messages (#10971).
- סשן:
- תוקן באג שגרם לכך שהכפתור להפעלה או להשהיה של ההתראה לא התעדכן בהתאם למצב הנגן (#192).
- IMA extension:
- תוקן באג שמנע הפעלה של סטרימינג של DAI ללא מודעות, כי האירוע הראשון (ובמקרה של סטרימינג ללא מודעות, האירוע היחיד)
LOADED
לא התקבל.
- תוקן באג שמנע הפעלה של סטרימינג של DAI ללא מודעות, כי האירוע הראשון (ובמקרה של סטרימינג ללא מודעות, האירוע היחיד)
גרסה 1.0.0-rc01
16 בפברואר 2023
androidx.media3:media3-*:1.0.0-rc01
משוחרר.
גרסה 1.0.0-rc01 כוללת את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.3.
- ספריית ליבה:
- שינוי הלוגיקה של סדר הפענוח של רכיב הרינדור כדי לשמור על ההעדפות של
MediaCodecSelector
, גם אם רכיב פענוח מדווח שהוא לא יוכל להפעיל את המדיה בצורה יעילה. לדוגמה, עם בורר ברירת המחדל, מקודד חומרה עם תמיכה פונקציונלית בלבד יעדיף על פני מקודד תוכנה שתומך באופן מלא בפורמט (#10604). - מוסיפים את
ExoPlayer.Builder.setPlaybackLooper
שמגדיר שרשור הפעלה קיים מראש למופע חדש של ExoPlayer. - אפשר לנקות את העוזרים של מנהל ההורדות (#10776).
- הוספת פרמטר ל-
BasePlayer.seekTo
כדי לציין גם את הפקודה שמשמשת לחיפוש. - שימוש בעיצוב כשמטעינים drawable ב-API 21 ומעלה (#220).
- הוספנו
ConcatenatingMediaSource2
שמאפשרת לשלב כמה פריטי מדיה בחלון אחד (#247).
- שינוי הלוגיקה של סדר הפענוח של רכיב הרינדור כדי לשמור על ההעדפות של
- מחולצי נתונים:
- מחזירים
ParserException
במקוםNullPointerException
אם חסר תיאור נדרש של דגימה (stsd) בטבלת הדגימות (stbl) כשמנתחים אטומי trak. - דילוג נכון על דוגמאות כשמבצעים חיפוש ישירות לפריים של סנכרון ב-fMP4 (#10941).
- מחזירים
- אודיו:
- משתמשים בקצב העברת הנתונים בפורמט האודיו הדחוס כדי לחשב את גודל המאגר המינימלי עבור
AudioTrack
בהשמעות ישירות (passthrough).
- משתמשים בקצב העברת הנתונים בפורמט האודיו הדחוס כדי לחשב את גודל המאגר המינימלי עבור
- טקסט:
- תיקון
TextRenderer
העברת אינדקס לא תקין (שלילי) אלSubtitle.getEventTime
אם קובץ הכתוביות לא מכיל רמזים. - SubRip: הוספנו תמיכה בקובצי UTF-16 אם הם מתחילים בסימן של סדר בתים (byte order) .
- תיקון
- מטא-נתונים:
- ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
- מוסיפים
MediaMetadata.mediaType
כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsable
כתחליף ל-MediaMetadata.folderType
. סוג התיקייה יוצא משימוש בגרסה הבאה.
- DASH:
- הוספת ניתוח מלא של קבוצות להתאמת תמונות, כולל מספר המשבצות (#3752).
- UI:
- סשן:
- הוספת abstract
SimpleBasePlayer
כדי לעזור בהטמעה של הממשקPlayer
עבור נגנים בהתאמה אישית. - הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3
SessionToken
(#171). - משתמשים ב-
onMediaMetadataChanged
כדי להפעיל עדכונים של סשן המדיה בפלטפורמה (מס' 219). - הוספת סשן המדיה כארגומנט של
getMediaButtons()
שלDefaultMediaNotificationProvider
ושימוש ברשימות שלא ניתן לשנות כדי להבהיר את העניין (#216). - נוספה
onSetMediaItems
callback listener כדי לספק אמצעים לשינוי/הגדרה של רשימתMediaItem
, אינדקס התחלה ומיקום לפי סשן לפני ההגדרה ב-Player (#156). - הימנעות מזיהוי הקשה כפולה לאירועים של לחצני מדיה שאינם Bluetooth (#233).
- שיפור של
QueueTimeline
במקרה של מצב סשן מפוקפק מדור קודם (#241).
- הוספת abstract
- מטא-נתונים:
- ניתוח של כמה ערכים מופרדים בערך null מתוך מסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
- מוסיפים
MediaMetadata.mediaType
כדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsable
כתחליף ל-MediaMetadata.folderType
. סוג התיקייה יוצא משימוש בגרסה הבאה.
- תוסף Cast:
- העלאת גרסת Cast SDK ל-21.2.0.
- IMA extension:
- כדי למנוע בעיות בשרשור, צריך להסיר את מאזין הנגן של
ImaServerSideAdInsertionMediaSource
בשרשור האפליקציה. - מוסיפים מאפיין
focusSkipButtonWhenAvailable
ל-ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
כדי לבקש התמקדות בכפתור הדילוג במכשירי טלוויזיה, ומגדירים אותו כ-true כברירת מחדל. - מוסיפים שיטה
focusSkipButton()
ל-ImaServerSideAdInsertionMediaSource.AdsLoader
כדי לבקש באופן פרוגרמטי להעביר את המיקוד ללחצן הדילוג. - העלאת גרסת IMA SDK ל-3.29.0.
- כדי למנוע בעיות בשרשור, צריך להסיר את מאזין הנגן של
- אפליקציית הדגמה:
- בקשת הרשאת התראות לגבי התראות על הורדות בזמן ריצה (#10884).
גרסה 1.0.0-beta03
22 בנובמבר 2022
androidx.media3:media3-*:1.0.0-beta03
משוחרר.
גרסה 1.0.0-beta03 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.2.
- ספריית ליבה:
- הוספנו את האפשרות
ExoPlayer.isTunnelingEnabled
כדי לבדוק אם מנהור מופעל עבור הרצועות שנבחרו כרגע (#2518). - נוסף
WrappingMediaSource
כדי לפשט את הגדרת העיטוף שלMediaSource
יחיד (#7279). - הסרת מאגר הנתונים הזמני של התמונה הקודמת לפני שההפעלה נתקעת בגלל חוסר בזיכרון הזמין.
- סגירת הבלוק Tracing doSomeWork כשהעברת העומס לכרטיס המסך מופעלת.
- תיקון בעיה במעקב אחר סשנים עם חיפושים מהירים ב-
PlaybackStatsListener
(#180). - שליחת קריאה חוזרת חסרה
onMediaItemTransition
כשמתקשרים אלseekToNext
או אלseekToPrevious
בפלייליסט עם פריט אחד (מס' 10667). - מוסיפים את
Player.getSurfaceSize
שמחזיר את הגודל של השטח שבו הסרטון מוצג. - תוקן באג שבו הסרה של מאזינים במהלך שחרור הנגן עלולה לגרום ל-
IllegalStateException
(#10758).
- הוספנו את האפשרות
- גרסת Build:
- הגדרת ערך מינימלי של
compileSdkVersion
כדי למנוע שגיאות קומפילציה (#10684). - הימנעו מפרסום חסימה כשהיא כלולה ב-build אחר של gradle.
- הגדרת ערך מינימלי של
- בחירת טראק:
- תינתן עדיפות לטראקים אחרים על פני Dolby Vision אם התצוגה לא תומכת בו. (מספר 8944).
- הורדות:
- סרטון:
- אם המסך לא תומך ב-Dolby Vision, כדאי לנסות להשתמש במפענח חלופי. (#9794).
- אודיו:
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית (מס' 10057), צריך להשתמש ב-
SingleThreadExecutor
כדי לבטל את ההקצאה של מופעיAudioTrack
. - מוסיף
AudioOffloadListener.onExperimentalOffloadedPlayback
למצב ההעברה של AudioTrack. (#134). - הופכים את
AudioTrackBufferSizeProvider
לממשק ציבורי. - מוסיפים
ExoPlayer.setPreferredAudioDevice
כדי להגדיר את מכשיר פלט האודיו המועדף (#135). - שינוי השם של
androidx.media3.exoplayer.audio.AudioProcessor
ל-androidx.media3.common.audio.AudioProcessor
. - מיפוי של אודיו עם 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל הגרסאות של Android (#10701).
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית (מס' 10057), צריך להשתמש ב-
- מטא-נתונים:
- עכשיו אפשר להגדיר את
MetadataRenderer
כך שיציג מטא-נתונים ברגע שהם זמינים. יוצרים מכונה עםMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
כדי לציין אם רכיב ה-renderer יוציא מטא-נתונים מוקדמים או מסונכרנים עם מיקום הנגן.
- עכשיו אפשר להגדיר את
- DRM:
- פתרון לבעיה בהטמעה של ClearKey ב-Android 13, שגורמת להחזרת כתובת URL של רישיון לא ריקה אבל לא תקינה.
- תיקון השגיאה
setMediaDrmSession failed: session not opened
כשעוברים בין תוכניות DRM בפלייליסט (למשל מ-Widevine ל-ClearKey).
- טקסט:
- CEA-608: מוודאים שהפקודות להחלפת שירות בשדה 2 מטופלות בצורה נכונה (#10666).
- DASH:
- ניתוח
EventStream.presentationTimeOffset
ממניפסטים (#10460).
- ניתוח
- UI:
- השימוש בביטולים הנוכחיים של הנגן כהגדרות קבועות מראש ב-
TrackSelectionDialogBuilder
(#10429).
- השימוש בביטולים הנוכחיים של הנגן כהגדרות קבועות מראש ב-
- סשן:
- חשוב לוודא שהפקודות תמיד מופעלות בסדר הנכון, גם אם חלקן דורשות פתרון אסינכרוני (#85).
- מוסיפים
DefaultMediaNotificationProvider.Builder
כדי ליצור מופעים שלDefaultMediaNotificationProvider
. הכלי יכול להגדיר את מזהה ההתראה, את מזהה ערוץ ההתראות ואת שם ערוץ ההתראות שמשמשים את הספק. בנוסף, מוסיפים את השיטהDefaultMediaNotificationProvider.setSmallIcon(int)
כדי להגדיר את הסמל הקטן של ההתראות. (#104). - מוודאים שהפקודות שנשלחו לפני
MediaController.release()
לא נפסלות (מס' 99). -
SimpleBitmapLoader
יכול לטעון מפת סיביות מ-URI שלfile://
(מס' 108). - תוקנה טענה שמונעת מ-
MediaController
לחפש מודעה בתקופה מסוימת (#122). - בסיום ההפעלה,
MediaSessionService
מופסק מהחזית ומוצגת התראה להפעלה מחדש של פריט המדיה האחרון שהופעל (#112). - אל תפעילו שירות שפועל בחזית עם Intent בהמתנה להשהיה (#167).
- הסתרה ידנית של ה'תג' שמשויך להתראה שנוצרה על ידי
DefaultNotificationProvider
ב-API 26 וב-API 27 (התג מוסתר באופן אוטומטי ב-API 28 ומעלה) (מס' 131). - תוקן באג שבו חיבור שני של Binder מ-MediaSession מדור קודם אל MediaController של Media3 גורם ל-IllegalStateExceptions (#49).
- RTSP:
- IMA:
- תוסף FFmpeg:
- נוספו דגלים חדשים שנדרשים לקישור ספריות FFmpeg ל-NDK 23.1.7779620 ומעלה (#9933).
- תוסף AV1:
- עדכון גרסת CMake כדי למנוע חוסר תאימות לגרסאות האחרונות של Android Studio (#9933).
- תוסף Cast:
- צריך להטמיע את
getDeviceInfo()
כדי לזהות אתCastPlayer
כששולטים בהפעלה באמצעותMediaController
(מס' 142).
- צריך להטמיע את
- Transformer:
- הוספת טיימר watchdog של muxer כדי לזהות מקרים שבהם יצירת דגימת פלט איטית מדי.
- הסרת סמלים שהוצאו משימוש:
- הסרה של
Transformer.Builder.setOutputMimeType(String)
. התכונה הזו הוסרה. סוג ה-MIME תמיד יהיה MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.
- הסרה של
גרסה 1.0.0-beta02
21 ביולי 2022
androidx.media3:media3-*:1.0.0-beta02
משוחרר.
גרסה 1.0.0-beta02 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.1.
- ספריית ליבה:
- מוודאים ששינוי הערך של
ShuffleOrder
ל-ExoPlayer.setShuffleOrder
מוביל לשיחה אלPlayer.Listener#onTimelineChanged
עםreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - במקרה של מדיה פרוגרסיבית, רק טראקים נבחרים נכללים במיקום במאגר (#10361).
- אפשרות להשתמש ב-logger מותאם אישית לכל פלט היומן של ExoPlayer (#9752).
- תוקן יישום של
setDataSourceFactory
ב-DefaultMediaSourceFactory
, שלא פעל במקרים מסוימים (#116).
- מוודאים ששינוי הערך של
- מחולצי נתונים:
- DASH:
- ניתוח כתובת ה-URL של רישיון ClearKey ממניפסטים (#10246).
- UI:
- מוודאים ש-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 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.18.0.
- ספריית ליבה:
- הפעלת התמיכה באבחון של פלטפורמת Android דרך
MediaMetricsManager
. ExoPlayer יעביר אירועי הפעלה ונתוני ביצועים לפלטפורמה, מה שיעזור לספק מידע על ביצועי המערכת וניפוי באגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את האפשרות לשיתוף נתונים על אופן השימוש בנתונים וניתוח הביצועים. אפליקציות יכולות לבחור שלא לתרום לניתוח של פלטפורמת ExoPlayer באמצעותExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - תוקן באג שגורם לאיפוס של רצועות לעיתים קרובות מדי כשמשתמשים ב-
MergingMediaSource
, למשל כשמבצעים טעינה צדדית של כתוביות ומשנים את הכתוביות שנבחרו באמצע ההפעלה (#10248). - הפסקת הזיהוי של סוג רשת 5G-NSA ב-API 29 וב-API 30. ההשמעה תתבצע ברשת 4G.
- ללא הרשאה להעברת
null
אלMediaSource.Factory.setDrmSessionManagerProvider
ואלMediaSource.Factory.setLoadErrorHandlingPolicy
. במקרים שנדרש, אפשר להעביר באופן מפורש מקרים שלDefaultDrmSessionManagerProvider
ושלDefaultLoadErrorHandlingPolicy
. - מוסיפים את
MediaItem.RequestMetadata
כדי לייצג מטא-נתונים שנדרשים להפעלת מדיה כשלא ידוע מהוLocalConfiguration
המדויק. צריך גם להסיר אתMediaMetadata.mediaUrl
כי הוא כלול עכשיו ב-RequestMetadata
. - מוסיפים
Player.Command.COMMAND_SET_MEDIA_ITEM
כדי לאפשר לשחקנים להגדיר פריט אחד.
- הפעלת התמיכה באבחון של פלטפורמת 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
במכשירים ניידים, המערכת תעדיף פורמטים של אודיו סטריאו או מונו על פני פורמטים של אודיו רב-ערוצי, אלא אם הפורמט הרב-ערוצי הוא מרחבי (Android 12L ואילך) או שהוא פורמט של צליל סראונד Dolby.DefaultTrackSelector
בנוסף, במכשירים שתומכים במיקום מרחבי של אודיו,DefaultTrackSelector
יעקוב אחרי שינויים במאפייני המיקום המרחבי ויפעיל בחירה של טראק חדש כשיהיו שינויים כאלה. מכשירים עםtelevision
מצב ממשק משתמש לא נכללים במגבלות האלה, והפורמט עם מספר הערוצים הגבוה ביותר יועדף. כדי להפעיל את התכונה הזו, צריך ליצור את מופעDefaultTrackSelector
עםContext
.
- הפיכת הכיתה
- סרטון:
- שינוי השם של
DummySurface
לPlaceholderSurface
. - הוספת תמיכה ב-AV1 ל-
MediaCodecVideoRenderer.getCodecMaxInputSize
.
- שינוי השם של
- אודיו:
- השימוש במפענח האודיו LG AC3 מפרסם סוג MIME לא סטנדרטי.
- כדי למנוע אימות איטי של ART ב-API בגרסה נמוכה מ-21, צריך לשנות את סוג ההחזרה של
AudioAttributes.getAudioAttributesV21()
מ-android.media.AudioAttributes
למחלקת wrapper חדשה של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.
- צריך לשנות את
- מחולצי נתונים:
- UI:
- תיקון של העברת אירועים אל
OnClickListener
s שהוגדרו ב-PlayerView
במקרה ש-useController=false
(#9605). בנוסף, תוקנה השליחה של אירועים אלOnLongClickListener
בכל הגדרות התצוגה. - תוקנה בעיה שבה רצף של אירועי מגע שיוצאים מהגבולות של
PlayerView
לפניACTION_UP
נחשב בטעות לקליק (מס' 9861). - תוקנה בעיית נגישות
PlayerView
שבה הקשה על המסך הפעילה או השביתה את ההפעלה במקום להסתיר את אמצעי הבקרה (#8627). - שכתוב של
TrackSelectionView
ושלTrackSelectionDialogBuilder
כדי שיתאימו לממשק שלPlayer
ולא שלExoPlayer
. כך אפשר להשתמש בתצוגות עם הטמעות אחרות שלPlayer
, וההסתמכות על מודול ExoPlayer מוסרת ממודול ממשק המשתמש. זהו שינוי שעלול לשבור את התאימות לאחור. - לא להציג רצועות טקסט מוכפות ב
PlayerView
כלי לבחירת רצועות, ולשמור על רצועת טקסט מוכפית מתאימה אם נבחרה האפשרות 'ללא' (#9432).
- תיקון של העברת אירועים אל
- DASH:
- ניתוח מספר הערוצים מרכיבי ה-DTS
AudioChannelConfiguration
. העדכון הזה מפעיל מחדש את מעבר האודיו לשידורי DTS (#10159). - ללא הרשאה להעברת
null
אלDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. אם צריך, אפשר להעביר מקרים שלDefaultCompositeSequenceableLoaderFactory
באופן מפורש.
- ניתוח מספר הערוצים מרכיבי ה-DTS
- HLS:
- אם מאפיין הקודקים של רשימת ההשמעה לא מכיל את קודק האודיו, המערכת תנסה להכין את הסטרימינג באמצעות חלוקה לחלקים (#10065).
- ללא הרשאה להעברת
null
אלHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
ו-HlsMediaSource.Factory.setPlaylistTrackerFactory
. אם צריך, אפשר להעביר באופן מפורש מקרים שלDefaultCompositeSequenceableLoaderFactory
, DefaultHlsPlaylistParserFactory
או הפניה אלDefaultHlsPlaylistTracker.FACTORY
.
- סטרימינג חלק:
- ללא הרשאה להעברת
null
אלSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. במקרה הצורך, אפשר להעביר באופן מפורש מופעים שלDefaultCompositeSequenceableLoaderFactory
.
- ללא הרשאה להעברת
- RTSP:
- הוספת קורא RTP ל-H263 (#63).
- הוספת קורא RTP ל-MPEG4 (#35).
- הוספת קורא RTP ל-HEVC (#36).
- הוספת קורא RTP ל-AMR. בשלב הזה יש תמיכה רק בזרמי AMR לא משולבים עם ערוץ מונו. אין תמיכה במטען ייעודי (payload) של AMR RTP מורכב. (#46)
- הוספת קורא RTP ל-VP8 (#47).
- הוספת קורא RTP ל-WAV (#56).
- תיקון כותרת אימות בסיסי של RTSP. (#9544).
- הפסקנו לבדוק שדות חובה של SDP כי ExoPlayer לא צריך אותם (#10049).
- העלאת חריגה מסוג checked exception בזמן ניתוח התזמון של RTSP (#10165).
- הוספת קורא RTP ל-VP9 (#47).
- נוסף קורא RTP ל-OPUS (#53).
- מקורות נתונים:
- שינוי השם של
DummyDataSource
לPlaceholderDataSource
. - פתרון עקיף לטיפול בהפסקות ב-OkHttp.
- שינוי השם של
- סשן:
- מחליפים את
MediaSession.MediaItemFiller
ב-MediaSession.Callback.onAddMediaItems
כדי לאפשר פתרון אסינכרוני של בקשות. - שיטות התמיכה
setMediaItems(s)
כאשרMediaController
מתחבר לסשן מדיה מדור קודם. - הסרה של
MediaController.setMediaUri
ושלMediaSession.Callback.onSetMediaUri
. אפשר להשיג את אותה פונקציונליות באמצעותMediaController.setMediaItem
ו-MediaSession.Callback.onAddMediaItems
. - העברת שיחות בגרסה הקודמת של
MediaController
להפעלת מדיה אלMediaSession.Callback.onAddMediaItems
במקום אלonSetMediaUri
. - מוסיפים את
MediaNotification.Provider
ואתDefaultMediaNotificationProvider
כדי להתאים אישית את ההתראה. - מוסיפים את
BitmapLoader
ואתSimpleBitmapLoader
כדי להוריד תמונות של יצירות אמנות. - מוסיפים את
MediaSession.setCustomLayout()
כדי לספק תאימות לאחור עם הסשן הקודם. - מוסיפים את
MediaSession.setSessionExtras()
כדי לספק תאימות תכונות לגרסה הקודמת של סשן. - שינוי השם של
MediaSession.MediaSessionCallback
לMediaSession.Callback
, שלMediaLibrarySession.MediaLibrarySessionCallback
לMediaLibrarySession.Callback
ושלMediaSession.Builder.setSessionCallback
לsetCallback
. - תיקון NPE ב-
MediaControllerImplLegacy
(#59). - עדכון פרטי המיקום של הסשן בציר הזמן שינוי(#51).
- תוקנה שגיאת NPE ב-
MediaControllerImplBase
אחרי שחרור בקר (#74).
- מחליפים את
- הפעלת מודעה / IMA:
- הפחתה של קצב הסקרים של המודעות מכל 100 אלפיות השנייה לכל 200 אלפיות השנייה, כדי להתאים להמלצות של המועצה לדירוג מדיה (MRC).
- תוסף FFmpeg:
- כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio ייכשל, צריך לעדכן את גרסת CMake ל-
3.21.0+
(מספר 9933).
- כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio ייכשל, צריך לעדכן את גרסת 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 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.17.1.
- אודיו:
- תיקון שגיאה בבדיקת יכולות האודיו של Dolby Atmos (E-AC3-JOC) ב-HLS.
- מחולצי נתונים:
- FMP4: תוקנה בעיה שבה מטא-נתונים של דוגמאות emsg יכלו להיות מופקים בסדר שגוי לסטרימינג שמכיל אטומי emsg בגרסה v0 וגם בגרסה v1 (#9996).
- טקסט:
- תוקנה האינטראקציה בין
SingleSampleMediaSource.Factory.setTrackId
לביןMediaItem.SubtitleConfiguration.Builder.setId
כך שתינתן עדיפות לשדהSubtitleConfiguration
, ואם הוא לא מוגדר, המערכת תחזור לערךFactory
(#10016).
- תוקנה האינטראקציה בין
- הפעלת המודעה:
- תיקון של חוסרים באודיו בין תקופות של מודעות בשידורים חיים בפורמט HLS SSAI.
גרסה 1.0.0-alpha02
2 במרץ 2022
androidx.media3:media3-*:1.0.0-alpha02
משוחרר.
גרסה 1.0.0-alpha02 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה ExoPlayer 2.17.0.
- ספריית הליבה:
- מוסיפים שיטה מוגנת
DefaultRenderersFactory.getCodecAdapterFactory()
כדי שמחלקות משנה שלDefaultRenderersFactory
שמבטלות אתbuildVideoRenderers()
או אתbuildAudioRenderers()
יוכלו לגשת למפעל של מתאם קודק ולהעביר אותו למופעים שלMediaCodecRenderer
שהן יוצרות. - העברת שדות הכותרת של ICY
name
ו-genre
אלMediaMetadata.station
ו-MediaMetadata.genre
בהתאמה, כדי שהם יגיעו לאפליקציה דרךPlayer.Listener.onMediaMetadataChanged()
(#9677). - הסרת מפתחות null מ-
DefaultHttpDataSource#getResponseHeaders
. - השהיה וניסיון חוזר אם יצירת מופע
MediaCodec
נכשלת. הפתרון הזה עוקף בעיה שמתרחשת בחלק מהמכשירים כשמעבירים משטח מ-codec מאובטח ל-codec אחר (#8696). - מוסיפים את
MediaCodecAdapter.getMetrics()
כדי לאפשר למשתמשים לקבל נתוני מדדים מ-MediaCodec
. (#9766). - תיקון של פתרון תלות ב-Maven (#8353).
- השבתה של התאמת מהירות אוטומטית לשידורים חיים שאין להם תכונות של השהיה נמוכה או הגדרה של בקשת משתמש לשינוי המהירות (#9329).
- שינוי השם של
DecoderCounters#inputBufferCount
לqueuedInputBufferCount
. - הגדרת ה
SimpleExoPlayer.renderers
כפרטיים. אפשר לגשת לרכיבי ה-Renderer דרךExoPlayer.getRenderer
. - עדכנו חלק מהערכים הקבועים של
AnalyticsListener.EventFlags
כך שיתאימו לערכים ב-Player.EventFlags
. - מפצלים את
AnalyticsCollector
לממשק וליישום ברירת מחדל כדי לאפשר ל-R8 להסיר אותו אם האפליקציה לא צריכה אותו.
- מוסיפים שיטה מוגנת
- בחירת טראק:
- תמיכה בדגלים של תפקידי וידאו מועדפים בבחירת טראקים (#9402).
- עדכון הלוגיקה של בחירת רצועות וידאו כך שתתחשב בסוגי MIME מועדפים ובסימון תפקידים כשבוחרים כמה רצועות וידאו להתאמה (#9519).
- עדכון הלוגיקה של בחירת טראק אודיו ווידאו כך שייבחרו רק פורמטים לבחירות דינמיות שיש להם את אותה רמה של תמיכה במפענח ובחומרה (#9565).
- עדכון הלוגיקה של בחירת רצועת וידאו כדי להעדיף קודקים יעילים יותר אם כמה קודקים נתמכים על ידי מפענחים ראשיים עם שיפור מהירות באמצעות חומרה (#4835).
- העדפות תוכן אודיו (לדוגמה, טראק האודיו 'ברירת מחדל' או טראק שתואם לשפת המקום במערכת) עדיפות על אילוצים טכניים לבחירת טראק (לדוגמה, סוג MIME מועדף או מספר ערוצים מקסימלי).
- תוקנה בעיה בבחירת רצועות שבה ביטול של קבוצת רצועות אחת לא השבית קבוצות אחרות מאותו סוג (#9675).
- תוקנה בעיה בבחירת רצועות שבה לא מוחל בצורה נכונה שילוב של רצועות לא ריקות ורצועות ריקות שמוגדרות כברירת מחדל (#9649).
- איסור על כפילויות של
TrackGroup
בתוךTrackGroupArray
.TrackGroup
s can always be made distinguishable by setting anid
in theTrackGroup
constructor. הבעיה הזו גורמת לקריסה כשממשיכים הפעלה אחרי שהאפליקציה פועלת ברקע עם שינוי של טראק פעיל (#9718). - שינוי הלוגיקה ב-
AdaptiveTrackSelection
כדי לאפשר שיפור באיכות אם יש מספיק רוחב פס ברשת, גם אם הנגינה קרובה מאוד לקצה השידור החי (#9784).
- סרטון:
- תיקון הלוגיקה של חזרה למפענח הקודם ב-Dolby Vision כדי להשתמש במפענח H264/H265 תואם אם צריך.
- אודיו:
- תיקון הלוגיקה של חזרה למפענח הקודם עבור Dolby Atmos (E-AC3-JOC) כדי להשתמש במפענח E-AC3 תואם אם צריך.
- שינוי בממשקי ה-API של
AudioCapabilities
כך שנדרש להעביר במפורשAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
במקוםnull
. - אפשר להתאים אישית את החישוב של גודל מאגר הנתונים הזמני של
AudioTrack
על ידי הוספתAudioTrackBufferSizeProvider
ל-DefaultAudioSink
. (#8891). - מנסים שוב ליצור את
AudioTrack
אם גודל מאגר הנתונים הזמני שנדרש היה גדול מ-1MB. (#9712).
- מחולצי נתונים:
- טקסט:
- DRM:
- הסרת
playbackLooper
מהחשבוןDrmSessionManager.(pre)acquireSession
. כשמשתמשים בDrmSessionManager
באפליקציה בMediaSource
מותאם אישית, צריך להעביר אתplaybackLooper
אלDrmSessionManager.setPlayer
במקום זאת.
- הסרת
- הפעלת מודעה / IMA:
- הוספת תמיכה בהטמעת מודעות דינמיות (DAI) ב-IMA (#8213).
- הוספת שיטה ל-
AdPlaybackState
כדי לאפשר איפוס של קבוצת מודעות כך שאפשר יהיה להפעיל אותה שוב (#9615). - אכיפת מהירות הפעלה של 1.0 במהלך הפעלת מודעות (#9018).
- תוקנה בעיה שבה קבוצת מודעות שלא נטענה גרמה לאיפוס מיידי של ההפעלה (#9929).
- UI:
- DASH:
- מוסיפים את המאפיינים החיוניים והמשלימים שנותחו אל
Representation
(#9579). - תמיכה בתפקיד בטראק
forced-subtitle
(#9727). - הפסקת ההתייחסות לתפקיד של רכיב
main
כאלC.SELECTION_FLAG_DEFAULT
. - תיקון הלוגיקה של החרגת כתובת URL בסיסית למניפסטים שלא מצהירים על מרחב השמות של DVB (#9856).
- תמיכה בכתובות URL יחסיות
MPD.Location
(מס' 9939).
- מוסיפים את המאפיינים החיוניים והמשלימים שנותחו אל
- HLS:
- מילוי נכון של
Format.label
לשידורי HLS עם אודיו בלבד (#9608). - כדי לשפר את זמן ההפעלה, כדאי להשתמש בהכנה ללא חלוקה לחלקים כברירת מחדל. אם העיבודים שלכם מכילים טראקים של כתוביות משולבות שלא מוצהרים בפלייליסט הראשי, אתם צריכים להוסיף אותם לפלייליסט הראשי כדי שהם יהיו זמינים להפעלה, או להשבית את ההכנה ללא חלוקה לחלקים באמצעות
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - תמיכה בחיפוש מדויק של פריימים מרכזיים ב-HLS (#2882).
- מילוי נכון של
- RTSP:
- Transformer:
- הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
- הערך
TransformationException
משמש עכשיו לתיאור שגיאות שמתרחשות במהלך טרנספורמציה. - מוסיפים
TransformationRequest
כדי לציין את אפשרויות הטרנספורמציה. - אפשר לרשום מספר מאזינים.
- תוקנה בעיה שגורמת לטרנספורמר להיתקע כשפלט הקודק נקרא באופן חלקי.
- תיקון של NPE פוטנציאלי ב-
Transformer.getProgress
כששחרור ה-muxer גורם לשגיאה. - הוספנו אפליקציה לדוגמה להחלת טרנספורמציות.
- תוסף MediaSession:
- כברירת מחדל, הפעולה של
MediaSessionConnector
היא עכשיו ניקוי הפלייליסט כשמפסיקים את ההפעלה. אפליקציות שרוצות לשמור את הפלייליסט יכולות להתקשר אלsetClearMediaItemsOnStop(false)
במחבר.
- כברירת מחדל, הפעולה של
- תוסף Cast:
- תוסף FFmpeg:
- הגדרת התלות של
build_ffmpeg.sh
בכלי bin של LLVM במקום בכלי GNU (מס' 9933).
- הגדרת התלות של
- תאימות ל-Android 12:
- שדרוג תוסף Cast כך שיהיה תלוי ב-
com.google.android.gms:play-services-cast-framework:20.1.0
. גרסאות קודמות שלplay-services-cast-framework
לא תואמות לאפליקציות שמטרגטות את Android 12, והן יקרסו עםIllegalArgumentException
כשיוצריםPendingIntent
s (#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
. במקום זאת, צריך להשתמש בבונהProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
. - הסרה של
ProgressiveMediaSource.Factory#setTag
ושלProgressiveMediaSource.Factory#setCustomCacheKey
. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag
וב-MediaItem.Builder#setCustomCacheKey
. - מסירים את הקונסטרוקטורים
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. במקום זאת, צריך להשתמש בבונהDefaultRenderersFactory(Context)
, ב-DefaultRenderersFactory#setExtensionRendererMode
וב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - הסרת כל ה-constructors של
CronetDataSource
שגלויים לכולם. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory
.
- הסרה של
- משנים את
IntDefs
ל-@Target(TYPE_USE)
בלבד. יכול להיות שהדבר ישבור את הקומפילציה של השימושים ב-Kotlin. כדי לתקן את זה, צריך להעביר את ההערה כדי להוסיף הערה לסוג (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
-
@FlacExtractor.Flags
(בחבילהcom.google.android.exoplayer2.ext.flac
) -
@FlacExtractor.Flags
(בחבילהcom.google.android.exoplayer2.extractor.flac
) @FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
גרסה 1.0.0-alpha01
27 באוקטובר 2021
androidx.media3:media3-*:1.0.0-alpha01
משוחרר.
גרסה 1.0.0-alpha01 מכילה את הקומיטים האלה.
תכונות חדשות
Media3 הוא המקום החדש לספריות תמיכה במדיה, כולל ExoPlayer. גרסת האלפא הראשונה מכילה הטמעות מוקדמות ופונקציונליות של ספריות להטמעה של תרחישי שימוש במדיה, כולל:
- ExoPlayer, נגן מדיה ברמת האפליקציה ל-Android שקל להתאים אישית ולהרחיב.
- פונקציונליות של סשן מדיה, לחשיפה ולשליטה בהפעלות. מודול הסשן החדש הזה משתמש באותו ממשק
Player
כמו ExoPlayer. - רכיבי ממשק משתמש לבניית ממשקי משתמש להפעלת מדיה.
- מודולים שעוטפים פונקציונליות בספריות אחרות לשימוש עם ExoPlayer, לדוגמה, הוספת מודעות באמצעות IMA SDK.
מידע נוסף זמין בפרויקט Media3 ב-GitHub.
בעבר, ExoPlayer התארח בפרויקט נפרד של ExoPlayer ב-GitHub. ב-Media3, שם החבילה הוא androidx.media3.exoplayer
. אנחנו מתכננים להמשיך לתחזק ולפרסם את פרויקט ExoPlayer ב-GitHub למשך תקופה מסוימת, כדי לתת לאפליקציות זמן לעבור ל-Media3. ב-Media3 יש תחליפים לכל המודולים של ExoPlayer, חוץ מהתוספים media2 ו-mediasession מהדור הקודם, שהוחלפו במודול החדש media3-session
. השילוב הזה מאפשר אינטגרציה ישירה בין נגנים לבין סשנים של מדיה, בלי צורך להשתמש במחלקה של מתאם או מחבר.