Over the past few years, we've been slowly working on improving the platform-specific plugins for Windows, macOS, iOS, and Android, and making them work as well as the equivalent plugins on Linux. In this episode, we will look at audio device switching in the source and sink elements on macOS and Windows.
On Linux, if you're using the PulseAudio elements (both with the PulseAudio
daemon and PipeWire), you get perfect device switching: quick, seamless, easy,
and reliable. Simply set the device
property whenever you want and you're off
to the races. If the device gets unplugged, the pipeline will continue, and you
will get notified of the unplug via the GST_MESSAGE_DEVICE_REMOVED
bus
message from GstDeviceMonitor
so you can change the device.
As of a few weeks ago,
the Windows Audio plugin wasapi2
implements the same behaviour. All you have
to do is set the device
property to whatever device you want (fetched using
the GstDeviceMonitor
API), at any time.
A merge request is open for adding the same feature to the macOS audio plugin, and is expected to be merged soon.
For graceful error handling, such as accidental device unplug or other
unexpected errors, there's a new continue-on-error
property. Setting that
will cause the source to output silence after unplug, whereas the sink will
simply discard the buffers. An element warning will be emitted to notify the
app (alongside the GST_MESSAGE_DEVICE_REMOVED
bus message if there was
a hardware unplug), and the app can switch the device by setting the device
property.
Thanks to Seungha and Piotr for working on this!