מדיה3

ספריות תמיכה לתרחישי שימוש במדיה.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסת אלפא
‫22 באוקטובר 2025 1.8.0 - - ‎1.9.0-alpha01

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

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

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

מגניב

dependencies {
    def media3_version = "1.8.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"
}

Kotlin

dependencies {
    val media3_version = "1.8.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-alpha01

‫22 באוקטובר 2025

androidx.media3:media3-*:1.9.0-alpha01 משוחרר. גרסה ‎1.9.0-alpha01 מכילה את הקומטים האלה.

  • ספרייה משותפת:
    • מעדכנים את minSdk לגרסה 23 בהתאם לספריות אחרות של AndroidX.
    • הוספנו את PlayerTransferState, שמקל על העברת מצב ההפעלה בין מופעים של Player.
    • מוסיפים את השיטות void mute() ו-void unmute() ל-Player כדי לשמור את עוצמת הקול של Player לפני שהיא מוגדרת לאפס, וכתוצאה מכך לשחזר אותה אחרי ההגדרה.
    • פרסום מחלקות כלי עזר WakeLockManager, WifiLockManager, AudioFocusManager, AudioBecomingNoisyManager ו-StuckPlayerDetector ששימשו בעבר את ExoPlayer באופן פנימי כדי לאפשר שימוש חוזר לשחקנים אחרים (#1893).
    • תוקן הטיפול ב-ForwardingPlayer listener כשנגן הנציגים הבסיסי משתמש בשוויון הפניה להשוואה בין מופעי listener‏ (‎#2675).
    • מוסיפים פונקציה של השהיית תוסף בספרייה Player.listenTomedia3-common-ktx שמציינת את Player.Events הספציפי שצריך לפעול עליו.
    • תוקנה קריסה ב-BasePlayer.getBufferedPercentage שנגרמה כתוצאה מגלישה של מספר שלם (integer) כשמיקום המאגר המדווח גדול באופן לא סביר בהרבה מהמשך המדווח (#2750).
  • ‫ExoPlayer:
    • הוספת זיהוי של נגן תקוע שמפעיל שגיאת נגן אם נראה שהנגן תקוע.StuckPlayerException זה קורה במקרים הבאים, שבהם אפשר להגדיר כל פסק זמן שמוגדר כברירת מחדל ב-ExoPlayer.Builder אם נדרש:
      • אחרי 10 דקות של STATE_BUFFERING בזמן ניסיון ההפעלה, ללא התקדמות בטעינה.
      • אחרי 10 שניות של STATE_READY בזמן ניסיון ההפעלה, ללא התקדמות בהפעלה.
      • אחרי דקה אחת של STATE_READY מעבר למשך הזמן המוצהר בלי להגיע לסוף הפריט.
      • אחרי 10 דקות עם סיבה לדיכוי ההפעלה במהלך ניסיון להפעיל את הסרטון.
    • הפעלת הטיפול בנעילת ההשכמה כברירת מחדל כדי לפתור בעיות שקשורות לאגירת נתונים במהלך הפעלה ברקע. הפעולה הזו שוות ערך להגדרת ExoPlayer.Builder.setWakeMode לערך C.WAKE_MODE_LOCAL.
    • מוסיפים לוגיקה של האזנה כדי לעדכן באופן אוטומטי את מזהה המכשיר הווירטואלי כששינוי מדווח ל-Context שהועבר במקור ל-ExoPlayer.Builder.
    • מוסיפים את ExoPlayer.setVirtualDeviceId כדי לעדכן באופן ידני את מזהה המכשיר הווירטואלי שהתקבל מ-Context שהועבר אל ExoPlayer.Builder.
    • מוודאים שרכיבי ה-Renderer לא צורכים נתונים מהפריט הבא ברשימת ההשמעה יותר מ-10 שניות לפני סוף הפריט הנוכחי.
    • הוספת setSeekBackIncrementMs, setSeekForwardIncrementMs ו-setMaxSeekToPreviousPositionMs אל ExoPlayer כדי לעדכן את ההגדרות האלה אחרי הבנייה (#2736).
    • הוספנו פונקציונליות של שמירת נתונים במטמון מראש ב-DefaultPreloadManager. אפליקציות יכולות עכשיו להחזיר DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) או DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) דרך TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData) כדי לציין שפריט מדיה צריך להיטען מראש לזיכרון המטמון.
    • שימוש בפונקציונליות של טעינה מראש מהמטמון של DefaultPreloadManager באפליקציית הדגמה של תוכן קצר.
    • הוספת פונקציות 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).
  • ‫CompositionPlayer:
    • פרסום CompositionPlayer בהערה חדשה @ExperimentalApi כדי לציין שהיא זמינה לניסויים, אבל עדיין נמצאת בפיתוח. יש סיכוי שממשקי API מסוימים ישתנו באופן משמעותי בגרסאות עתידיות, ויש בעיות ומגבלות ידועות בחלק מתרחישי השימוש (חלקם לא מתועדים).
    • הוספת תמיכה ב-COMMAND_SET_AUDIO_ATTRIBUTES ובטיפול במיקוד אודיו ב-CompositionPlayer.
    • הוספת תמיכה בשינוי מהירות ברצפים משניים ב-CompositionPlayer.
  • Transformer:
    • שימוש ב-InAppMp4Muxer כברירת מחדל של כלי לצירוף נתונים.
    • הוספה של EditedMediaItem.Builder#setSpeed() והוצאה משימוש של Effects#createExperimentalSpeedChangingEffects().
    • מחליפים את forceAudioTrack ואת forceVideoTrack ב-trackTypes ב-EditedMediaItemSequence.
  • בחירת טראק:
    • מוסיפים TrackSelectionParameters.selectTextByDefault כדי להעדיף את הבחירה של כל רצועת טקסט בלי לציין העדפות ספציפיות יותר.
    • מוסיפים את preferredVideoLabels, preferredAudioLabels ו-preferredTextLabels ב-TrackSelectionParameters כדי לציין העדפה לרצועות עם תווית ספציפית, למשל אלה שנקראות מתגי HLS NAME ‏ (#1666).
  • מחולצי מידע:
    • ‫FLAC: שיפרנו את זיהוי הכותרות כדי להקטין את הסיכוי למצוא כותרות מזויפות בנתוני FLAC המקודדים, וכתוצאה מכך להפחית את שגיאות הפענוח (#558).
    • ‫MP3: מאפשר פערים בין תגי ID3 (ולפני) בתחילת קובצי MP3 (#811,‏ #5718).
    • ‫MP4: כדי להבחין בין סוגי ה-MIME‏ audio/mpeg (MP3),‏ audio/mpeg-L1 ו-audio/mpeg-L2, המערכת בודקת את ערך השכבה של הדגימה הראשונה לפני שהיא מפיקה פורמט של טראק מהכלי לחילוץ (‎#2683).
    • ‫MP4: שיפור היעילות של סניפינג קבצים גדולים מאוד על ידי הנחה שתיבת stbl גדולה מ-1MB מרמזת שהקובץ לא מפולח (#2650).
    • ‫Matroska: נוספה תמיכה בזיהוי DTS-HD (#6225).
    • תוקנה בעיה ב-MatroskaExtractor שבה הניווט בקבצים עם כמה רצועות היה לא מדויק. נקודות ה-Cue משויכות עכשיו בצורה נכונה לטראקים המתאימים, מה שמאפשר חיפוש מדויק יותר.
    • ‫MP4: נוספה תמיכה במטא-נתונים ©mvn (שם התנועה) ו-©mvi (אינדקס התנועה). עכשיו הם מופקים כאובייקטים מסוג TextInformationFrame ב-Format.metadata עם המזהים MVNM ו-MVIN בהתאמה (#2754).
    • ‫MPEG-TS: תיקון IllegalArgumentException מתוך ReorderingBufferQueue שנגרם על ידי חבילות PES ללא חותמת זמן (#2764).
    • ‫MP4: המערכת מתעלמת מטראקים שחסר בהם תיבת stsd (במקום להיכשל בניתוח של הקובץ כולו).
    • הוספת תמיכה בחילוץ של תמונות HEIC עם תנועה. ‫HeifExtractor יכול עכשיו לנתח קובצי HEIC שמכילים טראקים מוטמעים של וידאו ואודיו.
    • ‫MP3: שינוי FLAG_ENABLE_INDEX_SEEKING כדי להעדיף חיפוש מידע בכותרות של מטא-נתונים (כמו Xing ו-VBRI) אם הן זמינות, וחזרה לחיפוש מבוסס-אינדקס אם אין מידע אחר לחיפוש. השינוי הזה משפר את הביצועים של קבצים עם מטא-נתונים של חיפוש (#2839).
  • כלי הבדיקה:
    • הוספנו מודול :media3-inspector חדש שמשמש כמרכז ייעודי לכלי בדיקת מדיה. המודול הזה כולל עכשיו androidx.media3.inspector.MetadataRetriever חדש, שיספק API מאוחד לחילוץ מטא-נתונים ופריימים. הגרסה הקיימת של androidx.media3.exoplayer.MetadataRetriever הוצאה משימוש, ועכשיו אפשר להשתמש בגרסה החדשה הזו.
    • השקנו את androidx.media3.inspector.FrameExtractor, API ציבורי חדש למיצוי פריימים. המחלקות האלה AutoCloseable מספקות דרך לחילוץ פריימים עם תמיכה בווידאו HDR, באפקטים של וידאו ובבחירה מותאמת אישית של מפענח. צריך ליצור אותו דרך Builder שלו עבור MediaItem ספציפי.
    • ‫FrameExtractor: נוספה האפשרות getThumbnail() לחילוץ של תמונה ממוזערת מייצגת מקובץ מדיה בלי לציין חותמת זמן ספציפית.
  • אודיו:
    • הגדרת מודעות של מופעי AudioProcessor לחיפוש.
    • מתן הרשאה להטמעת הממשק החדש של AudioOutputProvider ב-DefaultAudioSink.Builder כדי לתמוך בנתיבי פלט אודיו מותאמים אישית. ברירת המחדל היא AudioTrackAudioOutputProvider.
    • התמודדות עם חיפושים ב-GainProcessor.
    • שימוש ביכולות של פרופיל ומפלס של מפענח AC-4 בהערכת התמיכה בפורמט של רצועת אודיו (‎#2580).
    • נמנעים מעיכובים פוטנציאליים שנגרמים כתוצאה מטיפול בהחזרות (callbacks) של שינויי ניתוב בתחילת ההפעלה (‎#2646).
    • אפשרות לשימוש חוזר ב-Codec לפורמטים EAC3, ‏ EAC3-JOC ו-AC-4 (#1346).
    • הוספת תמיכה בדגימות PCM של float ב-Sonic.
    • הוספנו תמיכה בדגימות PCM של 16 ביט ב-ToFloatPcmAudioProcessor.
  • סרטון:
    • השבתה של שימוש חוזר בקודק לתוכן Dolby-Vision עם פרופילים שונים.
  • טקסט:
    • תוקן ניתוח של כתוביות CEA-6/708 בתוכן Dolby Vision (#2775).
  • תמונה:
    • תוקנה בעיה ב-ScrubbingMode שבה הנגן נתקע בזמן גלילה מהירה של רצועת תמונות ממוזערות ב-DASH (#2815).
  • DRM:
    • שינוי סוג ההחזרה של methods מסוג MediaDrmCallback מ-byte[] לסוג MediaDrmCallback.Response חדש, כדי לאפשר החזרה של מידע אופציונלי נוסף. זהו שינוי שגורם לבעיות בקוד המקור, אבל אפשר לפתור את הבעיות בקלות על ידי הוספת הערך הקודם של byte[] ל-new Response לפני ההחזרה.
    • מוסיפים ל-AnalyticsListener.onDrmKeysLoaded (#1001) פרטים חשובים על הבקשה, כמו כתובת URL וזמן אחזור.
    • העברה של נתוני בקשת הקצאת הרשאות מפרמטר של כתובת URL לגוף של בקשת POST.
  • 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. קודים של ערוצים הם אופציונליים, אבל מומלץ להשתמש בהם בבקשות לשידור נתונים מלאים. במאמר הזה מוסבר איך למצוא את קוד הרשת.
    • העלאת התלות ב-IMA לגרסה 3.37.0, שדורשת הפעלה של הסרת סוכר בספריית הליבה. אפליקציות תלויות צריכות גם הן להפעיל את ההגדרה הזו. הערות על ההגדרה של IMA
    • תמיכה באפשרויות ממשק משתמש מותאמות אישית של IMA DAI בכלי ליצירת URI של SSAI. אפשרויות מותאמות אישית לממשק המשתמש להוספת מודעות בצד השרת כוללות תמיכה בהצגת מודעות שאפשר לדלג עליהן ומודעות עם האפשרות 'מידע על המודעה הזו'. התכונה זמינה כרגע רק לקבוצה נבחרת של בעלי אפליקציות שנמצאים ברשימת ההיתרים. בנוסף, השינוי הזה משדרג את גרסת IMA SDK ל-3.38.0 (הערות לגבי הגרסה) כדי לאפשר גישה ל-API של אפשרויות ממשק משתמש בהתאמה אישית.
  • סשן:
    • הוספת פרמטר חדש ל-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.
    • תיקון ההפצה של ערכי מטא-נתונים שאינם String CharSequence, כמו מחרוזות עם תגי span (‎#2853).
  • ‫UI:
    • מוסיפים את המחלקה ProgressStateWithTickInterval ואת רכיב ה-Composable התואם ל-media3-ui-compose module.rememberProgressStateWithTickInterval מחזיק המצב הזה משמש ב-demo-compose להצגת המיקום והמשך הנוכחיים בפורמט טקסט.
    • מוסיפים MuteButtonState ל-ui-compose שמטפל בהשתקה של עוצמת הקול Player. האובייקט הזה משמש ב-demo-compose כדי להציג את לחצן ההפעלה/ההשבתה של המיקרופון.
    • מוסיפים את המחלקות ProgressStateWithTickCount ואת רכיב ה-Composable התואם rememberProgressStateWithTickCount למודול media3-ui-compose. מחזיק המצב הזה משמש ב-demo-compose להצגת ההתקדמות כסרגל התקדמות אופקי לקריאה בלבד.
    • הוספת ContentFrame Composable ל-media3-ui-compose שמשלב ניהול של PlayerSurface עם שינוי גודל של יחס רוחב-גובה וכיסוי עם תריס.
    • עקיפת באג ידוע בפלטפורמת API 34 שגורם לסרטונים להימתח או להיחתך כשמשתמשים ב-SurfaceView בתוך Compose AndroidView, ולכן משפיע על רכיבי ContentFrame ו-PlayerSurface Composables עם SURFACE_TYPE_SURFACE_VIEW (מס' 1237, מס' 2811).
    • יוצרים מודול media3-ui-compose-material3 חדש ומוסיפים לו רכיבים הניתנים להרכבה עם ערכת הנושא Material3 (PlayPauseButton, ‏ NextButton,‏ PreviousButton, ‏ SeekBackButton, ‏ SeekForwardButton, ‏ RepeatButton,‏ ShuffleButton, ‏ MuteButton).
    • הוספת תמיכה בהצבת לחצן של מסלול מדיה בPlayerView.
  • תוסף HLS:
    • ניתוח מאפייני דילוג על מודעות מעבר בפרוטוקול HLS.
    • מיפוי של מאפייני בקרה לדילוג מתוך רשימת הנכסים ומתוך מסמך הפלייליסט של HLS אל AdPlaybackState לצורך גישה ציבורית.
    • תוקן באג שגרם להשמטת שעת ההתחלה של הפלייליסט כשמסירים מהפלייליסט את התג EXT-X-PROGRAM-START-DATE שמגדיר את שעת ההתחלה (#2760).
    • שימוש בחיפוש בינארי כדי למצוא את אינדקס הפלח של מיקום נתון בפלייליסט (#2826).
  • תוסף DASH:
    • תוקנה בעיה שקשורה ל-UnsupportedOperationException כשמפעילים סטרימינג של DASH עם מניפסט URI data: לא היררכי (#2688).
    • הערך של LiveConfiguration מתאפס לערך שסופק על ידי MediaItem של DashMediaSource כשהוא יוצא לאור וכאשר המשתמש מעדכן את פריט המדיה (#2606).
    • נמנעות קריסות שנגרמות מעדכוני מניפסט לא תקינים שלא דווחו כשגיאות בנגן (#2805).
  • תוסף RTSP:
    • טיפול בשגיאה של מנות RTP חסרות במהלך עיבוד של יחידות NAL מפוצלות עבור H264 ו-H265 (#2613).
  • תוספים של מפענחים (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • תוסף AV1: מפענח התוכנה AV1 משתמש עכשיו בספריית dav1d בעלת הביצועים הגבוהים, במקום בהטמעה הקודמת של libgav1, כדי לשפר את מהירות הפענוח.
  • תוסף 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.

גרסה 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.
  • 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).
    • הוספת ExoPlayer API ניסיוני כדי לכלול את הדגל 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 והעברנו אותו אל AutoCloseable API מבוסס-מופע. משתמשים ב-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 או באמצעות ה-method setTimeBarScrubbingEnabled(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:
    • הוספת תמיכה בחבילת צבירה של RTP עבור H265 בהתאם ל-RFC 7798#4.4.2 (#2413).
    • תוקנה בעיה שגרמה לכך שהמערכת לא השתמשה ב-URI של המיקום שסופק במהלך עיבוד תגובת HTTP 302 (מס' 2398).RtspClient
    • הוספת תמיכה בניתוח של SessionDescriptions שמכילים שורות עם תווי רווח לבן בסוף (‎#2357).
  • תוספים של מפענח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • תוקן באג שבו DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange לא משפיע על תוספים של פענוח אודיו (‎#2258).
  • תוסף Cast:
    • הוספת תמיכה ב-setVolume() וב-getVolume() (#2279).
    • מונעים מ-CastPlayer להיכנס ל-STATE_BUFFERING כשהציר הזמני ריק.
    • הוספת תמיכה ב-getDeviceVolume(),‏ setDeviceVolume(),‏ getDeviceMuted() ו-setDeviceMuted() (#2089).
  • כלי בדיקה:
    • מוסיפים את advance(player).untilPositionAtLeast ואת untilMediaItemIndex אל TestPlayerRunHelper כדי להעביר את הנגן עד שמגיעים למיקום שצוין. ברוב המקרים, השיטות האלה מהימנות יותר מהשיטות הקיימות untilPosition ו-untilStartOfMediaItem.
    • מעבירים את FakeDownloader למודול test-utils-robolectric כדי להשתמש בו מחדש בבדיקות אחרות.
    • בוצעה הסרה של transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...) ושל transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). במקומה, צריך להשתמש במדיניות ShadowMediaCodecConfig כדי להגדיר מקודדים ומפענחים של צללים.
    • הקידומת exotest הוחלפה בקידומת media3 בשמות של רכיבי codec שדווחו על ידי ShadowMediaCodecConfig.
  • הסרת סמלים שהוצאו משימוש:
    • הסרנו את הבונה SegmentDownloader שיצא משימוש SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) ואת הבונה המתאים במחלקות המשנה שלו DashDownloader, HlsDownloader ו-SsDownloader.
    • הוסרו ההגדרות Player.hasNext() ו-Player.hasNextWindow() שהוצאו משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.hasNextMediaItem().
    • הוסר Player.next() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר Player.seekToPreviousWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToPreviousMediaItem().
    • הוסר Player.seekToNextWindow() שהוצא משימוש. במקום זאת, אתם צריכים להשתמש ב-Player.seekToNextMediaItem().
    • הוסר מודול BaseAudioProcessor שהוצא משימוש ב-exoplayer. משתמשים ב-BaseAudioProcessor במודול common.
    • צריך להסיר את ה-constructor‏ MediaCodecVideoRenderer שיצא משימוש MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).

גרסה 1.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 מכילה את ההתחייבויות האלה.

  • ספרייה משותפת:
    • הוספנו את method 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).
  • אודיו:
    • תוקנה בעיה בהעברה לזיכרון הווירטואלי שבה המיקום עלול להיתקע כשמפעילים פלייליסט של תוכן קצר (#1920).
  • סשן:
    • הורדת הזמן הקצוב לתפוגה של צבירה עבור קריאות חוזרות (callback) של פלטפורמת MediaSession מ-500 ל-100 מילי-שניות, והוספת הגדרת ניסוי כדי לאפשר לאפליקציות להגדיר את הערך הזה.
    • תוקנה בעיה שבה ההתראות הופיעו מחדש אחרי שהמשתמש סגר אותן (#2302).
    • תוקן באג שבו הסשן החזיר ציר זמן עם פריט יחיד כשהנגן העוטף היה ריק. המצב הזה קורה כשאין COMMAND_GET_TIMELINE בנגן העוטף, אבל יש COMMAND_GET_CURRENT_MEDIA_ITEM והנגן העוטף ריק (‎#2320).
    • תוקן באג שבו קריאה ל-MediaSessionService.setMediaNotificationProvider מתעלמת בשקט אחרי אינטראקציות אחרות עם השירות כמו setForegroundServiceTimeoutMs (מספר 2305).
  • ‫UI:
    • מפעילים את PlayerSurface כדי לעבוד עם ExoPlayer.setVideoEffects ועם CompositionPlayer.
    • תיקון באג שבו אי אפשר להרכיב מחדש את PlayerSurface עם Player חדש.
  • תוסף HLS:
    • תוקנה בעיה שבה משך הצ'אנק לא הוגדר ב-CmcdData עבור מדיה בפורמט HLS, מה שגרם לכשל באימות כשמעבדים פלחים מוצפנים של מדיה (‎#2312).
  • תוסף RTSP:
    • הוספנו תמיכה ב-URI עם סכימת RTSPT כדרך להגדיר את סשן RTSP לשימוש ב-TCP (#1484).
  • תוסף Cast:
    • הוספת תמיכה במטא-נתונים של פלייליסטים (‎#2235).

‫1.6.0

‫26 במרץ 2025

androidx.media3:media3-*:1.6.0 משוחרר. גרסה 1.6.0 מכילה את הקומטים האלה.

  • ספרייה משותפת:
    • מוסיפים את AudioManagerCompat ו-AudioFocusRequestCompat כדי להחליף את המחלקות המקבילות ב-androidx.media.
    • שדרוג Kotlin מגרסה 1.9.20 לגרסה 2.0.20 ושימוש בפלאגין Compose Compiler Gradle. שדרוג הספרייה KotlinX Coroutines מגרסה 1.8.1 לגרסה 1.9.0.
    • השיטה Format.toBundle(boolean excludeMetadata) הוסרה. במקומה, צריך להשתמש ב-Format.toBundle().
    • תיקון באג ב-SimpleBasePlayer שבו הגדרה של currentMediaItemIndex חדש ב-State אחרי setPlaylist עם null MediaMetadata לא מעריכה מחדש את המטא-נתונים (#1940).
    • שינוי הגישה ממוגנת לציבורית כדי להקל על הטיפול בעדכונים בכיתות אחרות (#2128).SimpleBasePlayer.State
  • ‫ExoPlayer:
    • הוספנו את MediaExtractorCompat, מחלקה חדשה שמספקת תכונות שוות ערך לפלטפורמה MediaExtractor.
    • הוספנו תמיכה ניסיונית בחימום מראש של ExoPlayer להפעלה באמצעות MediaCodecVideoRenderer. אפשר להגדיר את DefaultRenderersFactory דרך experimentalSetEnableMediaCodecVideoRendererPrewarming כדי לספק MediaCodecVideoRenderer משני ל-ExoPlayer. אם האפשרות הזו מופעלת, ExoPlayer הסרטון של פריטי מדיה עוקבים עובר עיבוד מראש במהלך ההפעלה כדי לקצר את זמן האחזור של המעבר בין פריטי המדיה.
    • צריך להקטין את ערכי ברירת המחדל של bufferForPlaybackMs ושל bufferForPlaybackAfterRebufferMs ב-DefaultLoadControl ל-1,000 ו-2,000 אלפיות השנייה בהתאמה.
    • מאתחלים את DeviceInfo ואת עוצמת הקול במכשיר באופן אסינכרוני (אם ההגדרה הזו מופעלת באמצעות setDeviceVolumeControlEnabled). הערכים האלה לא זמינים באופן מיידי אחרי ExoPlayer.Builder.build(), ו-Player.Listener מודיע על שינויים באמצעות onDeviceInfoChanged ו-onDeviceVolumeChanged.
    • מזהה סשן האודיו הראשוני לא זמין יותר באופן מיידי אחרי יצירת נגן. אם צריך, אפשר להשתמש בלחצן AnalyticsListener.onAudioSessionIdChanged כדי להאזין לעדכון הראשוני.
    • חשוב לקחת בחשבון את השפה כשבוחרים רצועת וידאו. כברירת מחדל, המערכת בוחרת טראק וידאו 'ראשי' שתואם לשפה של טראק האודיו שנבחר, אם יש כזה. אפשר להגדיר העדפות שפה ספציפיות לסרטונים באמצעות התג TrackSelectionParameters.Builder.setPreferredVideoLanguage(s).
    • מוסיפים את הפרמטר selectedAudioLanguage לשיטה DefaultTrackSelector.selectVideoTrack().
    • מוסיפים את הפרמטר retryCount ל-MediaSourceEventListener.onLoadStarted ואת השיטות המתאימות MediaSourceEventListener.EventDispatcher.
    • תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
    • מעבירים את BasePreloadManager.Listener לרמה העליונה PreloadManagerListener.
    • אפשר להטמיע את RenderersFactory.createSecondaryRenderer כדי לספק מעבדים משניים לחימום מראש. חימום מראש מאפשר מעברים מהירים יותר בין פריטי מדיה במהלך ההפעלה.
    • הפעלת שליחה של CmcdData לבקשות מניפסט בפורמטים של סטרימינג אדפטיבי DASH,‏ HLS ו-SmoothStreaming (#1951).
    • צריך לספק MediaCodecInfo של הקודק שיאותחל ב-MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • משנים את AdsMediaSource כדי לאפשר ל-AdPlaybackStates לגדול על ידי הוספת קבוצות של מודעות. המערכת מזהה שינויים לא תקינים וזורקת חריגה.
    • תוקנה בעיה שבה יכול להיות שיוצגו פריימים נוספים של פענוח בלבד ברצף מהיר כשעוברים לתוכן מדיה אחרי מודעה באמצע סרטון.
    • DefaultRenderersFactory add two MetadataRenderer instances 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).
  • ‫UI:
    • מוסיפים מחזיקי מצב ופונקציות Composable למודול media3-ui-compose עבור PlayerSurface, ‏ PresentationState, ‏ PlayPauseButtonState,‏ NextButtonState, ‏ PreviousButtonState, ‏ RepeatButtonState,‏ ShuffleButtonState ו-PlaybackSpeedState.
  • הורדות:
    • תוקן באג ב-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(), use EditedMediaItem.Builder.setFlattenForSlowMotion() to flatten the EditedMediaItem passed to Transformer.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 כדי למנוע בעיות של פסק זמן (timeout) בקודק שדווחו ב-API של הפלטפורמה הזו (‎#1641).
  • מחולצי מידע:
    • ‫MP3: הפעלת קובץ לא תיפסק לפני הזמן אם תוכן העניינים של מסגרת VBRI לא כולל את כל נתוני ה-MP3 בקובץ (#1904).
  • סרטון:
    • החזרת השימוש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו MediaCodecAdapter כשמספקים אותם במהלך העיבוד של onOutputFormatChanged (מספר 1371).
  • טקסט:
    • תוקן באג ב-ReplacingCuesResolver.discardCuesBeforeTimeUs שבו רמז פעיל ב-timeUs (התחיל לפני אבל עדיין לא הסתיים) נפסל באופן שגוי (‎#1939).
  • מטא-נתונים:
    • חילוץ של מספרי דיסקים/טראקים וז'אנר מתגובות Vorbis אל MediaMetadata (#1958).

גרסה 1.5.0

‫27 בנובמבר 2024

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

  • ספרייה משותפת:
    • הוספנו ForwardingSimpleBasePlayer שמאפשר להעביר קדימה לשחקן אחר עם שינויים קלים, תוך שמירה על עקביות מלאה וטיפול במאזינים (#1183).
    • מחליפים את SimpleBasePlayer.State.playlist בשיטה getPlaylist().
    • מוסיפים חריגה ל-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 Plugin שמשתמשת בגרסה של 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, בזמן שהמערכת מתעלמת בשקט משגיאות ניתוח (התנהגות קיימת).
    • תוקן באג שבו פריטים או תקופות בפלייליסט בסטרימינג של DASH עם כמה תקופות, עם משכי זמן שלא תואמים לתוכן בפועל, עלולים לגרום להקפאת פריים בסוף הפריט (#1698).
    • הוספנו פונקציית setter ל-SntpClient כדי להגדיר את הזמן המקסימלי שחלף מאז העדכון האחרון, שאחריו הלקוח מאותחל מחדש (‎#1794).
  • Transformer:
    • מוסיפים את SurfaceAssetLoader, שתומך בהוספת נתוני סרטונים לתור של Transformer באמצעות Surface.
    • ImageAssetLoader reports unsupported input via AssetLoader.onError instead of throwing an IllegalStateException.
    • הופכים את הגדרת משך הזמן של התמונה באמצעות MediaItem.Builder.setImageDurationMs לחובה לייצוא תמונות.
    • הוספת תמיכה בייצוא של פערים ברצפים של פריטי מדיה שערכתם.
  • בחירת טראק:
    • DefaultTrackSelector: עדיף להשתמש באודיו מבוסס-אובייקט ולא באודיו מבוסס-ערוץ, אם שאר הגורמים זהים.
  • מחולצי מידע:
    • אפשר ל-Mp4Extractor ול-FragmentedMp4Extractor לזהות דוגמאות של H264 שלא נעשה בהן שימוש כהפניה בדוגמאות הבאות.
    • הוספנו אפשרות להפעיל חיפוש מבוסס-אינדקס ב-AmrExtractor.
    • קובצי MP3 עם יותר מ-128kB בין מסגרות תקינות נחשבים לקטומים (במקום לא תקינים). המשמעות היא שקובצי MP3 עם נתונים שאינם 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 יקבל null Surface ב-configure וקריאות לשיטה חדשה detachOutputSurface כדי להסיר Surface שהוגדר בעבר אם רכיב ה-codec תומך בכך (MediaCodecInfo.detachedSurfaceSupported).
    • צריך להשתמש בערכי יחס הגובה-רוחב של הפיקסלים שסופקו, אם הם סופקו, כשמעבדים את onOutputFormatChanged (#1371).MediaCodecAdapter
    • נוספה דרך לעקיפת בעיה במכשיר Galaxy Tab S7 FE שגורמת לסימון של סטרימינג מאובטח של H264 ב-60fps כלא נתמך (#1619).
    • נוספה דרך לעקיפת הבעיה בפורמטים של קודקים שנתקעים אחרי הדגימה האחרונה בלי להחזיר אות לסיום הסטרימינג.
  • טקסט:
    • מוסיפים תג מותאם אישית VoiceSpan ומאכלסים אותו בנתונים עבור טווחים של קול ב-WebVTT (‎#1632).
    • מוודאים שקובצי WebVTT ב-HLS עם חותמות זמן גדולות מאוד של כתוביות (שגולשות מעבר ל-64 ביט long כשמייצגים אותן כמיקרו-שניות ומכפילים אותן בבסיס הזמן של 90,000 MPEG) מוצגות (#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:
    • תיקון הסרת פרטי משתמש מכתובות URL שמכילות תווים מקודדים של @ (#1138).
    • תוקנה קריסה בזמן ניתוח של מנות RTP עם תוספי כותרת (#1225).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1 וכו'):
    • מוסיפים את מודול ה-decoder של IAMF, שמספק תמיכה בהפעלה של קובצי MP4 שמכילים טראקים של IAMF באמצעות הספרייה המקורית libiamf כדי לבצע סינתזה של אודיו.
      • ההפעלה מופעלת עם פריסת סטריאו וגם עם 5.1 עם מרחביות, יחד עם מעקב ראש אופציונלי, אבל כרגע אין תמיכה בהפעלה בינאורלית.
    • נוספה תמיכה בדפים בגודל 16KB לתוספי פענוח ב-Android 15 ‏(#1685).
  • תוסף Cast:
    • הפסקת ניקוי ציר הזמן אחרי הניתוק של CastSession, מה שמאפשר לאפליקציית השולח להמשיך את ההפעלה באופן מקומי אחרי הניתוק.
    • מאכלסים את DeviceInfo של CastPlayer כשמספקים Context. הפעולה הזו מאפשרת לקשר את MediaSession אל RoutingSession, שנדרש לשילוב של הכלי להחלפת פלט (‎#1056).
  • כלי בדיקה:
    • DataSourceContractTest כולל עכשיו בדיקות לאימות:
      • מקור הנתונים read position עודכן.
      • מאגר הפלט offset מוחל בצורה נכונה.
  • אפליקציית הדגמה
    • פתרון בעיות של דליפות זיכרון באפליקציית הדגמה של סרטונים קצרים (#1839).
  • הסרת סמלים שהוצאו משימוש:
    • הסרת Player.hasPrevious שהוצא משימוש, Player.hasPreviousWindow(). במקום זאת, אתם צריכים להשתמש ב-Player.hasPreviousMediaItem().
    • הסרת השיטה 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:
    • טיפול בפונקציות קריאה חוזרת לטעינה מראש באופן אסינכרוני ב-PreloadMediaSource (‎#1568).
    • אפשרות להפעלה ללא קשר למשך הזמן של הנתונים שנטענו בזיכרון כשמתרחש כשל בטעינה (#1571).
  • מחולצי מידע:
    • ‫MP3: כדי לתקן את השגיאה Searched too many bytes, צריך להתעלם בצורה נכונה מנתונים לא רלוונטיים בסוף קובץ ה-MP3, על סמך שדה האורך בפריים Info (מספר 1480).
  • טקסט:
    • ‫TTML: תוקן הטיפול בערכי אחוזים tts:fontSize כדי להבטיח שהם יקבלו בירושה בצורה נכונה מצמתי אב עם ערכי אחוזים tts:fontSize.
    • תיקון IndexOutOfBoundsException ב-LegacySubtitleUtil עקב טיפול לא תקין במקרה שבו שעת ההתחלה של הפלט המבוקש גדולה יותר משעת הסיום של האירוע ב-Subtitle או שווה לה (#1516).
  • DRM:
    • תיקון שגיאה android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE במכשירי API 31 ומעלה בהפעלת תוכן L1 Widevine. השגיאה הזו נגרמת בגלל הטמעה לא מלאה של שיטת MediaDrm.requiresSecureDecoder (‎#1603) ב-framework.
  • ההשפעה:
    • מוסיפים אמצעי תשלום release() ל-GlObjectsProvider.
  • סשן:
    • הפיכת לחיצה כפולה על KEYCODE_HEADSETHOOK לפעולה 'חיפוש המיקום הבא', כפי שמתואר (#1493).
    • תתייחס ל-KEYCODE_HEADSETHOOK כפקודה 'הפעלה' ב-MediaButtonReceiver כשאתה מחליט אם להתעלם ממנה כדי למנוע ForegroundServiceDidNotStartInTimeExceptionKEYCODE_HEADSETHOOK(#1581).
  • תוסף 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.
  • ‫ExoPlayer:
    • מוסיפים את BasePreloadManager שמתאם את הטעינה מראש של כמה מקורות על סמך העדיפויות שמוגדרות על ידי rankingData. אפשר להתאים אישית את המחלקה הזו באמצעות הרחבה שלה. מוסיפים את התג DefaultPreloadManager שמשתמש ב-PreloadMediaSource כדי לטעון מראש דגימות של מדיה מהמקורות לזיכרון, ומשתמש במספר שלם rankingData שמציין את האינדקס של פריט בממשק המשתמש.
    • מוסיפים PlayerId לרוב השיטות של LoadControl כדי לאפשר הטמעות של LoadControl לתמיכה במספר נגנים.
    • הסרה של Buffer.isDecodeOnly() ושל C.BUFFER_FLAG_DECODE_ONLY. אין צורך להגדיר את הדגל הזה, כי רכיבי ה-renderer והמפענחים יחליטו לדלג על מאגרי נתונים על סמך חותמת הזמן. ביישומים מותאמים אישית של Renderer צריך לבדוק אם זמן ההשהיה הוא לפחות Renderer כדי להחליט אם להציג דוגמה.BaseRenderer.getLastResetPositionUs() הטמעות מותאמות אישית של SimpleDecoder יכולות לבדוק אם יש צורך בכך או לסמן מאגרי נתונים זמניים אחרים ב-DecoderOutputBuffer.shouldBeSkipped כדי לדלג עליהם.isAtLeastOutputStartTimeUs()
    • הפונקציה מאפשרת להחזיר ערך null כדי לציין שלא צריך לטעון מראש MediaSource עם rankingData הנתון.TargetPreloadStatusControl.getTargetPreloadStatus(T)
    • הוספה של remove(MediaSource) אל BasePreloadManager.
    • מוסיפים את reset() אל BasePreloadManager כדי לבטל את ההחזקה של כל המקורות, תוך שמירה על המופע של הכלי לניהול טעינה מראש.
    • מוסיפים ExoPlayer.setPriority() (ו-Builder.setPriority()) כדי להגדיר את ערך העדיפות שמשמש ב-PriorityTaskManager ואת חשיבות MediaCodec מ-API 35.
    • תוקנה בעיה בעדכון של זמן האגירה מחדש האחרון, שגרמה למפתח bs (buffer starvation) שגוי ב-CMCD (#1124).
    • מוסיפים את הערך PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) כדי לציין שהמקור נטען עד הסוף. ההרשאה הזו מאפשרת להטמעות של DefaultPreloadManager ושל PreloadMediaSource.PreloadControl לטעון מראש את המקור הבא או לבצע פעולות אחרות.
    • תוקן באג שבו דילוג על השתקה בסוף פריטים יכול להפעיל חריגה בהפעלה.
    • כדי לבטל את תקופת הטעינה מראש, מוסיפים את clear אל PreloadMediaSource.
    • הוספת קוד שגיאה חדש PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED שמשמש כאשר משחררים משאבי codec למשימות בעדיפות גבוהה יותר.
    • מאפשרים ל-AdsMediaSource לטעון מודעות לפני הסרטון לפני שמושלמת ההכנה של תוכן המדיה הראשוני (‎#1358).
    • תוקן באג שגרם לכך שההפעלה עברה אל STATE_ENDED כשמכינים מחדש שידור חי בפורמט DASH עם כמה תקופות אחרי שהתקופה המקורית כבר הוסרה מהמניפסט.
    • שינוי השם של onTimelineRefreshed() ל-onSourcePrepared() ושל onPrepared() ל-onTracksSelected() ב-PreloadMediaSource.PreloadControl. צריך גם לשנות את השם של IntDefs ב-DefaultPreloadManager.Stage בהתאם.
    • הוספנו תמיכה ניסיונית בתזמון דינמי כדי להתאים טוב יותר את העבודה למחזורי ההפעלה של המעבד, ולדחות את ההפעלה עד שהרכיבים יכולים להתקדם. אפשר להפעיל את ההגדרה הזו באמצעות experimentalSetDynamicSchedulingEnabled() כשמגדירים את מופע ExoPlayer.
    • מוסיפים את Renderer.getDurationToProgressUs(). ‫Renderer יכול להטמיע את השיטה הזו כדי להחזיר ל-ExoPlayer את משך הזמן שצריך להריץ קדימה את ההפעלה כדי שהרכיב 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 במקום בגודל שמופיע בזרם הבסיסי (למשל, גודל הקובץ או כותרת ה-HTTP Content-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) מופו באופן שגוי לתגי ID3‏ TSO2, TSOA ו-TSOP (#1302).
    • תוקנה קריאה של תגי MP4 (/iTunes) מספריים gnre (ז'אנר) ו-tmpo (טמפו) כשהערך ארוך מבייט אחד.
    • העברת מסגרת ID3 TCON אל MediaMetadata.genre (מספר 1305).
  • תמונה:
    • הוספת תמיכה ברשתות של תמונות ממוזערות בפורמט DASH שאינן ריבועיות (#1300).
    • הוספת תמיכה ב-AVIF ל-API 34 ומעלה.
    • כדי לנקות ImageOutput שהוגדר בעבר, מאשרים את null כפרמטר של ExoPlayer.setImageOutput().
  • DataSource:
    • הטמעת תמיכה בכתובות URI של משאבים גולמיים מסוג android.resource://package/id, כאשר package שונה מהחבילה של האפליקציה הנוכחית. בעבר לא היה תיעוד לכך שהשיטה הזו עובדת, אבל היא דרך יעילה יותר לגשת למשאבים בחבילה אחרת מאשר לפי שם.
    • בודקים בקפידה אם url הוא לא null בבוני DataSpec. הפרמטר הזה כבר סומן כפרמטר שלא יכול להיות null.
    • אפשר ל-ByteArrayDataSource לפתור URI למערך בייטים במהלך open(), במקום להיות מקודד באופן קשיח במהלך הבנייה (#1405).
  • DRM:
    • הגדרה של LoadErrorHandlingPolicy מותרת ב-DefaultDrmSessionManagerProvider (מס' 1271).
  • ההשפעה:
    • תמיכה בכמה שינויים במהירות באותו תג EditedMediaItem או Composition ב-SpeedChangeEffect.
    • תמיכה בפלט HLG ו-PQ מקלט של מפת סיביות בפורמט Ultra HDR.
    • הוספת תמיכה ב-EGL_GL_COLORSPACE_BT2020_HLG_EXT, שמשפרת את פלט פני השטח של HLG ב-ExoPlayer.setVideoEffect וב-Debug SurfaceView של Transformer.
    • מעדכנים את ההטמעה של מטריצת השכבות כך שתהיה עקבית עם התיעוד, על ידי היפוך הערכים של x ו-y שמוחלים ב-setOverlayFrameAnchor(). אם משתמשים ב-OverlaySettings.Builder.setOverlayFrameAnchor(), צריך להפוך את ערכי x ו-y על ידי הכפלתם ב--1.
    • תוקן באג שגרם לקריסה של TimestampWrapper כשמשתמשים בו עם ExoPlayer#setVideoEffects (מספר 821).
    • שינוי מרחב העבודה של צבעי SDR שמוגדר כברירת מחדל מצבעים ליניאריים לסרטון SDR חשמלי בתקן BT 709. צריך גם לספק אפשרות שלישית לשמירה של מרחב הצבעים המקורי.
    • אפשר להגדיר סדר Z לא קבוע של EditedMediaItemSequences (#1055).
    • שמירה על טווח בהירות עקבי בין פריטי תוכן שונים ב-HDR (השימוש הוא בטווח HLG).
    • הוספת תמיכה בשכבות-על של Ultra HDR (מפת סיביות) בתוכן HDR.
    • יש הרשאה לשימוש באפקטים של SeparableConvolution לפני API 26.
    • מסירים את OverlaySettings.useHdr שלא בשימוש כי הטווח הדינמי של שכבת העל והמסגרת חייב להיות זהה.
    • הוספת תמיכה ב-HDR ל-TextOverlay. אפשר לשנות את בהירות שכבת הטקסט באמצעות OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • ‫IMA extension:
    • קידום של API שנדרש כדי שאפליקציות יוכלו להפעיל סטרימינג של מודעות DAI לגרסה יציבה.
    • מוסיפים replaceAdTagParameters(Map <String, String>) ל-ImaServerSideAdInsertionMediaSource.AdLoader שמאפשר להחליף פרמטרים של תג פרסום בזמן ריצה.
    • תוקן באג שגרם לכך שהפונקציה VideoAdPlayer.VideoAdPlayerCallback.onError() לא נקראה כשהתרחשה שגיאת הפעלה במהלך הפעלת מודעה (#1334).
    • העלאה של גרסת IMA SDK ל-3.33.0 כדי לתקן NullPointerException כשמשתמשים בכתובות URI של תגי מודעות data:// (מס' 700).
  • סשן:
    • משנים את ברירת המחדל של CommandButton.enabled ל-true ומוודאים שהערך יכול להישאר false לבקרים גם אם הפקודה המשויכת זמינה.
    • הוספת קבועים של סמלים בשביל CommandButton שצריך להשתמש בהם במקום במשאבי סמלים מותאמים אישית.
    • הוספנו את MediaSessionService.isPlaybackOngoing() כדי לאפשר לאפליקציות לשלוח שאילתות לגבי הצורך בהפסקת השירות ב-onTaskRemoved() (#1219).
    • הוספנו את MediaSessionService.pauseAllPlayersAndStopSelf() שמאפשר להשהות את ההפעלה של כל הסשנים ולקרוא ל-stopSelf() כדי לסיים את מחזור החיים של MediaSessionService.
    • מחליפים את MediaSessionService.onTaskRemoved(Intent) כדי לספק הטמעה בטוחה כברירת מחדל, שתשאיר את השירות פועל בחזית אם ההפעלה נמשכת, או שתפסיק את השירות אחרת.
    • הסתרת סרגל הניווט בהתראה על מדיה לשידורים חיים על ידי אי הגדרת משך הזמן במטא-נתונים של סשן הפלטפורמה (#1256).
    • התאמת ההמרה של MediaMetadata ל-MediaDescriptionCompat, כדי להשתמש באותו סדר מועדף ובאותה לוגיקה כשבוחרים מאפייני מטא-נתונים כמו במדיה1.
    • הוספת MediaSession.sendError() שמאפשרת שליחת שגיאות לא קריטיות אל הבקר של Media3. כשמשתמשים בבקר ההתראות (ראו MediaSession.getMediaNotificationControllerInfo()), השגיאה המותאמת אישית משמשת לעדכון PlaybackState של סשן הפלטפורמה למצב שגיאה עם פרטי השגיאה שצוינו (מס' 543).
    • מוסיפים את MediaSession.Callback.onPlayerInteractionFinished() כדי להודיע על סיום סדרה של אינטראקציות עם הנגן מבקר מסוים.
    • מוסיפים את SessionError ומשתמשים בו ב-SessionResult וב-LibraryResult במקום קוד השגיאה כדי לספק מידע נוסף על השגיאה ועל הדרך לפתור אותה, אם אפשר.
    • פרסום הקוד של אפליקציית הבדיקה של media3 controller שאפשר להשתמש בה כדי לבדוק אינטראקציות עם אפליקציות שמפרסמות סשן מדיה.
    • העברת נתונים נוספים שהועברו אל MediaSession[Builder].setSessionExtras() של media3 אל MediaSession[Builder].setSessionExtras() של media1.PlaybackStateCompat.getExtras()
    • מיפוי שגיאות חמורות ולא חמורות אל הסשן בפלטפורמה וממנו. ‫A 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 בתוך Compose AndroidView ב-API 34 (‎#1237).
  • הורדות:
    • מוודאים ש-DownloadHelper לא גורם לדליפה של מופעי Renderer שלא פורסמו, מה שעלול לגרום בסופו של דבר לקריסת האפליקציה עם IllegalStateException: Too many receivers, total of 1000, registered for pid (מספר 1224).
  • תוסף Cronet:
    • תיקון של SocketTimeoutException בCronetDataSource. בגרסאות מסוימות של Cronet, הבקשה שמועברת על ידי הקריאה החוזרת לא תמיד זהה. הבעיה הזו גורמת לכך שהקריאה החוזרת לא מושלמת והבקשה נכשלת בגלל חריגה מזמן קצוב לתפוגה (https://issuetracker.google.com/328442628).
  • תוסף HLS:
    • תוקן באג שבו דגימות EMSG בהמתנה להפסקת שידור הועברו ב-HlsSampleStreamWrapper עם היסט שגוי שגרם ל-IndexOutOfBoundsException או ל-IllegalArgumentException (מס' 1002).
    • תוקן באג שבו פלייליסטים לא ראשיים נטענים מחדש בשידורים בפרוטוקול LL-HLS (#1240).
    • נפתרה באג שבו הפעלת CMCD עבור HLS עם פלחי אתחול הובילה ל-Source Error ול-IllegalArgumentException.
    • נפתרה בעיה שגרמה לכך שפלייליסטים שמופעלים ולא מוגדרים כראשיים לא רעננו במהלך הפעלה בשידור חי (#1240).
    • תוקן באג שבו הפעלת CMCD לשידורים חיים ב-HLS גורמת לבעיה ArrayIndexOutOfBoundsException (#1395).
  • תוסף DASH:
    • תוקן באג שבו הכנה מחדש של שידור חי עם כמה תקופות יכולה להחזיר את השגיאה IndexOutOfBoundsException (#1329).
    • הוספת תמיכה בdashif:Laurl כתובות URL של רישיונות (#1345).
  • תוסף Cast:
    • תוקן באג שהמיר את שם האלבום של MediaQueueItem לאומן בפריט המדיה Media3 (#1255).
  • כלי בדיקה:
    • הטמעה של onInit() ו-onRelease() ב-FakeRenderer.
    • שינוי שיטות TestPlayerRunHelper.runUntil()/playUntil() כך שיכשלו בשגיאות לא קריטיות (לדוגמה, אלה שמדווחות ל-AnalyticsListener.onVideoCodecError()). השתמשו בשרשרת השיטות החדשה TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() כדי להשבית את ההתנהגות הזו.
  • אפליקציית הדגמה:
    • משתמשים ב-DefaultPreloadManager באפליקציית ההדגמה של סרטונים קצרים.
    • אפשר להגדיר מצב חזרה עם ארגומנטים של Intent משורת הפקודה (מס' 1266).
    • אפשר להשתמש ב-HttpEngineDataSource בתור HttpDataSource אם המכשיר תומך בכך.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של CronetDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
    • צריך להסיר חלק מהבנאים DataSpec. במקום זאת, אתם צריכים להשתמש ב-DataSpec.Builder.
    • הסרת אמצעי התשלום setContentTypePredicate(Predicate) מהחשבונות DefaultHttpDataSource, OkHttpDataSource וCronetDataSource. במקום זאת, צריך להשתמש בשיטה המקבילה בכל XXXDataSource.Factory.
    • הסרה של קונסטרוקטורים של OkHttpDataSource ושל OkHttpDataSourceFactory. במקום זאת, אתם צריכים להשתמש ב-OkHttpDataSource.Factory.
    • הסרה של PlayerMessage.setHandler(Handler). במקום זאת, אתם צריכים להשתמש ב-setLooper(Looper).
    • הסרת השדה Timeline.Window.isLive. במקום זאת, משתמשים בשיטה isLive().
    • הסרת בנאי DefaultHttpDataSource. במקום זאת, אתם צריכים להשתמש ב-DefaultHttpDataSource.Factory.
    • הסרה של DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. במקום זאת, אתם צריכים להשתמש ב-DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS.
    • הסרה של MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). במקום זאת, אתם צריכים להשתמש ב-MediaCodecInfo.canReuseCodec(Format, Format).
    • הסרת השיטות DrmSessionManager.DUMMY ו-getDummyDrmSessionManager(). במקום זאת, אתם צריכים להשתמש ב-DrmSessionManager.DRM_UNSUPPORTED.
    • הסרה של AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format), VideoRendererEventListener.onVideoInputFormatChanged(Format). במקום זאת, משתמשים בעומסים העודפים שמקבלים DecoderReuseEvaluation.
    • הסרה של RendererSupport.FormatSupport IntDef ושל הקבועים FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE, FORMAT_UNSUPPORTED_TYPE. במקום זאת, צריך להשתמש ב-IntDef ובקבועים המקבילים ב-androidx.media3.common.C (למשל, C.FORMAT_HANDLED).
    • הסרת הממשק Bundleable. זה כולל הסרה של כל השדות הקבועים Bundleable.Creator<Foo> CREATOR. במקום זאת, המתקשרים צריכים להשתמש בשיטות Bundle toBundle() ו-static Foo fromBundle(Bundle) בכל סוג.

גרסה 1.4.0-rc01

‫10 ביולי 2024

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

גרסה ‎1.4.0-beta01

‫26 ביוני 2024

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

גרסה ‎1.4.0-alpha02

‫7 ביוני 2024

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

גרסה ‎1.4.0-alpha01

‫17 באפריל 2024

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

גרסה 1.3.0

גרסה 1.3.1

‫11 באפריל 2024

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

  • ספרייה משותפת:
    • מוסיפים Format.labels כדי לאפשר תוויות חלופיות או תוויות בשפות מקומיות.
  • ‫ExoPlayer:
    • תוקנה בעיה שבה לא ניתן לשמור את הזרמים כשמבצעים טעינה מראש של PreloadMediaPeriod שוב.
    • צריך להחיל את TrackSelectionResult המתאים לתקופת ההפעלה בבחירה מחדש של הרצועה.
    • התחלת רכיבי עיבוד עם הפעלה מוקדמת רק אחרי קידום תקופת ההפעלה במעבר בין פריטי מדיה (‎#1017).
    • הוספת סוג החזרה חסר לכלל proguard -keepclasseswithmembers עבור DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformer:
    • הוספת פתרון עקיף לחריג שנוצר בגלל ש-MediaMuxer לא תומך בחותמות זמן שליליות של הצגה לפני API 30.
  • בחירת טראק:
    • DefaultTrackSelector: עדיפות למסלולי וידאו עם קצב פריימים 'סביר' (‎>=10fps) על פני מסלולים עם קצב פריימים נמוך יותר או לא מוגדר. כך הנגן בוחר את טראק הווידאו 'האמיתי' בקובצי MP4 שחולצו מתמונות נעות, שיכולים להכיל שני טראקים של HEVC, שאחד מהם הוא ברזולוציה גבוהה יותר אבל עם מספר קטן מאוד של פריימים (#1051).
  • מחולצי מידע:
    • תוקנה בעיה שבה לא הייתה דילוג על ריווח כשקוראים נתחים בגודל אי-זוגי מקובצי WAV (‎#1117).
    • ‫MP3: מאכלסים את Format.averageBitrate מתוך מסגרות של מטא-נתונים כמו XING ו-VBRI.
    • ‫MPEG-TS: שחזור שינוי שנועד להבטיח שהפריים האחרון יעבור רינדור על ידי העברת יחידת הגישה האחרונה של הזרם לתור הדגימות (‎#7909). הסיבה לכך היא שהשינוי גורם לבעיות חדשות בזרמי HLS של I-frame בלבד (מספר 1150) ובזרמי HLS של H.262 (מספר 1126).
  • אודיו:
    • מתן הרשאה לשחזור של רכיב ה-Renderer על ידי השבתת ההעברה אם לא ניתן לאתחל את טראק האודיו במצב העברה.
  • סרטון:
    • נוספה דרך לעקיפת בעיה במכשירים Galaxy Tab S7 FE,‏ Chromecast עם Google TV ו-Lenovo M10 FHD Plus שגורמת לסימון סטרימינג של H265 ב-60fps כלא נתמך
    • נוסף פתרון עקיף שמבטיח שהפריים הראשון תמיד יעבור רינדור בזמן מנהור, גם אם המכשיר לא עושה זאת באופן אוטומטי כנדרש על ידי ה-API (#1169). ‫(#966).
    • תוקנה בעיה שבה טיפול בפרטי צבע HDR גורם להתנהגות לא תקינה של קודק ומונע מעברים בין פורמטים של רצועות וידאו SDR (מס' 1158).
  • טקסט:
    • WebVTT: מניעה של יצירת מופעים נוספים של CuesWithTiming מ-WebvttParser.parse על ידי רמזים עוקבים ישירות (#1177).
  • DRM:
    • פתרון לבעיה NoSuchMethodError שיכולה להתרחש ב-MediaDrm framework במקום ב-ResourceBusyException או ב-NotProvisionedException בחלק ממכשירי Android 14‏ (#1145).
  • ההשפעה:
    • שיפור במיפוי הטונים מ-PQ ל-SDR על ידי המרת מרחבי צבעים.
  • סשן:
    • תוקנה בעיה שבה המיקום הנוכחי קופץ אחורה כשבקר מחליף את הפריט הנוכחי (#951).
    • תוקנה הבעיה שבה MediaMetadata עם extras שאינו null לא מועבר בין בקרי מדיה וסשנים (#1176).
  • ‫UI:
    • אם אי אפשר לזהות שם תצוגה של Locale, המערכת תשתמש בשם השפה של טראק האודיו (#988).
  • תוסף DASH:
    • מאכלסים את כל רכיבי Label מהמניפסט ב-Format.labels (מס' 1054).
  • תוסף RTSP:
    • דילוג על ערכים ריקים של פרטי סשן (תגי i) בניתוח SDP (#1087).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • ההגדרה של תוסף MIDI כהסתמכות מקומית מושבתת כברירת מחדל כי צריך להגדיר מאגר Maven נוסף. משתמשים שצריכים את המודול הזה כתלות מקומית יכולים להפעיל אותו מחדש.

גרסה 1.3.0

‫6 במרץ 2024

androidx.media3:media3-*:1.3.0 משוחרר. גרסה 1.3.0 מכילה את הקומטים האלה.

  • ספרייה משותפת:
    • הטמעת תמיכה בכתובות URI של משאבים גולמיים [android.resource://package/[type/]name] כאשר [package] שונה מהחבילה של האפליקציה הנוכחית. האפשרות הזו תמיד הייתה מתועדת כפועלת, אבל עד עכשיו היא לא הוטמעה בצורה נכונה.
    • מבצעים נורמליזציה של סוגי MIME שמוגדרים על ידי קוד האפליקציה או נקראים ממדיה, כך שיהיו באותיות קטנות בלבד.
    • הגדרת מודעות עם MediaItem מלא במקום Uri יחיד ב-AdPlaybackState.
    • הגדלת הערך של minSdk ל-19 (Android KitKat). השינוי הזה תואם לכל שאר הספריות של AndroidX, והוא נדרש כדי שנוכל לשדרג לגרסאות האחרונות של התלויות שלנו ב-AndroidX.
    • מאכלסים את שני השדות artworkUri ו-artworkData ב-MediaMetadata.Builder.populate(MediaMetadata) אם לפחות אחד מהם לא ריק (#964).
  • ‫ExoPlayer:
    • מוסיפים את PreloadMediaSource ו-PreloadMediaPeriod שמאפשרים לאפליקציות לטעון מראש מקור מדיה של תוכן במיקום התחלה ספציפי לפני ההפעלה. ‫PreloadMediaSource דואג להכין את מקור המדיה של התוכן לקבלת Timeline, להכין את התקופה ולשמור אותה במטמון במיקום ההתחלתי שצוין, לבחור רצועות ולטעון את נתוני המדיה לתקופה. האפליקציות שולטות בהתקדמות הטעינה מראש באמצעות הטמעה של PreloadMediaSource.PreloadControl ומגדירות את המקור שנטען מראש בנגן להפעלה.
    • הוספת ExoPlayer.setImageOutput שמאפשרת לאפליקציות להגדיר את ImageRenderer.ImageOutput.
    • DefaultRenderersFactory מספק עכשיו ImageRenderer לשחקן כברירת מחדל עם ImageOutput ו-ImageDecoder.Factory.DEFAULT שהערכים שלהם הם null.
    • פליטת אירוע Player.Listener.onPositionDiscontinuity כשמדלגים על השתקה (‎#765).
    • הוספנו תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. אפשר להפעיל את ההגדרה הזו באמצעות MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • תמיכה במקורות מדיה דינמיים באמצעות PreloadMediaSource.
    • מטמיעים את HttpEngineDataSource, שהוא HttpDataSource באמצעות ה-API של HttpEngine.
    • מניעת יצירת מחלקות משנה CompositeSequenceableLoader. הרכיב הזה היה ניתן להרחבה בעבר, אבל אף פעם לא נוצר ממנו מחלקת משנה בספרייה. אפשר לבצע התאמות אישיות על ידי עטיפת מופע באמצעות תבנית מעטפת והטמעה של 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).
  • אודיו:
    • שיפור האלגוריתם של דילוג על קטעי שקט באמצעות הגברה הדרגתית של עוצמת הקול; שמירה על קטעי שקט מינימליים ומשכי זמן טבעיים יותר של קטעי שקט (#7423).
    • דיווח על השתקה שנדחית בצורה יותר דטרמיניסטית (#1035).
  • סרטון:
    • משנים את ה-constructor של MediaCodecVideoRenderer שמקבל ארגומנט VideoFrameProcessor.Factory ומחליפים אותו ב-constructor שמקבל ארגומנט VideoSinkProvider. אפליקציות שרוצות להוסיף VideoFrameProcessor.Factory מותאם אישית יכולות ליצור מופע של CompositingVideoSinkProvider שמשתמש ב-VideoFrameProcessor.Factory המותאם אישית ולהעביר את ספק יעד הווידאו אל MediaCodecVideoRenderer.
  • טקסט:
    • תוקנה סריאליזציה של רמזים למפת סיביות כדי לפתור את השגיאה 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 קרוב לזמני ההצגה שלהן.
  • DRM:
    • הפעלת דוגמאות לא מוצפנות של 'הובלה ברורה' בתוכן DRM באופן מיידי כברירת מחדל, גם אם המפתחות לדוגמאות המוצפנות הבאות עדיין לא מוכנים. אם המפתחות עדיין לא מוכנים כשמיקום ההפעלה מגיע לדוגמאות המוצפנות (אבל קודם ההפעלה לא הייתה מתחילה בכלל עד לנקודה הזו), יכול להיות שיהיו השהיות באמצע ההפעלה. אפשר להשבית את ההתנהגות הזו באמצעות MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey או DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
  • ‫IMA extension:
    • תוקנה בעיה שגרמה לכך שלא ניתן היה להפעיל מודעות בפורמטים DASH ו-HLS ללא סיומת הקובץ המתאימה.
  • סשן:
    • השבתת זיהוי לחיצה כפולה באפליקציות לטלוויזיה (#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).
  • אודיו:
    • תוקן הטיפול ב-EOS עבור SilenceSkippingAudioProcessor כשמתבצעות כמה קריאות (‎#712).
  • סרטון:
    • נוספה דרך לעקיפת בעיה במכשירים 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 כשעוברים מתוכן מוצפן לתוכן לא מוצפן בלי שמשטח מחובר לנגן. השגיאה נבעה משימוש לא נכון במפענח מאובטח להפעלת התוכן הלא מוצפן.
  • סשן:
    • מציבים את המפתחות והערכים המותאמים אישית ב-MediaMetadataCompat עד MediaMetadata.extras וב-MediaMetadata.extras עד MediaMetadataCompat (‎#756,‏ ‎#802).
    • תיקון שידור notifyChildrenChanged לבקרי משחקים מדור קודם (#644).
    • תוקן באג שבו הגדרת זמן שלילי לטיימר setWhen מושבת של ההתראה גרמה לקריסה במכשירים מסוימים (#903).
    • תוקנה בעיה IllegalStateException שבה לא הושלם החיבור של אמצעי הבקרה של התראות המדיה כשמתבקש עדכון ההתראה הראשון (#917).
  • ‫UI:
    • תוקנה בעיה שבה הכפתורים להרצה קדימה ולהרצה אחורה לא נראו כשנעשה בהם שימוש עם Material Design ב-BottomSheetDialogFragment (#511).
    • תוקנה הבעיה שבה המספרים בכפתור ההעברה קדימה של PlayerControlView לא היו מיושרים (מס' 547).
  • תוסף DASH:
    • ניתוח המחרוזת f800 כמספר הערוצים 5 עבור Dolby במניפסט DASH (#688).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • ‫MIDI: נפתרה בעיה שבה דילוג קדימה מדלג על אירועי שינוי התוכנית (‎#704).
    • מעבר ל-FFmpeg 6.0 ועדכון NDK נתמך ל-r26b (#707, #867).
  • תוסף Cast:
    • הוסרה אפשרות ליצור Timeline כדי למנוע קריסה של האפליקציה כשטעינת המדיה נכשלת במכשיר Cast (#708).

גרסה 1.2.0

‫15 בנובמבר 2023

  • ספרייה משותפת:
    • מוסיפים פרמטר @Nullable Throwable לשיטות בממשק Log.Logger. הפרמטר message בשיטות האלה כבר לא מכיל מידע על Throwable שמועבר לשיטות Log.{d,i,w,e}(), ולכן אם רוצים, צריך להוסיף את המידע הזה באופן ידני בהטמעות (אפשר להשתמש ב-Logger.appendThrowableString(String, Throwable)).
    • תוקנה בעיה בתאימות ל-Kotlin שבה פרמטרים של סוגים גנריים שניתן להגדיר כ-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 כדוגמה אחת.
    • שיפור השיטה 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).
  • סרטון:
    • מתן הרשאה ל-MediaCodecVideoRenderer להשתמש ב-VideoFrameProcessor.Factory מותאם אישית.
    • תוקן באג שגרם לכך שלא היתה אפשרות לעבד את הפריימים הראשונים אם זרם האודיו התחיל עם חותמות זמן שליליות (#291).
  • טקסט:
    • הסרה של ExoplayerCuesDecoder. טראקים של טקסט עם sampleMimeType = application/x-media3-cues מטופלים עכשיו ישירות על ידי TextRenderer בלי צורך במופע SubtitleDecoder.
  • מטא-נתונים:
    • MetadataDecoder.decode לא יופעל יותר עבור דוגמאות של 'פענוח בלבד' כי ההטמעה חייבת להחזיר null בכל מקרה.
  • ההשפעה:
    • הוספה של VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) queuing bitmap input by timestamp.
    • משנים את VideoFrameProcessor.registerInputStream() כך שלא יחסום את התהליך. באפליקציות צריך להטמיע את VideoFrameProcessor.Listener#onInputStreamRegistered().
    • הפרמטרים frameRate ו-durationUs של VideoFrameProcessor.queueInputBitmap השתנו ל-TimestampIterator.
  • ‫IMA extension:
    • תוקנה באג שבו שידור חי בפורמט DASH עם כמה תקופות שלא מופיע כפריט הראשון בפלייליסט יכול להחזיר חריגה (‎#571).
    • צריך להפעיל את StreamManager לפני שמתקשרים אל AdsLoader.destroy()
    • העלאת גרסת IMA SDK ל-3.31.0.
  • סשן:
    • מגדירים את ההתנהגות של שירות ההתראות שפועל בחזית לערך FOREGROUND_SERVICE_IMMEDIATE ב-DefaultMediaNotificationProvider (‎#167).
    • כדי להימנע מבעיות ב-API שהוצא משימוש במכשירי Samsung, צריך להשתמש רק ב-android.media.session.MediaSession.setMediaButtonBroadcastReceiver() מעל API 31 (#167).
    • משתמשים בבקר של התראות המדיה כפרוקסי כדי להגדיר פקודות זמינות ופריסה בהתאמה אישית שמשמשת לאכלוס ההתראה והסשן בפלטפורמה.
    • המרת אירועים של לחצני מדיה שמתקבלים על ידי MediaSessionService.onStartCommand() בתוך Media3 במקום לנתב אותם לסשן של הפלטפורמה ובחזרה ל-Media3. כך, בקר השיחות הוא תמיד בקר ההתראות על מדיה, ואפליקציות יכולות לזהות בקלות שיחות שמגיעות מההתראה באותו אופן בכל רמות ה-API הנתמכות.
    • תוקן באג שגרם לכך ש-MediaController.getCurrentPosition() לא התקדם כשחיברו אותו ל-MediaSessionCompat מדור קודם.
    • מוסיפים את MediaLibrarySession.getSubscribedControllers(mediaId) לנוחות.
    • מחליפים את MediaLibrarySession.Callback.onSubscribe() כדי להצהיר על הזמינות של מזהה ההורה שאליו הבקר רשום. אם הפעולה מצליחה, המינוי מתקבל ומתבצעת קריאה מיידית ל-notifyChildrenChanged() כדי לעדכן את הדפדפן (#561).
    • הוספת מודול הדגמה של סשן ל-Automotive OS והפעלת הדגמה של סשן ל-Android Auto.
    • אל תגדירו את התור של סשן ה-framework אם COMMAND_GET_TIMELINE לא זמין לבקר של התראת המדיה. כש-Android Auto משמש כבקר לקוח שקורא מהסשן של המסגרת, התוצאה היא שכפתור queue בממשק המשתמש של Android Auto לא מוצג (#339).
    • להשתמש ב-DataSourceBitmapLoader כברירת מחדל במקום ב-SimpleBitmapLoader (מס' 271, מס' 327).
    • הוספה של MediaSession.Callback.onMediaButtonEvent(Intent) שמאפשר לאפליקציות לבטל את הטיפול באירועים של לחצני מדיה שמוגדר כברירת מחדל.
  • ‫UI:
    • הוספנו Player.Listener הטמעה למכשירי Wear OS שמטפלת בהשבתת ההפעלה בגלל Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT על ידי הפעלת תיבת דו-שיח במערכת שמאפשרת למשתמש לחבר פלט שמע מתאים (למשל אוזניות Bluetooth). ההאזנה תתחדש אוטומטית אם מכשיר מתאים יחובר תוך פרק זמן קצוב שניתן להגדרה (ברירת המחדל היא 5 דקות).
  • הורדות:
    • הצהרה על סוג השירות שפועל בחזית 'סנכרון נתונים' עבור DownloadService לצורך תאימות ל-Android 14. בנוסף, כשמשתמשים בשירות הזה, האפליקציה צריכה להוסיף את dataSync כ-foregroundServiceType במניפסט, ולהוסיף את ההרשאה FOREGROUND_SERVICE_DATA_SYNC (מספר 11239).
  • תוסף HLS:
    • רענון של פלייליסט HLS לשידור חי במרווח זמן שמחושב לפי שעת ההתחלה של הטעינה האחרונה ולא לפי שעת הסיום של הטעינה האחרונה (#663).
  • תוסף DASH:
    • אפשר להשתמש בכמה מזהים זהים של DASH בכתובת URL של תבנית פלח.
    • הוספנו תמיכה ניסיונית בניתוח כתוביות במהלך החילוץ. השיפור הזה כולל תמיכה טובה יותר במיזוג של כתוביות חופפות, כולל פתרון של הבהובים במעבר בין מקטעי כתוביות. אפשר להפעיל את האפשרות הזו באמצעות DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (מס' 288).
  • תוסף RTSP:
    • תיקון מצב מירוץ שעלול להוביל ל-IndexOutOfBoundsException כשמתבצעת חזרה ל-TCP, או להשהיית ההפעלה במצבים מסוימים.
    • בדיקת המצב בהגדרת RTSP כשמוחזר מצב הטעינה של RtspMediaPeriod (#577).
    • התעלמות משיטות מותאמות אישית של בקשות Rtsp בכותרת הציבורית של תגובת האפשרויות (#613).
    • שימוש בערך הזמן הקצוב לתגובה של הגדרת RTSP במרווח הזמן של שליחת בקשות RTSP Options של keep-alive (#662).
  • תוספי פענוח (FFmpeg,‏ VP9,‏ AV1,‏ MIDI וכו'):
    • שחרור מודול מפענח ה-MIDI, שמספק תמיכה בהשמעה של קובצי MIDI רגילים באמצעות ספריית Jsyn לסינתזת אודיו.
    • מוסיפים DecoderOutputBuffer.shouldBeSkipped כדי לסמן ישירות מאגרי פלט שלא צריך להציג. האפשרות הזו עדיפה על C.BUFFER_FLAG_DECODE_ONLY, שתוצא משימוש.
    • מוסיפים את Decoder.setOutputStartTimeUs ואת SimpleDecoder.isAtLeastOutputStartTimeUs כדי לאפשר למפענחים להשמיט דוגמאות של פענוח בלבד לפני שעת ההתחלה. מומלץ להשתמש בשיטה הזו במקום בשיטה Buffer.isDecodeOnly, שתצא משימוש.
    • תיקון באג בפרסום ארטיפקט של פענוח MIDI במאגר Maven. שם הארטיפקט שונה ל-media3-exoplayer-midi (מס' 734).
  • תוסף Leanback:
    • תוקן באג שבו השבתה של משטח עלולה לגרום לשגיאה ArithmeticException בקוד Leanback ‏ (#617).
  • כלי בדיקה:
    • התאמה של TestExoPlayerBuilder ו-FakeClock לבדיקות של ממשק המשתמש של Espresso ולבדיקות של ממשק המשתמש של Compose. התיקון הזה פותר באג שגרם להתקדמות לא דטרמיניסטית של ההפעלה במהלך אינטראקציות עם תצוגת Espresso או Compose.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) ושל TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). במקום זאת, צריך להשתמש ב-Composition.Builder.setHdrMode(int) ולהעביר את Composition אל Transformer.start(Composition, String).
    • מסירים את השיטה DownloadNotificationHelper.buildProgressNotification שהיא הוצאה משימוש, ומשתמשים בשיטה שלא הוצאה משימוש שמקבלת פרמטר notMetRequirements במקום זאת.

גרסה 1.2.0-rc01

‫1 בנובמבר 2023

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

גרסה 1.2.0-beta01

‫19 באוקטובר 2023

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

גרסה 1.2.0-alpha02

‫29 בספטמבר 2023

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

גרסה 1.2.0-alpha01

‫17 באוגוסט 2023

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

גרסה 1.1.0

גרסה 1.1.1

‫16 באוגוסט 2023

  • ספרייה משותפת:
    • הסרה של תלות multidex שנוספה בטעות מכל המודולים (#499).
  • ‫ExoPlayer:
    • תוקנה בעיה ב-PlaybackStatsListener שבה נוצרו ערכי PlaybackStats מזויפים אחרי שהפלייליסט נוקה.
    • הוספת שדות נוספים לרישום ביומן של נתוני לקוח מדיה נפוצים (CMCD): פורמט סטרימינג (sf), סוג סטרימינג (st), גרסה (v), קצב העברת נתונים עליון (tb), משך האובייקט (d), קצב העברת נתונים שנמדד (mtp) וסוג האובייקט (ot) (#8699).
  • אודיו:
    • תוקן באג שגרם לכך שהמצב Player.getState() לא עבר אף פעם למצב STATE_ENDED בזמן הפעלת קבצים קצרים מאוד (#538).
  • העברת אודיו:
    • צריך להוסיף לפני זרם הביטים את דפי הכותרת של מזהה Ogg ואת דפי הכותרת של התגובה להשמעת Opus שהועברה בהתאם ל-RFC 7845.
  • סרטון:
    • ‫H.265/HEVC: תיקון ניתוח של פרטי תמונת ההפניה לטווח קצר וארוך של SPS.
  • טקסט:
    • ‫CEA-608: שינוי הלוגיקה של חיתוך רמזים כך שרק טקסט גלוי ייחשב. בעבר, ההזחה וההזחה באמצעות מקש 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).

גרסה 1.1.0

‫5 ביולי 2023

  • ספרייה משותפת:
    • ‫Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15).
    • הוספת פקודות לנגן:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • הוספת שיטות עמוסות מדי ל-Player שמאפשרות למשתמשים לציין את עוצמת הקול:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • הוספת Builder ל-DeviceInfo והוצאה משימוש של בנאי קיים.
    • מוסיפים DeviceInfo.routingControllerId כדי לציין את מזהה בקר הניתוב להפעלות מרחוק.
    • הוספנו את Player.replaceMediaItem(s) כקיצור דרך להוספה ולהסרה של פריטים באותו מיקום (#8046).
  • ‫ExoPlayer:
    • אפשר לאפשר ל-ExoPlayer לשלוט בשיטות של עוצמת הקול במכשיר רק אם המשתמש הביע הסכמה מפורשת. משתמשים בExoPlayer.Builder.setDeviceVolumeControlEnabled כדי לקבל גישה אל:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) וגם setDeviceVolume(int, int)
      • increaseDeviceVolume(int) וגם increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) וגם decreaseDeviceVolume(int, int)
    • הוספת FilteringMediaSource שמאפשרת לסנן את סוגי הטראקים הזמינים מ-MediaSource.
    • הוספנו תמיכה בהכללת נתוני לקוח מדיה נפוצים (CMCD) בבקשות היוצאות של פורמטים של סטרימינג אדפטיבי DASH,‏ HLS ו-SmoothStreaming. השדות הבאים, br,‏ bl,‏ cid,‏ rtp ו-sid, שולבו (מספר 8699). מבנה ה-API ושיטות ה-API:
      • רישום ביומן של CMCD מושבת כברירת מחדל. כדי להפעיל אותו, משתמשים ב-MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory).
      • כל המקשים מופעלים כברירת מחדל. אפשר להגדיר את CmcdConfiguration.RequestConfig.isKeyAllowed(String key) כדי לסנן את המקשים שמתועדים.
      • מחליפים את CmcdConfiguration.RequestConfig.getCustomData() כדי להפעיל רישום מותאם אישית ביומן.
    • הוספנו פעולה נוספת למניפסט של ההדגמה הראשית כדי להקל על הפעלת אפליקציית ההדגמה באמצעות קובץ *.exolist.json בהתאמה אישית (‎#439).
    • הוספת ExoPlayer.setVideoEffects() לשימוש ב-Effect במהלך הפעלת סרטון.
    • צריך לעדכן את SampleQueue כדי לאחסן את sourceId כlong ולא כint. הפעולה הזו משנה את החתימות של השיטות הציבוריות SampleQueue.sourceId ו-SampleQueue.peekSourceId.
    • מוסיפים פרמטרים לשיטות LoadControl shouldStartPlayback ו-onTracksSelected שמאפשרים לשייך את השיטות האלה לMediaPeriod הרלוונטי.
    • משנים את החתימה של ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) על ידי הוספת פרמטר של ציר זמן שמכיל את התקופות עם מזהי ה-UID שמשמשים כמפתחות במפה. הדבר נדרש כדי למנוע בעיות של בו-זמניות בשידורים חיים עם כמה תקופות.
    • הוצאה משימוש של EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) ושל BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). אפשר להשתמש במקום זאת בגרסה של המתודות בלי mediaTimeOffsetUs. שימו לב שגם בווריאציות שהוצאו משימוש, ההיסט לא מתווסף יותר ל-startTimeUs ול-endTimeUs של אובייקטים מסוג MediaLoadData שנשלחים על ידי ה-dispatcher.
    • שינוי השם של ExoTrackSelection.blacklist ל-excludeTrack ושל isBlacklisted ל-isTrackExcluded.
    • תיקון התנהגות לא עקבית בין ExoPlayer.setMediaItem(s) לבין addMediaItem(s) כשקוראים להן בפלייליסט ריק.
  • 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 מפעיל בחירה חדשה של טראק כשהיכולות של רכיב העיבוד משתנות.
  • מחולצי מידע:
    • ‫Ogg: תיקון באג בחיפוש בקבצים עם משך ארוך (#391).
    • ‫FMP4: תוקנה בעיה שבה TimestampAdjuster מאתחל היסט לא נכון של חותמת זמן עם זמן דגימת מטא-נתונים מאטום emsg ‏(#356).
  • אודיו:
    • תוקן באג שגרם לכך שחלק מההפעלות נכשלו כשמנהור מופעל ו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 container.
  • ‫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 כדי לכתוב רכיבי ממשק משתמש מותאמים אישית עם לחצן הפעלה/השהיה.
  • תוסף RTSP:
    • ב-MPEG4-LATM, אם הערך של profile-level-id לא מופיע בהודעת ה-SDP של תגובת Describe (מס' 302), צריך להשתמש בערך ברירת המחדל.
    • אם הוא מופיע בכותרת התגובה של DESCRIBE, צריך להשתמש ב-URI הבסיסי לפתרון נתיב יחסי מהסשן של RTSP (‎#11160).
  • תוסף DASH:
    • מסירים את ההיסט של זמן המדיה מהתגים MediaLoadData.startTimeMs ו-MediaLoadData.endTimeMs בשידורי DASH עם כמה תקופות.
    • תוקן באג שגרם לכך שהכנה מחדש של מקור מדיה של Dash בשידור חי עם כמה תקופות הניבה IndexOutOfBoundsException (#10838).
  • תוסף HLS:
    • מוסיפים את HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) כדי להגדיר זמן קצוב לתהליך הטעינה להמתנה לאתחול של TimestampAdjuster. אם האתחול לא מסתיים לפני תום הזמן הקצוב לתפוגה, מוצג PlaybackException כדי למנוע את ההשהיה האינסופית של ההפעלה. ערך הזמן הקצוב לתפוגה מוגדר כברירת מחדל לאפס (#323).
  • כלי בדיקה:
    • בודקים אם סכימת ה-URI לא תלויה באותיות רישיות ב-DataSourceContractTest.
  • הסרת סמלים שהוצאו משימוש:
    • מסירים את ה-constructors‏ DefaultAudioSink ומשתמשים ב-DefaultAudioSink.Builder במקום.
    • מסירים את HlsMasterPlaylist ומשתמשים ב-HlsMultivariantPlaylist במקומו.
    • הסרה של Player.stop(boolean). במקום זאת, צריך להשתמש ב-Player.stop() וב-Player.clearMediaItems() (אם reset הוא true).
    • כדי לשפר את הביצועים, מסירים שני constructors של SimpleCache שיצאו משימוש ומשתמשים במקום זאת ב-constructor שלא יצא משימוש שמקבל DatabaseProvider.
    • מסירים את הבונה DefaultBandwidthMeter ומשתמשים ב-DefaultBandwidthMeter.Builder במקומו.
    • מסירים את ה-constructors של DefaultDrmSessionManager ומשתמשים ב-DefaultDrmSessionManager.Builder במקומם.
    • הסרנו שני קונסטרקטורים (constructor) שיצאו משימוש HttpDataSource.InvalidResponseCodeException והשתמשנו בקונסטרקטור שלא יצא משימוש ומקבל שדות נוספים (cause, responseBody) כדי לשפר את רישום השגיאות.
    • הסרה של DownloadHelper.forProgressive,‏ DownloadHelper.forHls,‏ DownloadHelper.forDash ו-DownloadHelper.forSmoothStreaming, שימוש ב-DownloadHelper.forMediaItem במקום.
    • מסירים את ה-constructor ‏DownloadService שהוצא משימוש ומשתמשים ב-constructor שלא הוצא משימוש, שכולל את האפשרות לספק פרמטר channelDescriptionResourceId.
    • הסרה של קבועי מחרוזות שהוצאו משימוש עבור ערכות תווים (ASCII_NAME, UTF8_NAME, ‏ ISO88591_NAME, ‏ UTF16_NAME ו-UTF16LE_NAME), שימוש בערכות תווים של Kotlin מהחבילה kotlin.text, ב-java.nio.charset.StandardCharsets או ב-com.google.common.base.Charsets במקום זאת.
    • מסירים את ה-constructor ‏WorkManagerScheduler שהוצא משימוש, ומשתמשים ב-constructor שלא הוצא משימוש וכולל את האפשרות לספק פרמטר Context.
    • הוסרו השיטות שהוצאו משימוש createVideoSampleFormat,‏ createAudioSampleFormat,‏ createContainerFormat ו-createSampleFormat, ששימשו ליצירת מופע של המחלקה Format. במקום זאת, משתמשים ב-Format.Builder כדי ליצור מופעים של Format.
    • מסירים את השיטות שהוצאו משימוש: copyWithMaxInputSize,‏ copyWithSubsampleOffsetUs, ‏ copyWithLabel,‏ copyWithManifestFormatInfo, ‏ copyWithGaplessInfo,‏ copyWithFrameRate, ‏ copyWithDrmInitData, ‏ copyWithMetadata,‏ copyWithBitrate ו-copyWithVideoSize, ומשתמשים במקומן ב-Format.buildUpon() ובשיטות setter.
    • מסירים את ExoPlayer.retry() שהוצא משימוש ומשתמשים ב-prepare() במקומו.
    • הוסר בנאי DefaultTrackSelector מיושן ללא ארגומנטים. במקומו צריך להשתמש ב-DefaultTrackSelector(Context).
    • מסירים את הבונה OfflineLicenseHelper שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) במקומו.
    • מסירים את ה-constructor DownloadManager שהוצא משימוש, ומשתמשים ב-constructor שמקבל Executor במקום זאת.
    • מסירים את ה-constructors Cue שהוצאו משימוש, ומשתמשים ב-Cue.Builder במקומם.
    • מסירים את הבונה OfflineLicenseHelper שהוצא משימוש, ומשתמשים ב-OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) במקומו.
    • הסרת ארבע שיטות AnalyticsListener שיצאו משימוש:
      • onDecoderEnabled, אפשר להשתמש ב-onAudioEnabled ו/או ב-onVideoEnabled במקום זאת.
      • onDecoderInitialized, אפשר להשתמש במקום זאת ב-onAudioDecoderInitialized או ב-onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, אפשר להשתמש ב-onAudioInputFormatChanged ו/או ב-onVideoInputFormatChanged במקום זאת.
      • onDecoderDisabled, אפשר להשתמש ב-onAudioDisabled ו/או ב-onVideoDisabled במקום זאת.
    • מסירים את Player.Listener.onSeekProcessed ו-AnalyticsListener.onSeekProcessed שהוצאו משימוש, ומשתמשים ב-onPositionDiscontinuity עם DISCONTINUITY_REASON_SEEK במקום זאת.
    • מסירים את ExoPlayer.setHandleWakeLock(boolean) ומשתמשים ב-setWakeMode(int) במקום.
    • מסירים את DefaultLoadControl.Builder.createDefaultLoadControl() שהוצא משימוש ומשתמשים ב-build() במקום זאת.
    • מסירים את MediaItem.PlaybackProperties שהוצא משימוש ומשתמשים ב-MediaItem.LocalConfiguration במקום זאת. השדה שיצא משימוש MediaItem.playbackProperties הוא עכשיו מסוג MediaItem.LocalConfiguration.

גרסה 1.1.0-rc01

‫21 ביוני 2023

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

גרסה 1.1.0-beta01

‫7 ביוני 2023

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

גרסה 1.1.0-alpha01

‫10 במאי 2023

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

גרסה 1.0.0

גרסה 1.0.2

‫18 במאי 2023

androidx.media3:media3-*:1.0.2 משוחרר. גרסה 1.0.2 מכילה את הקומיטים האלה.

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

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

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

גרסה 1.0.1

‫18 באפריל 2023

androidx.media3:media3-*:1.0.1 משוחרר. גרסה 1.0.1 מכילה את הקומיטים האלה.

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

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

גרסה 1.0.0

‫22 במרץ 2023

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

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

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

גרסה 1.0.0-rc02

‫2 במרץ 2023

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

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

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

גרסה 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:
    • צריך לתקן את השימוש בשיטה שיצאה משימוש PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) כדי לוודא ששינויים בסטטוס החשיפה מועברים למאזין הרשום (#229).
    • תוקן הסדר של אמצעי הבקרה של השחקן במרכז ב-PlayerView כשמשתמשים בפריסה מימין לשמאל (RTL) (#227).
  • סשן:
    • מוסיפים את הממשק המופשט SimpleBasePlayer כדי להטמיע את הממשק Player עבור נגנים בהתאמה אישית.
    • הוספת שיטת עזר להמרת אסימון סשן של פלטפורמה ל-Media3 SessionToken (‎#171).
    • משתמשים ב-onMediaMetadataChanged כדי להפעיל עדכונים של סשן המדיה בפלטפורמה (#219).
    • הוספת סשן המדיה כארגומנט של getMediaButtons() של DefaultMediaNotificationProvider ושימוש ברשימות שלא ניתן לשנות כדי להבהיר את העניין (#216).
    • נוספה onSetMediaItems callback 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 מכילה את הקומיטים האלה.

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

  • ספריית ליבה:
    • נוסף 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).
  • הורדות:
    • תיקון של לולאה אינסופית פוטנציאלית ב-ProgressiveDownloader שנגרמת בגלל הורדה והפעלה בו-זמנית עם אותו PriorityTaskManager (מס' 10570).
    • הצגת התראה על הורדה באופן מיידי (#183).
    • הגבלת מספר ההסרות של הורדות מקבילות ל-1 כדי למנוע יצירה מוגזמת של שרשורים (#10458).
  • סרטון:
    • אם המסך לא תומך ב-Dolby Vision, כדאי לנסות להשתמש במפענח חלופי. (#9794).
  • אודיו:
    • כדי למנוע שגיאות OutOfMemory כשמבטלים את ההקצאה של כמה נגנים בו-זמנית, צריך להשתמש ב-SingleThreadExecutor כדי לבטל את ההקצאה של מופעי AudioTrack (מס' 10057).
    • מוסיף AudioOffloadListener.onExperimentalOffloadedPlayback למצב ההעברה של AudioTrack. (#134).
    • הופכים את AudioTrackBufferSizeProvider לממשק ציבורי.
    • מוסיפים ExoPlayer.setPreferredAudioDevice כדי להגדיר את מכשיר פלט האודיו המועדף (‎#135).
    • שינוי השם של androidx.media3.exoplayer.audio.AudioProcessor ל-androidx.media3.common.audio.AudioProcessor.
    • מיפוי של אודיו עם 8 ערוצים ו-12 ערוצים למסכות הערוצים 7.1 ו-7.1.4 בהתאמה בכל הגרסאות של Android (#10701).
  • מטא-נתונים:
    • עכשיו אפשר להגדיר את MetadataRenderer כך שיציג מטא-נתונים ברגע שהם זמינים. יוצרים מכונה עם MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) כדי לציין אם רכיב ה-renderer יוציא מטא-נתונים מוקדמים או בסנכרון עם מיקום הנגן.
  • DRM:
    • פתרון לבעיה בהטמעה של 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:
    • הוספת טיפול בחבילות מקוטעות של H263 (#119).
    • הוספת תמיכה ב-MP4A-LATM (#162).
  • IMA:
    • הוספת פסק זמן לטעינת פרטי המודעה כדי לטפל במקרים שבהם IMA SDK נתקע בזמן טעינת מודעה (‎#10510).
    • למנוע דילוג על מודעות באמצע הסרטון כשמקדמים לסוף התוכן (#10685).
    • חישוב נכון של משך החלון לשידורים חיים עם מודעות שמוכנסות בצד השרת, לדוגמה IMA DAI (‎#10764).
  • תוסף FFmpeg:
    • נוספו דגלים חדשים שנדרשים לקישור ספריות FFmpeg ל-NDK 23.1.7779620 ומעלה (#9933).
  • תוסף AV1:
    • עדכון גרסת CMake כדי למנוע בעיות תאימות עם הגרסאות האחרונות של Android Studio (#9933).
  • תוסף Cast:
    • צריך להטמיע את getDeviceInfo() כדי לזהות את CastPlayer כשמבצעים פעולות להפעלת התוכן באמצעות MediaController (מס' 142).
  • Transformer:
    • הוספת טיימר watchdog של muxer כדי לזהות מקרים שבהם יצירת דגימת פלט איטית מדי.
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Transformer.Builder.setOutputMimeType(String). התכונה הזו הוסרה. סוג ה-MIME תמיד יהיה MP4 כשמשתמשים ב-muxer שמוגדר כברירת מחדל.

גרסה 1.0.0-beta02

21 ביולי 2022

androidx.media3:media3-*:1.0.0-beta02 משוחרר. גרסה ‎1.0.0-beta02 מכילה את הקומיטים האלה.

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

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

גרסה 1.0.0-beta01

‫16 ביוני 2022

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

הגרסה הזו תואמת לגרסה 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 כדי לאפשר לשחקנים להגדיר פריט אחד.
  • בחירת טראק:
    • השטחת הכיתה TrackSelectionOverrides לכיתה TrackSelectionParameters, והעלאת הכיתה TrackSelectionOverride לרמה העליונה.
    • שינוי השם של TracksInfo ל-Tracks ושל TracksInfo.TrackGroupInfo ל-Tracks.Group. גם השמות של Player.getCurrentTracksInfo ושל Player.Listener.onTracksInfoChanged שונו ל-Player.getCurrentTracks ול-Player.Listener.onTracksChanged. זה כולל 'ביטול הוצאה משימוש' של שם השיטה Player.Listener.onTracksChanged, אבל עם סוגים שונים של פרמטרים.
    • משנים את DefaultTrackSelector.buildUponParameters ואת DefaultTrackSelector.Parameters.buildUpon כך שיחזירו את DefaultTrackSelector.Parameters.Builder במקום את DefaultTrackSelector.ParametersBuilder שהוצא משימוש.
    • הוספה DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities שמופעלת כברירת מחדל. אם האפשרות הזו מופעלת, המערכת תעדיף פסי קול שמספר הערוצים שלהם לא חורג מהיכולות של פלט המכשיר.DefaultTrackSelector במכשירים ניידים, המערכת תעדיף פורמטים של אודיו סטריאו או מונו על פני פורמטים של אודיו רב-ערוצי, אלא אם הפורמט הרב-ערוצי יכול להיות מרחבי (Android 12L ואילך) או שהוא פורמט של צליל סראונד Dolby.DefaultTrackSelector בנוסף, במכשירים שתומכים במיקום מרחבי של אודיו, DefaultTrackSelectorיעקוב אחרי שינויים במאפייני המיקום המרחבי ויפעיל בחירה של טראק חדש כשיהיו שינויים כאלה. מכשירים עם television מצב ממשק משתמש לא נכללים במגבלות האלה, והפורמט עם מספר הערוצים הגבוה ביותר יועדף. כדי להפעיל את התכונה הזו, צריך ליצור את מופע DefaultTrackSelector עם Context.
  • סרטון:
    • שינוי השם של DummySurface לPlaceholderSurface.
    • הוספנו תמיכה ב-AV1 ל-MediaCodecVideoRenderer.getCodecMaxInputSize.
  • אודיו:
    • השימוש במפענח האודיו LG AC3 מפרסם סוג MIME לא סטנדרטי.
    • כדי למנוע אימות איטי של ART ב-API בגרסה נמוכה מ-21, צריך לשנות את סוג ההחזרה של AudioAttributes.getAudioAttributesV21() מ-android.media.AudioAttributes למחלקת wrapper חדשה של AudioAttributesV21.
    • השאילתה של הפלטפורמה (API 29+) או ההנחה של מספר הערוצים של קידוד האודיו להעברת אודיו (passthrough) כשמספר ערוצי האודיו של הפורמט לא מוגדר, מה שקורה בהכנה ללא חלוקה לחלקים של HLS (‏10204).
    • הגדרת AudioTrack עם מסכת ערוצים AudioFormat.CHANNEL_OUT_7POINT1POINT4 אם הפלט של המפענח הוא אודיו PCM עם 12 ערוצים ‎#10322.
  • DRM
    • מוודאים שהסשן של DRM מתעדכן תמיד בצורה נכונה כשמבצעים חיפוש מיד אחרי שינוי פורמט (10274).
  • טקסט:
    • צריך לשנות את Player.getCurrentCues() כדי להחזיר את CueGroup במקום List<Cue>.
    • ‫SSA: תמיכה בהגדרת סגנון OutlineColour כש-BorderStyle == 3 (כלומר, OutlineColour מגדיר את הרקע של רמז הזמן) (‎#8435).
    • ‫CEA-708: ניתוח נתונים לבלוקים של כמה שירותים והתעלמות מבלוקים שלא משויכים למספר השירות שנבחר כרגע.
    • הסרנו את RawCcExtractor, שהיה בשימוש רק לטיפול בפורמט כתוביות פנימי של Google.
  • מחולצי מידע:
    • הוספת תמיכה ב-AVI (#2092).
    • ‫Matroska: ניתוח של DiscardPadding לטראקים של Opus.
    • ‫MP4: ניתוח קצבי העברת נתונים מתיבות esds.
    • ‫Ogg: אפשר להשתמש במזהה Opus כפול ובכותרות של הערות (#10038).
  • ‫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 באופן מפורש.
  • ‫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 ל-3.21.0+ כדי למנוע באג ב-CMake שגורם לכך שסנכרון Gradle ב-Android Studio נכשל (מס' 9933).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). במקום זאת, אתם צריכים להשתמש ב-Player.Listener.onTracksChanged(Tracks).
    • הסרה של Player.getCurrentTrackGroups ושל Player.getCurrentTrackSelections. במקום זאת, אתם צריכים להשתמש ב-Player.getCurrentTracks. אפשר גם להמשיך להשתמש ב-ExoPlayer.getCurrentTrackGroups וב-ExoPlayer.getCurrentTrackSelections, אבל השיטות האלה עדיין מוצאות משימוש.
    • הסרה של הקבועים DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT ו-DEFAULT_TRACK_SELECTOR_PARAMETERS. במקומה, מומלץ להשתמש ב-getDefaultTrackSelectorParameters(Context), ואם זה לא אפשרי, ב-DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • הסרת בנאי DefaultTrackSelector(ExoTrackSelection.Factory). במקום זאת, אתם צריכים להשתמש ב-DefaultTrackSelector(Context, ExoTrackSelection.Factory).
    • הסרה של Transformer.Builder.setContext. במקום זאת, צריך להעביר את Context אל הקונסטרוקטור Transformer.Builder.

גרסה 1.0.0-alpha03

‫14 במרץ 2022

androidx.media3:media3-*:1.0.0-alpha03 משוחרר. גרסה ‎1.0.0-alpha03 מכילה את הקומיטים האלה.

הגרסה הזו תואמת לגרסה 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) מאובטח לפענוח אחר (#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).
  • מחולצי מידע:
    • ‫WAV: נוספה תמיכה בזרמי RF64 (‎#9543).
    • תוקן ניתוח שגוי של יחידות H.265 SPS NAL (#9719).
    • ניתוח של הערות Vorbis (כולל METADATA_BLOCK_PICTURE) בקובצי Ogg Opus ו-Ogg Vorbis.
  • טקסט:
    • מוסיפים שדה MediaItem.SubtitleConfiguration.id שמועבר לשדה Format.id של רצועת הכתוביות שנוצרה מההגדרה (#9673).
    • הוספת תמיכה בסיסית בכתוביות WebVTT במאגרי Matroska (#9886).
    • מונעים מקובץ Cea708Decoder לקרוא יותר מהגודל המוצהר של בלוק שירות.
  • DRM:
    • הסרת playbackLooper מהחשבון DrmSessionManager.(pre)acquireSession. כשמשתמשים ב-DrmSessionManager באפליקציה ב-MediaSource מותאם אישית, צריך להעביר את playbackLooper אל DrmSessionManager.setPlayer במקום זאת.
  • הפעלת מודעה / IMA:
    • הוספנו תמיכה בהטמעת מודעות דינמיות (DAI) ב-IMA (#8213).
    • הוספת שיטה ל-AdPlaybackState כדי לאפשר איפוס של קבוצת מודעות כך שאפשר יהיה להפעיל אותה שוב (#9615).
    • אכיפת מהירות הפעלה של 1.0 במהלך הפעלת מודעה (#9018).
    • תוקנה בעיה שבה קבוצת מודעות שלא נטענה גרמה לאיפוס מיידי של ההפעלה (#9929).
  • ‫UI:
    • תוקן הצבע של המספרים בלחצני StyledPlayerViewהחזרה אחורה והרצה קדימה כשמשתמשים בערכות נושא מסוימות (#9765).
    • תרגום נכון של מחרוזות מהירות ההפעלה (#9811).
  • ‫DASH:
    • מוסיפים את המאפיינים החיוניים והמשלימים שנותחו אל Representation (#9579).
    • תמיכה בתפקיד בטראק forced-subtitle (מספר 9727).
    • הפסקת ההתייחסות לתפקיד של רצועה main כאל C.SELECTION_FLAG_DEFAULT.
    • תיקון הלוגיקה של החרגת כתובת URL בסיסית במניפסטים שלא מצהירים על מרחב השמות של DVB (‎#9856).
    • תמיכה בכתובות URL יחסיות MPD.Location (מס' 9939).
  • ‫HLS:
    • מילוי נכון של Format.label לשידורי HLS עם אודיו בלבד (#9608).
    • כדי לשפר את זמן ההפעלה, מומלץ להשתמש בהכנה ללא חלוקה לחלקים כברירת מחדל. אם העיבודים שלכם מכילים טראקים של כתוביות משולבות שלא מוצהרים בפלייליסט הראשי, אתם צריכים להוסיף אותם לפלייליסט הראשי כדי שהם יהיו זמינים להפעלה, או להשבית את ההכנה ללא חלוקה לחלקים באמצעות HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • תמיכה בחיפוש מדויק של פריימים מרכזיים ב-HLS (‎#2882).
  • RTSP:
    • הוספת API של לקוח כדי לשנות את SocketFactory שמשמש לכל חיבור לשרת (#9606).
    • עדיפות לשיטת האימות DIGEST על פני BASIC אם שתיהן קיימות (#9800).
    • טיפול במקרים שבהם התזמון של טראק RTSP לא זמין (#9775).
    • התעלמות מערכים לא תקינים של כותרת RTP-Info‏ (#9619).
  • Transformer:
    • הגדלת גרסת ה-API המינימלית הנדרשת ל-21.
    • הערך TransformationException משמש עכשיו לתיאור שגיאות שמתרחשות במהלך טרנספורמציה.
    • מוסיפים TransformationRequest כדי לציין את אפשרויות הטרנספורמציה.
    • אפשר לרשום מספר מאזינים.
    • תוקנה בעיה שגורמת לטרנספורמר להיתקע כשפלט הקודק נקרא באופן חלקי.
    • תיקון של NPE פוטנציאלי ב-Transformer.getProgress כששחרור ה-muxer גורם לשגיאה.
    • הוספנו אפליקציה לדוגמה להחלת טרנספורמציות.
  • תוסף MediaSession:
    • כברירת מחדל, MediaSessionConnector מנקה עכשיו את הפלייליסט כשמפסיקים את ההפעלה. אפליקציות שרוצות שהפלייליסט יישמר יכולות להתקשר אל setClearMediaItemsOnStop(false) במחבר.
  • תוסף Cast:
    • תוקן באג שמנע מ-CastPlayer להתקשר ל-onIsPlayingChanged בצורה תקינה (#9792).
    • תמיכה במטא-נתונים של אודיו, כולל גרפיקה, עם DefaultMediaItemConverter (#9663).
  • תוסף FFmpeg:
    • ‫Make 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).
  • הסרת סמלים שהוצאו משימוש:
    • הסרה של Player.EventListener. במקום זאת, אתם צריכים להשתמש ב-Player.Listener.
    • הסרה של MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory ושל MediaSourceFactory#setDrmUserAgent. במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#setDrmSessionManagerProvider.
    • הסרה של MediaSourceFactory#setStreamKeys. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setStreamKeys.
    • הסרה של MediaSourceFactory#createMediaSource(Uri). במקום זאת, אתם צריכים להשתמש ב-MediaSourceFactory#createMediaSource(MediaItem).
    • הסרת setTag מהחשבונות DashMediaSource, HlsMediaSource וSsMediaSource. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag.
    • הסרה של DashMediaSource#setLivePresentationDelayMs(long, boolean). משתמשים ב-MediaItem.Builder#setLiveConfiguration וב-MediaItem.LiveConfiguration.Builder#setTargetOffsetMs כדי לבטל את המניפסט, או ב-DashMediaSource#setFallbackTargetLiveOffsetMs כדי לספק ערך ברירת מחדל.
    • הסרה של (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. אי אפשר יותר לבטל את ההצטרפות לאכיפה של השרשור.
    • הסרה של ActionFile ושל ActionFileUpgradeUtil. כדי להשתמש ב-ActionFileUpgradeUtil כדי למזג קובצי פעולה מדור קודם לתוך DefaultDownloadIndex, צריך להשתמש ב-ExoPlayer 2.16.1 או בגרסה קודמת.
    • הסרה של ProgressiveMediaSource#setExtractorsFactory. במקום זאת, צריך להשתמש בבונה ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory).
    • הסרה של ProgressiveMediaSource.Factory#setTag ושל ProgressiveMediaSource.Factory#setCustomCacheKey. במקום זאת, אתם צריכים להשתמש ב-MediaItem.Builder#setTag וב-MediaItem.Builder#setCustomCacheKey.
    • מסירים את הקונסטרוקטורים DefaultRenderersFactory(Context, @ExtensionRendererMode int) ו-DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). במקום זאת, צריך להשתמש בבונה DefaultRenderersFactory(Context), ב-DefaultRenderersFactory#setExtensionRendererMode וב-DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • הסרת כל ה-constructors של CronetDataSource שגלויים לכולם. במקום זאת, אתם צריכים להשתמש ב-CronetDataSource.Factory.
  • משנים את IntDefs ל-@Target(TYPE_USE) בלבד. יכול להיות שהדבר ישבור את הקומפילציה של השימושים ב-Kotlin. כדי לתקן את זה, צריך להעביר את ההערה כדי להוסיף הערה לסוג (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (במארז com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (במארז com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

גרסה 1.0.0-alpha01

‫27 באוקטובר 2021

androidx.media3:media3-*:1.0.0-alpha01 משוחרר. גרסה ‎1.0.0-alpha01 מכילה את הקומיטים האלה.

תכונות חדשות

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

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

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

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