So I might be able to help. Might being the key word.
If you have a V4L2 based camera can you try this:
gphoto2 --stdout --capture-movie | ffmpeg -hwaccel vaapi -c:v mjpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 2 -f v4l2 -s:v 1920x1080 /dev/video1
This will use gphoto2 and ffmpeg not gstreamer FYI. Make sure you stream it to video1 and not video0. Reason being, OBS defaults to use video0.
If that works for you should be able to see the stream with VLC. You should also be able to add a Source in OBS called Video Capture Device (V4L2).
At that point you should be able to Start Virtual Camera and OBS will stream to video0. From there you should be good to go.
Now of course that doesn't answer your question about Gstreamer.
What I do after I call gphot2 and ffmpeg is this:
GST_DEBUG=3,pipewiresink:5 gst-launch-1.0 v4l2src device=/dev/video1 ! queue ! videoconvert ! pipewiresink mode=provide stream-properties="properties,media.class=Video/Source,media.role=Camera" client-name=EOS
This will use Gstreamer to read the video stream created by ffmpeg and convert it to a PipeWire stream.
This is still experimental for me and have yet to get OBS working with a PipeWire stream.
Re reading what you said. I wonder the V4L2 device what dev is it outputting the stream to?
Can you read the stream using something other than Gstreamer? Like VLC?