Skip to content

ExoPlayer crashes when Sonos app is running in the background #1950

@foxfirecodes

Description

@foxfirecodes

This issue respects the following points:

  • This issue is not already reported on GitHub (I've searched it).
  • I agree to follow Jellyfin's Code of Conduct.
  • This report addresses only a single issue; If you encounter multiple issues, kindly create separate reports for each one.

Describe the bug

if the Sonos app is running in the background any attempt to play media with ExoPlayer results in the app crashing after about 2 seconds. i can't seem to repro this with anything other than Sonos but im certain Sonos is the culprit because if I force stop the app jellyfin no longer crashes

if I already have the player open and then I open the Sonos app it doesn't crash. but if I then exit out of the player and open it back up it crashes like usual

demo video here: https://youtube.com/shorts/sMHxhGewmZU
(the file was too big to upload here)

Media info of the file

this applies to all files of all formats

Which video player implementations does this bug apply to?

  • Web player (default)
  • Integrated player (ExoPlayer)
  • External player (VLC, mpv, MX Player)

Client logs

ill be honest its hard to know what subset of the thousands of lines of logs were relevant lol... so if you need more from before/after this just lmk

04-08 10:19:18.902  2335  2407 D MediaResumeListener: Checking for service component for org.jellyfin.mobile
04-08 10:19:18.905  2335  2407 D MediaResumeListener: Testing if we can connect to ComponentInfo{org.jellyfin.mobile/org.jellyfin.mobile.player.audio.MediaService}
04-08 10:19:18.910  1513  2295 D BackgroundInstallControlService: Package event received: 0
04-08 10:19:18.919  4395  4395 W MediaSessionCompat: Couldn't find a unique registered media button receiver in the given context.
04-08 10:19:18.919  1513  2934 I MR2ServiceImpl: getDeviceSuggestionsWithManagerLocked | manager: 10
04-08 10:19:18.920  1513  2934 I MediaSessionStack: addSession to bottom of stack | record: org.jellyfin.mobile/MediaService/127 (userId=0)
04-08 10:19:18.929  1513  2934 D MediaSessionService: onSessionActiveStateChanged: record=org.jellyfin.mobile/MediaService/127 (userId=0) active=true
04-08 10:19:18.930  2335  2885 D vol.VolumeDialogControl: onRemoteUpdate: stream: 29249146 volume: 48
04-08 10:19:18.935  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.935  2335  2885 D vol.VolumeDialogControl: onRemoteUpdate: stream: 29249146 volume: 48
04-08 10:19:18.936  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.938  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.941  2469  2469 I MediaPlayerList: sendMediaUpdate: Creating a one item queue for a player with no queue
04-08 10:19:18.943  4395  4395 I ExoPlayerImpl: Init 5805665 [ExoPlayerLib/2.19.1] [tokay, Pixel 9, Google, 36]
04-08 10:19:18.944  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.944  2335  2885 D vol.VolumeDialogControl: onRemoteUpdate: stream: 29249146 volume: 48
04-08 10:19:18.944  2469  2469 W MediaControlGattService: Feature PLAYER_NAME support: true
04-08 10:19:18.944  2469  2469 W MediaControlGattService: Feature MEDIA_STATE support: true
04-08 10:19:18.946  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.950  1513  2199 D MediaSessionService: onSessionPlaybackStateChanged: record=org.jellyfin.mobile/MediaService/127 (userId=0) playbackState=PlaybackState {state=NONE(0), position=0, buffered position=0, speed=0.0, updated=172613187, actions=2359815, custom actions=[], active item id=-1, error=null}
04-08 10:19:18.950  2335  2885 D vol.VolumeDialogControl: onRemoteUpdate: stream: 29249146 volume: 48
04-08 10:19:18.950  1513  2285 D MediaSessionService: setFgsIfSessionIsLinkedToNotification: record=org.jellyfin.mobile/MediaService/127 (userId=0)
04-08 10:19:18.950  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.951  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.952  1513  2800 D MediaSessionService: onSessionPlaybackStateChanged: record=org.jellyfin.mobile/MediaService/127 (userId=0) playbackState=PlaybackState {state=NONE(0), position=0, buffered position=0, speed=0.0, updated=172613189, actions=2477575, custom actions=[], active item id=-1, error=null}
04-08 10:19:18.952  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.953  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.954  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.954  2335  2407 I InfoMediaManager: dispatchDeviceListAdded()
04-08 10:19:18.956  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.956  1513  2938 D MediaSessionService: onSessionPlaybackStateChanged: record=org.jellyfin.mobile/MediaService/127 (userId=0) playbackState=PlaybackState {state=NONE(0), position=0, buffered position=0, speed=0.0, updated=172613194, actions=2477575, custom actions=[], active item id=-1, error=null}
04-08 10:19:18.957  4859  4859 I Dtdi    : (REDACTED) [MediaControllerFilter] packageName=%s resolved=%s
04-08 10:19:18.959  1513  3220 I MR2ServiceImpl: setDiscoveryRequestWithRouter2 | router: org.jellyfin.mobile(id: 43), discovery request: RouteDiscoveryRequest{ preferredFeatures={com.google.android.gms.cast.CATEGORY_CAST/F007D354///ALLOW_IPV6, android.media.route.feature.REMOTE_PLAYBACK, android.media.route.feature.LIVE_AUDIO}, activeScan=false }
04-08 10:19:18.959  4395  4395 W MR2     : [local] registerTransferCallback: Ignoring the same callback
04-08 10:19:18.959  4395  4395 W MR2     : [local] registerControllerCallback: Ignoring the same callback
04-08 10:19:18.960  2469  2469 I MediaPlayerList: sendMediaUpdate: Creating a one item queue for a player with no queue
04-08 10:19:18.960  2335  5098 I RouterInfoMediaManager: onPreferredFeaturesChanged(): [com.google.android.gms.cast.CATEGORY_CAST/F007D354///ALLOW_IPV6,android.media.route.feature.REMOTE_PLAYBACK,android.media.route.feature.LIVE_AUDIO]
04-08 10:19:18.960  4395  4395 W MR2Provider: Cannot find the original route Id. route=MediaRoute2Info{ id=com.sonos.acr2/com.sonos.passport.media3.SonosMediaRoute2ProviderService:6933aee4-7d7c-338a-9b38-7840e04188ba, name=amelia's room, type=UNKNOWN(0), routingTypes=REMOTE, isSystem=false, features=[android.media.route.feature.REMOTE_PLAYBACK], iconUri=null, description=null, connectionState=0, clientPackageName=com.sonos.acr2, volume(current=48, max=100, handling=VARIABLE(1)), address=null, deduplicationIds=, providerId=com.sonos.acr2/com.sonos.passport.media3.SonosMediaRoute2ProviderService, isVisibilityRestricted=false, allowedPackages=, alsoAllowPrivilegedPackages=false, mRequiredPermissions=(), suitabilityStatus=0 }
04-08 10:19:18.960  4395  4395 D AndroidRuntime: Shutting down VM
04-08 10:19:18.961  4395  4395 E AndroidRuntime: FATAL EXCEPTION: main
04-08 10:19:18.961  4395  4395 E AndroidRuntime: Process: org.jellyfin.mobile, PID: 4395
04-08 10:19:18.961  4395  4395 E AndroidRuntime: java.lang.IllegalArgumentException: route must not be null
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at M1.n.i(SourceFile:226)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at M1.l.onRoutesUpdated(SourceFile:12)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.media.MediaRouter2.lambda$notifyRoutesUpdated$5(MediaRouter2.java:1779)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.media.MediaRouter2$$ExternalSyntheticLambda6.run(D8$$SyntheticClass:0)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:1095)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.os.Handler.dispatchMessageImpl(Handler.java:135)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:125)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:269)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:367)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:9333)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
04-08 10:19:18.961  4395  4395 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
04-08 10:19:18.961  2469  2469 I bluetooth: system/btif/avrcp/avrcp_service.cc:533 SendMediaUpdate: track_changed=false :  play_state=true :  queue=false
04-08 10:19:18.961  2335  2407 D MediaDeviceManager: Can not get LocalBluetoothLeBroadcast
04-08 10:19:18.962  1513  2286 I MR2ServiceImpl: Updating composite discovery preference | preference: RouteDiscoveryRequest{ preferredFeatures={com.google.android.gms.cast.CATEGORY_CAST/F007D354///ALLOW_IPV6, android.media.route.feature.REMOTE_PLAYBACK, android.media.route.feature.LIVE_AUDIO}, activeScan=false }, active routers: []
04-08 10:19:18.965  4859  4859 W DiscoveryManager: BroadcastReceiver is already registered
04-08 10:19:18.966  1513  5108 I DropBoxManagerService: add tag=data_app_crash isTagEnabled=true flags=0x2
04-08 10:19:18.966  2469  2469 I MediaPlayerList: sendMediaUpdate: Creating a one item queue for a player with no queue
04-08 10:19:18.966  2469  2469 W MediaControlGattService: Feature PLAYER_NAME support: true
04-08 10:19:18.966  2469  2469 W MediaControlGattService: Feature MEDIA_STATE support: true
04-08 10:19:18.967  4859  4392 I DiscoveryManager: Discovery state (DiscoveryState{filterCriteria=[F007D354, CC1AD845, %urn:x-cast:com.google.cast.media, CFE7FEDA], categoryToCriteria={com.google.android.gms.cast.CATEGORY_CAST//urn:x-cast:com.google.cast.media//ALLOW_IPV6=[%urn:x-cast:com.google.cast.media], com.google.android.gms.cast.CATEGORY_CAST/CFE7FEDA/urn:x-cast:com.google.cast.media//ALLOW_IPV6=[CFE7FEDA, %urn:x-cast:com.google.cast.media], com.google.android.gms.cast.CATEGORY_CAST/F007D354///ALLOW_IPV6=[F007D354], android.media.intent.category.REMOTE_PLAYBACK=[CC1AD845]}, activeScan=false, activeScanWithScreenOff=false, discoveryRequestSupportsDynamicSession=false})
04-08 10:19:18.969  1513  2934 W ActivityTaskManager:   Force finishing activity org.jellyfin.mobile/.MainActivity
04-08 10:19:18.969  1513  2934 W TransitionChain: Combining AR.finish-force-crash into #1040(CLOSE|R|0x10) from finishTopCrash
04-08 10:19:18.970  2469  2469 I MediaPlayerList: sendMediaUpdate: Creating a one item queue for a player with no queue
04-08 10:19:18.971  2335  2366 V WindowManagerShell: Transition requested (#1040): android.os.BinderProxy@d6aaa3 TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=20261 effectiveUid=10290 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=org.jellyfin.mobile cmp=org.jellyfin.mobile/.MainActivity } baseActivity=ComponentInfo{org.jellyfin.mobile/org.jellyfin.mobile.MainActivity} topActivity=ComponentInfo{org.jellyfin.mobile/org.jellyfin.mobile.MainActivity} origActivity=null realActivity=ComponentInfo{org.jellyfin.mobile/org.jellyfin.mobile.MainActivity} realActivityIsAppLockEnabled=false numActivities=1 lastActiveTime=172606291 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.os.BinderProxy@b31072} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 0 - 0, 0) topActivityInfo=ActivityInfo{7681a0 org.jellyfin.mobile.MainActivity} launchCookies=[android.os.BinderProxy@c64c4fc] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=null leafTaskBoundsFromOptions= false capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=496 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false isLeafTask= true eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(173, 0 - 2424, 1017) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransitionInfo = null, displayChange = null, requestedLocation = null, userChange = null, windowingLayerChange = null, fullscreenRequestChange = null, flags = 16, debugId = 1040 }
04-08 10:19:18.971  2335  2366 W DisplayDisconnectTransitionHandler: No disconnect change found in the transition, not handling request.
04-08 10:19:18.971  2335  2366 V ShellDesktopMode: DesktopTasksController: skipping handleRequest reason=triggerTask's display doesn't support desktop mode
04-08 10:19:18.975  4395  4395 I Process : Sending signal. PID: 4395 SIG: 9
04-08 10:19:18.984  2335  5098 I InfoMediaManager: dispatchDeviceListAdded()
04-08 10:19:18.986  4859  4392 W DatabaseProcessor: processLocalDevices: failed to get the network info with non-null networkId.
04-08 10:19:18.987  4859  4859 I CastMediaRouteProvider: Published 3 routes
04-08 10:19:18.988  2335  2407 D MediaDeviceManager: Can not get LocalBluetoothLeBroadcast
04-08 10:19:18.996 29100 29100 V MR2     : [local] Transferring to route: MediaRoute2Info{ id=com.sonos.acr2/com.sonos.passport.media3.SonosMediaRoute2ProviderService:6933aee4-7d7c-338a-9b38-7840e04188ba, name=amelia's room, type=UNKNOWN(0), routingTypes=REMOTE, isSystem=false, features=[android.media.route.feature.REMOTE_PLAYBACK], iconUri=null, description=null, connectionState=0, clientPackageName=com.sonos.acr2, volume(current=48, max=100, handling=VARIABLE(1)), address=null, deduplicationIds=, providerId=com.sonos.acr2/com.sonos.passport.media3.SonosMediaRoute2ProviderService, isVisibilityRestricted=false, allowedPackages=, alsoAllowPrivilegedPackages=false, mRequiredPermissions=(), suitabilityStatus=0 }
04-08 10:19:18.997  1513  2800 I MR2ServiceImpl: transferToRouteWithRouter2 | router: com.sonos.acr2(id: 40), route: com.sonos.acr2/com.sonos.passport.media3.SonosMediaRoute2ProviderService:6933aee4-7d7c-338a-9b38-7840e04188ba

FFmpeg logs

Application version

2.6.3

Where did you install the app from?

Google Play Store

Device information

Google Pixel 9

Android version

Android 16

Jellyfin server version

10.11.8

Other sources

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions