When you play a channel or recording from the GUI, tvheadend sends your browser a .m3u file containing a URL. Your browser opens that URL (or passes it to another application such as VLC) to view the content.
However the .m3u file contains the IP address of your tvheadend server as seen from inside your network, not the external address of your router. Hence it won't work.
I use a VPN provided by my router, which effectively puts my remote device inside my internal network and so allows access to tvheadend content.