Tvheadend package seems to send multicast message to the wrong interface. See: OpenWrt issue and tvheadend discussion. There is a command line switch available that binds tvheadend's satip client to a specific IP (--satip_bindaddr).
How do I write a service startup script that binds the service to router's LAN IP address? How do I get that address?
If your proposed solution to obtain the IP is based on interface name (br-lan), what happens if the user changed the interface name to something else?
What happens if the router is connected to multiple LANs? Will the suggested solution work?
How to auto-restart the service if the local LAN address changes (manually by the user? DHCP offers another?)
Instead of a fixed setting, should I add this binding as a config option in /etc/config/tvheadend? Should this option accept an IP address or interface name? Or both / any? Is there any wiki / tutorial for creating configuration files?
Maybe another quick and dirty workaround but what about (ab)using /etc/init.d/tvheadend (re)start:
uci set tvheadend.server.bindaddr=$(uci get network.lan.ipaddr)
uci commit
Or better without making it permanent and skipping /etc/config/tvheadend by just altering the startup variable of tvheadend from /etc/init.d/tvheadend:
Hotplug solution isn't OK for tvheadend because it can't be stopped at some random time if IP address changes. It may be in the middle of recording some TV show. Restarting it will interrupt the recording.
I'm working on a simple, but better solution:
If bindaddr is not set in /etc/config/tvheadend, it defaults to router's LAN IP when tvheadend starts. Users can still set it to 0.0.0.0 if they want all interfaces.