Specify server FQDN and port on Android TV client

The Channels client on Android TV appears to only allow the IP address of the Channels DVR server to be specified. When running the Channels DVR server using docker with a reverse proxy (no host networking and no port forwarding), the server can only be accessed with the FQDN, not the IP address. Is there any way to force the client to connect to a specific FQDN and port (e.g., https://dvr.example.com:443)? If not, is this a feature that could be added?

1 Like

What are you trying to accomplish? Streaming from home and away both work.

1 Like

This was just added in the latest Android beta.

@Morris_Altman This applies to both home and away streaming. When running the Channels DVR server using docker with a reverse proxy (no host networking and no port forwarding), the server can only be accessed with the FQDN, not the IP address. The use of a reverse proxy (e.g., Traefik) is typical when using Kubernetes. The container can be automatically migrated to a different node if a node fails. Then the reverse proxy (which is aware of the topology) automatically routes the traffic to the new node.

@Maddox Thanks!! I will test the beta tonight and report back.

If you're putting a reverse proxy in front of your DVR, please make sure there is some type of authentication present. Otherwise anyone on the internet can access your DVR.

When you use the built-in remote streaming workflow, we authenticate you and use your assigned *.u.channelsdvr.net domain to ensure SSL.

Note also when you click At Home and enter a fqdn, the app will think you're at home and use Home streaming quality.

@tmm1 My comment "This applies to both home and away streaming." may have caused some confusion. I probably should have just said "I am attempting to stream from home". My reverse proxy is not accessible to the internet, only the intranet. But if I was trying to stream remotely (which I am not), remote traffic would need to go through the reverse proxy as well.

In a typical Kubernetes deployment, the docker container will not have host networking enabled nor will it have any port forwarding setup. Nothing outside of the cluster (included both intranet and internet) can directly access the container. All traffic must come through an Ingress (Ingress | Kubernetes) which I have been describing as a reverse proxy for simplicity.

Because the built-in remote streaming workflow will not result in traffic going through the reverse proxy nor would it have the correct host header if it did, the built-in remote streaming workflow will not work in a typical Kubernetes deployment. Authentication on the reverse proxy (Ingress) would be important if remote streaming was desired.

This has nothing to do with Android TV client, but we have been talking about Ingress/reverse proxy so I figured will ask. I was not able to complete the initial setup process when the traffic was routed through the reverse proxy. I don't recall the exact error message, but it was something about how the server must be accessed using its IP during setup. I had to setup a port forward (I am referring to a port forward in Docker/Kubernetes, not a port forward in an internet router) in order to complete setup. After setup I was able to access through the proxy so I removed the port forward. Why is accessing using the IP during setup required?

@fenichelar this is what I was describing on github, not being able to complete the initial setup without being on the the same subnet as kubernetes. My solution was to use Firefox with VNC chart and complete setup on it.

I can access the DVR WebUI without a RP/Traefik, what port forward method are you using that allows you to complete the setup from a device on the main LAN network?

@Jmcguire525 I'm not sure it is the same issue. You shouldn't be getting a timeout but instead a descriptive error from Channels DVR server.

You can't use ClusterIP for setup or if you need clients that don't support authentication (e.g., Android TV) to be able to access the Channels DVR server. You must use LoadBalancer and access using the TrueNAS IP and port 8089.

This is the message I get...

This site can’t be reached http://172.16.0.13:8089/auth/confirm?code=XXX is unreachable.

Channels DVR doesn't know the TrueNAS IP, it only knows the internal IP of the container. This causes the redirect for authentication to take you to the wrong URL. Change 172.16.0.13 in the URL to the TrueNAS IP.

@tmm1 The setup experience for a docker container doesn't work well because the Channels DVR server doesn't redirect to an accessible IP. During the authentication flow, can the Channels DVR server look at the Host header of the HTTP request the user is making to figure out what URL to redirect to after completing authentication?