Lisa Logitech Camera

From PaparazziUAV
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Notes for getting camera streaming from Lisa over wifi

This page explains how to use a few applications to stream the video.

Assumptions:

  • You already have a Logitech QuickCam Pro for Notebooks camera connected via USBH or USBOTG (only tested with hub)
  • The uvcvideo module is loaded and you have a /dev/video0 entry that works
  • You have a working wifi connection to a network

Gstreamer and uvc_stream

These two applications are part of a single development effort and source is available so we're going to build...

Download source

I grabbed svn on 13:41, 27 August 2010 (CEST)

svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer

Build

Small changes required in :

  • Makefiles due to cross compilation for ARM architecture of overo (don't worry, painless)
  • some files that include a bogus header

Skip below for patch (that may or may not apply clean)

Modify Makefiles

In mjpg-streamer/Makefile and uvc-streamer/Makefile I put:

DESTDIR = /home/paul

# set the compiler to use
#CC = gcc
OVERO_OE=/home/paul/overo-oe

CC = $(OVERO_OE)/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-gcc
CROSS_COMPILE=$(OVERO_OE)/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-

ARCH=arm

GLIB_INC = $(OVERO_OE)/tmp/work/armv7a-angstrom-linux-gnueabi/glib-2.0-2.22.4-r1/staging-pkg/staging/armv7a-angstrom-linux-gnueabi/usr/include/glib-2.0
GLIB_LIB = $(OVERO_OE)/tmp/work/armv7a-angstrom-linux-gnueabi/glib-2.0-2.22.4-r1/staging-pkg/staging/armv7a-angstrom-linux-gnueabi/usr/lib/

I also had to do this in all the Makefiles in the plugins folder

Remove header

apparently libv4l2.h which is included in a few files is no longer included. Thankfully it doesn't appear to be needed so commenting the references works ok :

paul@paul-laptop:/media/PackBell_Linux/overo-oe/mjpg-streamer/mjpg-streamer$ find . | xargs grep -n "libv4l2.h"
./plugins/output_http/httpd.c:40://#include <libv4l2.h>
./plugins/output_http/.svn/text-base/httpd.c.svn-base:40:#include <libv4l2.h>
./plugins/input_uvc/v4l2uvc.h:35://#include <libv4l2.h>
./plugins/input_uvc/.svn/text-base/v4l2uvc.h.svn-base:35:#include <libv4l2.h>

patch available here

Build uvc_streamer

paul@paul-laptop:/media/PackBell_Linux/overo-oe/mjpg-streamer/uvc-streamer$ make


Build mjpg-streamer

paul@paul-laptop:/media/PackBell_Linux/overo-oe/mjpg-streamer/mjpg-streamer$ make

copy to target

scp uvc_stream  @auto3:
scp *.so start.sh mjpg_streamer @auto3:mjpg-streamer
scp -r www @auto3:mjpg-streamer

start streaming

Log in

ssh auto3

Look around :

root@overo:/home/paul# ls
capture.elf ffserver.conf mjpg-streamer overo_twist.elf uvc_stream

Go for it:

root@overo:/home/paul# ./uvc_stream 
Using V4L2 device.....: /dev/video0
Resolution............: 640 x 480
frames per second.....: 5
TCP port..............: 8080
motor control TCP port: 8081

root@overo:/home/paul# cd mjpg-streamer/

root@overo:/home/paul/mjpg-streamer# ./start.sh 
MJPG Streamer Version.: 2.0
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 5
 i: Format............: MJPEG
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled

watch stream

In chrome or vlc open http://auto3:8080

uvc_stream

Uvc stream.png

mjpg_streamer

Mjpg streamer.png

Coming soon

ffmpeg, mplayer, mencoder, vlc, gstreamer. what was library needed libav? installing with opkg "opkg install <name>", proxy setup in /etc/opkg/opkg.conf setting up x-forwarding over ssh tunnel?

TODO: opencv, libwebcam, mjpeg-client

ffserver/ffmpeg

Create /etc/ffserver.conf with

Port 8090 
# bind to all IPs aliased or not 
BindAddress 0.0.0.0 
# max number of simultaneous clients 
MaxClients 1000 
# max bandwidth per-client (kb/s) 
MaxBandwidth 10000 
# Suppress that if you want to launch ffserver as a daemon. 
NoDaemon 

<Feed feed1.ffm> 
File /tmp/feed1.ffm 
FileMaxSize 5M 
</Feed> 

# FLV output - good for streaming 
<Stream test.flv> 
# the source feed 
Feed feed1.ffm 
# the output stream format - FLV = FLash Video 
Format flv 
VideoCodec flv 
# this must match the ffmpeg -r argument 
VideoFrameRate 5 
# generally leave this is a large number 
VideoBufferSize 80000 
# another quality tweak 
VideoBitRate 200 
# quality ranges - 1-31 (1 = best, 31 = worst) 
VideoQMin 1 
VideoQMax 5 
VideoSize 320x240 
# this sets how many seconds in past to start 
PreRoll 0 
# wecams don't have audio 
Noaudio 
</Stream> 

# ASF output - for windows media player 
<Stream test.asf> 
# the source feed 
Feed feed1.ffm 
# the output stream format - ASF 
Format asf 
VideoCodec msmpeg4 
# this must match the ffmpeg -r argument 
VideoFrameRate 5 
# generally leave this is a large number 
VideoBufferSize 80000 
# another quality tweak 
VideoBitRate 200 
# quality ranges - 1-31 (1 = best, 31 = worst) 
VideoQMin 1 
VideoQMax 5 
VideoSize 320x240 
# this sets how many seconds in past to start 
PreRoll 0 
# wecams don't have audio 
Noaudio 
</Stream> 

At one console start ffserver then at another launch ffmpeg with the following :

ffmpeg -r 15 -s 320x240 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm

In IE or VLC on a remote computer open URL : mms://<IP_ADDRESS>:8090/feed1.asf or mms://<IP_ADDRESS>:8090/feed1.flv


 ffmpeg -f video4linux2 -s 752x480 -r 15 -i /dev/video0 -f avi -vcodec copy -y filename2.avi

VLC

This hasn't been done on overo yet. There's a recipe, but haven't compiled successfully yet....

on server run:

vlc -I dummy -v --noaudio --ttl 12 v4l2:///dev/video0:width=640:height=480 --sout '#transcode{vcodec=mp4v,vb=800}:standard{access=http,mux=ogg,url=bill.recherche.enac.fr:8080}'

client:

cvlc http://bill:8080

Other recommendations :

Streaming
^^^^^^^^^^
1. Mplayer

Through serial console:
mplayer tv:// -tv driver=v4l2:device=/dev/video0:width=480:height=272 -vo fbdev -v -brightness 0 -contrast 0 -saturation 0

Using xterm:
mplayer tv:// -tv driver=v4l2:device=/dev/video0:width=320:height=240

2. Gstreamer
gst-launch -v v4l2src ! 'video/x-raw-yuv,format=(fourcc)UYVY,width=320,height=240,framerate=(fraction)15/1' ! fakesink

3. Mjpeg-streamer
mjpg_streamer -i "input_uvc.so -f 30 -r 640x480 -y -d /dev/video0" -o "output_http.so -p 8090 -w www"

Recording
^^^^^^^^^^
1. Menucoder
mencoder tv:// -tv driver=v4l2:width=480:height=272:device=/dev/video0 -nosound -fps 10 -ovc lavc -o filename.avi

2. FFMPEG
ffmpeg -f video4linux2 -s 320x240 -r 30000/1001 -i /dev/video0 -f avi -vcodec mjpeg -s 320x240 -r 30000/1001 -y filename.avi


Notes

  • bill is the name of my laptop on the network
  • auto3 is the name of the overo device on the network
  • overo-oe installation directories change so absolute paths in patch and on this page are sure to break at some point, use as reference :-)