ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Duplicating UVC camera

    Software Development
    4
    5
    359
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      maxwelllwang
      last edited by

      We are using a USB webcam plugged in to the USB port on the modem. Currently we can access the webcam from within a docker image as a USB device. But now we want to use this same camera feed for two separate docker images/ processes. so,

      How to duplicate video feed / USB device on Voxl?

      Existing methods use v4l2loopback to generate duplicate video streams, however the default yocto distribution does not contain the kernel modules necessary to run v4l2
      How would I duplicate video stream without using a custom kernel

      Asked this question before in a different channel but wanted to see if anyone has experience with this

      Eric KatzfeyE 2 Replies Last reply Reply Quote 0
      • Eric KatzfeyE
        Eric Katzfey ModalAI Team @maxwelllwang
        last edited by

        @maxwelllwang You can build a custom kernel with this project: https://gitlab.com/voxl-public/system-image-build/voxl-build

        1 Reply Last reply Reply Quote 0
        • Eric KatzfeyE
          Eric Katzfey ModalAI Team @maxwelllwang
          last edited by

          @maxwelllwang Another idea is to use the dev branch of the new voxl-uvc-project here: https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-uvc-server/-/tree/dev. This will stream the video out with MPA. You can then have MPA clients in multiple docker containers consuming the video frames.

          1 Reply Last reply Reply Quote 0
          • A
            Arrowtec
            last edited by Arrowtec

            Hey,
            I will try my best to explain the idea I had.
            You can use gstreamer to stream your camera to a shared memory sink (shmsink). To implement this I would use cv2 (python) with the video writer class to write the video to a FIFO file location. The location can be set to /temp/[name] which will utilize shared memory. This location can be mapped to both docker containers with the -v / --volume parameter so you can access the stream from the other docker container as well. This is obviously not the easiest nor best solution but probably better than a custom kernel.
            All the best

            1 Reply Last reply Reply Quote 0
            • ?
              A Former User
              last edited by

              This is essentially the point of MPA (Modal Pipe Architecture, our interprocess communications standard). We publish FIFOs to /run/mpa with the data (standard FIFOs use the filesystem as a handle, not for actually transferring the data, the kernel will pass the data directly from process to process). voxl-uvc-server will pull the data from the camera and write it out to a pipe in /run/mpa, which can easily be mounted in a docker image and read there. You can use the libmodal_pipe(or manually request a pipe and open the FIFO, though this will be less reliable than our extensively tested library) to read it in a docker image (or images as MPA allows numerous clients).

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Powered by NodeBB | Contributors