I don’t think you need both. If you’re about to pass VLAN 3999 (almost) unaltered from ISP to your STB, then that’s L2 config and IGMP snooping should do the trick. If you’re going to route multicasts (so STBs are part of internal LAN without VLANs configured and used), then you’ll need PIM. The former is much more lightweight for the router/switch regarding CPU usage (your CRS should be able to do it HW accelerated). I’m just not sure if IGMP snooping will work flawlessly (there are some users complaining about non-working IGMP snooping), it works nice if done in software (my RBD52G is buggy and I have to configure it to do bridging instead of switching).
If you’re about to use mixed setup (e.g. using VLC to play TV streams on your PCs and STBs for playing streams on TVs), then I recommend you to install some multicast2unicast proxy (such as UDPxy) on a linux box and configure that linux box with proper VLAN settings. It’s not CPU demanding, so it might be doable even using some RasberryPI … After that use customized playlist for VLC (which will use your proxy instead of directly multicasts).
This kind of setup works just fine for me
If you want to have connectivity from LAN hosts to both WAN networks (VLANs 301 and 3999), then set up appropriate routes on your router. Just don’t join them on L2, you might cause all sorts of problems in your ISP’s network.