using motion on raspberry pi for webcam streaming issue

24,940

Solution 1

Try v2l4-ctl --list-format-ext to see what combinations of pixel format and image size are supported on your camera. The S910 is a cheap old camera, you might want to upgrade.

Solution 2

I think you need to set the height and width for the image in the conf file to your camera specification. Mine didnt work until I set height 640 width 480. Streams great! Just need to figure out the patch for the webstream authentication. currently I have this streaming to my webserver that requires a login but this can be bypassed if someone enters my IP plus the port im streaming on.

Solution 3

Your problem is in the log:

config image height (120) is not modulo 16

So you need a different image resolution.

See what your device supports with

$ uvcdynctrl -f

Pick one that has a y-resolution that is a multiple of 16. E.g. 640x480 if that one is listed for your camera.

Solution 4

Even if configured in the conf file differently, motion uses the possible resolution it detects when it runs (at least in my experience).

Also, it seems an unsupported palette is set in the conf file and motion picks one of the two it detects as supported. Have you tried changing the palette setting to "0" (S910) in the conf file?

Lastly, the Pi's USB support has some known and as of now unsolved issues regarding big chunks of data. Lowering the framerate may also help in other cases (in this case, I think, I wouldn't help, since the process already fails with the first image).

Share:
24,940
FredoAF
Author by

FredoAF

Hello

Updated on January 18, 2020

Comments

  • FredoAF
    FredoAF over 4 years

    I have a USB webcam (unknown make, no markings) thats been detected fine on my Raspberry Pi.

    This is the output of lsusb

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
    Bus 001 Device 004: ID 0c45:608f Microdia PC Camera (SN9C103 + OV7630)
    Bus 001 Device 005: ID 1267:0103 Logic3 / SpectraVideo plc G-720 Keyboard
    

    However when i run motion, using /dev/video0 with the only default config changed the resolution and setting the webcam host off so that i can stream it on a network. This is my log when i run motion

    Log of motion -n 
    
    [0] Processing thread 0 - config file /etc/motion/motion.conf
    [0] Motion 3.2.12 Started
    [0] ffmpeg LIBAVCODEC_BUILD 3482368 LIBAVFORMAT_BUILD 3478784
    [0] Thread 1 is from /etc/motion/motion.conf
    [0] motion-httpd/3.2.12 running, accepting connections
    [0] motion-httpd: waiting for data on port TCP 8080
    [1] Thread 1 started
    [1] cap.driver: "sonixb"
    [1] cap.card: "USB camera"
    [1] cap.bus_info: "usb-bcm2708_usb-1.2"
    [1] cap.capabilities=0x05000001
    [1] - VIDEO_CAPTURE
    [1] - READWRITE
    [1] - STREAMING
    [1] Config palette index 8 (YU12) doesn't work.
    [1] Supported palettes:
    [1] 0: S910 (S910)
    [1] 1: BA81 (BA81)
    [1] Selected palette BA81
    [1] Test palette BA81 (480x640)
    [1] Adjusting resolution from 480x640 to 160x120.
    [1] Using palette BA81 (160x120) bytesperlines 160 sizeimage 19200 colorspace 00000008
    [1] found control 0x00980900, "Brightness", range 0,255 
    [1]     "Brightness", default 127, current 127
    [1] found control 0x00980911, "Exposure", range 0,1023 
    [1]     "Exposure", default 66, current 66
    [1] found control 0x00980912, "Automatic Gain (and Exposure)", range 0,1 
    [1]     "Automatic Gain (and Exposure)", default 1, current 1
    [1] found control 0x00980913, "Gain", range 0,255 
    [1]     "Gain", default 127, current 127
    [1] mmap information:
    [1] frames=4
    [1] 0 length=20480
    [1] 1 length=20480
    [1] 2 length=20480
    [1] 3 length=20480
    [1] Using V4L2
    [1] Resizing pre_capture buffer to 1 items
    [1] v4l2_next: VIDIOC_DQBUF: EIO (s->pframe 0): Input/output error
    [1] v4l2_next: VIDIOC_QBUF: Invalid argument
    [1] v4l2_next: VIDIOC_QBUF: Invalid argument
    [1] v4l2_next: VIDIOC_QBUF: Invalid argument
    [1] v4l2_next: VIDIOC_QBUF: Invalid argument
    [1] Error capturing first image
    [1] Started stream webcam server in port 8081
    [1] v4l2_next: VIDIOC_QBUF: Invalid argument
    [1] Video device fatal error - Closing video device
    [1] Closing video device /dev/video0
    [1] Retrying until successful connection with camera
    [1] cap.driver: "sonixb"
    [1] cap.card: "USB camera"
    [1] cap.bus_info: "usb-bcm2708_usb-1.2"
    [1] cap.capabilities=0x05000001
    [1] - VIDEO_CAPTURE
    [1] - READWRITE
    [1] - STREAMING
    [1] Config palette index 8 (YU12) doesn't work.
    [1] Supported palettes:
    [1] 0: S910 (S910)
    [1] 1: BA81 (BA81)
    [1] Selected palette BA81
    [1] Test palette BA81 (480x640)
    [1] Adjusting resolution from 480x640 to 160x120.
    [1] Using palette BA81 (160x120) bytesperlines 160 sizeimage 19200 colorspace 00000008
    [1] found control 0x00980900, "Brightness", range 0,255 
    [1]     "Brightness", default 127, current 127
    [1] found control 0x00980911, "Exposure", range 0,1023 
    [1]     "Exposure", default 66, current 66
    [1] found control 0x00980912, "Automatic Gain (and Exposure)", range 0,1 
    [1]     "Automatic Gain (and Exposure)", default 1, current 1
    [1] found control 0x00980913, "Gain", range 0,255 
    [1]     "Gain", default 127, current 127
    [1] mmap information:
    [1] frames=4
    [1] 0 length=20480
    [1] 1 length=20480
    [1] 2 length=20480
    [1] 3 length=20480
    [1] Using V4L2
    [1] Camera has finally become available
    [1] Camera image has different width and height from what is in the config file. You should fix that
    [1] Restarting Motion thread to reinitialize all image buffers to new picture dimensions
    [1] Thread exiting
    [1] Calling vid_close() from motion_cleanup
    [1] Closing video device /dev/video0
    [0] Motion thread 1 restart
    [1] Thread 1 started
    [1] config image height (120) is not modulo 16
    [1] Could not fetch initial image from camera
    [1] Motion continues using width and height from config file(s)
    [1] Resizing pre_capture buffer to 1 items
    [1] Started stream webcam server in port 8081
    [1] Retrying until successful connection with camera
    [1] config image height (120) is not modulo 16
    [0] httpd - Finishing
    [0] httpd Closing
    [0] httpd thread exit
    [1] Thread exiting
    [0] Motion terminating
    

    The light on the camera comes on at the start and then goes off again, does anyone recognise any of the errors i'm getting?

    Thanks!

  • FredoAF
    FredoAF over 11 years
    I tried, but didnt work. Will wait for my usb hub to arrive and try again with motion
  • FredoAF
    FredoAF over 11 years
    I did play around with the resolution, i think in the example ive posted i set the height and width round the wrong way - Adjusting resolution from 480x640 to 160x120. so i will try that.
  • Wheezy
    Wheezy over 11 years
    Sorry...width 680 height 480
  • FredoAF
    FredoAF over 11 years
    yeah thats what i meant, in my example it resizes 480x640 to 160x120, so i should set it 680x480
  • 2i3r
    2i3r over 2 years
    That must be v4l2-ctl --list-formats-ext.