Media3
| העדכון האחרון | גרסה יציבה | גרסה מועמדת להפצה | גרסת בטא | גרסת אלפא |
|---|---|---|---|---|
| 17 בדצמבר 2025 | 1.9.0 | - | - | - |
הצהרה על יחסי תלות
כדי להוסיף תלות ב-Media3, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאמר בנושא מאגר Maven של Google.
מוסיפים את יחסי התלות של הארטיפקטים שאתם צריכים בקובץ build.gradle של האפליקציה או המודול:
מגניב
dependencies { def media3_version = "1.9.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For 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.9.0" // 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.9.0
1.9.0
17 בדצמבר 2025
- ספרייה משותפת:
- מעדכנים את
minSdkלגרסה23בהתאם לספריות אחרות של AndroidX. - הוספנו את
PlayerTransferState, שמקל על העברת מצב ההפעלה בין מופעים שלPlayer. - מוסיפים את השיטות
void mute()ו-void unmute()ל-Player כדי לשמור את עוצמת הקול של Player לפני שמגדירים אותה לאפס, וכדי לשחזר אותה אחרי שמגדירים אותה לאפס. - פרסום מחלקות כלי עזר
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerו-StuckPlayerDetectorששימשו בעבר אתExoPlayerבאופן פנימי כדי לאפשר שימוש חוזר על ידי שחקנים אחרים (#1893). - תוקן הטיפול ב-listener
ForwardingPlayerכשנגן הנציגים הבסיסי משתמש בשוויון הפניה להשוואה בין מופעי listener (#2675). - מוסיפים פונקציה של השהיית תוסף בספרייה
Player.listenTomedia3-common-ktxשמציינת אתPlayer.Eventsהספציפי שצריך לפעול עליו. - תוקנה קריסה ב-
BasePlayer.getBufferedPercentageשנגרמה כתוצאה מגלישת מספר שלם (integer overflow) כשמיקום המאגר המדווח גדול באופן לא סביר מהמשך המדווח (#2750). - תיקון הזיהוי האוטומטי של
TrackGrouptrack type על ידי אי התעלמות מסוג MIME מותאם אישית של דוגמה וחזרה לשימוש ב-track type שעלול להיות שגוי מסוג MIME של הקונטיינר (#2860).
- מעדכנים את
- ExoPlayer:
- הוספת זיהוי של נגן תקוע שמפעיל שגיאת נגן אם נראה שהנגן תקוע.
StuckPlayerExceptionזה קורה במקרים הבאים, שבהם אפשר להגדיר כל פסק זמן שמוגדר כברירת מחדל ב-ExoPlayer.Builderאם נדרש:- אחרי 10 דקות של
STATE_BUFFERINGבזמן ניסיון ההפעלה, ולא חל שיפור בטעינה. - אחרי 10 שניות של
STATE_READYבזמן ניסיון ההפעלה, ולא חלה התקדמות בהפעלה. - אחרי דקה אחת של
STATE_READYמעבר למשך הזמן המוצהר בלי להגיע לסוף הפריט. - אחרי 10 דקות עם סיבה לדיכוי ההפעלה במהלך ניסיון להפעיל את הסרטון.
- אחרי 10 דקות של
- הפעלת הטיפול בנעילת ההשכמה כברירת מחדל כדי לפתור בעיות שקשורות לאגירת נתונים במהלך הפעלה ברקע. הפעולה הזו שוות ערך להגדרת
ExoPlayer.Builder.setWakeModeלערךC.WAKE_MODE_LOCAL. - מוסיפים לוגיקה של האזנה כדי לעדכן באופן אוטומטי את מזהה המכשיר הווירטואלי כששינוי מדווח ל-
Contextשהועבר במקור ל-ExoPlayer.Builder. - מוסיפים את
ExoPlayer.setVirtualDeviceIdכדי לעדכן באופן ידני את מזהה המכשיר הווירטואלי שהתקבל מ-Contextשהועבר אלExoPlayer.Builder. - חשוב לוודא שרכיבי ה-renderer לא צורכים נתונים מהפריט הבא ברשימת ההשמעה יותר מ-10 שניות לפני סוף הפריט הנוכחי.
- הוספת
setSeekBackIncrementMs,setSeekForwardIncrementMsו-setMaxSeekToPreviousPositionMsאלExoPlayerכדי לעדכן את ההגדרות האלה אחרי הבנייה (#2736). - הוספנו פונקציונליות של טעינה מראש מהמטמון ב-
DefaultPreloadManager. אפליקציות יכולות עכשיו להחזירDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)אוDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)דרךTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)כדי לציין שפריט מדיה צריך להיטען מראש לזיכרון המטמון. - שימוש בפונקציונליות של טעינה מראש מהמטמון של
DefaultPreloadManagerבאפליקציית הדגמה של תוכן קצר. - מוסיפים פונקציות setter של
DefaultLoadControl.Builderלהפעלה מקומית ומשנים את ערכי ברירת המחדל שלDefaultLoadControlכדי שהם יתאימו למגוון רחב של קבצים מקומיים. - תיקון באג שבו הגדרת פלייליסט ריק יכולה להשאיר את הנגן במצב
STATE_READYאוSTATE_BUFFERING. - שיפור ממשקי ה-API של כלי הניהול של הטעינה מראש:
- מוסיפים את הפונקציות
addMediaItems(List<MediaItem>, List<T>)ו-addMediaSources(List<MediaSource>, List<T>)שמוסיפות את פריטי המדיה או מקורות המדיה בחבילה, וקוראות אוטומטית לפונקציהinvalidate()לאחר מכן. - מוסיפים את התגים
removeMediaItems((List<MediaItem>)ו-removeMediaSources(List<MediaSource>)כדי להסיר את פריטי המדיה או את מקורות המדיה בחבילה, ומוודאים שמנהל הטעינה מראש לא מתחיל לטעון מראש או ממשיך לטעון מראש אף אחד מהם אחרי ההסרה. - אפשרות ל-
DefaultPreloadManager.setCurrentPlayingIndex(int)לבטל את עצמו באופן אוטומטי. אחרי עדכון האינדקס הנוכחי של הפריט שמופעל, האפליקציות לא צריכות יותר להפעיל אתinvalidate()באופן מפורש.
- מוסיפים את הפונקציות
- הוספת אפשרות לדילוג על איפוס של מסגרת מפתח לחיפוש קדימה באותה קבוצה של תמונות במצב ניקוי.
- מוסיפים
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)לאפליקציות כדי להגדיר ערך של בייטים של מאגר היעד עבור נגן עםplayerNameשצוין. עכשיו אפשר להגדיר אתDefaultLoadControlכך שיקבל החלטות לגבי כל שחקן בנפרד על סמך בייטים שהוקצו לו ובייטים של מאגר היעד. - מוסיפים את התג
SkipInfoאלAdPlaybackState.AdGroupכדי להעביר מידע על אפשרות הדילוג לכל מודעה בקבוצת המודעות. - תוקן באג שגרם לקריסה כשמתקשרים אל
removeMediaItems(List)במהלך הפעלה של פרסומת שאחרי הסרטון (#2746). - תיקון של גמגום בהפעלת פלייליסטים, שבו פריימים הוגדרו בטעות תמיד כדגימה האחרונה ועברו עיבוד.
- הפעלת נתיב ניסיון חוזר אם הנגן לא מצליח ליצור מזהה של סשן אודיו (#2382, #2678).
- הוספת תמיכה בשליטה בבייטים הכוללים של המאגר עבור המקורות ב-
DefaultPreloadManagerכדי למנוע מצב שבו הבייטים הכוללים של המאגר לטעינה מראש גדלים באופן שרירותי. כדי להשתמש בלוגיקת הבקרה שמוגדרת כברירת מחדל, אפליקציות יכולות להגדיר את בייטי מאגר היעד לטעינה מראש באמצעותDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)עבורplayerNameשלPlayerId.Preload.name("טעינה מראש"), ולהחדיר אתDefaultLoadControlשנוצר באמצעותDefaultPreloadManager.Builder.setLoadControl(LoadControl). - הוספת
cloneAndSet(int, int)ל-ShuffleOrderעם הטמעה שמוגדרת כברירת מחדל (#2834). - הוספת היסטוריית מיקומי תוכן להמשך הפעלה כשמדלגים על הפעלת מודעה אחרי התאמה אוטומטית או מעבר אוטומטי (#2484).
- הוספת API להגדרת פרמטרים של קודק ולמעקב אחריהם בטראקים של אודיו ווידאו.
התכונה הזו מיושמת עבור רכיבי עיבוד שמבוססים על
MediaCodecונדרשת רמת API 29 ומעלה.- משתמשים ב-
ExoPlayer.setAudioCodecParameters()וב-ExoPlayer.setVideoCodecParameters()כדי להחיל פרמטרים. - משתמשים ב-
ExoPlayer.addAudioCodecParametersChangeListener()וב-ExoPlayer.addVideoCodecParametersChangeListener()כדי להאזין לשינויים. כדי לצפות במפתחות ספציפיים לספק נדרשת גרסה API 31 ומעלה.
- משתמשים ב-
- תוקנה בעיה
IllegalStateExceptionשנגרמה מהגדרת מקור מדיה ריק אחרי דילוג למיקום שאינו אפס ואז הכנת הנגן עם מקור מדיה לא ריק. - תוקן באג שבו חיפוש פריטי מדיה אחרים במצב ניקוי יכול לגרום ל-
IllegalStateException. - תיקון בעיות פוטנציאליות של
NullPointerExceptionב-DefaultPlaybackSessionManager(#2885). - הפעלת שיפורים בביצועים של מעבר לנקודה מסוימת בסרטונים שעומדים בדרישות.
- הפעלה מחדש של השימוש בפענוח אסינכרוני ב-MediaCodec ב-API 36 ומעלה, שבהם תוקנו בעיות של פסק זמן ב-API של הפלטפורמה הזו (#1641).
- משנים את ערך ברירת המחדל של
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsל-15ms ומפעילים השמטה יעילה יותר של פריימים של סרטונים לפני פענוח של סרטונים שעומדים בדרישות. - הוספת מגבלת זיכרון מקסימלית לחישוב הזיכרון האוטומטי ב-
DefaultLoadControl. ההגדרה הזו אמורה לפעול רק אם נבחר מספר מוגזם של טראקים (#2860). - תוקן באג שבו, אם מפעילים פלייליסט או מצב חזרה, ניסיון להעביר קדימה או אחורה במצב גלילה ליד הסוף עלול לגרום להעברה לפריט המדיה הבא.
- הוספת זיהוי של נגן תקוע שמפעיל שגיאת נגן אם נראה שהנגן תקוע.
- CompositionPlayer:
- פרסום
CompositionPlayerבהערה חדשה@ExperimentalApiכדי לציין שהיא זמינה לניסויים, אבל עדיין נמצאת בפיתוח. יש סיכוי שממשקי API מסוימים ישתנו באופן משמעותי בגרסאות עתידיות, ויש בעיות ומגבלות ידועות בחלק מתרחישי השימוש (חלקם לא מתועדים). - הוספת תמיכה ב-
COMMAND_SET_AUDIO_ATTRIBUTESובטיפול במיקוד אודיו ב-CompositionPlayer. - הוספת תמיכה בשינוי מהירות ברצפים משניים ב-
CompositionPlayer. - הוספת תמיכה ב-
EditedMediaItem.removeVideo.
- פרסום
- Transformer:
- שימוש ב-
InAppMp4Muxerכברירת מחדל של כלי לצירוף נתונים. - הוספה של
EditedMediaItem.Builder#setSpeed()והוצאה משימוש שלEffects#createExperimentalSpeedChangingEffects(). - מחליפים את
forceAudioTrackואתforceVideoTrackב-trackTypesב-EditedMediaItemSequence.
- שימוש ב-
- בחירת טראק:
- מוסיפים
TrackSelectionParameters.selectTextByDefaultכדי להגדיר העדפה לבחירה של כל רצועת טקסט בלי לציין העדפות ספציפיות יותר. - מוסיפים את
preferredVideoLabels, preferredAudioLabelsו-preferredTextLabelsב-TrackSelectionParametersכדי לציין העדפה לרצועות עם תווית ספציפית, למשל אלה שנקראות מתגי NAME של HLS (#1666).
- מוסיפים
- מחולצי מידע:
- FLAC: שיפרנו את זיהוי הכותרות כדי להקטין את הסיכוי למצוא כותרות מזויפות בנתוני FLAC המקודדים, וכתוצאה מכך להפחית את שגיאות הפענוח (#558).
- MP3: מאפשר פערים בין תגי ID3 (ולפני) בתחילת קובצי MP3 (#811, #5718).
- MP3: הגדלת מגבלת החיפוש ל-128kB כדי להתאים למגבלת החיפוש הקיימת לבייט סינכרון (#2713).
- MP3: שינוי
FLAG_ENABLE_INDEX_SEEKINGכך שיועדף חיפוש מידע בכותרות של מטא-נתונים (כמו Xing ו-VBRI) אם הן זמינות, וחיפוש מבוסס-אינדקס אם אין מידע אחר לחיפוש. השינוי הזה משפר את הביצועים של קבצים עם מטא-נתונים של חיפוש (#2839). - MP3: שינוי
Mp3Extractorלברירת מחדל של הנחה לגבי קצב העברת נתונים קבוע (CBR) כשאין מטא-נתונים של חיפוש (למשל, Xing, VBRI), גם אם הערךFLAG_ENABLE_INDEX_SEEKINGמוגדר. ההנחה הזו מבוססת על היסטוריית המפרטים של MP3, שבה CBR היה תקני ו-VBR דרש כותרות מפורשות. השיפור הזה מאפשר חיפוש מיידי בקבצים ללא מטא-נתונים, אבל עלול לפגוע בדיוק של קבצים עם VBR בלי כותרות. חיפוש באינדקס משמש עכשיו כגיבוי אם ההנחה של CBR לא ניתנת לחיפוש (למשל, בסטרימינג באורך לא ידוע) (#2848). - MP4: כדי להבחין בין סוגי ה-MIME
audio/mpeg(MP3),audio/mpeg-L1ו-audio/mpeg-L2, צריך להציץ בערך השכבה של הדגימה הראשונה לפני שמוציאים פורמט של טראק מהכלי לחילוץ (#2683). - MP4: שיפור היעילות של סניפינג קבצים גדולים מאוד על ידי הנחה שתיבת
stblגדולה מ-1MB מרמזת שהקובץ לא מפולח (#2650). - MP4: נוספה תמיכה במטא-נתונים
©mvn(שם התנועה) ו-©mvi(אינדקס התנועה). עכשיו הם מופקים כאובייקטים מסוגTextInformationFrameב-Format.metadataעם המזהיםMVNMו-MVINבהתאמה (#2754). - MP4: המערכת מתעלמת מטראקים עם תיבת
stsdחסרה (במקום להיכשל בניתוח של הקובץ כולו). - Matroska: נוספה תמיכה בזיהוי של DTS-HD (#6225).
- תוקנה בעיה ב-
MatroskaExtractorשבה הניווט בקבצים עם כמה רצועות היה לא מדויק. נקודות ה-Cue משויכות עכשיו בצורה נכונה לטראקים המתאימים, מה שמאפשר חיפוש מדויק יותר. - MPEG-TS: תיקון
IllegalArgumentExceptionמתוךReorderingBufferQueueשנגרם על ידי חבילות PES ללא חותמת זמן (#2764). - הוספת תמיכה בחילוץ תמונות HEIC עם תנועה.
HeifExtractorיכול עכשיו לנתח קובצי HEIC שמכילים טראקים מוטמעים של וידאו ואודיו.
- כלי הבדיקה:
- הוספנו מודול חדש,
:media3-inspector, שמשמש כמרכז ייעודי לכלי בדיקת מדיה. המודול הזה כולל עכשיוandroidx.media3.inspector.MetadataRetrieverחדש, שיספק API מאוחד לחילוץ מטא-נתונים ופריימים. הגרסה הקיימת שלandroidx.media3.exoplayer.MetadataRetrieverהוצאה משימוש, ועכשיו אפשר להשתמש בגרסה החדשה הזו. - השקנו את
androidx.media3.inspector.FrameExtractor, API ציבורי חדש למיצוי פריימים. המחלקות האלה מספקות דרך לחלץ פריימים עם תמיכה בסרטוני HDR, באפקטים של סרטונים ובבחירה מותאמת אישית של מפענח.AutoCloseableצריך ליצור אותו דרךBuilderשלו עבורMediaItemספציפי. - FrameExtractor: נוספה האפשרות
getThumbnail()לחילוץ פריים מייצג של תמונה ממוזערת מקובץ מדיה בלי צורך בחותמת זמן ספציפית. - הוספת
androidx.media3.inspector.MediaExtractorCompat, תחליף מוכן לשימוש ל-android.media.MediaExtractorשל הפלטפורמה, שמספק דרך לחלץ דגימות מדיה גולמיות ומקודדות מקובץ מדיה. השימוש ב-androidx.media3.exoplayer.MediaExtractorCompatהקיים הופסק לטובת המחלקה החדשה הזו.
- הוספנו מודול חדש,
- אודיו:
- הגדרת מודעות של מכונות
AudioProcessorלחיפוש. - מתן הרשאה להטמעת הממשק החדש של
AudioOutputProviderב-DefaultAudioSink.Builderכדי לתמוך בנתיבי פלט אודיו מותאמים אישית. ברירת המחדל היאAudioTrackAudioOutputProvider. - התמודדות עם חיפושים ב-
GainProcessor. - שימוש ביכולות של פרופיל ומפלס של מפענח AC-4 בהערכת התמיכה בפורמט של רצועת אודיו (#2580).
- נמנעים מעיכובים פוטנציאליים שנגרמים כתוצאה מטיפול בהחזרות (callbacks) של שינויי ניתוב בתחילת ההפעלה (#2646).
- אפשר להשתמש מחדש ב-Codec לפורמטים EAC3, EAC3-JOC ו-AC-4 (#1346).
- הוספנו תמיכה בדגימות PCM של מספרים ממשיים ב-
Sonic. - הוספנו תמיכה בדגימות PCM של 16 ביט ב-
ToFloatPcmAudioProcessor.
- הגדרת מודעות של מכונות
- סרטון:
- השבתה של שימוש חוזר בקודק לתוכן Dolby-Vision עם פרופילים שונים.
- הפעלה מחדש של פתרון עקיף לנקודות ביצוע שדווחו באופן שגוי עבור קודקים מאובטחים (#2856).
- טקסט:
- תוקן ניתוח של כתוביות CEA-6/708 בתוכן Dolby Vision (#2775).
- תמונה:
- תוקנה בעיה ב-ScrubbingMode שבה הנגן נתקע בזמן גלילה מהירה של רצועת תמונות ממוזערות ב-DASH (#2815).
- DRM:
- שינוי סוג ההחזרה של methods מסוג
MediaDrmCallbackמ-byte[]לסוגMediaDrmCallback.Responseחדש, כדי לאפשר החזרה של מידע אופציונלי נוסף. זהו שינוי שגורם לבעיות בקוד המקור, אבל אפשר לפתור את הבעיות בקלות על ידי הוספת הערך הקודם שלbyte[]ל-new Responseלפני ההחזרה. - מוסיפים ל-
AnalyticsListener.onDrmKeysLoaded(#1001) פרטים חשובים על הבקשה, כמו כתובת URL וזמן אחזור. - העברה של נתוני בקשת הקצאת הרשאות מפרמטר של כתובת URL לגוף של בקשת POST.
- שינוי סוג ההחזרה של methods מסוג
- ההשפעה:
- מוסיפים
Presentation.copyWithUnsetSideRoundedToכדי לעגל את הפלט של הצד שלא הוגדר כשיוצרים אתPresentationעם אורך צד אחד.
- מוסיפים
- Muxers:
- הוספת
MediaMuxerCompat, תחליף מוכן לשימוש למסגרתMediaMuxer. - מוסיפים את
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()כדי לאפשר יצירת תמונות דינמיות. - מוסיפים
WebmMuxerכדי לאפשר מיקס של זרמי מדיהOPUS,VORBIS,VP8ו-VP9לפורמט קובץwebm.
- הוספת
- IMA extension:
- הסרה של כללי ProGuard בהתאמה אישית, כדי שאפליקציות יוכלו להשתמש באלה שפורסמו בארכיון IMA Android במקום זאת.
- הוספנו את
ImaServerSideAdInsertionUriBuilder.setNetworkCode, API חדש להגדרת קוד הרשת של Google Ad Manager כדי ש-IMA SDK יטפל במזהי מודעות בהתאם להגדרות של Google Ad Manager. קודים של רשתות הם אופציונליים, אבל מומלצים לבקשות של שידורים בשיטת Full service. במאמר הזה מוסבר איך למצוא את קוד הרשת. - העלאת התלות ב-IMA לגרסה 3.37.0, שדורשת הפעלה של desugaring של ספריית הליבה. אפליקציות תלויות צריכות גם הן להפעיל את ההגדרה הזו. אפשר לעיין בהערות על ההגדרה של IMA. * תמיכה באפשרויות מותאמות אישית של ממשק משתמש של IMA DAI בכלי ליצירת URI של SSAI. אפשרויות ממשק משתמש מותאם אישית להוספת מודעות בצד השרת כוללות תמיכה בעיבוד של 'אפשרות דילוג' ושל 'מידע על המודעה הזו'. התכונה זמינה כרגע רק לקבוצה נבחרת של בעלי אפליקציות שנמצאים ברשימת ההיתרים. בנוסף, השינוי הזה משדרג את גרסת IMA SDK ל-3.38.0 (הערות על הגרסה) כדי לאפשר גישה ל-API של אפשרויות ממשק משתמש בהתאמה אישית.
- תוקנה הבעיה שבה שגיאה בהכנת תוכן להפעלה אחרי מודעה דווחה בטעות כשגיאה בהפעלת מודעה (#2656).
- סשן:
- הוספת פרמטר חדש ל-
MediaSession.Callback.onPlaybackResumptionכדי לציין אם השיחה מתבצעת רק כדי לאסוף מידע או כדי להתחיל בהפעלה (#1764). - עדכון
MediaSession.ControllerInfo.isTrustedכך שיוצהר גם על בקרי גישה מהאפליקציה עצמה כאמינים (מס' 2542). - נוספה האפשרות
MediaSessionService.triggerNotificationUpdateלהפעלה ידנית של עדכון התראות (מס' 1833). - מוסיפים
ProgressListenerלשיטות של פקודות מותאמות אישית. - משנים את ערך ברירת המחדל של
MediaLibrarySession.Builder.setLibraryErrorReplicationModeלערך שאינו קריטי. - מוסיפים פרמטר
ContextאלMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - קריאת מזהה בקרת עוצמת הקול מהפלטפורמה
PlaybackInfoבמקום אחזור שלו באמצעות binder. כך אפשר לוודא שסוג ההפעלה ומזהה בקרת עוצמת הקול נקראים באופן אטומי ומתאימים זה לזה. - תוקן באג שבו
ACTION_UPאירועים מרכזיים סוננו לפני שהועברו לקריאה חוזרת לטיפול בהתאמה אישית. השינוי הזה יוצר שוויון עם מה ש-media1 עשה ומה שהפלטפורמה עושה (#2637). - תוקן באג שבו הפונקציה
getCurrentTimeline()נקראה על ידיPlayerWrapperגם אם הפקודה לא הייתה זמינה (#2665). - תוקן באג שגרם להודעה להישאר בתור ההודעות של ה-looper הראשי, מה שגרם לדליפת זיכרון אחרי שהשירות הסתיים (#2692).
- כשמתחברים לאפליקציה של סשן מדור קודם עם
MediaBrowser, פקודות מותאמות אישית נשלחות לסשן רק אם הפעולה המותאמת אישית מוצגת כפעולה מותאמת אישית ב-PlaybackStateCompatשל הסשן מדור קודם. כל הפעולות האחרות בהתאמה אישית נשלחות לשירות. - הוטמעה
onAudioSessionIdChangedכדי להודיע לבקרי המדיה כשמזהה של סשן אודיו מוגדר על ידי הסשן (#244). - תוקן באג שגרם לכך שהנגן לא הופעל כשאירוע של מקש מדיה
Intentהגיע ל-onStartCommand()אחרי שבוצעו פעולות שלKEYCODE_HEADSETHOOK. הבעיה הזו נפתרה על ידי טיפול ב-'KEYCODE_HEADSETHOOK' בדיוק כמו ב-KEYCODE_MEDIA_PLAY_PAUSE(#2816). - תוקן באג שבו גודל המשטח לא הועבר בין הסשן לבין הבקר, ולכן לא ניתן היה להחיל אפקטים של סרטונים בסשן ההדגמה. אם אתם משתמשים בשלט רחוק, יכול להיות שזה שינוי משמעותי אם הנגן לא יכול לטפל בקריאה של
setVideoSurfaceHolder. - תיקון ההפצה של ערכי מטא-נתונים שאינם
StringCharSequence, כמו מחרוזות עם תגי span (#2853). - מוסיפים
CommandButton.executeActionכדי שהבקרים יוכלו להפעיל בקלות רבה יותר את הפעולה הרצויה. בנוסף, אפשר לציין פרמטרים לחלק מהפקודות של הנגן והסשן כדי להגדיר איזו פעולה תופעל. - הוספת תאימות לאחור למופעי
CommandButtonבאמצעותPlayer.CommandאוSessionCommandלא מותאם אישית כדי להגדיר את הפעולה שלהם. הם מוצגים עכשיו בצורה נכונה בסשנים של מדיה בפלטפורמה, למשל בממשק המשתמש של המערכת או ב-Android Auto. - תוקנה בעיה שבה אותו
Bitmapנדחס כמה פעמים כשמחבריםMediaControllerלסשן מדיה בפלטפורמה.
- הוספת פרמטר חדש ל-
- UI:
- מוסיפים את המחלקה
ProgressStateWithTickIntervalואת ה-Composable המתאים למודולmedia3-ui-compose.rememberProgressStateWithTickIntervalמחזיק המצב הזה משמש ב-demo-composeלהצגת המיקום והמשך הנוכחיים בפורמט טקסט. - מוסיפים
MuteButtonStateל-ui-composeשמטפל בהשתקה של עוצמת הקולPlayer. האובייקט הזה משמש ב-demo-composeכדי להציג את לחצן ההפעלה/ההשבתה של המיקרופון. - מוסיפים את המחלקות
ProgressStateWithTickCountואת ה-Composable המתאיםrememberProgressStateWithTickCountלמודולmedia3-ui-compose. מחזיק המצב הזה משמש ב-demo-composeלהצגת ההתקדמות כסרגל התקדמות אופקי לקריאה בלבד. - הוספת
ContentFrameComposable ל-media3-ui-composeשמשלב ניהול שלPlayerSurfaceעם שינוי גודל של יחס רוחב-גובה וכיסוי עם תריס. - עקיפת באג ידוע בפלטפורמת API 34 שגורם לסרטונים להימתח או להיחתך
כשמשתמשים ב-
SurfaceViewבתוך ComposeAndroidView, ולכן משפיע על רכיביContentFrameו-PlayerSurfaceComposables עםSURFACE_TYPE_SURFACE_VIEW(מס' 1237, מס' 2811). - יוצרים מודול
media3-ui-compose-material3חדש ומוסיפים לו רכיבים הניתנים להרכבה עם ערכת הנושא Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - הוספת
TimeTextcomposable ל-media3-ui-compose-material3כדי להציג את התקדמות השחקן בצורה טקסטואלית. אפשר להגדיר אותו כך שיוצגו בו המיקום הנוכחי, משך הזמן או הזמן שנותר. - הוספת תמיכה בהצבת לחצן של מסלול מדיה ב
PlayerView. - שימוש ב-
BidiFormatterכדי להציג נכון סימני פיסוק בכתוביות של טקסט מימין לשמאל (#11214).
- מוסיפים את המחלקה
- תוסף HLS:
- ניתוח מאפייני דילוג על מודעות מעבר בפרוטוקול HLS.
- מיפוי של מאפייני בקרה לדילוג מתוך רשימת הנכסים ומתוך מסמך הפלייליסט של HLS אל
AdPlaybackStateלצורך גישה ציבורית. - תוקן באג שגרם להשמטת שעת ההתחלה של הפלייליסט כשמסירים מהפלייליסט את התג EXT-X-PROGRAM-START-DATE שמגדיר את שעת ההתחלה (#2760).
- משתמשים בחיפוש בינארי כדי למצוא את אינדקס הפלח של מיקום נתון ברשימת ההשמעה (#2826).
- מוסיפים את
HlsInterstitialsAdsLoader.skipCurrentAd()ואתskipCurrentAdGroup()ואת השיטות המתאימות כדי לדלג על מודעות ועל קבוצות של מודעות לפי אינדקס. - הוספת
HlsInterstitialsAdsLoader.Listener.onAdStartedכדי לדווח על תחילת תקופת הצגת מודעה (#2859). - אפשר להשתמש ברווח כמפריד בין תאריך לשעה במחרוזות של תאריך ושעה בפורמט ISO 8601.
- טיפול נכון באחזור של הנתח הבא עבור
HlsMediaPlaylistללא פלחים (#2821). - שימוש במיקום ההתחלה שמוגדר כברירת מחדל למודעות לפני סרטון בשידורים חיים.
- תוסף DASH:
- תוקנה בעיה שקשורה ל-
UnsupportedOperationExceptionכשמפעילים סטרימינג של DASH עם מניפסט URIdata:לא היררכי (#2688). - הערך של
LiveConfigurationמתאפס לערך שסופק על ידיMediaItemשלDashMediaSourceכשהפריט מתפרסם וכשהמשתמש מעדכן את פריט המדיה (#2606). - נמנעות קריסות שנגרמות מעדכוני מניפסט לא תקינים שלא דווחו כשגיאות בנגן (#2805).
- תוקנה בעיה שקשורה ל-
- תוסף RTSP:
- טיפול בשגיאה של חבילות RTP חסרות במהלך עיבוד של יחידות NAL מפוצלות עבור H264 ו-H265 (#2613).
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- תוסף AV1: מפענח התוכנה AV1 משתמש עכשיו בספריית
dav1dבעלת הביצועים הגבוהים, במקום בהטמעה הקודמת שלlibgav1, כדי לשפר את מהירות הפענוח. - תוסף FFmpeg: תוקנה בעיה שמנעה הפעלה של חלק מקובצי FLAC. הבעיה נפתרה על ידי הבטחה שבלוק
STREAMINFOינותח בצורה נכונה ויועבר למפענח (#2887).
- תוסף AV1: מפענח התוכנה AV1 משתמש עכשיו בספריית
- תוסף Cast:
- מוסיפים את
CastPlayer.Builder, וכך מאפשרים ל-CastPlayerלהפעיל קבצים מקומיים וגם להפעיל תוכן ב-Cast. כדי לשמור על ההתנהגות הישנה שלCastPlayer, שבה נתמכת רק הפעלה ב-Cast, אפשר להשתמש ב-RemoteCastPlayer. הקונסטרוקטורים הקיימיםCastPlayerשומרים על ההתנהגות הקודמת שלהם, אבל הם הוצאו משימוש לטובת שימוש בבוניCastPlayerאוRemoteCastPlayer. - הפסקת האכיפה של סוג mime שאינו null ב-
DefaultMediaItemConverter. - משתמשים ב-
MediaItem.mediaMetadata.mediaTypeכדי להסיק את MEDIA_TYPE של Cast לשימוש ב-DefaultCastOptionsProvider#toMediaQueueItem, אם הוא זמין. - מפעילים העברות מרחוק למקומיות ב-
DefaultCastOptionsProvider. - הוספת תמיכה ב-Cast בהדגמה של הסשן.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה בממשק משתמש שניתן להרכבה.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה בתפריט של סרגל פעולות.
- הוספת תמיכה בהצגת לחצן של נתיב מדיה כממשק משתמש של תצוגה.
- מוסיפים את
- כלי בדיקה:
- הוספת הפרש זמן מקסימלי להתנהגות של מעבר אוטומטי בין שקפים ב-
FakeClock. ערך ברירת המחדל הוא שנייה אחת, אבל אפשר להגדיר אותו באמצעותFakeClock.Builder. - הוספת הפרש הזמן המקסימלי בין הודעות עבור
RobolectricUtil.runMainLooperUntil(ו-runLooperUntil). ברירת המחדל היא שנייה אחת, אבל אפשר להגדיר את זה באמצעות עומסים חדשים של השיטות האלה. - העברת
CapturingRenderersFactoryמ-test-utilsאלtest-utils-robolectric.
- הוספת הפרש זמן מקסימלי להתנהגות של מעבר אוטומטי בין שקפים ב-
- הסרת סמלים שהוצאו משימוש:
- הסרת ה-constructor
DefaultPreloadManagerשיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-DefaultPreloadManager.Builder. - הוסרו קונסטרוקטורים
EditedMediaItemSequenceשהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-EditedMediaItemSequence.Builder. - הסרה של
BitmapFactoryImageDecoder.BitmapDecoder. במקום זאת, אתם צריכים להשתמש ב-ExternallyLoadedImageDecoder. - הסרת
ShadowMediaCodecConfig.forAllSupportedMimeTypes()שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-ShadowMediaCodecConfig.withAllDefaultSupportedCodecs(). - הסרה של
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()שיצא משימוש. במקום זאת, אתם צריכים להשתמש ב-ShadowMediaCodecConfig.withNoDefaultSupportedCodecs().
- הסרת ה-constructor
1.9.0-rc01
1 בדצמבר 2025
משתמשים בגרסה יציבה 1.9.0.
1.9.0-beta01
20 בנובמבר 2025
משתמשים בגרסה יציבה 1.9.0.
1.9.0-alpha01
22 באוקטובר 2025
משתמשים בגרסה יציבה 1.9.0.
גרסה 1.8.0
גרסה 1.8.0
30 ביולי 2025
גרסה 1.8.0 מכילה את הקודים האלה.
- ספרייה משותפת:
- הוספת תמיכה בהחלפת הנגן ב-
ForwardingSimpleBasePlayer.
- הוספת תמיכה בהחלפת הנגן ב-
- ExoPlayer:
- הוספת פונקציית getter למצב באקראי לממשק
ExoPlayer(#2522). - הוספנו הבהרה לגבי השגיאה שמוחזרת אם מתבצעת גישה אל
DefaultAudioSinkמכמה שרשורים. אם זה קורה בגלל קריאה ל-RendererCapabilities.getFormatSupportמחוץ לנגן, צריך לוודא שקוראים לשיטה הזו באותו השרשור כמו שרשור ההפעלה של ExoPlayer, או להשתמש במופע אחר מזה שמשמש להפעלה (#1191). - תוקן באג שבו פורמטים של אודיו שאינם סטריאו בטלוויזיות עשויים להיות מסומנים כלא נתמכים על ידי
DefaultTrackSelector. - כשמשתמשים בדגל
DECODE_ONLYשל MediaCodec (שמופעל כברירת מחדל במצב ניקוי), צריך לוודא שהפריים האחרון מוצג בצורה תקינה. - הוספת תמיכה בשימוש במזהה המכשיר הווירטואלי מ-
Contextשהועבר אלExoPlayer.Builder. - הפעלה של תזמון דינמי כברירת מחדל במצב ניקוי.
- כדי להגיע לסוף של פריט, לא צריך לטעון מחדש מקור שלא לצורך.
- שימוש ב-
MediaCodec.BUFFER_FLAG_DECODE_ONLYכברירת מחדל במצב ניקוי. - השגיאה
IllegalStateExceptionמופיעה כשמפעילים אתPreloadMediaSourceבאמצעותExoPlayerעם שרשור הפעלה ששונה משרשור הטעינה מראש (#2495). - הוספת
cloneAndMoveאלShuffleModeעם הטמעה שמוגדרת כברירת מחדל (#2226). - שינוי התנהגות ברירת המחדל של
Renderer.getMinDurationToProgressUsכך שיחזיר ערך גדול יותר אם לא נדרשת קריאה ל-render. - תוקן באג שגרם לכך שתזמון פנימי עיכב את המסגרת האחרונה כשמנסים להגיע לסוף בזמן שההפעלה מושהית. כרגע, תיקון הבאג הזה תקף רק אם המדיניות
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledמופעלת. - מוסיפים את אמצעי התשלום
ExoPlayer.setScrubbingModeEnabled(boolean). כך מתבצעת אופטימיזציה של הנגן לחיפושים תכופים (לדוגמה, כשמשתמש גורר את סרגל ההתקדמות). אפשר להתאים אישית את ההתנהגות של מצב ההזזה באמצעותsetScrubbingModeParameters(..)ב-ExoPlayerוב-ExoPlayer.Builder. - אפשרות להתאים אישית את סף הטעות של חיפוש חלקי במצב ניקוי.
- הגדלת קצב ההפעלה של קודק במצב חיפוש.
- תוקן באג שבו יכול להיות ששגיאות בהכנה בתוכן של
AdsMediaSourceלא דווחו אף פעם (#2337). - תיקון דליפת זיכרון ב-
MergingMediaSource, למשל בשימוש בהעלאת כתוביות (#2338). - אפשר להחזיר את
CmcdConfiguration.Factoryאלnullכדי להשבית את הרישום ביומן של CMCD לפריטי מדיה ספציפיים (#2386). - הגדלת גודל ברירת המחדל של מאגר התמונות מ-128kB (טעות בהעתקה והדבקה מתוך רצועות טקסט) ל-26MB, שזה מספיק גדול לתמונות Ultra HDR של 50MP (#2417).
- הוספת
PreCacheHelperשמאפשרת לאפליקציות לשמור מראש במטמון מדיה יחידה עם מיקום התחלה ומשך מוגדרים. - הוספת תמיכה בטעינה מראש ממיקום שצוין ב-
DefaultPreloadManager.
- הוספת פונקציית getter למצב באקראי לממשק
- Transformer:
- מוסיפים את התג
CodecDbLiteשמאפשר לבצע אופטימיזציות ספציפיות לערכת השבבים של הגדרות קידוד הווידאו. - מוסיפים את הדגל
setEnableCodecDbLiteל-DefaultEncoderFactoryכדי להפעיל את האופטימיזציה של ההגדרות של CodecDB Lite. כברירת מחדל, הערך של הדגל הזה הוא false. - כדי למלא פער ראשוני (שנוסף באמצעות
addGap()) באודיו שקט, צריך עכשיו להגדיר במפורש אתexperimentalSetForceAudioTrack(true)ב-EditedMediaItemSequence.Builder. אם הפער נמצא באמצע הרצף, לא צריך להשתמש בדגל הזה. - העברת ממשק
Muxerמ-media3-transformerאלmedia3-muxer. - הופכים את ההגדרה
MediaItem.Builder().setImageDuration(long)לחובה כדי לייבא פריט מדיה כתמונה. - מוסיפים
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)שכולל רשימת עריכה של MP4 כשמבצעים חיתוך, כדי להנחות את הנגנים להתעלם מדגימות בין מסגרת המפתח לפני נקודת ההתחלה של החיתוך, לבין נקודת ההתחלה של החיתוך. - עדכון אפליקציית ההדגמה של יצירת מוזיקה כדי להשתמש ב-Kotlin וב-Jetpack Compose, והוספה של
VideoCompositorSettingsבהתאמה אישית כדי לסדר רצפים בפריסה של 2x2 או בפריסת תמונה בתוך תמונה.
- מוסיפים את התג
- מחולצי מידע:
- ניתוח מטא-נתונים מקובצי MP4 מפוצלים (#2084).
- JPEG: תמיכה בתמונות עם תנועה שאין להן פלח Exif בהתחלה (#2552).
- הוספת תמיכה בחיפוש ב-MP4 מפוצל עם כמה אטומי
sidx. אפשר להפעיל את ההתנהגות הזו באמצעות הדגלFLAG_MERGE_FRAGMENTED_SIDXב-FragmentedMp4Extractor(מספר 9373). - התעלמות מטבלאות ריקות של מיקום בקובצי FLAC (כולל כאלה שמכילות רק נקודות מיקום של placeholder), וחזרה לחיפוש בינארי אם משך הקובץ ידוע (#2327).
- תוקן ניתוח של יחידות H.265 SEI כדי לדלג באופן מלא על סוגי SEI לא מזוהים (#2456).
- מעדכנים את
WavExtractorכך שישתמש בנתוני SubFormat של תוסף הכותרת עבור פורמט האודיו כשמנתחים קובץ מסוגWAVE_FORMAT_EXTENSIBLE. - MP4: נוספה תמיכה בתיבות
ipcmו-fpcmשמגדירות טראקים של אודיו PCM גולמי (אין תמיכה ב-PCM של נקודה צפה ב-64 ביט). - MP4: טיפול בחלק הסיבוב של
tkhdמטריצות טרנספורמציה שמסובבות את הסרטון וגם משקפות אותו. כך אפשר לוודא שהסרטונים שצולמו במצלמה הקדמית של האייפון יופיעו בכיוון הנכון, אבל הם ישתקפו בצורה לא נכונה בציר ה-Y (#2012). - MP3: נעשה שימוש במשך ובגודל הנתונים מ-Xing, VBRI וממטא-נתונים דומים של קצב העברת נתונים משתנה שלא ניתן לחיפוש, כשמבצעים חזרה לחיפוש של קצב העברת נתונים קבוע בגלל
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- אודיו:
- תוקן באג שגרם לכך שלא בוצעה קריאה ל-
AnalyticsListener.onAudioPositionAdvancingכשמתחילים להפעיל את האודיו קרוב מאוד לסוף המדיה. - הוספנו תמיכה בכל פורמטי הדגימות של PCM ליניארי ב-
ChannelMappingAudioProcessorוב-TrimmingAudioProcessor. - הוספנו תמיכה בפערים באודיו ב-
CompositionPlayer. - הסרת שיחה שגויה אל
BaseAudioProcessor#flush()מ-BaseAudioProcessor#reset(). - הגדרה שמאפשרת המרה של אודיו לסטריאו או למונו באופן קבוע ב-DefaultAudioMixer.
- הגדרת הסרטונים
ChannelMappingAudioProcessor,TrimmingAudioProcessorו-ToFloatPcmAudioProcessorכסרטונים שגלויים לכולם (מספר 2339). - כדי לזהות חוסרים ב-
DefaultAudioSinkבמקום להסתמך על הערכה, צריך להשתמש ב-AudioTrack#getUnderrunCount()ב-AudioTrackPositionTracker. - שיפור ההחלקה של חותמות הזמן של האודיו במקרה של סחיפה לא צפויה במיקום ממכשיר פלט האודיו.
- תיקון באג שגורם לבעיות בסנכרון אודיו/וידאו ב-10 השניות הראשונות אחרי הפסקה והמשך ההפעלה, כשמתחברים למכשירי Bluetooth.
- תוקן באג שגרם לכך ש-
AnalyticsListener.onAudioPositionAdvancingלא דיווח על הזמן שבו האודיו התחיל להתקדם, אלא על הזמן של המדידה הראשונה. - תוקן באגים שקשורים למעבר לאודיו סטריאו במכשירים מסוימים, ולחזרה לאודיו רב-ערוצי (#2258).
- תוקן באג שגרם לכך שלא בוצעה קריאה ל-
- סרטון:
- הפתרון לעיבוד נתונים של משטחים מנותקים הורחב למכשירי lenovo ו-motorola (#2059).
- שיפור השחרור של פריימים של סרטונים בצורה חלקה בהפעלה, כשדגימות האודיו לא מתחילות בדיוק במיקום המבוקש.
- הוספת פתרון עקיף לבעיה של משטחים מנותקים למכשירי realme (#2059).
- הוספת API ניסיוני
ExoPlayerכדי לכלול את הדגלMediaCodec.BUFFER_FLAG_DECODE_ONLYכשמוסיפים למאגר את מאגרי הקלט של פענוח בלבד. הדגל הזה יאותת למפענח לדלג על מאגרי הנתונים הזמניים של פענוח בלבד, וכך יתאפשר חיפוש מהיר יותר. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * שיפור הבדיקות של ביצועי קודקים לקודקים של וידאו בתוכנה. יכול להיות שבעקבות זאת, עוד טראקים יסומנו בסימןEXCEEDS_CAPABILITIES. - תיקון שגיאות בהפעלה של VP9 Widevine במכשירים מסוימים (#2408).
- טקסט:
- הוספת תמיכה בטראקים של VobSub בקובצי MP4 (#2510).
- תיקון של מצב שבו ההפעלה נתקעת כשקטע של כתוביות לא נטען בהתחלה אבל נטען בהמשך, ואחריו יש כמה קטעים ריקים של כתוביות (#2517).
- תוקנו בעיות ב-SSA וב-SubRip שגרמו לכך שלא הוצגה רמז חזותי להתקדמות כשמפעילים כתוביות (#2309).
- תוקנה בעיה שגורמת להיתקעות של ההפעלה כשעוברים משידור עם שגיאה בכתוביות לשידור חי עם רצועת כתוביות ריקה (#2328).
- תוקנה בעיה שגרמה לשיבוש בכתוביות בפורמט CEA-608 בהפעלת סטרימינג בפורמט H.262 שמכיל פריימים מסוג B (#2372).
- הוספת תמיכה בכתוביות SSA עם
CodecId = S_TEXT/SSAבקובצי Matroska. בעבר,MatroskaExtractorתמך רק ב-CodecId = S_TEXT/ASS, שמייצג את הווריאציה 'המתקדמת' (גרסה 4 ומעלה) של כתוביות SubStation Alpha (אבל לוגיקת הניתוח של ExoPlayer זהה בשתי הווריאציות) (מס' 2384). - נוספה תמיכה במאפיין
layerבקובצי כתוביות של SubStation Alpha (SSA), שמשמש להגדרת סדר השכבות של רמזים כשמוצגים יותר מרמז אחד על המסך בו-זמנית (#2124).
- מטא-נתונים:
- הוספנו תמיכה באחזור משך המדיה ו-
TimelineאלMetadataRetrieverוהעברנו אותו אלAutoCloseableAPI מבוסס-מופע. משתמשים ב-Builderהחדש כדי ליצור מופע שלMediaItem, ואז קוראים ל-retrieveTrackGroups(),retrieveTimeline()ו-retrieveDurationUs()כדי לקבלListenableFutures למטא-נתונים. השיטות הסטטיות הקודמות הוצאו משימוש (#2462).
- הוספנו תמיכה באחזור משך המדיה ו-
- תמונה:
- כדי למנוע קריסה של אפליקציה עם
Canvas: trying to draw too large bitmap.מ-PlayerViewכשמנסים להציג תמונות גדולות מאוד (למשל 50MP), צריך להגביל את מפות הסיביות המפוענחות לגודל המסך ב-BitmapFactoryImageDecoder. - משנים את החתימה של
DefaultRenderersFactory.getImageDecoderFactory()כך שתקבל פרמטרContext. - צריך להתאים את גודל הפלט המקסימלי של מפת הסיביות שמשמש ב-
CompositionPlayerלזה שכבר משמש ב-Transformer(כלומר,CompositionPlayerלא מתחשב בגודל התצוגה כשמפענחים מפות סיביות, בניגוד ל-ExoPlayer).
- כדי למנוע קריסה של אפליקציה עם
- DRM:
- הוספת עומס יתר חדש של
OfflineLicenseHelper.newWidevineInstanceשמקבלMediaItem.DrmConfigurationכדי שאפשר יהיה להחיל את כותרות בקשות ה-HTTP בצורה נכונה (#2169).
- הוספת עומס יתר חדש של
- ההשפעה:
- מוסיפים
Presentation.createForShortSide(int)שיוצרPresentationשמבטיח שהצד הקצר ביותר תמיד יתאים לערך הנתון, ללא קשר לכיוון הקלט.
- מוסיפים
- Muxers:
- תוקן באג שבו דגלי דגימה נכונים לא הוגדרו לדגימות אודיו ב-MP4 מפוצל.
-
writeSampleData()API משתמש עכשיו במחלקהBufferInfoספציפית ל-muxer במקום ב-MediaCodec.BufferInfo. - מוסיפים את
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, שערך ברירת המחדל שלו הוא false.
- IMA extension:
- תיקון באג שבו שגיאת טעינה במודעה אחת עלולה לפסול בטעות קבוצת מודעות אחרת.
- תוקן באג שגרם לכך שההפעלה של קבוצות מודעות אחרי סיום חלון ה-VOD נתקעה.
קבוצות של מודעות עם שעת התחלה אחרי חלון הזמן לא מתווספות יותר לתור של
MediaPeriodQueue(מס' 2215).
- סשן:
- תיקון באג שבו המערכת מתעלמת מחיבורים של בקרי Media3 לא מורשים של צד שלישי.
- הסרת הבדיקה של פקודות זמינות כששולחים פקודות מותאמות אישית אל
MediaBrowserServiceCompatמדור קודם. ההתנהגות הזו זהה להתנהגות של בקרים או דפדפנים מדור קודם שמחוברים לאפליקציה מדור קודם. - תוקן באג שגורם לשגיאת ההפעלה הראשונה של נגן מסוים להיות מטופלת באופן שגוי כחריגה מותאמת אישית קבועה. כך נמנעת שחזור של האפליקציה.
- תיקון באג שבו שינויים מסוימים בבקר שלא מטופלים על ידי הסשן עלולים לגרום ל
IllegalStateExceptions. - תיקון באג שבו פעולות של בקר שלא מטופלות על ידי הסשן עלולות להשאיר את הבקר במצב לא תקין.
- תיקון האזהרה על הפרת כללי ההפעלה הלא בטוחה של StrictMode (#2330).
- תוקן באג שבו קריאה לפונקציה
setSessionExtrasמהשרשור הראשי בזמן הפעלת הנגן משרשור אפליקציה אחר, שונה מהשרשור הראשי, גרמה לשגיאהIllegalStateException(מספר 2265). - לא להציג באופן אוטומטי התראה אם הנגן מוגדר עם פריטי מדיה בלי להכין או להפעיל אותם
(#2423https://github.com/androidx/media/issues/2423). אפשר להגדיר את ההתנהגות הזו באמצעות
MediaSessionService.setShowNotificationForIdlePlayer. - הוספת
PlaybackExceptionמותאם אישית לכל הבקרים או לבקרים נבחרים. - תוקן באג שבו חיפוש בשידור חי ב-
MediaControllerעלול לגרום ל-IllegalArgumentException. - בשידורים חיים, הפסקנו לפרסם את מיקום ההפעלה ואת האפשרות להעביר את הפריט הנוכחי בבקרי המדיה של הפלטפורמה, כדי למנוע ארטיפקטים של מיקום בממשק המשתמש של Android Auto (ובבקרים אחרים שמשתמשים במידע הזה מתוך סשן המדיה של הפלטפורמה) (#1758).
- תוקן באג שבו העברת ערך null אל
getLibraryRootשלMediaBrowserשמחובר אלMediaBrowserServiceCompatמדור קודם הפיקהNullPointerException. - תוקן באג שבו שליחת פעולות בהתאמה אישית, תוצאת חיפוש או בקשת getItem
גרמה לקריסת אפליקציית הסשן מדור קודם עם
ClassNotFoundException. - תוקן באג שגרם לכך ש
MediaItem.LocalConfiguration.uriשותף לMediaMetadataשל סשנים בפלטפורמה. כדי לשתף בכוונה URI כדי לאפשר לבקרי גישה לשלוח בקשה חוזרת למדיה, צריך להגדיר אתMediaItem.RequestMetadata.mediaUri.
- UI:
- תוקן באג שבו
PlayerSurfaceבתוך רכיבים לשימוש חוזר כמוLazyColumnלא עבד בצורה תקינה (#2493). - תוקן באג בכלי הכתיבה שגרם לפער בין הגדרת מצבי הלחצנים הראשוניים לבין השינוי במצב (למשל צורות הסמלים או ההפעלה). שינויים שבוצעו בנגן מחוץ לתקופת הצפייה נלקחים בחשבון (#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מכילה את טווח הבייטים שנפתר, שאיתו אפשר ליצורDownloadRequestולהוריד את התוכן בהתאם.ProgressiveDownloader - מוסיפים את
DownloadHelper.Factoryשבו מחליפים את השיטות הסטטיותDownloadHelper.forMediaItem(). - מוסיפים
Factoryלהטמעות שלSegmentDownloader. - הוספת תמיכה בהורדה חלקית של סטרימינג אדפטיבי. אפליקציות יכולות להכין סטרימינג אדפטיבי עם
DownloadHelperולבקשDownloadRequestמהכלי העזר, תוך ציון מיקומי ההתחלה והסיום של המדיה לפי זמן, שאותם ההורדה צריכה לכסות. הערך שמוחזרDownloadRequestכולל את טווח הזמן שנקבע, שאפשר ליצור באמצעותוSegmentDownloaderקונקרטי ולהוריד את התוכן בהתאם.
- הוספת תמיכה בהורדה חלקית לשידורים מתקדמים. אפליקציות יכולות להכין שידור הדרגתי עם
- תוסף Cronet:
- הוספת טיפול אוטומטי בקובצי Cookie (#5975).
- תוסף HLS:
- תוקן באג שבו
HlsSampleStreamWrapperמנסה לחפש בתוך המאגר כשאין נתונים זמינים במאגר #2598. - תוקן באג שבו בחירת הרצועה משתנה אחרי טעינה של חלקים עם השהיה נמוכה, ורמזים לטעינה מראש עלולים לגרום להפעלה להיתקע או לקפוא (#2299).
- כדי למנוע טעינות מחדש מוגזמות, המערכת ממתינה למשך מחצית מהמשך המטרה אם השרת לא מכבד את
CAN-BLOCK-RELOAD=YES(#2317). - תוקן באג שגרם להשהיית ההפעלה כשמתחילים סטרימינג של מודעות מעבר לפני מודעה באמצע הסרטון, ומתבצע ניסיון לפתור את רשימת הנכסים עבור המודעה הלא נכונה (#2558).
- תוקן ניתוח של פלייליסטים כדי לאפשר שימוש ב-
\f(הזנת טופס) בערכי מאפיינים של מחרוזות במירכאות (מס' 2420). - תמיכה בעדכון מודעות מעברון עם אותו מזהה (מס' 2427).
- תוקן באג שבו שגיאות בטעינת פלייליסטים לא מועברות לפעמים אחרי שנגמרים הקטעים לטעינה בשידור חי (#2401https://github.com/androidx/media/issues/2401).
- קיבוץ של גרסאות שונות של כתוביות לפי תג NAME, בדומה לקיבוץ של גרסאות שונות של אודיו (#1666).
- תמיכה ב-X-ASSET-LIST ובשידורים חיים באמצעות
HlsInterstitialsAdsLoader.
- תוקן באג שבו
- תוסף DASH:
- תוקנה בעיה שבה ערכת ההתאמה של הפעלת טריק-פליי מוזגה עם ערכת ההתאמה הראשית שלה כדי ליצור
TrackGroupלא תקין (מס' 2148). - תוקן באג שבו קיצור משך הזמן של תקופת DASH עלול לגרום לחריגה אם דגימות מעבר למשך הזמן החדש כבר נקראו על ידי צינור הנתונים של הרינדור (#2440).
- תוקן באג שבו לא בוצעה הפניה לכתובת אחרת כשנעשה שימוש בפרמטרים של שאילתת CMCD (#2475).
- תוקנה בעיה שבה ערכת ההתאמה של הפעלת טריק-פליי מוזגה עם ערכת ההתאמה הראשית שלה כדי ליצור
- תוסף RTSP:
- תוספים של מפענחים (FFmpeg, VP9, AV1 וכו'):
- תוקן באג שבו
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeלא משפיע על תוספים של פענוח אודיו (#2258).
- תוקן באג שבו
- תוסף Cast:
- כלי בדיקה:
- מוסיפים את
advance(player).untilPositionAtLeastואתuntilMediaItemIndexל-TestPlayerRunHelperכדי להעביר את הנגן עד שמגיעים למיקום מסוים. ברוב המקרים, השיטות האלה מהימנות יותר מהשיטות הקיימותuntilPositionו-untilStartOfMediaItem. - מעבירים את
FakeDownloaderלמודולtest-utils-robolectricכדי להשתמש בו מחדש בבדיקות אחרות. - הוסרו
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)ו-transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). במקום זאת, צריך להשתמש במדיניותShadowMediaCodecConfigכדי להגדיר מקודדים ומפענחים של צללים. - הקידומת exotest הוחלפה בקידומת media3 בשמות של רכיבי codec שדווחו על ידי
ShadowMediaCodecConfig.
- מוסיפים את
- הסרת סמלים שהוצאו משימוש:
- הסרנו את ה-constructor
SegmentDownloaderשיצא משימושSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)ואת ה-constructors התואמים במחלקות המשנה שלוDashDownloader, HlsDownloaderו-SsDownloader. - הוסרו ההגדרות
Player.hasNext()ו-Player.hasNextWindow()שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasNextMediaItem(). - הוסר
Player.next()שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem(). - הוסר
Player.seekToPreviousWindow()שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem(). - הוסר
Player.seekToNextWindow()שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem(). - הוסר
BaseAudioProcessorשהוצא משימוש במודולexoplayer. משתמשים ב-BaseAudioProcessorבמודולcommon. - צריך להסיר את ה-constructor
MediaCodecVideoRendererשיצא משימושMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- הסרנו את ה-constructor
גרסה 1.8.0-rc02
24 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-rc01
16 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-beta01
2 ביולי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.8.0-alpha01
19 במאי 2025
משתמשים בגרסה יציבה 1.8.0.
גרסה 1.7.0
גרסה 1.7.1
16 במאי 2025
הגרסה הזו כוללת את אותו קוד כמו גרסה 1.6.1, והיא מתפרסמת כדי להבטיח שהיא תופיע כגרסה 'חדשה יותר' מגרסה 1.7.0, שהייתה גרסת אלפא שסומנה בטעות כגרסה יציבה (ראו בהמשך).
גרסה 1.7.0
16 במאי 2025
הגרסה הזו הייתה אמורה להיות 1.7.0-alpha01, אבל היא תויגה בטעות כ-1.7.0 (כלומר, יציבה) ב-maven.google.com. אל תשתמשו בה. להישאר בגרסה 1.6.1 או לשדרג לגרסה 1.7.1 (שכוללת את אותו קוד כמו גרסה 1.6.1).
גרסה 1.6.0
1.6.1
14 באפריל 2025
androidx.media3:media3-*:1.6.1 משוחרר. גרסה 1.6.1 מכילה את הקודים האלה.
- ספרייה משותפת:
- הוספנו את השיטה
PlaybackParameters.withPitch(float)כדי להקל על העתקה שלPlaybackParametersעם ערך חדש שלpitch(מס' 2257).
- הוספנו את השיטה
- ExoPlayer:
- תוקנה בעיה שגרמה לכשל במעבר בין פריטי מדיה בגלל שגיאת רכיב עיבוד שניתנת לשחזור במהלך האתחול של פריט המדיה הבא (#2229).
- נפתרה בעיה שבה
ProgressiveMediaPeriodמחזיר את השגיאהIllegalStateExceptionכש-PreloadMediaSourceמנסה לקרוא ל-getBufferedDurationUs()לפני שהוא מוכן (#2315). - תיקון השליחה של
CmcdDataבבקשות למניפסט עבור DASH, HLS ו-SmoothStreaming (#2253). - מוודאים שאפשר להשתמש ב-
AdPlaybackState.withAdDurationsUs(long[][])אחרי הסרת קבוצות המודעות. המשתמש עדיין צריך להעביר מערך של משכי זמן לקבוצות מודעות שהוסרו, שיכול להיות ריק או null (#2267).
- מחולצי מידע:
- MP4: צריך לנתח את
alternate_groupמהתיבהtkhdולהציג אותו כרשומהMp4AlternateGroupDataבכל טראק שלFormat.metadata(מספר 2242).
- MP4: צריך לנתח את
- אודיו:
- תוקנה בעיה בהעברה לזיכרון הווירטואלי שבה המיקום עלול להיתקע כשמפעילים פלייליסט של תוכן קצר (#1920).
- סשן:
- הורדנו את הזמן הקצוב לתפוגה של צבירת נתוני הקריאות החוזרות (callback) של פלטפורמת
MediaSessionמ-500 ל-100 אלפיות השנייה, והוספנו פונקציית setter ניסיונית כדי לאפשר לאפליקציות להגדיר את הערך הזה. - תוקנה בעיה שבה ההתראות הופיעו מחדש אחרי שהמשתמש סגר אותן (#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עםnullMediaMetadataלא מעריכה מחדש את המטא-נתונים (#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ול-methods התואמיםMediaSourceEventListener.EventDispatcher. - תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- מעבירים את
BasePreloadManager.Listenerלרמה העליונהPreloadManagerListener. - אפשר להטמיע את
RenderersFactory.createSecondaryRendererכדי לספק מעבדים משניים לחימום מראש. חימום מראש מאפשר מעברים מהירים יותר בין פריטי מדיה במהלך ההפעלה. - הפעלת שליחה של
CmcdDataלבקשות מניפסט בפורמטים של סטרימינג אדפטיבי DASH, HLS ו-SmoothStreaming (#1951). - צריך לספק
MediaCodecInfoשל הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec(#1963). - משנים את
AdsMediaSourceכדי לאפשר ל-AdPlaybackStatesלגדול על ידי הוספת קבוצות של מודעות. המערכת מזהה שינויים לא תקינים וזורקת חריגה. - תוקנה בעיה שבה יכול להיות שיוצגו פריימים נוספים של פענוח בלבד ברצף מהיר כשעוברים לתוכן מדיה אחרי מודעה באמצע סרטון.
-
DefaultRenderersFactoryadd twoMetadataRendererinstances to כדי לאפשר לאפליקציות לקבל כברירת מחדל שתי סכימות שונות של מטא-נתונים. - הערכה מחדש של השאלה אם צריך לבטל את הטעינה המתמשכת של מקטע כשמשהים את ההפעלה (#1785).
- הוספת אפשרות ל-
ClippingMediaSourceכדי לאפשר יצירת קליפים במדיה שלא ניתן להעביר בה קדימה או אחורה. - תוקן באג שבו חיפוש באמצעות חימום מראש יכול לחסום מעבר לפריט מדיה הבא.
- תוקן באג שבו
ExoPlayer.isLoading()נשארtrueלמרות שהוא עבר ל-STATE_IDLEאו ל-STATE_ENDED(#2133). - הוספה של
lastRebufferRealtimeMsאלLoadControl.Parameter(#2113).
- הוספנו את
- Transformer:
- הוספת תמיכה בהמרה של פורמטים חלופיים שתואמים לאחור.
- נוספה תמיכה בהמרת קידוד ובהמרת פורמט של Dolby Vision (פרופיל 8).
- מעדכנים את הפרמטרים של
VideoFrameProcessor.registerInputStreamושלVideoFrameProcessor.Listener.onInputStreamRegisteredכדי להשתמש ב-Format. - יצירת מטא-נתונים סטטיים של HDR כשמשתמשים ב-
DefaultEncoderFactory. - מפעילים תמיכה באבחון של פלטפורמת Android באמצעות
MediaMetricsManager. הכלי Transformer מעביר אירועי עריכה ונתוני ביצועים לפלטפורמה, וכך מספק מידע על ביצועי המערכת וניפוי באגים במכשיר. יכול להיות ש-Google תאסוף את הנתונים האלה אם המשתמש במכשיר הפעיל את שיתוף נתוני השימוש וניתוח הביצועים. אפליקציות יכולות לבטל את ההסכמה שלהן לשיתוף נתונים לצורך אבחון פלטפורמות ב-Transformer עםTransformer.Builder.setUsePlatformDiagnostics(false). - פיצול של
InAppMuxerל-InAppMp4Muxerול-InAppFragmentedMp4Muxer. משתמשים ב-InAppMp4Muxerכדי ליצור קובץ MP4 לא מקוטע, וב-InAppFragmentedMp4Muxerכדי ליצור קובץ MP4 מקוטע. - העברת ממשק
Muxerמ-media3-muxerאלmedia3-transformer. - להוסיף את
MediaProjectionAssetLoader, שמספק מדיה מ-MediaProjectionלהקלטת מסך, ולהוסיף תמיכה בהקלטת מסך לאפליקציית ההדגמה של Transformer. - הוספת
#getInputFormat()לממשקCodec. - להעביר את האחריות לשחרור
GlObjectsProviderלמתקשר ב-DefaultVideoFrameProcessorוב-DefaultVideoCompositorכשזה אפשרי.
- מחולצי מידע:
- AVI: תוקן הטיפול בקבצים עם אודיו דחוס בקצב העברת נתונים קבוע, שבו כותרת הזרם מאחסנת את מספר הבייטים במקום את מספר המקטעים.
- תיקון הטיפול ביחידות NAL עם אורכים שמבוטאים בבייט אחד או ב-2 בייטים (במקום ב-4).
- תוקנה בעיה שגורמת ל-
ArrayIndexOutOfBoundsExceptionברשימות עריכה של MP4 כשברשימת העריכה מתחילים בפריים שלא מסונכרן ללא פריים מסונכרן קודם (#2062). - תוקנה בעיה שבה סטרימינג של TS יכול להיתקע במכשירים מסוימים (#2069).
- FLAC: נוספה תמיכה בקובצי FLAC בפורמט 32 ביט. בעבר, הפעלת הסרטונים האלה ב-
IllegalStateException: Playback stuck buffering and not loadingנכשלה (מספר 2197).
- אודיו:
- הפונקציה
onAudioPositionAdvancingנקראת עכשיו כשההפעלה מתחדשת (בעבר היא נקראה כשההפעלה הושהתה). - לא לעקוף את
SonicAudioProcessorכש-SpeedChangingAudioProcessorמוגדר עם פרמטרים שמוגדרים כברירת מחדל. - תוקנה בעיית חוסר (underflow) ב-
Sonic#getOutputSize()שעלולה לגרום להשהיה שלDefaultAudioSink. - צריך לתקן את
MediaCodecAudioRenderer.getDurationToProgressUs()ואתDecoderAudioRenderer.getDurationToProgressUs()כדי שההתקדמות תאופס בצורה נכונה בהתאם למשכי הזמן שצוינו. - הפיכת המספר
androidx.media3.common.audio.SonicAudioProcessorלקבוע. - הוספת תמיכה ב-PCM עם נקודה צפה ל-
ChannelMappingAudioProcessorול-TrimmingAudioProcessor.
- הפונקציה
- סרטון:
- משנים את
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceל-protected כדי שאפליקציות יוכלו לבטל את ההגדרה ולחסום את השימוש באזורים של placeholder (#1905). - הוספת ניתוח תלות של דגימת AV1 ניסיונית
ExoPlayerכדי להאיץ את החיפוש. מפעילים אותו באמצעות ה-API החדש שלDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - הוספת API ניסיוני
ExoPlayerלהשמטת מאגרי קלט של מפענחMediaCodecVideoRendererמאוחרים שלא תלויים בהם. מפעילים אותו באמצעותDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * תוקנה בעיה שבה שחקן ללא משטח היה מוכן באופן מיידי והפענוח של כל הפריימים בהמתנה היה איטי מאוד (#1973). - החרגה של מכשירי Xiaomi ו-OPPO ממצב משטח מנותק כדי למנוע הבהוב של המסך (#2059).
- משנים את
- טקסט:
- הוספת תמיכה בכתוביות VobSub (#8260).
- הפסקנו לטעון מראש את כל קובצי הכתוביות שהוגדרו עם
MediaItem.Builder.setSubtitleConfigurations, ועכשיו נטען רק קובץ אחד אם הוא נבחר על ידי בחירת טראק (#1721). - TTML: נוספה תמיכה בהפניה אל
tts:originו-tts:extentבאמצעותstyle(מס' 2953). - הגבלת חותמות הזמן בפורמטים WebVTT ו-SubRip ל-3 ספרות אחרי הנקודה העשרונית בדיוק. בעבר ניתחנו באופן שגוי כל מספר של מקומות אחרי הנקודה העשרונית, אבל תמיד הנחנו שהערך הוא באלפיות השנייה, מה שהוביל לחותמות זמן שגויות (#1997).
- תוקנה בעיה שגורמת להשהיית ההפעלה כשפלייליסט מכיל פריטים שנחתכו עם כתוביות CEA-608 או CEA-708.
- תוקן באג
IllegalStateExceptionשקורה כשקובץ SSA מכיל רמז עם משך אפס (זמן התחלה וזמן סיום זהים) (מס' 2052). - השבתה (ורישום ביומן) של שגיאות בניתוח כתוביות כשכתוביות משולבות באותו קובץ קונטיינר כמו אודיו ווידאו (#2052).
- תוקן הטיפול בתווי UTF-8 מרובי-בייט בקובצי WebVTT באמצעות סיומי שורה של CR (#2167).
- DRM:
- תוקנה שגיאה
MediaCodec$CryptoException: Operation not supported in this configurationבהפעלת תוכן ClearKey במכשירים עם API בגרסה < 27 (מס' 1732).
- תוקנה שגיאה
- ההשפעה:
- העברנו את הפונקציונליות של
OverlaySettingsאלStaticOverlaySettings. OverlaySettingsיכול להיות מחולק למחלקות משנה כדי לאפשר הגדרות דינמיות של שכבת-על.
- העברנו את הפונקציונליות של
- Muxers:
- העברנו את
MuxerExceptionמחוץ לממשקMuxerכדי להימנע משם מלא ארוך מאוד. - השם של השיטה
setSampleCopyEnabled()השתנה ל-setSampleCopyingEnabled()ב-Mp4Muxer.Builderוב-FragmentedMp4Muxer.Builder. - הפונקציות
Mp4Muxer.addTrack()ו-FragmentedMp4Muxer.addTrack()מחזירות עכשיו מזהה של רצועתintבמקוםTrackToken. - הפונקציות
Mp4Muxerו-FragmentedMp4Muxerלא מטמיעות יותר את הממשקMuxer. - השבתה של
Mp4Muxerאריזת דגימות והעתקה כברירת מחדל. - תיקון באג ב-
FragmentedMp4Muxerשגורם ליצירה של הרבה פרגמנטים כשנכתב רק טראק אודיו.
- העברנו את
- סשן:
- שמירת מצב השירות שפועל בחזית למשך 10 דקות נוספות כשההפעלה מושהית, נעצרת או נכשלת. כך המשתמשים יכולים להמשיך את ההפעלה במסגרת הזמן הקצוב הזה בלי להסתכן בהגבלות על שירותים שפועלים בחזית במכשירים שונים. שימו לב: אי אפשר יותר להשתמש רק בקריאה ל-
player.pause()כדי לעצור את השירות שפועל בחזית לפניstopSelf()כשמבטלים אתonTaskRemoved. במקום זאת, צריך להשתמש ב-MediaSessionService.pauseAllPlayersAndStopSelf(). - ההתראה תישאר גלויה כשההפעלה תעבור למצב שגיאה או למצב עצירה. ההתראה מוסרת רק אם הפלייליסט נמחק או שהנגן נסגר.
- שופר הטיפול בפעולות MediaSession של פלטפורמת Android ACTION_PLAY ו-ACTION_PAUSE, כך שרק אחת מהן מוגדרת בהתאם לפקודות הזמינות, וגם מתקבלת אם רק אחת מהן מוגדרת.
- מוסיפים את
Contextכפרמטר ל-MediaButtonReceiver.shouldStartForegroundService(מס' 1887). - תוקן באג שגרם לכך שקריאה לשיטה
PlayerבחיבורMediaControllerלסשן מדור קודם גרמה להסרת שינויים מעדכון בהמתנה. - הגדרת
MediaSession.setSessionActivity(PendingIntent)לקבלת ערך null (#2109). - תוקן באג שגרם לכך שהתראה לא עדכנית נשארה גלויה כשמנקים את הפלייליסט (#2211).
- שמירת מצב השירות שפועל בחזית למשך 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(), useEditedMediaItem.Builder.setFlattenForSlowMotion()to flatten theEditedMediaItempassed toTransformer.start()instead.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).
- תוקן באג ב-
- מטא-נתונים:
- Extract disc/track numbering and genre from Vorbis comments into
MediaMetadata(#1958).
- Extract disc/track numbering and genre from Vorbis comments into
גרסה 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 - מוסיפים פונקציית הרחבה להשעיה
Player.listenכדי להפעיל קורוטינה להאזנה ל-Player.Eventsבספרייהmedia3-common-ktx. - הסרת הערות
@DoNotInlineממחלקות פנימיות שמוגדרות ידנית מחוץ לשורה, כדי למנוע כשלים באימות מחלקות בזמן ריצה. בגרסאות האחרונות של R8 השיחות האלה כבר לא מתבצעות באופן אוטומטי כדי למנוע כשלים בזמן הריצה (כך שאין יותר צורך בהסרה ידנית). כל המשתמשים בספרייה ב-Gradle כבר צריכים להשתמש בגרסה של הפלאגין של Android Gradle שמשתמשת בגרסה של R8 שעושה את זה, בגללcompileSdk = 35. משתמשים בספרייה עם מערכות build שאינן Gradle צריכים לוודא ששלב הכיווץ או ההסתרה המקביל ל-R8 מבצע תהליך דומה של הוצאה אוטומטית מתוך השורה, כדי למנוע כשלים באימות של מחלקות בזמן ריצה. השינוי הזה כבר בוצע בספריות אחרות של AndroidX.
- הוספנו
- ExoPlayer:
- עכשיו אפשר להתקשר אל
MediaCodecRenderer.onProcessedStreamChange()לגבי כל פריט מדיה. בעבר, לא הייתה קריאה כזו בפעם הראשונה. כדי להפעיל את האפשרות הזו, צריך להשתמש ב-MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart(). - מוסיפים את
PreloadMediaSource.PreloadControl.onPreloadErrorכדי לאפשר הטמעות שלPreloadMediaSource.PreloadControlלבצע פעולות כשמתרחשת שגיאה. - מוסיפים את
BasePreloadManager.Listenerכדי להפיץ אירועי טרום-טעינה לאפליקציות. - אפשר לשנות את הזמן הקצוב לתפוגה של לקוח SNTP ולנסות שוב כתובות חלופיות אם הזמן הקצוב לתפוגה חלף (#1540).
- הסרת השדה
MediaCodecAdapter.Configuration.flagsכי הערך שלו תמיד היה אפס. - המשתמש יכול לבחור את הרמקול המובנה להשמעה ב-Wear OS API 35 ומעלה (אם המכשיר תומך בכך).
- דחיית חסימת השיחה אל
Context.getSystemService(Context.AUDIO_SERVICE)עד להפעלת הטיפול במיקוד האודיו. כך אפשר לוודא שהשיחה החוסמת לא תתבצע אם הטיפול במיקוד האודיו לא מופעל (#1616). - אפשרות להפעלה ללא קשר למשך הזמן של הנתונים שנטענו בזיכרון כשמתרחש כשל בטעינה (#1571).
- מוסיפים את התג
AnalyticsListener.onRendererReadyChanged()כדי לציין מתי רכיבי עיבוד נפרדים מאפשרים שההפעלה תהיה מוכנה. - תוקנה בעיה שבה לפעמים
MediaCodec.CryptoExceptionדווחה כ'שגיאה לא צפויה בסביבת זמן הריצה' כש-MediaCodecהופעלה במצב אסינכרוני (התנהגות ברירת המחדל ב-API 31 ומעלה). - כרטיס
bufferedDurationUsבמקוםbufferedPositionUsעםPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). בנוסף, הערךDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSמשתנה ל-DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, ואז האפליקציות צריכות להעביר ערך שמייצג משך זמן ספציפי ממיקום ההתחלה שמוגדר כברירת מחדל, שבמהלכו מקור המדיה המתאים צריך להיטען מראש עם IntDef הזה, במקום עם מיקום. - הוספת הטמעה של
ForwardingRendererשמעבירה את כל הקריאות לשיטות ל-renderer אחר (1703). - הוספת טעינה מראש של הפלייליסט לפריט הבא בפלייליסט. אפליקציות יכולות להפעיל טעינה מראש על ידי קריאה ל-
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)בהתאם. כברירת מחדל, הטעינה מראש מושבתת. כדי לא להפריע להפעלה, אם בחרתם להשתמש באפשרות הזו,DefaultLoadControlמגביל את הטעינה מראש כך שהיא מתחילה ונמשכת רק כשהנגן לא נטען לצורך הפעלה. אפליקציות יכולות לשנות את ההתנהגות הזו על ידי הטמעה שלLoadControl.shouldContinuePreloading()בהתאם (למשל, כשמבטלים את השיטה הזו ב-DefaultLoadControl). הטמעת ברירת המחדל שלLoadControlמשביתה את הטעינה מראש אם אפליקציה משתמשת בהטמעה מותאמת אישית שלLoadControl. - נוספה method
MediaSourceEventListener.EventDispatcher.dispatchEvent()כדי לאפשר הפעלה של אירועים של listeners מסוג subclass (1736). - מוסיפים את
DefaultPreloadManager.Builderשיוצר את המופעיםDefaultPreloadManagerו-ExoPlayerעם הגדרות משותפות באופן עקבי. - צריך להסיר את הפרמטר
Renderer[]מ-LoadControl.onTracksSelected()כי ההטמעה שלDefaultLoadControlיכולה לאחזר את סוגי הסטרימינג מ-ExoTrackSelection[]. - הוצאנו משימוש את
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])וסימנו את השיטה כסופית כדי למנוע החלפות. במקומה צריך להשתמש במדיניות החדשהDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). - דיווח על אירועי
MediaSourceEventListenerממקורות משניים ב-MergingMediaSource. התוצאה היא שאירועים של התחלת טעינה, שגיאה, ביטול או השלמה ידווחו על כתוביות שהועלו (כאלה שנוספו באמצעותMediaItem.LocalConfiguration.subtitleConfigurations), ויכול להיות שהם יופיעו כאירועי טעינה כפולים שנשלחו מ-AnalyticsListener. - למנוע מצב שבו שגיאות בכתוביות ובמטא-נתונים יגרמו להפסקת ההפעלה.
במקום זאת, הטראק הבעייתי מושבת וההפעלה של הטראקים הנותרים נמשכת (#1722).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
onLoadError. - בטיפול מגרסה קודמת בכתוביות (במהלך עיבוד), רק שגיאות טעינה משויכות מועברות באמצעות קריאות חוזרות (callback) של
onLoadError, בזמן שהמערכת מתעלמת בשקט משגיאות ניתוח (התנהגות קיימת).
- בטיפול החדש בכתוביות (במהלך החילוץ), שגיאות שקשורות לניתוח (למשל,
נתוני כתוביות לא תקינים) ולטעינה (למשל, HTTP 404) מועברות
באמצעות קריאות חוזרות (callback) של
- תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
- הוספנו פונקציית setter ל-
SntpClientכדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (#1794).
- עכשיו אפשר להתקשר אל
- Transformer:
- מוסיפים את
SurfaceAssetLoader, שתומך בהוספת נתוני סרטונים לתור של Transformer באמצעותSurface. -
ImageAssetLoaderreports unsupported input viaAssetLoader.onErrorinstead of throwing anIllegalStateException. - הופכים את הגדרת משך הזמן של התמונה באמצעות
MediaItem.Builder.setImageDurationMsלחובה לייצוא תמונות. - הוספת תמיכה בייצוא של פערים ברצפים של פריטי מדיה שערכתם (EditedMediaItems) עם אודיו.
- מוסיפים את
- בחירת טראק:
-
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 שונה מזה שצוין בבקשה, אפשר לציין את זה בבדיקות באמצעות השיטה החדשהDataSourceContractTest.TestResource.Builder.setResolvedUri(). -
DataSourceContractTest: מוודאים שהפונקציותDataSource.getUri()ו-getResponseHeaders()מחזירות את הערך open אחרי קריאה שנכשלה לפונקציהopen()(בגלל משאב שלא נמצא) ולפני קריאה עוקבת לפונקציהclose().- החלפת הערך של
DataSourceContractTest.getNotFoundResources()מאפשרת למחלקות משנה של בדיקות לספק כמה משאבים מסוג 'לא נמצא', וגם לספק את כל הכותרות הצפויות. כך אפשר להבחין בין HTTP 404 (עם כותרות) לבין 'השרת לא נמצא' (ללא כותרות).
- החלפת הערך של
- בוצע עדכון של
- אודיו:
- הגדרת מטא-נתונים של עוצמת הקול לפי תקן CTA-2075 באופן אוטומטי ב-Codec אם הם קיימים במדיה.
- הנמכה הדרגתית של עוצמת הקול בזמן חיפוש.
- איך לפתור בעיות שקשורות לצלילי פופ שיכולים להופיע במהלך חיפוש.
- תיקון שגיאות של חיתוך מצטבר באלגוריתם של Sonic לשינוי מהירות/גובה הצליל.
- תוקן באג ב-
SpeedChangingAudioProcessorשגורם להשמטת פריימים של פלט.
- סרטון:
-
MediaCodecVideoRendererנמנע מפענוח דגימות שלא מוצגות ולא משמשות כהפניה לדגימות אחרות. - ב-API 35 ומעלה, יכול להיות שעכשיו
MediaCodecAdapterיקבלnullSurfaceב-configureוקריאות לשיטה חדשהdetachOutputSurfaceכדי להסירSurfaceשהוגדר בעבר אם רכיב ה-codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported). - שימוש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו, אם יש כאלה, במהלך העיבוד של
onOutputFormatChanged(#1371).MediaCodecAdapter - הוספנו פתרון עקיף לבעיה במכשיר Galaxy Tab S7 FE שגורמת לכך שסטרימינג מאובטח של H264 ב-60fps מסומן כלא נתמך (#1619).
- הוספת פתרון עקיף לבעיה ב-codecs שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות לסיום הסטרימינג.
-
- טקסט:
- הוספה של
VoiceSpanבהתאמה אישית ואכלוס שלה עבור טווחים של קול ב-WebVTT (#1632). - מוודאים שקובצי WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שגורמות לגלישה מעבר לקיבולת של
longבייטים כשמייצגים אותן כמיקרו-שניות ומכפילים אותן בבסיס הזמן של90,000MPEG) מוצגים (#1763). - תמיכה בכתוביות CEA-608 בתוכן Dolby Vision (#1820).
- תוקן באג שגורם להשהיית ההפעלה בשידורי DASH מרובי תקופות כשהכתוביות בפורמט CEA-608 מופעלות (#1863).
- הוספה של
- מטא-נתונים:
- מקצים את הסוג
C.TRACK_TYPE_METADATAלטראקים שמכילים תוכן מסוג icy או vnd.dvb.ait.
- מקצים את הסוג
- תמונה:
- הוספת
ExternallyLoadedImageDecoderלשילוב פשוט עם ספריות חיצוניות לטעינת תמונות כמו Glide או Coil.
- הוספת
- DataSource:
- הוספנו את
FileDescriptorDataSource,DataSourceחדש שאפשר להשתמש בו כדי לקרוא מFileDescriptor(#3757).
- הוספנו את
- ההשפעה:
- הוספת פתרון עקיף לבעיה
DefaultVideoFrameProcessorשל שינוי קנה מידה קלSurfaceTextureSurfaceTextureעשוי לכלול שינוי קנה מידה קטן שגורם לחיתוך של שוליים ברוחב של 1 טקסל מסביב לקצה של מאגר חתוך. הטיפול בבעיה הזו מתבצע עכשיו כך שהפלט קרוב יותר למה שמצופה. - האצה
DefaultVideoFrameProcessor.queueInputBitmap(). כתוצאה מכך, אפשר לייצא תמונות לסרטונים עםTransformerמהר יותר.
- הוספת פתרון עקיף לבעיה
- IMA extension:
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
ArrayIndexOutOfBoundsExceptionב-ImaServerSideAdInsertionMediaSource. - תוקן באג שבו הפעלה של סטרימינג של DAI עם הוספה בצד השרת ללא פרסומת לפני הסרטון עלולה לגרום לשגיאה
ArrayIndexOutOfBoundsExceptionאחרי ההפעלה של הפרסומת האחרונה באמצע הסרטון (#1741).
- תוקן באג שבו ניקוי הפלייליסט עלול לגרום ל-
- סשן:
- כדי לאפשר לאפליקציות להשבית פקודת הפעלה שמגיעה להן להמשך הפעלה, צריך להוסיף את
MediaButtonReceiver.shouldStartForegroundService(Intent)כדי לבטל את השיטה הזו. כברירת מחדל, השירות תמיד מופעל ולא ניתן להשבית את ההפעלה שלו בלי שהמערכת תקרוס בגלל השירות עםForegroundServiceDidNotStartInTimeException(#1528). - תוקן באג שגרם לכך שפקודות מותאמות אישית שנשלחו מ-
MediaBrowserהועברו אלMediaSessionCompat.Callbackבמקום אל הגרסהMediaBrowserServiceCompatשל השיטה, כשהיה חיבור לשירות מדור קודם. כתוצאה מכך,MediaBrowserלא קיבל את ערך ההחזרה בפועל שנשלח חזרה מהשירות מדור קודם (#1474). - טיפלנו בחריגה
IllegalArgumentExceptionשמופעלת על ידי מכשירים של יצרנים מסוימים כשמגדירים את מקלט השידור לכוונות של לחצן המדיה (#1730). - להוסיף כפתורי פקודות לפריטי מדיה. הפעולה הזו מוסיפה את Media3 API למה שהיה ידוע בתור
Custom browse actionsעם ספריית הישנה עםMediaBrowserCompat. שימו לב: כפתורי הפקודות של Media3 לפריטי מדיה זמינים גם ל-MediaBrowserוגם ל-MediaController. איך מטמיעים פעולות מותאמות אישית לגלישה * תוקן באג שבו לפעמים בקר Media3 לא הצליח לאפשר לאפליקציית סשן להפעיל שירות בחזית אחרי שליחת בקשה שלplay(). - הגבלת
CommandButton.Builder.setIconUriלקבלת כתובות URI של תוכן בלבד. - העברת רמזים לחיבור של דפדפן Media3 אל
MediaBrowserCompatהראשוני כשמתחברים אלMediaBrowserCompatמדור קודם. השירות יכול לקבל את רמזי החיבור שמועברים כרמזי שורש עם הקריאה הראשונה ל-onGetRoot(). - תוקן באג שבו
MediaBrowserשמחובר לשירות דפדפן מדור קודם לא קיבל שגיאה שנשלחה על ידי השירות אחרי שהדפדפן נרשם ל-parentid. - שיפור ההתנהגות של יכולת הפעולה ההדדית, כך שדפדפן Media3 שמחובר ל-
MediaBrowserServiceמדור קודם לא יבקש את הצאצאים שלparentIdפעמיים כשנרשמים להורה.
- כדי לאפשר לאפליקציות להשבית פקודת הפעלה שמגיעה להן להמשך הפעלה, צריך להוסיף את
- UI:
- הפעלנו את הפתרון העקיף
PlayerView-in-Compose-AndroidViewכדי לטפל בבעיות שקשורות למעברים משותפים מבוססי-XML בסרטונים שנחתכו או שהוצגו עם מרווחים. אפליקציות שמשתמשות ב-PlayerViewבתוךAndroidViewצריכות לשלוח קריאה ל-PlayerView.setEnableComposeSurfaceSyncWorkaroundכדי להביע הסכמה (#1237, #1594). - הוספנו את
setFullscreenButtonStateל-PlayerViewכדי לאפשר עדכונים של הסמל של הלחצן למסך מלא לפי דרישה, כלומר מחוץ לפס ומבלי להגיב לאינטראקציה של לחיצה (#1590, #184). - תיקון באג שבו האפשרות 'ללא' בבחירת הטקסט לא פועלת אם יש העדפות לבחירת רצועת טקסט שהוגדרו באפליקציה.
- הפעלנו את הפתרון העקיף
- תוסף DASH:
- הוספנו תמיכה בתקופות שמתחילות באמצע פלח (#1440).
- תוסף Smooth Streaming:
- תיקון שגיאה
Bad magic number for Bundleבהפעלת סטרימינג של SmoothStreaming עם טראקים של טקסט (#1779).
- תיקון שגיאה
- תוסף RTSP:
- תוספי פענוח (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 מכילה את הקומטים האלה.
- ספרייה משותפת:
- במקום להתעלם משיחות חיפוש שמוגדרות כ-no-op, צריך להעביר אותן לשיטות המוגנות
BasePlayer.seekTo()ו-SimpleBasePlayer.handleSeek(). אם מטמיעים את השיטות האלה בנגן בהתאמה אישית, יכול להיות שיהיה צורך לטפל בקריאות הנוספות האלה באמצעותmediaItemIndex == C.INDEX_UNSET. - הסרת תלות בהידור של ביטול סוכר משופר ב-Java 8 (#1312).
- חשוב לוודא שהמשך שהועבר אל
MediaItem.Builder.setImageDurationMs()לא רלוונטי לMediaItemשאינו תמונה (כפי שמתואר במסמכים). - הוספת
Format.customDataלאחסון מידע מותאם אישית שסופק על ידי האפליקציה לגבי מופעים שלFormat.
- במקום להתעלם משיחות חיפוש שמוגדרות כ-no-op, צריך להעביר אותן לשיטות המוגנות
- ExoPlayer:
- מוסיפים את
BasePreloadManagerשמתאם את הטעינה מראש של כמה מקורות על סמך העדיפויות שמוגדרות על ידיrankingData. אפשר להתאים אישית את המחלקה הזו באמצעות הרחבה שלה. מוסיפים את התגDefaultPreloadManagerשמשתמש ב-PreloadMediaSourceכדי לטעון מראש דגימות של מדיה מהמקורות לזיכרון, ומשתמש במספר שלםrankingDataשמציין את האינדקס של פריט בממשק המשתמש. - מוסיפים
PlayerIdלרוב השיטות שלLoadControlכדי לאפשר הטמעות שלLoadControlלתמיכה במספר נגנים. - הסרה של
Buffer.isDecodeOnly()ושלC.BUFFER_FLAG_DECODE_ONLY. אין צורך להגדיר את הדגל הזה, כי רכיבי ה-renderer והמפענחים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. ביישומים מותאמים אישית שלRendererצריך לבדוק אם זמן ההשהיה הוא לפחותRendererכדי להחליט אם להציג דוגמה.BaseRenderer.getLastResetPositionUs()הטמעות מותאמות אישית שלSimpleDecoderיכולות לבדוקisAtLeastOutputStartTimeUs()אם צריך, או לסמן מאגרי נתונים זמניים אחרים באמצעותDecoderOutputBuffer.shouldBeSkippedכדי לדלג עליהם. - הפונקציה מאפשרת להחזיר ערך null על ידי
TargetPreloadStatusControl.getTargetPreloadStatus(T)כדי לציין שלא לבצע טעינה מראש שלMediaSourceעםrankingDataהנתון. - הוספה של
remove(MediaSource)אלBasePreloadManager. - מוסיפים את
reset()אלBasePreloadManagerכדי לבטל את ההחזקה של כל המקורות תוך שמירה על מופע מנהל הטעינה מראש. - מוסיפים
ExoPlayer.setPriority()(ו-Builder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManagerואת חשיבות MediaCodec מ-API 35. - פתרון בעיה בעדכון של הזמן האחרון של טעינת נתונים למאגר, שגרמה למפתח
bs(buffer starvation) שגוי ב-CMCD (#1124). - מוסיפים את התג
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)כדי לציין שהמקור נטען עד הסוף. ההרשאה הזו מאפשרת להטמעות שלDefaultPreloadManagerושלPreloadMediaSource.PreloadControlלטעון מראש את המקור הבא או לבצע פעולות אחרות. - תוקן באג שבו דילוג על קטעי שקט בסוף פריטים יכול להפעיל חריגה בהפעלה.
- כדי לבטל את תקופת הטעינה מראש, מוסיפים את
clearאלPreloadMediaSource. - הוספת קוד שגיאה חדש
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDשמשמש כאשר משחררים משאבי codec למשימות בעדיפות גבוהה יותר. - מאפשרים ל-
AdsMediaSourceלטעון מודעות לפני הסרטון לפני שמושלמת ההכנה של תוכן המדיה הראשוני (#1358). - תוקן באג שגרם להעברת ההפעלה אל
STATE_ENDEDכשמכינים מחדש שידור חי בפורמט DASH עם כמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט. - שינוי השם של
onTimelineRefreshed()ל-onSourcePrepared()ושלonPrepared()ל-onTracksSelected()ב-PreloadMediaSource.PreloadControl. צריך גם לשנות את השם של IntDefs ב-DefaultPreloadManager.Stageבהתאם. - הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההפעלה של המעבד, ולדחות את ההפעלה עד שהרכיבים יכולים להתקדם.
אפשר להפעיל את ההגדרה הזו באמצעות
experimentalSetDynamicSchedulingEnabled()כשמגדירים את מופע ExoPlayer. - מוסיפים את
Renderer.getDurationToProgressUs(). ARendererיכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שצריך להפעיל את התוכן כדי שהרכיב Renderer יתקדם. אםExoPlayerמוגדר עםexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerיקרא לשיטה הזו כשהוא יחשב את הזמן לתזמון של משימת העבודה שלו. - הוספת
MediaCodecAdapter#OnBufferAvailableListenerלהתראה כשהמאגרים של הקלט והפלט זמינים לשימוש על ידיMediaCodecRenderer. MediaCodecRendererישלח אות ל-ExoPlayerכשהוא יקבל את הקריאות החוזרות האלה, ואםExoPlayerמוגדר עםexperimentalSetDynamicSchedulingEnabled(), אזExoPlayerיתזמן את לולאת העבודה שלו כשהרכיבים יוכלו להתקדם. - שימוש במחלקת נתונים לשיטות
LoadControlבמקום בפרמטרים נפרדים. - מוסיפים את
ExoPlayer.isReleased()כדי לבדוק אם בוצעה קריאה אלExoplayer.release(). - הוספת
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()כדי להגדיר את המיקום המקסימלי שבוseekToPrevious()מחפש את הפריט הקודם (#1425). - תוקנו כמה אי-התאמות במיקוד האודיו, למשל, לא מדווח על אובדן מיקוד מלא או זמני בזמן שהנגן מושהה (#1436).
- תיקון בעיות פוטנציאליות
IndexOutOfBoundsExceptionשנגרמות בגלל דוחות של כלי חילוץ על רצועות נוספות אחרי שלב ההכנה הראשוני (#1476). -
Effectsב-ExoPlayer.setVideoEffect()יקבלו את חותמות הזמן עם ההיסט של הרנדרר שהוסר (#1098). - תוקנה בעיה פוטנציאלית
IllegalArgumentExceptionבטיפול בשגיאת הפעלה שהתרחשה במהלך קריאה מראש של פריט אחר בפלייליסט (#1483).
- מוסיפים את
- Transformer:
- מוסיפים את התווים
audioConversionProcessו-videoConversionProcessל-ExportResultכדי לציין איך נוצר כל טראק בקובץ הפלט. - הפחתת רמת האופטימיזציה של חיתוך סרטונים בפורמט H.264.
- הוספנו תמיכה במעבר בין מדיה מסוג SDR ל-HDR ברצף.
- הוספת תמיכה באפקטים של אודיו ברמת הקומפוזיציה.
- הוספת תמיכה בטרנסקוד של תמונות Ultra HDR לסרטוני HDR.
- תוקנה הבעיה שבה הפונקציה
DefaultAudioMixerלא מחזירה את מספר הבייטים הנכון אחרי איפוס ושימוש חוזר. - פתרון לבעיה במפענח שבה מספר ערוצי האודיו הוגבל לסטריאו כשמטפלים בקלט PCM.
- כשבוחרים טראקים ב-
ExoPlayerAssetLoader, מתעלמים ממגבלות על מספר ערוצי האודיו כי הן חלות רק על הפעלה. - החלפת הממשק
androidx.media3.transformer.Muxerב-androidx.media3.muxer.Muxerוהסרתandroidx.media3.transformer.Muxer. - תיקון טעינת תמונות HEIC מסכימות URI של תוכן. (#1373).
- כדי לשפר את הסנכרון בין האודיו לווידאו, משנים את משך הזמן של טראק האודיו ב
AudioGraphInput. - הסרת השדה
ExportResult.processedInputs. אם אתם משתמשים בשדה הזה לפרטי קודק, אתם צריכים להשתמש במקום זאת בשדהDefaultDecoderFactory.listener. במקרה של חריגה ב-codec, פרטי ה-codec יהיו זמינים ב-ExportException.codecInfo.
- מוסיפים את התווים
- מחולצי מידע:
- MPEG-TS: כדי להעביר את השינוי קדימה, צריך לוודא שהפריים האחרון עובר רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (#7909). שילוב תיקונים לפתרון הבעיות שצצו בשידורים בפרוטוקול HLS עם I-frame בלבד(#1150) ובשידורים בפרוטוקול HLS עם H.262 (#1126).
- MP3: עדיף להשתמש בגודל הנתונים מתוך מסגרת
Infoבמקום בגודל שמופיע בזרם הבסיסי (למשל, גודל הקובץ או כותרת ה-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 מקלט bitmap של Ultra HDR.
- הוספת תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפרת את פלט פני השטח של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
- מעדכנים את ההטמעה של מטריצת השכבות כך שתהיה עקבית עם התיעוד, על ידי היפוך הערכים של x ו-y שמוחלים ב-
setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את ערכי x ו-y על ידי הכפלתם ב--1. - תוקן באג שגורם לקריסה של
TimestampWrapperכשמשתמשים בו עםExoPlayer#setVideoEffects(#821). - שינוי מרחב העבודה של צבעי SDR שמוגדר כברירת מחדל מצבעים ליניאריים לסרטון SDR חשמלי בתקן BT 709. צריך גם לספק אפשרות שלישית לשמירה של מרחב הצבעים המקורי.
- אפשר להגדיר סדר Z לא קבוע של EditedMediaItemSequences (#1055).
- שמירה על טווח בהירות עקבי בין פריטי תוכן שונים ב-HDR (השימוש הוא בטווח HLG).
- הוספנו תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
- יש הרשאה לשימוש באפקטים של
SeparableConvolutionלפני API 26. - מסירים את
OverlaySettings.useHdrשלא בשימוש כי הטווח הדינמי של שכבת העל והמסגרת חייב להיות זהה. - הוספת תמיכה ב-HDR ל-
TextOverlay. אפשר לשנות את בהירות שכבת הטקסט באמצעותOverlaySettings.Builder.setHdrLuminanceMultiplier().
- תמיכה בכמה שינויים במהירות באותו תג
- IMA extension:
- קידום של API שנדרש לאפליקציות כדי להפעיל סטרימינג של מודעות DAI לגרסה יציבה.
- מוסיפים
replaceAdTagParameters(Map <String, String>)ל-ImaServerSideAdInsertionMediaSource.AdLoaderשמאפשר להחליף פרמטרים של תג פרסום בזמן ריצה. - תוקן באג שגרם לכך שהפונקציה
VideoAdPlayer.VideoAdPlayerCallback.onError()לא נקראה כשהתרחשה שגיאת הפעלה במהלך הפעלת מודעה (#1334). - העלאה של גרסת IMA SDK ל-3.33.0 כדי לתקן
NullPointerExceptionכשמשתמשים בכתובות URI של תגי מודעותdata://(מס' 700).
- סשן:
- משנים את ברירת המחדל של
CommandButton.enabledל-trueומוודאים שהערך יכול להישאר false לבקרים גם אם הפקודה המשויכת זמינה. - הוספת קבועים של סמלים בשביל
CommandButtonשצריך להשתמש בהם במקום במשאבי סמלים מותאמים אישית. - הוספנו את
MediaSessionService.isPlaybackOngoing()כדי לאפשר לאפליקציות לשלוח שאילתות לגבי הצורך בהפסקת השירות ב-onTaskRemoved()(#1219). - הוספנו את
MediaSessionService.pauseAllPlayersAndStopSelf()שמאפשר להשהות את ההפעלה של כל הסשנים ולקרוא ל-stopSelf()כדי לסיים את מחזור החיים שלMediaSessionService. - אפשר להגדיר את הערך
MediaSessionService.onTaskRemoved(Intent)כדי לספק הטמעה בטוחה כברירת מחדל, שתשאיר את השירות פועל בחזית אם ההפעלה נמשכת, או תפסיק את השירות אחרת. - כדי להסתיר את סרגל ההתקדמות בהתראה על מדיה לשידורים חיים, לא מגדירים את משך הזמן במטא-נתונים של סשן הפלטפורמה (#1256).
- התאמת ההמרה של
MediaMetadataל-MediaDescriptionCompat, כדי להשתמש באותו סדר עדיפות והיגיון כשבוחרים מאפייני מטא-נתונים כמו ב-media1. - הוספת
MediaSession.sendError()שמאפשרת שליחת שגיאות לא קריטיות אל הבקר של Media3. כשמשתמשים בבקר ההתראות (ראוMediaSession.getMediaNotificationControllerInfo()), השגיאה המותאמת אישית משמשת לעדכוןPlaybackStateשל סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (מס' 543). - מוסיפים את
MediaSession.Callback.onPlayerInteractionFinished()כדי להודיע על סיום סדרה של אינטראקציות עם הנגן מבקר מסוים. - מוסיפים את
SessionErrorומשתמשים בו ב-SessionResultוב-LibraryResultבמקום קוד השגיאה כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר. - פרסום הקוד של אפליקציית הבדיקה של media3 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.FormatSupportIntDef ושל הקבועים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שיכולה להתרחש ב-framework של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/]nameraw, כאשרpackageשונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו תמיד הייתה מתועדת כפועלת, אבל עד עכשיו היא לא הוטמעה בצורה נכונה. - מבצעים נורמליזציה של סוגי MIME שמוגדרים על ידי קוד האפליקציה או נקראים ממדיה, כך שיהיו באותיות קטנות בלבד.
- הגדרת מודעות עם
MediaItemמלא במקוםUriיחיד ב-AdPlaybackState. - הגדלת הערך של
minSdkל-19 (Android KitKat). הגישה הזו תואמת לכל הספריות האחרות של AndroidX, והיא נדרשת כדי שנוכל לשדרג לגרסאות האחרונות של התלויות שלנו ב-AndroidX. - מאכלסים את שני השדות
artworkUriו-artworkDataב-MediaMetadata.Builder.populate(MediaMetadata)אם לפחות אחד מהם לא ריק (#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.- תוסף IMA:
- תוקנה בעיה שגרמה לכך שלא ניתן היה להפעיל מודעות בפורמטים DASH ו-HLS ללא סיומת הקובץ המתאימה.
- הפעלת דוגמאות לא מוצפנות של 'יתרון ברור' בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדוגמאות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות
- סשן:
- השבתת זיהוי לחיצה כפולה באפליקציות לטלוויזיה (#962).
- תוקנה הבעיה שבה
MediaItem.RequestMetadataעם תוספים לא ריקים בלבד לא מועבר בין בקרי מדיה לסשנים. - מוסיפים קונסטרוקטור ל-
MediaLibrarySession.Builderשמקבל רקContextבמקוםMediaLibraryService.
- תוסף HLS:
- הגבלת הגישה של
HlsMediaPeriodל-package-private. לא מומלץ להסתמך על הסוג הזה ישירות מחוץ לחבילת HLS. - שיפור היעילות של מעבר לתחילת קטע (#1031).
- הגבלת הגישה של
- תוספי פענוח (FFmpeg, VP9, AV1, MIDI וכו'):
- מפענח MIDI: התעלמות מהודעות אירועים מסוג SysEx (#710).
- כלי בדיקה:
- לא להשהות את ההפעלה ב-
TestPlayerRunHelper.playUntilPosition. במהלך הבדיקה, ההפעלה נשארת במצב פעיל, אבל ההתקדמות מושהית עד שהבדיקה תוכל להוסיף טענות ופעולות נוספות.
- לא להשהות את ההפעלה ב-
- אפליקציית הדגמה:
- מוסיפים מודול הדגמה של סרטון קצר כדי להדגים את השימוש ב-
PreloadMediaSourceבתרחיש השימוש בתוכן קצר.
- מוסיפים מודול הדגמה של סרטון קצר כדי להדגים את השימוש ב-
גרסה 1.3.0-rc01
22 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-beta01
7 בפברואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.3.0-alpha01
15 בינואר 2024
משתמשים בגרסה 1.3.0 היציבה.
גרסה 1.2.0
גרסה 1.2.1
9 בינואר 2024
- ExoPlayer:
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
LiveConfiguration.min/maxOffsetממשיכים לשנות את ההיסט בחזרה ל-min/maxOffset. - תיקון בעיה שבה פריסות הערוצים של OPUS ו-VORBIS שגויות עבור 3, 5, 6, 7 ו-8 ערוצים (#8396).
- נפתרה בעיה שגרמה לכך שכשבוחרים רצועות אחרי מעבר למיקום אפס בשידור חי, השידור מתחיל במיקום ברירת המחדל שלו (#9347).
- תוקנה הבעיה שבה מופעים חדשים של
CmcdData.Factoryקיבלו ערכים שליליים שלbufferedDurationUsממקורות של נתחי נתונים, וכתוצאה מכך התקבלה שגיאהIllegalArgumentException(מס' 888).
- תוקנה בעיה שבה חיפושים ידניים מחוץ לטווח
- Transformer:
- עקיפת בעיה שבה המקודד נכשל בזמן ההגדרה בגלל הגדרת קצב הפעלה גבוה.
- מחולצי מידע:
- כדי למנוע בחירה אוטומטית של טראקים משניים (שלא ניתן להפעיל) בפורמט HEVC בתמונות JPEG נעות להפעלה בגלל הרזולוציה הגבוהה שלהם, צריך לסמן אותם ב-
ROLE_FLAG_ALTERNATE. - תיקון זיהוי שגוי של תמונות מפתח בסטרימינג של TS H264 (#864).
- תיקון הערכת משך הזמן של סטרימינג בפורמט TS שאורכו יותר מ-47,721 שניות (#855).
- כדי למנוע בחירה אוטומטית של טראקים משניים (שלא ניתן להפעיל) בפורמט HEVC בתמונות JPEG נעות להפעלה בגלל הרזולוציה הגבוהה שלהם, צריך לסמן אותם ב-
- אודיו:
- תוקן הטיפול ב-EOS עבור
SilenceSkippingAudioProcessorכשמתבצעות כמה קריאות (#712).
- תוקן הטיפול ב-EOS עבור
- סרטון:
- נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE, Chromecast with Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג ב-AVC בקצב של 60fps כסטרימינג שלא נתמך (#693).
- מטא-נתונים:
- תוקן באג שבו
MediaMetadataאוכלס רק מתגובות Vorbis עם מפתחות באותיות רישיות (#876). - הבעיה הזו מתרחשת כשמנתחים פריימים גדולים מאוד של ID3, כלומר ההפעלה יכולה להימשך בלי פרטי התג במקום להיכשל לחלוטין.
OutOfMemoryError
- תוקן באג שבו
- 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 שבה פרמטרים של סוגים גנריים שניתן להגדיר כ-nullable וסוגים של רכיבי מערך שניתן להגדיר כ-nullable לא מזוהים כ-nullable. דוגמאות הן פרמטרים של שיטות
TrackSelectorResultו-SimpleDecoder(מס' 6792). - שינוי התנהגות ברירת המחדל של ממשק המשתמש וההתראות ב-
Util.shouldShowPlayButtonכדי להציג לחצן 'הפעלה' בזמן שההפעלה מושהית באופן זמני (למשל, בגלל אובדן זמני של מיקוד האודיו). אפשר לשמור על ההתנהגות הקודמת באמצעותPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)אוMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(מס' 11213). - שדרוג
androidx.annotation:annotation-experimentalל-1.3.1כדי לתקן את https://issuetracker.google.com/251172715. - מעבירים את
ExoPlayer.setAudioAttributesלממשקPlayer.
- מוסיפים פרמטר
- ExoPlayer:
- תוקנו בעיות בהזזה בשידורי AC4 שנגרמו בגלל זיהוי לא נכון של דגימות של פענוח בלבד (#11000).
- הוספנו אפשרות להשבית את ההפעלה במכשירי פלט אודיו לא מתאימים (למשל, הרמקול המובנה במכשירי Wear OS) כשהתכונה הזו מופעלת דרך
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. הסיבה לביטול ההפעלה תתעדכן ל-Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTאם תתבצע ניסיון הפעלה כשאין פלט אודיו מתאים, או אם כל הפלטים המתאימים ינותקו במהלך ההפעלה. סיבת ההשבתה תוסר כשיחוברו פלט מתאים. - מוסיפים
MediaSource.canUpdateMediaItemו-MediaSource.updateMediaItemכדי לאשר עדכונים שלMediaItemאחרי היצירה דרךPlayer.replaceMediaItem(s). - אפשר לעדכן את כל המחלקות
MediaSourceשסופקו על ידי הספרייהMediaItemבאמצעותPlayer.replaceMediaItem(s)(מספר 33, מספר 9978). - שינוי השם של
MimeTypes.TEXT_EXOPLAYER_CUESל-MimeTypes.APPLICATION_MEDIA3_CUES. - מוסיפים
PngExtractorששולח וקורא קובץ PNG שלם לתוךTrackOutputכדוגמה אחת. - שיפור של method
SequenceableLoader.continueLoading(long)בממשקSequenceableLoaderל-SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfoמכיל פרמטרים נוספים, כוללplaybackSpeedו-lastRebufferRealtimeMs, בנוסף ל-playbackPositionUsהקיים. - שיפור השיטה
ChunkSource.getNextChunk(long, long, List, ChunkHolder)בממשקChunkSourceל-ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - הוספת שדות נוספים לרישום ביומן של נתוני Common Media Client Data (CMCD): מחסור במאגר (
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יבחר רק טראק אודיו, ורק אם הפורמט של הטראק הזה נתמך בהעברה. אם אין טראק אודיו נתמך בהעברה, לא ייבחר טראק. - השבתת התמיכה בהעברה ללא הפסקה כשמשתמשים בגרסאות שקודמות לרמת API 33, בגלל בעיה במיקום ההפעלה אחרי מעבר בין טראקים.
- הסרת הפרמטר
enableOffloadמחתימת השיטהDefaultRenderersFactory.buildAudioSink. - הסרת אמצעי התשלום
DefaultAudioSink.Builder.setOffloadMode. - הסרת הערך intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - הוספנו תמיכה במטא-נתונים של Opus gapless במהלך הפעלת offload.
- מתן אפשרות לשחזור של רכיב ה-Renderer על ידי השבתת ההעברה אם היא נכשלה בכתיבה הראשונה (#627).
- הפעלת תזמון העברה כברירת מחדל להפעלה של תוכן שהועבר במצב אודיו בלבד.
- מוחקים את
ExoPlayer.experimentalSetOffloadSchedulingEnabledואתAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - השם של
onExperimentalSleepingForOffloadChangedהשתנה ל-onSleepingForOffloadChangedושלonExperimentalOffloadedPlaybackל-onOffloadedPlayback. - העברת ממשקי
TrackSelectionParametersוהגדרות שקשורים למצב העברת אודיו ל-offload למחלקה פנימיתAudioOffloadPreferences. - הוספת קריאות חוזרות (callback) של
onAudioTrackInitializedו-onAudioTrackReleasedאלAnalyticsListener, אלAudioRendererEventListenerואלAudioSink.Listener. - תיקון בעיה של חוסר בזיכרון המטמון של אודיו ב-DTS Express (#650).
- תוקן באג שבו בדיקת היכולות של E-AC3-JOC מחזירה את השגיאה
IllegalArgumentException(#677).
- הוספנו תמיכה ב-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, צריך להשתמש רק ב-API מעל גרסה 31 (מס' 167).
android.media.session.MediaSession.setMediaButtonBroadcastReceiver() - משתמשים בבקר של התראות המדיה כפרוקסי כדי להגדיר פקודות זמינות ופריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
- המרת אירועים של לחצני מדיה שמתקבלים על ידי
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 Setup במרווח הזמן של שליחת בקשות 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: שינוי הלוגיקה של חיתוך רמזים כך שרק טקסט גלוי ייחשב. בעבר, ההזחה וההזחה באמצעות מקש Tab נכללו כשמגבילים את אורך הרמז ל-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_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_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. - מוסיפים פרמטרים לשיטות
LoadControlshouldStartPlaybackו-onTracksSelectedכדי לאפשר שיוך של השיטות האלה לMediaPeriodהרלוונטי. - משנים את החתימה של
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID שמשמשים כמפתחות במפה. הדבר נדרש כדי למנוע בעיות של בו-זמניות בשידורים חיים עם כמה תקופות. - הוצאה משימוש של
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)ושלBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). אפשר להשתמש במקום זאת בגרסה של השיטות בליmediaTimeOffsetUs. שימו לב שגם בווריאציות שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUsול-endTimeUsשל אובייקטים מסוגMediaLoadDataשנשלחים על ידי ה-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). - תוקן באג שגרם לכך שהטרנספורמציה נתקעה (מה שהוביל לפסק זמן של ה-muxer) אם סוף הווידאו בסטרימינג סומן ברגע שפריים קלט המתין לעיבוד.
- כדי להרחיב את התמיכה, אפשר להשתמש ב-
MediaCodecListבמקום בכלי השירות שלfindDecoder/EncoderForFormatכדי לשלוח שאילתות לגבי קודקים. - הסרת ההגדרה של B-frame ב-
DefaultEncoderFactoryכי היא לא פועלת בחלק מהמכשירים.
- הסרה של
- בחירת טראק:
- הוספה
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeמושבתת כברירת מחדל. כשהאפשרות הזו מופעלת, התגDefaultTrackSelectorמפעיל בחירה חדשה של טראק כשהיכולות של רכיב העיבוד משתנות.
- הוספה
- מחולצי מידע:
- אודיו:
- תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל ו
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. - מסירים את הבונה
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במקום זאת. - מסירים את הבונה
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 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.7 של ExoPlayer.
הגרסה הזו כוללת את השינויים הבאים מאז גרסה 1.0.1:
- ספריית ליבה:
- מוסיפים את הדגל
Buffer.isLastSample()שמציין אםBufferמכיל את הדגלC.BUFFER_FLAG_LAST_SAMPLE. - תיקון בעיה שבה יכול להיות שהפריים האחרון לא יעבור רינדור אם הדגימה האחרונה עם הפריים תוסר מהתור בלי לקרוא את הדגימה של 'סוף הזרם'. (#11079).
- מוסיפים את הדגל
- מחולצי מידע:
- תוקן ניתוח של H.265 SPS בקובצי MPEG-TS על ידי שימוש חוזר בלוגיקת הניתוח שכבר נמצאת בשימוש בכלי החילוץ של RTSP ו-MP4 (#303).
- טקסט:
- SSA: נוספה תמיכה בקובצי UTF-16 אם הם מתחילים בסימן סדר בתים (#319).
- סשן:
- תוקנה בעיה שגרמה לכך ש
MediaControllerלא עדכן את הפקודות הזמינות שלו כשהוא מחובר ל-MediaSessionCompatמדור קודם שעדכן את הפעולות שלו. - תוקן באג שגרם לכך שהפונקציה
MediaLibraryServiceלא החזירה ערך null עבור קריאה מ-System UI אלCallback.onGetLibraryRootעםparams.isRecent == trueב-API 30 (#355). - תיקון דליפת זיכרון של
MediaSessionServiceאוMediaLibraryService(#346). - תוקן באג שבו עדכון משולב של
Timelineומיקום ב-MediaSessionעלול לגרום ל-MediaControllerלהחזירIllegalStateException.
- תוקנה בעיה שגרמה לכך ש
גרסה 1.0.1
18 באפריל 2023
androidx.media3:media3-*:1.0.1 משוחרר. גרסה 1.0.1 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.6 של ExoPlayer.
- ספריית ליבה:
- איפוס של שינוי ברירת המחדל של השידור החי כשמבצעים חיפוש למיקום ברירת המחדל (#11051).
- תוקן באג שבו זרמי דגימות ריקים במדיה עלולים לגרום להפעלה להיתקע.
- סשן:
- תוקן באג שבו פרסום של כמה פריטים זהים בתור שנוצרה על ידי
MediaSessionCompatמדור קודם גורם לחריגה ב-MediaController(מס' 290). - הוספת העברה חסרה של
MediaSession.broadcastCustomCommandאלMediaControllerCompat.Callback.onSessionEventמדור קודם (#293). - תוקן באג שבו קריאה ל-
MediaSession.setPlayerלא מעדכנת את הפקודות הזמינות. - תוקנה בעיה שבה המערכת התעלמה ממופעים של
TrackSelectionOverrideשנשלחו מ-MediaControllerאם הם הפנו לקבוצה עםFormat.metadata(#296). - תוקנה בעיה שבה
Player.COMMAND_GET_CURRENT_MEDIA_ITEMצריך להיות זמין כדי לגשת למטא-נתונים דרךMediaSessionCompatמהדור הקודם. - תוקנה בעיה שבה מופעים של
MediaSessionבשרשור ברקע גורמים לקריסות כשמשתמשים בהם ב-MediaSessionService(מס' 318). - תוקנה בעיה שבה ספרייה הכריזה על מקלט של לחצן מדיה בלי שהאפליקציה התכוונה לכך (#314).
- תוקן באג שבו פרסום של כמה פריטים זהים בתור שנוצרה על ידי
- DASH:
- תיקון הטיפול בציר זמן של פלח ריק (#11014).
- RTSP:
- אם הגדרת RTSP עם UDP נכשלת עם שגיאת RTSP מספר 461 UnsupportedTransport (#11069), צריך לנסות שוב עם TCP.
גרסה 1.0.0
22 במרץ 2023
androidx.media3:media3-*:1.0.0 משוחרר. גרסה 1.0.0 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.5 של ExoPlayer.
לא בוצעו שינויים מאז גרסה 1.0.0-rc02.
גרסה 1.0.0-rc02
2 במרץ 2023
androidx.media3:media3-*:1.0.0-rc02 משוחרר. גרסה 1.0.0-rc02 מכילה את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.4 של ExoPlayer.
- ספריית ליבה:
- הורדות:
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
SegmentDownloaderובמחלקות משנה (#248).
- אפשר להגדיר את ההפרש המקסימלי בין שעת ההתחלה של שני פלחים למיזוג ב-
- אודיו:
- סרטון:
- מיפוי של פורמט HEVC HDR10 אל
HEVCProfileMain10HDR10במקום אלHEVCProfileMain10. - נוספה דרך לעקיפת בעיה במכשיר Chromecast with Google TV וב-Lenovo M10 FHD Plus שגורמת לסימון של סטרימינג AVC ב-60fps כלא נתמך (#10898).
- תוקנו בעיות בביצועים של שחרור פריימים בהפעלת מדיה עם קצב פריימים גבוה בהרבה מקצב הרענון של המסך.
- מיפוי של פורמט HEVC HDR10 אל
- הפעלת Cast:
- תיקון של
STATE_IDLEחולף במעבר בין פריטי מדיה (#245).
- תיקון של
- RTSP:
- 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:
- סשן:
- הוספת תקציר
SimpleBasePlayerכדי לעזור בהטמעה של הממשקPlayerעבור נגנים בהתאמה אישית. - הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3
SessionToken(#171). - משתמשים ב-
onMediaMetadataChangedכדי להפעיל עדכונים של סשן המדיה בפלטפורמה (מס' 219). - הוספת סשן המדיה כארגומנט של
getMediaButtons()שלDefaultMediaNotificationProviderושימוש ברשימות שלא ניתן לשנות כדי להבהיר את העניין (#216). - נוספה
onSetMediaItemscallback listener כדי לספק אמצעים לשינוי/הגדרה שלMediaItemרשימה, אינדקס התחלתי ומיקום לפי סשן לפני ההגדרה ב-Player (#156). - הימנעות מזיהוי הקשה כפולה לאירועים של לחצני מדיה שאינם Bluetooth (#233).
- שיפור של
QueueTimelineבמקרה של מצב סשן מפוקפק מדור קודם (#241).
- הוספת תקציר
- מטא-נתונים:
- ניתוח של כמה ערכים מופרדים בערך null ממסגרות ID3, בהתאם למה שמותר ב-ID3 v2.4.
- מוסיפים את הערך
MediaMetadata.mediaTypeכדי לציין את סוג התוכן או את סוג התיקייה שמתוארים במטא-נתונים. - מוסיפים את
MediaMetadata.isBrowsableכתחליף ל-MediaMetadata.folderType. סוג התיקייה הזה יוצא משימוש בגרסה הבאה.
- תוסף Cast:
- העלאת גרסת Cast SDK ל-21.2.0.
- IMA extension:
- כדי למנוע בעיות בשרשור, צריך להסיר את מאזין הנגן של
ImaServerSideAdInsertionMediaSourceבשרשור האפליקציה. - מוסיפים מאפיין
focusSkipButtonWhenAvailableל-ImaServerSideAdInsertionMediaSource.AdsLoader.Builderכדי לבקש להגדיר את לחצן הדילוג במכשירי טלוויזיה כברירת מחדל ל-true. - מוסיפים שיטה
focusSkipButton()ל-ImaServerSideAdInsertionMediaSource.AdsLoaderכדי לבקש באופן פרוגרמטי להעביר את המיקוד ללחצן הדילוג. - העלאת גרסת IMA SDK ל-3.29.0.
- כדי למנוע בעיות בשרשור, צריך להסיר את מאזין הנגן של
- אפליקציית הדגמה:
- בקשת הרשאת התראות לגבי התראות על הורדות בזמן ריצה (#10884).
גרסה 1.0.0-beta03
22 בנובמבר 2022
androidx.media3:media3-*:1.0.0-beta03 משוחרר. גרסה 1.0.0-beta03
כוללת את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.2 של ExoPlayer.
- ספריית ליבה:
- נוסף
ExoPlayer.isTunnelingEnabledכדי לבדוק אם מנהור מופעל עבור הרצועות שנבחרו כרגע (#2518). - נוספה האפשרות
WrappingMediaSourceכדי לפשט את הגדרת העיטוף שלMediaSourceאחד (#7279). - הסרת מאגר הנתונים הזמני של התמונה הקודמת לפני שההפעלה נתקעת בגלל חוסר בזיכרון הזמין.
- סגירת הבלוק Tracing doSomeWork כשהעברת העומס לכרטיס המסך מופעלת.
- תיקון בעיה במעקב אחר סשנים עם חיפושים מהירים ב-
PlaybackStatsListener(#180). - שליחת קריאה חוזרת חסרה
onMediaItemTransitionכשמתקשרים אלseekToNextאו אלseekToPreviousבפלייליסט עם פריט אחד (#10667). - מוסיפים את
Player.getSurfaceSizeשמחזיר את הגודל של הפלטפורמה שבה הסרטון מוצג. - תוקן באג שבו הסרה של listeners במהלך שחרור הנגן עלולה לגרום ל-
IllegalStateException(#10758).
- נוסף
- גרסת Build:
- הגדרת גרסה מינימלית של
compileSdkVersionכדי למנוע שגיאות קומפילציה (#10684). - הימנעו מפרסום חסימה אם היא נכללת ב-build אחר של Gradle.
- הגדרת גרסה מינימלית של
- בחירת טראק:
- תינתן עדיפות לטראקים אחרים על פני Dolby Vision אם התצוגה לא תומכת בו. (מספר 8944).
- הורדות:
- סרטון:
- אם המסך לא תומך ב-Dolby Vision, כדאי לנסות להשתמש במפענח חלופי. (#9794).
- אודיו:
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית, צריך להשתמש ב-
SingleThreadExecutorכדי לבטל את ההקצאה של מופעיAudioTrack(#10057). - מוסיף את
AudioOffloadListener.onExperimentalOffloadedPlaybackלמצב ההעברה של AudioTrack. (#134). - הגדרת
AudioTrackBufferSizeProviderכממשק שגלוי לכולם. - מוסיפים
ExoPlayer.setPreferredAudioDeviceכדי להגדיר את מכשיר פלט האודיו המועדף (#135). - שינוי השם של
androidx.media3.exoplayer.audio.AudioProcessorל-androidx.media3.common.audio.AudioProcessor. - מיפוי של אודיו עם 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל הגרסאות של Android (מס' 10701).
- כדי להימנע משגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית, צריך להשתמש ב-
- מטא-נתונים:
- עכשיו אפשר להגדיר את
MetadataRendererכך שיציג את המטא-נתונים ברגע שהם יהיו זמינים. יוצרים מכונה עםMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)כדי לציין אם רכיב ה-renderer יוציא מטא-נתונים מוקדמים או בסנכרון עם מיקום הנגן.
- עכשיו אפשר להגדיר את
- DRM:
- פתרון לבעיה בהטמעה של 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
כוללת את הקומיטים האלה.
הגרסה הזו תואמת לגרסה 2.18.1 של ExoPlayer.
- ספריית ליבה:
- מוודאים ששינוי הערך של
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ינהל מעקב אחר שינויים במאפיינים של Spatializer ויפעיל בחירה של טראק חדש בעקבות השינויים האלה. מכשירים עם מצב ממשק משתמש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:
- תיקון של העברת אירועים אל
OnClickListeners שהוגדרו ב-PlayerViewבמקרה ש-useController=false(#9605). בנוסף, תוקנה השליחה של אירועים אלOnLongClickListenerלכל הגדרות התצוגה. - תוקנה בעיה שבה רצף של אירועי מגע שיוצאים מגבולות
PlayerViewלפניACTION_UPנחשב בטעות לקליק (#9861). - תוקנה בעיית נגישות
PlayerViewשבה הקשה על המסך הפעילה או השביתה את ההפעלה במקום להסתיר את אמצעי הבקרה (#8627). - שכתוב של
TrackSelectionViewושלTrackSelectionDialogBuilderכך שיפעלו עם הממשק שלPlayerולא עםExoPlayer. כך אפשר להשתמש בתצוגות עם הטמעות אחרות שלPlayer, וההסתמכות על מודול ExoPlayer מוסרת ממודול ממשק המשתמש. זהו שינוי שעלול לשבור את התאימות לאחור. - לא להציג רצועות טקסט מוכפות ב
PlayerViewבורר הרצועות, ולשמור על רצועת טקסט מוכפית מתאימה אם נבחרה האפשרות 'ללא' (#9432).
- תיקון של העברת אירועים אל
- DASH:
- ניתוח מספר הערוצים מרכיבי DTS
AudioChannelConfiguration. העדכון הזה מפעיל מחדש את מעבר האודיו לשידורי DTS (#10159). - ללא הרשאה להעברת
nullאלDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. אם צריך, אפשר להעביר מקרים שלDefaultCompositeSequenceableLoaderFactoryבאופן מפורש.
- ניתוח מספר הערוצים מרכיבי 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).
- Throw checked exception when parsing RTSP timing (#10165).
- הוספת קורא RTP ל-VP9 (#47).
- נוסף קורא RTP ל-OPUS (#53).
- מקורות נתונים:
- שינוי השם של
DummyDataSourceלPlaceholderDataSource. - פתרון עקיף לטיפול בהפסקות ב-OkHttp.
- שינוי השם של
- סשן:
- מחליפים את
MediaSession.MediaItemFillerב-MediaSession.Callback.onAddMediaItemsכדי לאפשר פתרון אסינכרוני של בקשות. - שיטות התמיכה
setMediaItems(s)כאשרMediaControllerמתחבר לסשן מדיה מדור קודם. - הסרה של
MediaController.setMediaUriושלMediaSession.Callback.onSetMediaUri. אפשר להשיג את אותה פונקציונליות באמצעותMediaController.setMediaItemו-MediaSession.Callback.onAddMediaItems. - העברת שיחות בגרסה הקודמת של
MediaControllerלהפעלת מדיה אלMediaSession.Callback.onAddMediaItemsבמקום אלonSetMediaUri. - מוסיפים את
MediaNotification.ProviderואתDefaultMediaNotificationProviderכדי להתאים אישית את ההתראה. - מוסיפים את
BitmapLoaderואתSimpleBitmapLoaderכדי להוריד תמונות של יצירות אמנות. - מוסיפים
MediaSession.setCustomLayout()כדי לספק תאימות לאחור עם הסשן הקודם. - כדי לספק שוויון תכונות עם סשן מדור קודם, צריך להוסיף
MediaSession.setSessionExtras(). - שינוי השם של
MediaSession.MediaSessionCallbackלMediaSession.Callback, שלMediaLibrarySession.MediaLibrarySessionCallbackלMediaLibrarySession.CallbackושלMediaSession.Builder.setSessionCallbackלsetCallback. - תיקון 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, אבל השיטות האלה עדיין מוצאות משימוש. - הסרה של הקבועים
DownloadHelperDEFAULT_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תמיד אפשר להבחין ביןTrackGroupבאמצעות הגדרתidבבונהTrackGroup. הבעיה הזו גורמת לקריסה כשממשיכים הפעלה אחרי שהאפליקציה פועלת ברקע עם החלפה פעילה של רצועת שמע (#9718). - צריך לשנות את הלוגיקה ב-
AdaptiveTrackSelectionכדי לאפשר שיפור באיכות אם יש מספיק רוחב פס ברשת, גם אם הנגינה קרובה מאוד לקצה השידור החי (#9784).
- סרטון:
- תיקון הלוגיקה של חזרה למפענח הקודם ב-Dolby Vision כדי להשתמש במפענח H264/H265 תואם אם צריך.
- אודיו:
- תיקון הלוגיקה של חזרה למפענח חלופי עבור Dolby Atmos (E-AC3-JOC) כדי להשתמש במפענח E-AC3 תואם אם צריך.
- שינוי בממשקי ה-API של
AudioCapabilitiesכך שנדרש להעביר במפורשAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESבמקוםnull. - אפשר להתאים אישית את החישוב של גודל מאגר הנתונים הזמני
AudioTrackעל ידי הוספתAudioTrackBufferSizeProviderל-DefaultAudioSink. (#8891). - מנסים שוב ליצור את מאגר הנתונים הזמני
AudioTrackאם גודל מאגר הנתונים הזמני המבוקש היה גדול מ-1MB. (#9712).
- מחולצי מידע:
- טקסט:
- 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כשיוצריםPendingIntents (#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. - הסרת כל הבונה
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 החדש. השילוב הזה מאפשר אינטגרציה ישירה בין נגנים לבין סשנים של מדיה, בלי להשתמש במחלקת מתאם או מחבר.