I'm using v4l2loopback [0] to create a dummy video device, ffmpeg to create a stream endpoint that streams into the dummy video device, then setting up OBS to stream to localhost.
It is actually really nice to have the capability to fully control what is going in to the video input.
I haven't run into a need to also change the audio input yet but if it becomes necessary, it should be possible to set up loopback with ALSA.