Forum Linux.debian/ubuntu API pour camera/webcam

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
9
déc.
2019

Bonjour à tous,

Je viens de commencer un projet de traitement video.

Pour le moment je me sers d'une webcam usb classique.

J'ai regardé les quelques projets autours, que voici :
-libusb
-v4l2
-uvcvideo

J'ai regardé les sources du projet "guvcview". Ils utilisent v4l2 et uvcvideo.

Avez-vous déjà tenté de récupérer les flux video d'une camera ou webcam via usb ou ethernet ?

Je pense partir sur l'utilisation de la lib uvcvideo, et peut être de v4l2 si besoin.

Merci pour vos retour d'expérience.

  • # VLC/RTSP

    Posté par  (site web personnel) . Évalué à 2.

    J'ai déjà utilisé VLC pour capturer un flux RTSP envoyé sur le réseau par une petite caméra. Pour capturer (presque) une heure de vidéo, mon entrée de crontab ressemblait à ceci :

    /usr/bin/vlc -vvv rtsp://spy.home:554/live/ch0 --sout=file/ts:/data/media/spy/record-$(/bin/date +"%Y-%m-%dT%H%M").ts -I dummy --stop-time=3590 vlc://quit
    

    Parfait pour garder un œil sur le chat.

    Debian Consultant @ DEBAMAX

    • [^] # Re: VLC/RTSP

      Posté par  . Évalué à 1.

      Bonjour,

      Merci pour votre réponse.

      Je suis partie sur l'utilisation du driver UVC, qui est commun à tous les appareils.

      Je me heurte à un problème, voici le code que j’éxecute pour obtenir 30fps, un exemple de la libuvc.

      Avez-vous déjà fait un essai sur cette lib ?

            /* Initialize a UVC service context. Libuvc will set up its own libusb
             * context. Replace NULL with a libusb_context pointer to run libuvc
             * from an existing libusb context. */
            res = uvc_init(&ctx, NULL);
            if (res < 0) {
              uvc_perror(res, "uvc_init");
              return res;
            }
            puts("UVC initialized");
            /* Locates the first attached UVC device, stores in dev */
            res = uvc_find_device(
                ctx, &dev,
                3141, 25409, NULL); /* filter devices: vendor_id, product_id, "serial_num" */
                //33006, 48, NULL);
                //3141, 25409, NULL); /* filter devices: vendor_id, product_id, "serial_num" */
                //3141, 25409, "da1b7b94a31315e0");
      
            if (res < 0) {
              uvc_perror(res, "uvc_find_device"); /* no devices found */
            } else {
              puts("Device found");
      
              /* Try to open the device: requires exclusive access */
              //Special access : sudo sh -c "echo 'SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0c45\", ATTRS{idProduct}==\"6341\", SYMLINK+=\"pt1\", GROUP=\"usb\", MODE=\"666\"' > /etc/udev/rules.d/99-pt1.rules"
              res = uvc_open(dev, &devh);
      
              if (res < 0) {
                uvc_perror(res, "uvc_open"); /* unable to open device */
              } else {
                puts("Device opened");
                /* Print out a message containing all the information that libuvc
                 * knows about the device */
                uvc_print_diag(devh, stderr);
      
                /* Try to negotiate a 640x480 30 fps YUYV stream profile */
                res = uvc_get_stream_ctrl_format_size(
                    devh, &ctrl, /* result stored in ctrl */
                    UVC_FRAME_FORMAT_YUYV, /* YUV 422, aka YUV 4:2:2. try _COMPRESSED */
                    640, 480, 30 /* width, height, fps */
                );
      
                /* Print out the result */
                uvc_print_stream_ctrl(&ctrl, stderr);
                if (res < 0) {
                  uvc_perror(res, "get_mode"); /* device doesn't provide a matching stream */
                } else {
                  /* Start the video stream. The library will call user function cb:
                   *   cb(frame, (void*) 12345)
                   */
      
                  res = uvc_start_streaming(devh, &ctrl, cb, user_ptr, 0);
                  if (res < 0) {
                    uvc_perror(res, "start_streaming"); /* unable to start stream */
                  } else {
                    puts("Streaming...");
                    uvc_set_ae_mode(devh, 1); /* e.g., turn on auto exposure */
                    QThread::msleep(10000); /* stream for 10 seconds */
                    /* End the stream. Blocks until last callback is serviced */
                    uvc_stop_streaming(devh);
                    puts("Done streaming.");
                  }
                }
                /* Release our handle on the device */
                uvc_close(devh);
                puts("Device closed");
              }
              /* Release the device descriptor */
              uvc_unref_device(dev);
            }
            /* Close the UVC context. This closes and cleans up any existing device handles,
             * and it closes the libusb context if one was not provided. */
            uvc_exit(ctx);
            puts("UVC exited");
            return 0;
      

      Le résultat est le suivant,

      14:47:00: Starting /home/jo/Qt_project/serveur_surveillance/build-serveur_surveillance-Desktop-Debug/serveur_surveillance...
      TEST
      4 Devices in list.
      Number of possible configurations: 1  Device Class: 239  VendorID: 3141  ProductID: 25409
      Interfaces: 4 ||| Number of alternate settings: 1 | Interface Number: 0 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 131 | Number of alternate settings: 7 | Interface Number: 1 | Number of endpoints: 0 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Interface Number: 1 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | Number of alternate settings: 1 | Interface Number: 2 | Number of endpoints: 0 | Number of alternate settings: 2 | Interface Number: 3 | Number of endpoints: 0 | Interface Number: 3 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 132 | 
      
      
      Number of possible configurations: 1  Device Class: 9  VendorID: 7531  ProductID: 2
      Interfaces: 1 ||| Number of alternate settings: 1 | Interface Number: 0 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | 
      
      
      Number of possible configurations: 1  Device Class: 0  VendorID: 33006  ProductID: 33
      Interfaces: 1 ||| Number of alternate settings: 1 | Interface Number: 0 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | 
      
      
      Number of possible configurations: 1  Device Class: 9  VendorID: 7531  ProductID: 1
      Interfaces: 1 ||| Number of alternate settings: 1 | Interface Number: 0 | Number of endpoints: 1 | Descriptor Type: 5 | EP Address: 129 | 
      
      
      unsupported descriptor subtype VS_STILL_IMAGE_FRAME
      unsupported descriptor subtype VS_STILL_IMAGE_FRAME
      unsupported descriptor subtype VS_COLORFORMAT
      DEVICE CONFIGURATION (0c45:6341/[none]) ---
      Status: idle
      VideoControl:
          bcdUVC: 0x0100
      VideoStreaming(1):
          bEndpointAddress: 129
          Formats:
          UncompressedFormat(1)
                bits per pixel: 16
                GUID: 5955593200001000800000aa00389b71 (YUY2)
                default frame: 1
                aspect ratio: 0x0
                interlace flags: 00
                copy protect: 00
                  FrameDescriptor(1)
                    capabilities: 00
                    size: 640x480
                    bit rate: 24576000-147456000
                    max frame size: 614400
                    default interval: 1/30
                    interval[0]: 1/30
                    interval[1]: 1/25
                    interval[2]: 1/20
                    interval[3]: 1/15
                    interval[4]: 1/10
                    interval[5]: 1/5
                              ......................
                              ......................
                  FrameDescriptor(18)
                    capabilities: 00
                    size: 1280x720
                    bit rate: 73728000-147456000
                    max frame size: 1843200
                    default interval: 1/10
                    interval[0]: 1/10
                    interval[1]: 1/5
          MJPEGFormat(2)
                bits per pixel: 0
                GUID: 4d4a5047000000000000000000000000 (MJPG)
                default frame: 1
                aspect ratio: 0x0
                interlace flags: 00
                copy protect: 00
                  FrameDescriptor(1)
                    capabilities: 00
                    size: 640x480
                    bit rate: 24599560-147597360
                    max frame size: 614989
                    default interval: 1/30
                    interval[0]: 1/30
                    interval[1]: 1/25
                    interval[2]: 1/20
                    interval[3]: 1/15
                    interval[4]: 1/10
                    interval[5]: 1/5
                  .................................
                              .................................
                  FrameDescriptor(18)
                    capabilities: 00
                    size: 1280x720
                    bit rate: 73751560-442509360
                    max frame size: 1843789
                    default interval: 1/30
                    interval[0]: 1/30
                    interval[1]: 1/25
                    interval[2]: 1/20
                    interval[3]: 1/15
                    interval[4]: 1/10
                    interval[5]: 1/5
      END DEVICE CONFIGURATION
      bmHint: 0001
      bFormatIndex: 1
      bFrameIndex: 1
      dwFrameInterval: 333333
      wKeyFrameRate: 0
      wPFrameRate: 0
      wCompQuality: 0
      wCompWindowSize: 0
      wDelay: 13646
      dwMaxVideoFrameSize: 614400
      dwMaxPayloadTransferSize: 3072
      bInterfaceNumber: 1
      attempt to claim already-claimed interface 1
      14:47:01: Le programme s'est terminé subitement.
      14:47:01: The process was ended forcefully.
      14:47:01: /home/jo/Qt_project/serveur_surveillance/build-serveur_surveillance-Desktop-Debug/serveur_surveillance crashed.
      

      Je suis bloqué après cette ligne de code : attempt to claim already-claimed interface 1

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.