Lisa Logitech Camera

From PaparazziUAV
Revision as of 18:41, 9 March 2011 by Esden (talk | contribs)
Jump to navigation Jump to search

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

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 :-)