jellyfin-androidtv
jellyfin-androidtv copied to clipboard
Websocket closes after a while and never reopens
Describe the bug
Note: while diagnosing this I sideloaded an apk built from unmodified source a71c2c8cb . This behavior is also observed in the official play store version.
- Run jellyfin on android tv
- Notice that you can send display messages from the admin dashboard and they are received.
- Go back to the main android tv home menu
- Check adb logs to see that the websocket is keeping itself alive every 30 seconds (while application is in the background at this point)
- Leave it alone for some time (not sure how long - but at least 15-20 min)
- After some time you will see a websocket connection error in the adb logs
- Coinciding with this client side error log is a server log indicating the server thinks
The remote party closed the WebSocket connection without completing the close handshake.
- Notice that you are unable to send display messages to the app anymore
Nothing I can do except force-quitting the app, waiting for it to be killed by android, or power cycling the android tv will bring the websocket back.
I've tried poking around at various places in the jellyfin-androidtv code to try to find the right place (and method) to force that websocket to re-initialize, but I have been unsuccessful. I considered that it may be a bug in the SDK but other clients seem to work (like the android client on my phone) - and I assume they use the same SDK.
Expected: The websocket closes itself when the application is in the background (for some period?) and reopens itself when the application is brought back to the foreground. When the socket connection is interrupted it should be able to reconnect it successfully.
Logs
Client log from adb logcat | grep -i jellyfin
-- some redundant parts removed for brevity -- ask me for the whole log if needed
03-22 10:17:26.460 4061 4061 D MediaPlayerList: onActiveSessionsChanged: controller: org.jellyfin.androidtv
03-22 10:17:26.460 4061 4061 D MediaPlayerList: Already have a controller for the player: org.jellyfin.androidtv, updating instead
03-22 10:17:26.487 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Videos/2b04a038-089b-8ebe-59d1-defe943e9c41/2b04a038089b8ebe59d1defe943e9c41/Subtitles/0/0/Stream.JSON?format=json
03-22 10:17:26.487 6589 6589 D jellyfin-apiclient: Received response from http://10.0.1.100:8096/Videos/2b04a038-089b-8ebe-59d1-defe943e9c41/2b04a038089b8ebe59d1defe943e9c41/Subtitles/0/0/Stream.JSON?format=json
03-22 10:17:26.528 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:29.382 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:29.690 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:32.391 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:32.591 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:33.114 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"GeneralCommand","MessageId":"2622bf4dd20a49fdb385502f7743cf5e","Data":{"Name":"DisplayMessage","ControllingUserId":"00000000000000000000000000000000","Arguments":{"Header":"","Text":"Intro skipped","TimeoutMs":"2000"}}}
03-22 10:17:33.114 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"Playstate","MessageId":"e3729b712c034966987a3e1dc7c447c6","Data":{"Command":"Seek","SeekPositionTicks":280000000,"ControllingUserId":"ed9d9bffd1e940358f674e846c44122a"}}
03-22 10:17:33.134 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:33.426 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:36.135 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:36.384 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Progress
03-22 10:17:37.286 3902 6934 W NotificationService: Toast already killed. pkg=org.jellyfin.androidtv token=android.os.BinderProxy@b8ea5c2
03-22 10:17:38.978 3902 6934 I MediaFocusControl: abandonAudioFocus() from uid/pid 10107/6589 clientId=android.media.AudioManager@f92f282org.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment$6@a010d93
03-22 10:17:38.984 3902 6934 I MediaFocusControl: abandonAudioFocus() from uid/pid 10107/6589 clientId=android.media.AudioManager@f92f282org.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment$6@a010d93
03-22 10:17:38.990 6589 6589 I jellyfin-apiclient: ReportPlaybackStopped: Item 2b04a038-089b-8ebe-59d1-defe943e9c41, Ticks: 332660000
03-22 10:17:38.991 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Sessions/Playing/Stopped
03-22 10:17:39.082 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/2b04a038-089b-8ebe-59d1-defe943e9c41?format=json
03-22 10:17:39.147 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/2b04a038-089b-8ebe-59d1-defe943e9c41?format=json
03-22 10:17:39.208 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Episodes?AdjacentTo=2b04a038089b8ebe59d1defe943e9c41&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:39.216 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b1d97e59a8cda075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&Limit=20&IncludeItemTypes=Episode&format=json
03-22 10:17:39.325 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Episodes?AdjacentTo=2b04a038089b8ebe59d1defe943e9c41&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:39.328 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b1d97e59a8cda075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&Limit=20&IncludeItemTypes=Episode&format=json
03-22 10:17:39.850 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/2b04a038-089b-8ebe-59d1-defe943e9c41?format=json
03-22 10:17:39.869 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/2b04a038-089b-8ebe-59d1-defe943e9c41?format=json
03-22 10:17:39.923 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Episodes?AdjacentTo=2b04a038089b8ebe59d1defe943e9c41&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:39.932 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b1d97e59a8cda075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&Limit=20&IncludeItemTypes=Episode&format=json
03-22 10:17:40.013 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Episodes?AdjacentTo=2b04a038089b8ebe59d1defe943e9c41&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:40.015 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b1d97e59a8cda075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&Limit=20&IncludeItemTypes=Episode&format=json
03-22 10:17:40.550 6589 7279 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
03-22 10:17:40.565 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"a182d7ac0c164e4eb1532088187ec108"}
03-22 10:17:40.729 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Sessions/Playing/Stopped
03-22 10:17:41.201 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/33076d91-eed9-0ef7-8b56-36bc48960a34?format=json
03-22 10:17:41.218 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items/33076d91-eed9-0ef7-8b56-36bc48960a34?format=json
03-22 10:17:41.221 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"UserDataChanged","MessageId":"f9b90a9ad8fa46c584d32c4009cb4c27","Data":{"UserId":"ed9d9bffd1e940358f674e846c44122a","UserDataList":[{"PlaybackPositionTicks":0,"PlayCount":41,"IsFavorite":false,"LastPlayedDate":"2024-03-22T14:17:24.904458Z","Played":false,"Key":"75897012001","ItemId":"2b04a038089b8ebe59d1defe943e9c41"},{"UnplayedItemCount":14,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"75897012","ItemId":"d38c764b1d97e59a8cda075babf0c325"}]}}
03-22 10:17:41.281 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Shows/NextUp?Fields=PrimaryImageAspectRatio%2CChildCount&SeriesId=33076d91eed90ef78b5636bc48960a34&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.282 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Seasons?Fields=PrimaryImageAspectRatio%2CDisplayPreferencesId%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.282 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Shows/Upcoming?Fields=PrimaryImageAspectRatio%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.285 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Items/33076d91eed90ef78b5636bc48960a34/Similar?Fields=PrimaryImageAspectRatio%2CDisplayPreferencesId%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&Limit=20&format=json
03-22 10:17:41.330 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Shows/NextUp?Fields=PrimaryImageAspectRatio%2CChildCount&SeriesId=33076d91eed90ef78b5636bc48960a34&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.335 6589 6589 D jellyfin-apiclient: Adding request to queue: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b-1d97-e59a-8cda-075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&format=json
03-22 10:17:41.369 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Shows/Upcoming?Fields=PrimaryImageAspectRatio%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.401 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Shows/33076d91eed90ef78b5636bc48960a34/Seasons?Fields=PrimaryImageAspectRatio%2CDisplayPreferencesId%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&format=json
03-22 10:17:41.411 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Users/ed9d9bff-d1e9-4035-8f67-4e846c44122a/Items?ParentId=d38c764b-1d97-e59a-8cda-075babf0c325&StartIndex=1&recursive=false&Fields=PrimaryImageAspectRatio%2COverview%2CItemCounts%2CDisplayPreferencesId%2CChildCount&format=json
03-22 10:17:41.428 6589 6589 I jellyfin-apiclient: Response received from: http://10.0.1.100:8096/Items/33076d91eed90ef78b5636bc48960a34/Similar?Fields=PrimaryImageAspectRatio%2CDisplayPreferencesId%2CChildCount&UserId=ed9d9bff-d1e9-4035-8f67-4e846c44122a&Limit=20&format=json
03-22 10:17:42.527 6589 6589 D ACRA : onActivityPaused class org.jellyfin.androidtv.ui.browsing.MainActivity
03-22 10:17:43.145 6589 6589 D ACRA : onActivityStopped class org.jellyfin.androidtv.ui.browsing.MainActivity
03-22 10:17:43.148 6589 6589 D ACRA : onActivitySaveInstanceState class org.jellyfin.androidtv.ui.browsing.MainActivity
03-22 10:18:10.551 6589 7279 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
03-22 10:18:10.555 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"053ef96eb98040ec9338f2328f406891"}
03-22 10:18:40.591 6589 7226 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
03-22 10:18:40.605 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"51cb27bb0bee40fcb7cd4638c84ae762"}
03-22 10:19:10.631 6589 7226 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
---- repeats ----
03-22 10:39:12.198 6589 7803 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
03-22 10:39:12.204 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"db0f0f02e7814f01a1dd0844fc355979"}
03-22 10:39:42.230 6589 7806 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
03-22 10:39:42.239 6589 7234 I org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"fdd01edb9d7f48679a14ff4b5946e6ee"}
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketException: Software caused connection abort
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocketInputStream.socketRead0(Native Method)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocketInputStream.socketRead(SocketInputStream.java:119)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocketInputStream.read(SocketInputStream.java:176)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocketInputStream.read(SocketInputStream.java:144)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okio.InputStreamSource.read(JvmOkio.kt:93)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:153)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okio.RealBufferedSource.request(RealBufferedSource.kt:210)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okio.RealBufferedSource.require(RealBufferedSource.kt:203)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okio.RealBufferedSource.readByte(RealBufferedSource.kt:213)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.kt:119)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:102)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:39:46.928 6589 7234 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:39:46.938 6589 7803 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 600ms (error=true)
03-22 10:39:47.571 6589 7803 D org.jellyfin.sdk.api.sockets.SocketInstance: Reconnect requested
03-22 10:39:47.571 6589 7803 I org.jellyfin.sdk.api.sockets.SocketInstance: Reconnecting
03-22 10:39:47.590 6589 7803 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=1
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43362) after 6000ms
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:39:53.672 6589 8054 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:39:53.674 6589 7806 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 6s (error=true)
03-22 10:39:59.713 6589 7803 D org.jellyfin.sdk.api.sockets.SocketInstance: Reconnect requested
03-22 10:39:59.713 6589 7803 I org.jellyfin.sdk.api.sockets.SocketInstance: Reconnecting
03-22 10:39:59.714 6589 7803 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=2
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43364) after 6000ms
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:40:05.757 6589 8055 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:40:05.759 6589 7803 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 15s (error=true)
03-22 10:40:20.799 6589 7806 D org.jellyfin.sdk.api.sockets.SocketInstance: Reconnect requested
03-22 10:40:20.800 6589 7806 I org.jellyfin.sdk.api.sockets.SocketInstance: Reconnecting
03-22 10:40:20.800 6589 7806 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=3
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43366) after 6000ms
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:40:26.871 6589 8058 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:40:26.875 6589 7806 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 30s (error=true)
03-22 10:40:56.911 6589 7806 D org.jellyfin.sdk.api.sockets.SocketInstance: Reconnect requested
03-22 10:40:56.912 6589 7806 I org.jellyfin.sdk.api.sockets.SocketInstance: Reconnecting
03-22 10:40:56.913 6589 7806 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=4
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43368) after 6000ms
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:41:02.976 6589 8060 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:41:02.980 6589 7806 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 45s (error=true)
03-22 10:41:47.995 6589 7803 D org.jellyfin.sdk.api.sockets.SocketInstance: Reconnect requested
03-22 10:41:47.996 6589 7803 I org.jellyfin.sdk.api.sockets.SocketInstance: Reconnecting
03-22 10:41:47.997 6589 7803 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=5
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43370) after 6000ms
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:41:54.060 6589 8066 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:41:54.063 6589 7806 I org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect scheduled in 1m (error=true)
---- repeats ----
03-22 10:56:40.144 6589 7806 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Notified about reconnect, attempts=16
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: WebSocket has failed
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: java.net.SocketTimeoutException: failed to connect to /10.0.1.100 (port 8096) from /10.0.1.199 (port 43398) after 6000ms
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at libcore.io.IoBridge.connect(IoBridge.java:180)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.net.Socket.connect(Socket.java:621)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:517)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-22 10:56:46.184 6589 8173 W org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession: at java.lang.Thread.run(Thread.java:920)
03-22 10:56:46.188 6589 7803 D org.jellyfin.sdk.api.sockets.helper.ReconnectHelper: Reconnect schedule failed: exceeded maximum retry attempts of 16
Related server log:
[2024-03-22 10:36:40.933 -04:00] [INF] [67] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: "[10.0.1.0/24]"
[2024-03-22 10:38:15.339 -04:00] [INF] [67] Jellyfin.Networking.Manager.NetworkManager: Defined LAN addresses : "[10.0.1.0/24]"
[2024-03-22 10:38:15.339 -04:00] [INF] [67] Jellyfin.Networking.Manager.NetworkManager: Defined LAN exclusions : "[]"
[2024-03-22 10:38:15.339 -04:00] [INF] [67] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: "[10.0.1.0/24]"
[2024-03-22 10:39:46.922 -04:00] [WRN] [71] Emby.Server.Implementations.HttpServer.WebSocketConnection: WS "10.0.1.199" error receiving data: "The remote party closed the WebSocket connection without completing the close handshake."
[2024-03-22 10:39:46.927 -04:00] [INF] [71] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "10.0.1.199" closed
[2024-03-22 10:40:14.713 -04:00] [INF] [96] Jellyfin.Networking.Manager.NetworkManager: Defined LAN addresses : "[10.0.1.0/24]"
[2024-03-22 10:40:14.713 -04:00] [INF] [96] Jellyfin.Networking.Manager.NetworkManager: Defined LAN exclusions : "[]"
[2024-03-22 10:40:14.713 -04:00] [INF] [96] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: "[10.0.1.0/24]"
Application version
0.16.6
Where did you install the app from?
None
Device information
Google chromecast with android tv
Android version
Android TV OS Version 12
Jellyfin server version
10.8.13
The app keeps the WebSocket alive when it is in the background. Your logs indicate it loses the connection with your server (could be because the server is turned off, no idea). The WebSocket will thus disconnect and attempt reconnection. It will only try this 16 times in total, after which it will not try to reconnect again.
@nielsvanvelzen right - however the server stays up -- you can tell from the server logs (not to mention I was literally watching a show on my computer while I was tailing adb logcat and there were no issues).
Other clients (web, android, ios) continue working and the jellyfin-androidtv app keeps working otherwise as far as media browsing and playback. What's happening is that the websocket never reconnects until the app exits and restarts. You can see in my logs that it tried to reconnect 16 times over the course of about 17 minutes.. the whole time the server was up.
Is there a mechanism to reset the websocket? I've tried socketInstance.reconnect()
and socketInstance.updateCredentials()
in a few places without success.
My best guess is that Android disables networking for the app when it is put to the background. Ideally we'd stop the WebSocket connection when that happens but we don't have a good way to do that now (we need to make changes to the SDK for that).
If you re-open the app it should try to reconnect, no need to force kill it. But it might be better to move that logic to the onResume method of the MainActivity, so it is called more often.
@nielsvanvelzen thanks for the reply - can you provide the logic to reconnect? I'm happy to implement / test / pr but I've tried a few things mentioned above (in onResume even) and didn't have success. I wonder if there's something in the SDK that's preventing the reconnect from being attempted again after the 16 retry max?
This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments.
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or master branch, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on Matrix or Social Media.
Not sure if this can be reopened, but this "bug" is also present on the latest version.