MPlayer is a black art. GMPlayer, doubly so.
It turns out this does the job much better than my previous hacks:
#!/bin/bash gmplayer -cache 2048 -zoom "dvb://$1"
It’s still not perfect for radio over digital TV, though – you get an empty window where the picture should be, and the cache is far too large for radio.