How to selecting a video4linux camera based on its serial number from gst-launch?
Peter Maersk-Moller
pmaersk at gmail.com
Thu Feb 29 20:58:31 UTC 2024
Hi Henning.
Try take a look into /dev/v4l/by-id/ directory. Maybe you can use the id
there to obtain the functionality you want.
Regards
Peter Maersk-Moeller
On Thu, Feb 29, 2024 at 8:39 PM Henning Larsen via gstreamer-devel <
gstreamer-devel at lists.freedesktop.org> wrote:
> A command like this launches /dev/video0
> *gst-launch-1.0 -v v4l2src device=/dev/video0 ! videoconvert !
> autovideosink*
> But when you have multiple cameras and they are enumerated in a random
> order you usually need to be able to identify each camera on - say its
> serial number.
>
> It is easy to find the serial number including many other properties using
> the command
> *$udevadm info /dev/video0*
> The serial number for example, would be called
> ID_SERIAL_SHORT=12345
>
> *How to use this serial number in the gst-launch string instead of the
> /dev/videoX id?*
>
> I tried
> *gst-launch-1.0 -v v4l2src device=$(python find_camera_by_sn.py 12345) !
> videoconvert ! autovideosink*
> And it works - inside a shell, but *not *inside a MediaMTX.yml
> <https://github.com/bluenviron/mediamtx>configuration file, and I need it
> to work there. I suspect it is because it does not support the shell
> command. In any case it is not an elegant method - better to stick with
> what is provided by gstreamer - if possible.
>
> I would think this must be a fairly common issue so *does there exist a
> plugin/filter for gstreamer to achieve this device selection based on a
> specific property?*
>
> Any hints are appreciated.
> Thanks
> henning
>
>
> *Should someone need it: This is the python code find_camera_by_sn.py*
> import sys
> import pyudev
>
> def find_camera_by_serial(serial):
> context = pyudev.Context()
> for device in context.list_devices(subsystem='video4linux'):
> if 'ID_SERIAL_SHORT' in device.properties:
> if device.properties['ID_SERIAL_SHORT'] == serial:
> return device.device_node
> return None
>
> if __name__ == '__main__':
> # Example: Find camera with serial number 'ABC123'
> # manual command to list video4linux cameras
> # udevadm info /dev/video0, etc for 0,1,,3
> default_dev = "/dev/video0"
> if len(sys.argv) == 2:
> camera_device = find_camera_by_serial(sys.argv[1])
> if camera_device:
> print(camera_device)
> else:
> print(default_dev)
> else:
> print(default_dev)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20240229/918560c3/attachment.htm>
More information about the gstreamer-devel
mailing list