Closed chadkouse closed 1 month ago
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.
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.
The remote party closed the WebSocket connection without completing the close handshake.
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 neededRelated server log:
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