Jump to content

Emby on Google TV plays audio but shows no video after playing next episode


Recommended Posts

Posted

Same issue here. Following the topic.

It appears to happen at least with 1 show. It happens exactly as OP said. I am running Emby on Synology server and I use Google Chromecast with its only remote, so I don't cast from my phone. I stopped casting from my phone a couple of months ago because this behaviour used to happen when casting on my phone but not with the remote, so I switched to the remote.

Posted

I think this information might be relevant:

It appears to happen only with shows I have watched before, gotten halfway (lets say season 4 of Big Bang Theory) and then start watching again from season 1 a half year later. Like we all do from time to time.

Posted

Will do! I just enabled the debug logs, and will await for the issue to occur again. It seems to happen sporadically, there is no consistency. I am a software engineer, I know what you need.

  • Thanks 1
Posted

Hi, has it happened again?

Posted

Yes! A couple of times, including just now (around 17:42 / 17:43)

I will attach the entire log file, but I think this is what you might be looking for:

 

2025-11-15 17:42:52.159 Debug PortMapper: Creating port map on local port 8096 to public port 8096 with device 192.168.0.36
2025-11-15 17:42:52.159 Debug HttpClient: POST http://192.168.0.1:33754/ctl/IPConn
2025-11-15 17:42:52.165 Error PortMapper: Error creating port map
*** Error Report ***
Version: 4.8.11.0
Command line: /volume1/@appstore/EmbyServer/system/EmbyServer.dll -programdata /var/packages/EmbyServer/var -ffdetect /var/packages/EmbyServer/target/bin/ffdetect -ffmpeg /var/packages/EmbyServer/target/bin/ffmpeg -ffprobe /var/packages/EmbyServer/target/bin/ffprobe -nolocalportconfig -ignore_vaapi_enabled_flag -pidfile /var/packages/EmbyServer/var/EmbyServer.pid -defaultdirectory /volume1/Public -updatepackage emby-server-synology72_{version}_x86_64.spk -noautorunwebapp
Operating system: Linux version 4.4.302+ (root@build5) (gcc version 12.2.0 (GCC) ) #72806 SMP Mon Jul 21 23:14:27 CST 2025
Framework: .NET 6.0.36
OS/Process: x64/x64
Runtime: volume1/@appstore/EmbyServer/system/System.Private.CoreLib.dll
Processor count: 4
Data path: /var/packages/EmbyServer/var
Application path: /volume1/@appstore/EmbyServer/system
MediaBrowser.Model.Net.HttpException: MediaBrowser.Model.Net.HttpException: Connection refused (192.168.0.1:33754)
---> System.Net.Http.HttpRequestException: Connection refused (192.168.0.1:33754)
---> System.Net.Sockets.SocketException (111): Connection refused
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request)
at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Emby.Server.Implementations.HttpClientManager.CoreHttpClientManager.SendAsyncInternal(HttpRequestOptions options, String httpMethod)
--- End of inner exception stack trace ---
at Emby.Server.Implementations.HttpClientManager.CoreHttpClientManager.SendAsyncInternal(HttpRequestOptions options, String httpMethod)
at Emby.Server.Implementations.HttpClientManager.CoreHttpClientManager.SendAsync(HttpRequestOptions options, String httpMethod)
at Mono.Nat.Upnp.UpnpNatDevice.CreatePortMapInternal(Mapping mapping, CancellationToken cancellationToken)
at Mono.Nat.Upnp.UpnpNatDevice.CreatePortMap(Mapping mapping, CancellationToken cancellationToken)
at Emby.PortMapper.ExternalPortForwarding.CreateRules(INatDevice device, CancellationToken cancellationToken)
Source: Emby.Server.Implementations
TargetSite: Void MoveNext()
InnerException: System.Net.Http.HttpRequestException: Connection refused (192.168.0.1:33754)
Source: System.Net.Http
TargetSite: Void MoveNext()
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request)
at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Emby.Server.Implementations.HttpClientManager.CoreHttpClientManager.SendAsyncInternal(HttpRequestOptions options, String httpMethod)
InnerException: System.Net.Sockets.SocketException: Connection refused
Source: System.Net.Sockets
TargetSite: Void ThrowException(System.Net.Sockets.SocketError, System.Threading.CancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
2025-11-15 17:42:52.191 Info Server: http/1.1 Response 206 to host1. Time: 148ms. GET http://192.168.0.36:8096/emby/videos/72116/original.mkv?DeviceId=a4b8716f24b1dcba&MediaSourceId=7628d6a372019fbe109072fc69a839ca&PlaySessionId=118630272d1c47b28dff05d4b1a1eb3f&api_key=x_secret1_x

 

embyserver.txt

  • 3 weeks later...
Posted

@Lukedid you see the logs / find the issue? Can I check the emby source out somewhere? I could troubleshoot for you

Posted (edited)

@Lukedid you see the logs / find the issue? Can I check the emby source out somewhere? I could troubleshoot for you.

Edit: more logs in attachment. Playing a serie of "Bobo" I downloaded recently this morning and the issue occurs over and over again.

 

Edit2. I found the github repo, I will see what I can do

embyserver.txt

Edited by SjoerdBe
Posted

You might want this too, chromecast versions:

Firmwareversie van systeem: UTTC.250917.004

Firmwareversie van Cast: 3.72.446070

Posted

@Lukedid you see the logs / find the issue? Can I check the emby source out somewhere? I could troubleshoot for you. 

 

Edit: Found the source, but I think its old. However here is a copy-pasteable for your Jira ticket :) with cause and possible solution.

---

 

Issue breakdown

 

Server: Emby Server 4.8.11.0 on Synology. 

 

Client: “Emby for Android 3.5.16” on Chromecast HD / Android 14 (AndroidXMedia3/1.5.1 in the UA).

 

Symptom:

 

When watching a series with auto-play next episode enabled, the next episode sometimes plays audio only with a black screen on the TV.

 

If I go back and manually start the same episode, it plays normally with both audio and video.

 

This happens with multiple series.

 

What I see in the server logs

 

For transitions that work and transitions that fail, the server log is effectively the same:

 

A PlaybackInfo request:

 

2025-11-15 17:41:05.613 Info Server: http/1.1 Response 200 to host1. Time: 3ms.

POST /emby/Items/72116/PlaybackInfo ... IsPlayback=true ... AutoOpenLiveStream=true ...

 

Immediately followed by a direct-play request for the original file from the Chromecast:

 

2025-11-15 17:41:06.755 Info Server: http/1.1 GET

/emby/videos/72116/original.mkv?DeviceId=a4b8...&MediaSourceId=7628d6a3...&PlaySessionId=...

User-Agent: Emby/3.5.16 (Linux;Android 14) AndroidXMedia3/1.5.1

 

On Bobo it’s the same pattern with original.mp4:

 

2025-12-07 07:40:24.297 Info VideoService: GET

/emby/videos/78581/original.mp4?DeviceId=a4b8...&MediaSourceId=mediasource_78581&PlaySessionId=...

2025-12-07 07:40:24.316 Info VideoService: Response 206 to host2. Time: 264ms.

 

No transcoding job is started for these plays, no ffmpeg commands, and there are no server-side errors at the time the client shows audio-only.

 

 

So from the server’s perspective, both the “good” and “bad” next-episode transitions look healthy: it returns 200 for PlaybackInfo and then 206 for the direct-play stream (original.mkv / original.mp4), and the Chromecast keeps reading data.

 

That suggests it’s not a “server returns 200 too early before transcoding is ready” issue, because in these cases the episodes are direct-played, not transcoded.

 

Hypothesis (possible cause)

 

The Chromecast / Google TV client (Media3/ExoPlayer 1.5.1) seems to reuse the same playback pipeline when auto-playing the next episode in the same session.

 

Occasionally, when switching to the next episode via auto-play, the player ends up with only the audio renderer active and never re-initialises the video decoder / surface.

 

The server keeps feeding the file (direct-play), but on the Chromecast side the video track is never actually displayed, hence audio-only, black screen, even though the HTTP stream is fine.

 

 

In other words, the difference between “works” and “fails” appears to be entirely on the Android/Chromecast client side, not in what the server is returning.

 

Possible direction / suggestion for a fix

 

From what I see in the logs, a robust fix probably has to be on the Android TV / Chromecast client:

 

For cast sessions when auto-playing the next episode:

 

Treat it as a fresh playback instead of just swapping media items in the same player instance.

 

Concretely: send a Stop for the current item and then a brand-new Load for the next episode (new Media3/ExoPlayer instance / fresh cast load), instead of reusing the existing session/renderer pipeline.

 

 

That should force the video decoder and surface to be recreated for each new episode, which would avoid the “audio-only” state even though the direct-play stream itself is fine.

 

 

If you want I can provide exact log timestamps of a “good” and a “bad” transition, but the high-level pattern is the same in both cases: server OK, client appears to get stuck only showing audio.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...