VOXL camera configuration
-
The instructions are in the readme here: https://gitlab.com/voxl-public/voxl-sdk/services/voxl-uvc-server
-
@Chad-Sweet But yes, you modify the code, build it, and push the IPK to VOXL
-
@Chad-Sweet
Is the Hires + TOF + Stereo (one stereo configured as the tracking camera) configuration possible?
In case the e-CAM83 will not work with the Seeker. -
@Chad-Sweet
Just to confirm,
If I modify the voxl-uvc-server/src/main.c file, to allow H264 format, would this work?
Or does the modification need to happen somewhere else in the main.c?
I’m just not exactly sure what or where I need to modify the voxl-uvc-server to make my UVC camera work. -
@Kris H264 is not supported in voxl-uvc-server. See https://gitlab.com/voxl-public/voxl-sdk/services/voxl-uvc-server/-/blob/dev/src/main.c#L64. You may be able to add support for it but there are some tricky aspects to H264 streaming that you would need to be aware of before attempting it. Seems like you should start with the video3 interface since it supports 640x480 YUYV
-
@Eric-Katzfey
Ok, thank you.
I will start with attempting /dev/video3 first. -
@Eric-Katzfey
It seems as if VOXL1 is not able to connect with my UVC camera.
Output when UVC camera is connected to the Seeker;voxl:~$ gst-device-monitor-1.0 Video/Source Probing devices... (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4152): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed No devices found! voxl:~$ gst-device-monitor-1.0 Probing devices... (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed (gst-device-monitor-1.0:4157): GStreamer-CRITICAL **: gst_element_message_full_with_details: assertion 'GST_IS_ELEMENT (element)' failed Device found: name : msm_fd class : Video/Sink caps : video/x-raw, format=(string)GRAY8, width=(int)[ 320, 854 ], height=(int)[ 240, 480 ], interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string){ bt601, smpte240m, bt709, 2:4:5:2, 2:4:5:3, 1:4:7:1, 2:4:7:1, 2:4:12:8, 2:6:5:7, 2:0:0:0 }; properties: device.path = /dev/video1 udev-probed = false device.api = v4l2 v4l2.device.driver = msm_fd v4l2.device.card = msm_fd v4l2.device.bus_info = "" v4l2.device.version = 201287 (0x00031247) v4l2.device.capabilities = 69206018 (0x04200002) v4l2.device.device_caps = 2097152 (0x00200000)
Output when my UVC camera is connected to my Linux PC;
seeker3@seeker3-VirtualBox:~$ gst-device-monitor-1.0 Video/Source Probing devices... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video0 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video0 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src ! ... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1; image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video2 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video2 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src device=/dev/video2 ! ... seeker3@seeker3-VirtualBox:~$ gst-device-monitor-1.0 Probing devices... Device found: name : Monitor of Built-in Audio Analog Stereo class : Audio/Source caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: device.description = "Monitor\ of\ Built-in\ Audio\ Analog\ Stereo" device.class = monitor alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = 0 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 pulsesrc device=alsa_output.pci-0000_00_05.0.analog-stereo.monitor ! ... Device found: name : Built-in Audio Analog Stereo class : Audio/Source caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: alsa.resolution_bits = 16 device.api = alsa device.class = sound alsa.class = generic alsa.subclass = generic-mix alsa.name = "Intel\ 82801AA-ICH" alsa.id = "Intel\ ICH" alsa.subdevice = 0 alsa.subdevice_name = "subdevice\ \#0" alsa.device = 0 alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = front:0 device.buffering.buffer_size = 17632 device.buffering.fragment_size = 4408 device.access_mode = mmap device.profile.name = analog-stereo device.profile.description = "Analog\ Stereo" device.description = "Built-in\ Audio\ Analog\ Stereo" alsa.mixer_name = "Analog\ Devices\ AD1980" alsa.components = AC97a:41445370 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 pulsesrc device=alsa_input.pci-0000_00_05.0.analog-stereo ! ... Device found: name : Built-in Audio Analog Stereo class : Audio/Sink caps : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-alaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; audio/x-mulaw, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ]; properties: alsa.resolution_bits = 16 device.api = alsa device.class = sound alsa.class = generic alsa.subclass = generic-mix alsa.name = "Intel\ 82801AA-ICH" alsa.id = "Intel\ ICH" alsa.subdevice = 0 alsa.subdevice_name = "subdevice\ \#0" alsa.device = 0 alsa.card = 0 alsa.card_name = "Intel\ 82801AA-ICH" alsa.long_card_name = "Intel\ 82801AA-ICH\ with\ AD1980\ at\ irq\ 21" alsa.driver_name = snd_intel8x0 device.bus_path = pci-0000:00:05.0 sysfs.path = /devices/pci0000:00/0000:00:05.0/sound/card0 device.bus = pci device.vendor.id = 8086 device.vendor.name = "Intel\ Corporation" device.product.id = 2415 device.product.name = "82801AA\ AC\'97\ Audio\ Controller" device.form_factor = internal device.string = front:0 device.buffering.buffer_size = 19188 device.buffering.fragment_size = 6396 device.access_mode = mmap device.profile.name = analog-stereo device.profile.description = "Analog\ Stereo" device.description = "Built-in\ Audio\ Analog\ Stereo" alsa.mixer_name = "Analog\ Devices\ AD1980" alsa.components = AC97a:41445370 module-udev-detect.discovered = 1 device.icon_name = audio-card-pci gst-launch-1.0 ... ! pulsesink device=alsa_output.pci-0000_00_05.0.analog-stereo Device found: name : e-CAM83_USB class : Video/Source caps : video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 15/1 }; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video0 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video0 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src ! ... Device found: name : e-CAM83_USB class : Video/Source caps : video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)15/1; image/jpeg, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; properties: udev-probed = true device.bus_path = pci-0000:00:0c.0-usb-0:2:1.0 sysfs.path = /sys/devices/pci0000:00/0000:00:0c.0/usb1/1-2/1-2:1.0/video4linux/video2 device.bus = usb device.subsystem = video4linux device.vendor.id = 2560 device.vendor.name = e-ConSystems device.product.id = c184 device.product.name = e-CAM83_USB device.serial = e-ConSystems_e-CAM83_USB_00.00.01 device.capabilities = :capture: device.api = v4l2 device.path = /dev/video2 v4l2.device.driver = uvcvideo v4l2.device.card = e-CAM83_USB v4l2.device.bus_info = usb-0000:00:0c.0-2 v4l2.device.version = 328933 (0x000504e5) v4l2.device.capabilities = 2225078273 (0x84a00001) v4l2.device.device_caps = 69206017 (0x04200001) gst-launch-1.0 v4l2src device=/dev/video2 ! ...
A simple video test will not work either.
voxl:~$ gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock ^Chandling interrupt. Interrupt: Stopping pipeline ... Execution ended after 0:00:17.998587815 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
Are there any plugins that I could be missing?
-
Keeps failing to find a usable video sink.
voxl:~$ show-video-device-info.sh /dev/video2: e-CAM83_USB 2560:c184 /dev/video3: e-CAM83_USB 2560:c184 voxl:~$ gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video3' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ... voxl:~$ gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video2' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ... voxl:~$
Output when debug command is used.
voxl:~$ GST_DEBUG=3 gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink Setting pipeline to PAUSED ... 0:00:00.229741613 4689 0xdf500 WARN autodetect gstautodetect.c:347:gst_auto_detect_find_best:<autovideosink0> warning: Failed to find a usable video sink 0:00:00.277135238 4689 0xdf500 WARN v4l2 v4l2_calls.c:625:gst_v4l2_open:<v4l2src0> error: Could not open device '/dev/video3' for reading and writing. 0:00:00.277213207 4689 0xdf500 WARN v4l2 v4l2_calls.c:625:gst_v4l2_open:<v4l2src0> error: system error: Device or resource busy ERROR: Pipeline doesn't want to pause. WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Resource not found. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/gst/autodetect/gstautodetect.c(347): gst_auto_detect_find_best (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Failed to find a usable video sink ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not open device '/dev/video3' for reading and writing. Additional debug info: /opt/workspace/build/apq8096-le-1-0-1_ap_standard_oem.git/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oemllib32-linux-gnueabi/lib32-gstreamer1.0-plugins-good/1.10.4-r0/gst-plugins-good-1.10.4/sys/v4l2/v4l2_calls.c(625): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: system error: Device or resource busy Setting pipeline to NULL ... Freeing pipeline ...
-
@Kris You can't use autovideosink on VOXL because it doesn't have a display
-
@Kris Maybe try fakesink instead?
-
@Eric-Katzfey
I have tried both fakesink and playbin.
Neither of them work either.
Has anyone gotten gstreamer to successfully work on VOXL1? -
@Eric-Katzfey
I also have another UVC camera, but it only outputs MJPG (compressed) and YUY2 (uncompressed 640x480 30fps) formats.It works for streaming, but I am trying to record the video to the Seeker’s SD card.
Is there a way to do this with Gstreamer or a similar program? -
@tom
Could this be the reason why no devices are found when I usegst-device-monitor-1.0 Video/Source
on the VOXL1? -
I see that the VOXL1 has the
gst-plugins-good
.
Is it possible to also add thegst-plugins-bad
andgst-plugins-ugly
? -
@Kris We use GStreamer in our voxl-streamer application. It does work on VOXL1.
-
@Eric-Katzfey
Ok, thank you for the confirmation. -
@Eric-Katzfey
If possible, could you please provide me with a VOXL1 working pipeline (streaming or recording) using any UVC camera of your choice? -
@Kris That's not how it works on VOXL1. The voxl-uvc-server application places frames into an MPA pipe and the voxl-streamer application (based on gstreamer) reads those frames and processes them for output using RTSP. However, I do believe that I did try command line gst-launch-1.0 style pipelines with UVC cameras in the past and they worked. I don't have an example of one though. You may want to start with one of our supported UVC cameras first and then try to get your particular UVC camera working. I always start with the Logitech C270. We list the specific cameras that we support because each one caused us some issues and required code changes to make it work. We even had to fork the libuvc library in order to make changes to that to get some of the cameras working properly.
-
@Eric-Katzfey
Ok, I understand.
Thank you for all your help and support with this issue.
I will try one of your tested & supported UVC cameras. -
@Eric-Katzfey
I bought the Logitech C270 and tried testing it with some Gstreamer commands.
So far I have been able to use it on my Linux PC with these commands.Connected to PC and viewing video;
gst-launch-1.0 -v v4l2src ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink
Connected to PC and recording to PC;
gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegdec ! x264enc ! qtmux ! filesink location=C270.mp4 -e
However, when I connect the C270 to the Seeker I cannot get any of these to work.
I have tried different video devices 0-3 and I have also substituted theautovideosink
withfakesink
but these changes are still not working.Could you please show me a Gstreamer example for this Logitech C270 camera that works on the Seeker?
I would like to either stream, record, or stream+record (possibly using tee) the video using gst-launch-1.0.
Thank you