2013-10-01T05:45:43Z
How to build and run MJPG-Streamer on the Raspberry Pi
It's been a while since I wrote the article on streaming video from the Raspberry Pi using MJPG-Streamer. Since I published that article I have received several comments and questions regarding issues building MJPG-Streamer, so in this short post I'm giving you revised build instructions.
1. Install build dependencies
The following command installs the three libraries that MJPG-Streamer uses:
$ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
2. Add missing videodev.h
The videodev.h header file that MJPG-Streamer needs has been replaced with a videodev2.h. To make MJPG-Streamer happy you have to create a symbolic link:
$ sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
3. Download MJPG-Streamer
The source code for MJPG-Streamer is available at sourceforge.net, but it is tricky to find the direct download link:
$ wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
Note that sometimes the link above fails to work. If that is the case, you can also download from your web browser by opening this page: http://sourceforge.net/p/mjpg-streamer/code/HEAD/tarball.
4. Unzip the MJPG-Streamer source code
The source code download is a compressed zip file. Put the file in your home directory (or a temporary folder, if you prefer) and run the following to extract the files:
$ unzip mjpg-streamer-code-182.zip
5. Build MJPG-Streamer
MJPG-Streamer comes with several plugins, but only a couple of them are needed to stream video according to the method I explained in my previous article. The command below only builds what's needed:
$ cd mjpg-streamer-code-182/mjpg-streamer
$ make mjpg_streamer input_file.so output_http.so
6. Install MJPG-Streamer
I did not discuss installation in the previous article, and that confused many readers. The following commands copy all the needed files into system directories:
$ sudo cp mjpg_streamer /usr/local/bin
$ sudo cp output_http.so input_file.so /usr/local/lib/
$ sudo cp -R www /usr/local/www
7. Start the camera
We are almost there. Now it is time to start the camera module:
$ mkdir /tmp/stream
$ raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
Of course, you can use different options to raspistill if you like.
8. Start MJPG-Streamer
The camera is now writing images, so all that is left is to start MJPG-Streamer:
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -w /usr/local/www"
9. Watch the Stream!
Now you can connect with your web browser and watch the stream live. If you want to watch from within the same Raspberry Pi you can enter http://localhost:8080 in the browser's address bar. If you want to watch from another computer in your network use http://<IP-address>:8080.
10. Cleanup
After you verify that everything is working you can remove the source code:
$ cd ../../
$ rm -rf mjpg-streamer-182
Conclusion
I hope these instructions clarify all the aspects of setting up the streaming server on the Pi. If you still have questions let me know below!
Miguel


#101 Adrian said 2014-01-31T13:31:20Z
#102 Daddadhad said 2014-02-04T01:43:24Z
#103 Miguel Grinberg said 2014-02-05T05:42:24Z
#104 Villumsen said 2014-02-05T19:27:19Z
#105 Calum Bushell said 2014-02-06T21:12:37Z
#106 Miguel Grinberg said 2014-02-08T05:45:46Z
#107 Alston said 2014-02-10T09:16:47Z
#108 Miguel Grinberg said 2014-02-10T17:30:05Z
#109 Alston said 2014-02-12T01:19:11Z
#110 Jos M. Alonso said 2014-02-20T13:07:05Z
#111 utasek said 2014-02-21T13:21:19Z
#112 Bilal said 2014-02-25T01:27:58Z
#113 Miguel Grinberg said 2014-02-25T07:38:21Z
#114 vibhav said 2014-02-27T10:59:13Z
#115 Leprich said 2014-03-01T08:33:50Z
#116 Andre T said 2014-03-03T19:31:58Z
#117 Miguel Grinberg said 2014-03-04T05:55:06Z
#118 Raspi-Confused said 2014-03-05T23:11:57Z
#119 David said 2014-03-09T19:43:15Z
#120 Geof said 2014-03-15T10:02:49Z
#121 Geof said 2014-03-16T09:49:57Z
#122 Bilal said 2014-03-17T20:49:50Z
#123 Bilal said 2014-03-18T00:37:27Z
#124 Ulrich Rohrwasser said 2014-03-19T15:24:52Z
#125 Miguel Grinberg said 2014-03-19T15:43:41Z