Streams do not run unless linked to a physical device even if the driver flag is set
In short, the following works fine:
But if you unlink the microphone, then the other source stops as well:
To reproduce:
gst-launch-1.0 pipewiresrc ! audio/x-raw ! pipewiresink
gst-launch-1.0 audiotestsrc ! pipewiresink mode=provide stream-properties=pw,media.class=Audio/Source
The first gstreamer pipeline runs as long as it is connected to a physical microphone. If you link the the second pipewiresink to the first pipewiresrc, then you can hear the test signal. But when you unlink the microphone, then the test signal stops.
I'm probably very confused, but I thought the purpose of the PW_STREAM_FLAG_DRIVER
flag (and the corresponding mode=provide
gstreamer option) was so that you could use a stream just like a real device. The same issue also occurs if you modify pipewiresrc to set PW_STREAM_FLAG_DRIVER
. AFAICT this is because pw_stream relies on other nodes to provide a clock and can't produce it's own clock.
(My original use case was to use gstreamer to connect to a network speaker using gst-launch-1.0 pipewiresrc ! pulsesink server=1.2.3.4
. This works wonderfully, but only as long as I link a local microphone...)