To Stream Webcam to an Apache Server on the Raspberry Pi you need to have already:
After you have done this you are ready to start.
First Step – Install FFmpeg
You should download, compile and install FFmpeg, a cross platform solution for streaming and recording including the codec you will need.
Remove any existing installation:
apt-get remove ffmpeg
Get the git installation link from the FFmpeg git page here.
I have included the link in the following commands:
git clone git://source.ffmpeg.org/ffmpeg.git
Once this has completed, move into the directory and compile the source.
cd ffmpeg
./configure
make
make install
This can (and probably will) take hours on the Raspberry Pi so I recommend you put this in a script and run it over night or go watch a film.
Step 2 – Install crtmpserver
This can be done with apt-get.
apt-get install crtmpserver
but you will need to do some configuration, edit the following file:
/etc/crtmpserver/applications/flvplayback.lua
Add/change the following setings:
validateHandshake=false,
keyframeSeek=false,
seekGranularity=0.1
clientSideBuffer=30
And finally restart the service:
service crtmpserver restart
Final Step – Web setup
Install jwplayer on your web server. You can get this at: http://www.longtailvideo.com/, once you have downloaded it, extract the files in:
/var/www/jwplayer
Create an example webpage to display your webcam stream:
<html> <head> <title>Raspberry Pi Webcam Streaming</title> </head> <body> <div id="video-jwplayer_wrapper" style="position: relative; display: block; width: 960px; height: 540px;"> <object type="application/x-shockwave-flash" data="/jwplayer/jwplayer.flash.swf" width="100%" height="100%" bgcolor="#000000" id="video-jwplayer" name="video-jwplayer" tabindex="0"> <param name="allowfullscreen" value="true"> <param name="allowscriptaccess" value="always"> <param name="seamlesstabbing" value="true"> <param name="wmode" value="opaque"> </object> <div id="video-jwplayer_aspect" style="display: none;"></div> <div id="video-jwplayer_jwpsrv" style="position: absolute; top: 0px; z-index: 10;"></div> </div> <script src="/jwplayer/jwplayer.js"></script> <script type="text/javascript"> jwplayer('video-jwplayer').setup({ flashplayer:"/jwplayer/jwplayer.flash.swf" , file:"rtmp://" + window.location.hostname + "/flvplayback/flv:myStream.flv" , autoStart: true , rtmp:{ bufferlength:0.1 } , deliveryType: "streaming" , width: 960 , height: 540 , player: { modes: { linear: { controls:{ stream:{ manage:false , enabled: false } } } } } , shows: { streamTimer: { enabled: true , tickRate: 100 } } }); </script> </body> </html>
Now check it works! Make sure you connect to it locally and not remotely. (192.168.* address).
To start the stream run the following command:
raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -vf -o - | ffmpeg -i - -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:6666
You should see a video stream similar to the image below:

(Yes, the webcam is pointed at the wall).
If you want to make this webcam stream accessible remotely, you need to port forward port 1935 to the raspberry pi.
Voila, now you can Stream Webcam to Apache Server on the Raspberry Pi.
For more information and references:
Hello,
What command do you use to start streaming?
Seems I missed this, use the following command:
raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -vf -o – | ffmpeg -i – -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:6666
So far I got it working with the replied command, but the stream I see is turned. I expect that you have to correct this in the index file but I cannot get it. Could you help on this?
When you say turned, do you mean at 90 degree’s etc, inverted?
I get a connection refused error. I assume I must have something wrong but dont know where! I tried running raspivid with sudo, but didnt make any difference… anyone got any ideas?
raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -vf -o – | ffmpeg -i – -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:6666
ffmpeg version N-59216-g5eeeb4a Copyright (c) 2000-2013 the FFmpeg developers
built on Dec 20 2013 00:57:42 with gcc 4.6 (Debian 4.6.3-14+rpi1)
configuration:
libavutil 52. 58.101 / 52. 58.101
libavcodec 55. 45.102 / 55. 45.102
libavformat 55. 22.100 / 55. 22.100
libavdevice 55. 5.102 / 55. 5.102
libavfilter 4. 0.100 / 4. 0.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
Input #0, h264, from ‘pipe:’:
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (High), yuv420p, 960×540, 25 fps, 25 tbr, 1200k tbn, 50 tbc
[tcp @ 0x176ca30] Connection to tcp://0.0.0.0:6666 failed: Connection refused
tcp://0.0.0.0:6666: Connection refused
Sounds like crtmpserver is not running. Try running “service crtmpserver status” and “service crtmpserver restart”.
Dear,
I followed all the steps in your tutorial, but when I go to the website page I don’t get a video stream in my firefox browser. When I look via a HDMI monitor a video stream is active.
I don’t know what I’m doing wrong, can you help me?
Bart
Do you have flash installed on the browser?
Thank you! It works very well (I tried from Safari).
I see that I can’t stream to IOS devices. Have you tried to do it? Any hint?
I believe the IOS devices don’t support flash, you would have to use jwplayer in html 5 mode.
Hey you’re install and config guide is pretty good. Thanks
But I have an understanding problem. You wrote ” If you want to make this webcam stream accessible remotely, you need to port forward port 1935 to the raspberry pi.”
How does it work? If I try to connect remotely to my pi. I see nothing… But i want to see the Stream on the Webpage.
Currently I see the stream on the HDMI Port from Pi.
Thank you for you’re kind help
best regard’s
Yes, for the remote access, I meant from anywhere on the internet. If you just want to access it on your home network, follow the guide and then browse to your raspberry pi’s IP address in a web browser:
E.g. http://192.168.1.68/
If you want to access it from anywhere, you must work out your IP (http://www.whatismyip.com/) and then allow port forwarding.
Hope this helps!
Excellent article. Two remarks so far.
1) I am using nginx, and – out of the box – the jwplayer stuff should be placed in /usr/share/nginx/www.
2) Running OK on Chrome 31. My Firefox 26 does not like the trailing slash in . After I’ve removed it, it worked fine. Another peculiarity of nginx??
Hi, thanks so much for your tutorial, it is exactly what I was looking for, I have everything running fine, but I want to remote stream the video and I know how to port forward. I’ve my raspberry server running on port 81 (192.168.x.x:81) and I tried to access it after port forward port 81 to my external ip(189.214.x.x), at my Windows PC and it worked fine and I didn’t change the 1935 port but my PC are in the same LAN, so somehow it allows the streaming. And then I tried with an external network and it didn’t work :\ so I can’t figure it out where should I put the 1935. At the tcp:/0.0.0.0 command or where should it put it??
Thank you for your time!
Best Regards!
Try port forwarding 6666,
It should be at: tcp://0.0.0.0:.
Nick
I’m just trying your tutorial. But I got a error(./configure: 2931: ./configure: cannot create config. log: Permission denied). I have been googling it, but I didn’t find anything. Please comment the solution. anyway, thanks for your tutorial.
Have you tried elevating your permissions with sudo for the configure? Looks like a permissions issue on the folder.
how can i add my microphone to this?
You probably need to get hold of a USB audio adapter, its not something I have tried
.
Look here for compatibility list: http://elinux.org/RPi_VerifiedPeripherals#USB_Sound_Cards
Something like this might work: http://www.adafruit.com/products/1475
How do i do this with a webcam camera via USB?