Guide to Setup Streaming Web Cam on the Yun

After updating my Yun to the latest version (1.41) and reinstalling mjpeg streamer, i get a lot of image tearing in my stream.

anyone else expirienced these issues? with the stock Yun firmware i had no issues at all, it worked perfectly. But after update its realy bad. Kinda makes the webcam stream useless because the image is constanlty flashing in strange colors or showing half images.

I am having the exact same problem here with 1.4.2 and other updates. Does anyone know how I can return to the factory (1.0) firmware? I tried pressing the WLAN RST button for more than 30 seconds but it didn't help... Thanks!

Hello, I have website on a remote server, does anyone have any idea how to pass the stream http://arduino.local:8080/?action=stream to the server?

I had an idea of iframe but still the video is streaming on arduino not on my server.

First I want to thank OP, Vadorequest and the guy who compiled the MJPEG streamer for Yun. I've been able to stream with my Microsoft Life HD 3000 with yun and using firefox as browser.

muhkuh: After updating my Yun to the latest version (1.41) and reinstalling mjpeg streamer, i get a lot of image tearing in my stream.

anyone else expirienced these issues? with the stock Yun firmware i had no issues at all, it worked perfectly. But after update its realy bad. Kinda makes the webcam stream useless because the image is constanlty flashing in strange colors or showing half images.

I have yun with OpenWRT-Yun 1.0 (never upgraded, but doesn't have Linino I'm sure about that) I downloaded the last version of mjpeg and I've this same problem, image tearing and strange color each 5-10 sec, not permanent though. I noticed that the problem was reduced the lower the resolution is, I used 320x240 5 fps and the tearing was almost gone. Anyway, if it is a wifi problem I can't do much :sweat_smile:

Stream high resolution video:

  1. Cpu utilization use command "top" to comfirm http://forum.arduino.cc/index.php?topic=188690.msg1711487#msg1711487 offload compression to GPU, multiple core GPUs even better.

  2. Memory usage use command "free" to comfirm expand the RAM.

  3. Network bandwidth requirement http://forum.arduino.cc/index.php?topic=188690.msg1711526#msg1711526 H.264/MPEG-4 has compression-ratios of 1:50 M-JPEG has compression-ratios of 1:20 by use H.264/MPEG-4 will reduce bandwidth requirement by 250%.

If you need stream 3D Blu-ray all of above have to address.

Plan B:

Offload all the heavy lift to Webcam which has H.264 built in

Logitech H.264 Webcam Technology

http://www.logitech.com/en-us/webcam-communications/articles/11612

Thank you to the OP and the other contributors to this thread and project :slight_smile: - I’ve been able to get the webcam stream up and have tinkered with starting and stopping the stream various ways (via a shell script, a php call to the script, a spacebrew button). It’s very encouraging and points to some interesting projects to try.

I’m wondering what options there might be for making the stream secure. The password to mjpg_streamer (with the -c option) is sent in plain text, and it hasn’t worked for me to access the stream via https. Looking on the web seems to indicate https is not how things are done with streaming, anyhow.

Is a non-linked, non-obvious page for the stream, linked to from another https page that uses basic authentication the simplest way to have some modest security?

  • Doug

Plan A:

Turn on firewall of Yun, use IP authentication only allow authorized IP address ( Machine ) to access.

Thanks for the idea of the firewall, @sonnyyu - I hadn't thought of that.

Can I set the Yun's firewall via Luci to allow an outside web browser on a phone (the IP address will change, but the phone's MAC address is fixed and known) to connect to port 8080 on the Yun while blocking other MAC addresses?

I tried setting up a port forward for the phone's MAC address, but I am doing something incorrectly:

on Luci: Network > Firewall > Traffic Rules > Open ports on router with the settings:

Any TCP, UDP From any host in any zone with source port 8765 and MAC xx:xx:xx:xx:xx:4A (MAC address I'm testing from) To any host, port 8080 in any zone

(I'm new to the Yun's firewall and don't know anything yet about MAC addresses and the nuances of port forwarding - I am not even sure I have it turned on ::) , though I tried iptables -L and got a lot of output.)

Thanks for ideas/guidance - this can go into a new thread if it would be better...

Doug

I'm making progress!

Instead of:

trippingly: I tried setting up a port forward for the phone's MAC address, but I am doing something incorrectly:

on Luci: Network > Firewall > Traffic Rules > Open ports on router with the settings:

Any TCP, UDP From any host in any zone with source port 8765 and MAC xx:xx:xx:xx:xx:4A (MAC address I'm testing from) To any host, port 8080 in any zone

I tried on Luci: Network > Firewall > Port Forwards

IPv4-TCP From any host in lan with source MAC xx:xx:xx:xx:xx:4A (MAC address I'm testing from) Via IP 10.0.1.8 at port 8765 (the Yun is at 10.0.1.8 ) any host, port 8080 in lan

This enabled the browser with the listed MAC to connect to the port 8080 stream via http://10.0.1.8:8765/stream.html

At this point, other browsers could still connect at http://10.0.1.8:8080, but when I added another rule (not sure if this is the best way to do this):

IPv4-TCP From any host in lan Via any router IP at port 8080 any host, port 8888 in lan (8888 is just a random port I'm not using)

...then attempts to connect on 8080 fail as intended.

I'll see if I can now 1) set my home router (a Time Capsule, which can't handle this MAC filtering) to port forward 8080 to the Yun on 10.0.1.8, 2) put the MAC addresses of the devices I want to authorize into similar rules in the Yun firewall, and 3) modify the rules to work with connections coming from outside my home network.

Edit: Close, but no cigar...

The cable internet gateway puts its own MAC address on the traffic, so I won't be able to use the phone's MAC address this way. Back to the drawing board (on to the next drawing board)... :grinning:

stefanos90: Hello, I have website on a remote server, does anyone have any idea how to pass the stream http://arduino.local:8080/?action=stream to the server?

I had an idea of iframe but still the video is streaming on arduino not on my server.

Hello there,

Have any of you found a solution to this problem: inserting the webcam stream with its specific port in a random port 80 http page?

Cheers

@bobli, this question has been answer multiple times. Please start a new thread.

TIA Jesse

At the moment I have only found a way to display a custom web page I've created from Yun and how to display a webcam stream on a a web page with an adress like blablabla.local:8080

I still can't find a way to display the webcam stream on my custom webpage, I mean I don't need to have 2 adresses for my project.

Any help?

Sample html page from blablabla.local:8080:

<html>
  <head>
    <title>MJPG-Streamer - Stream Example</title>
  </head>
  <body>
    <center>
      <img src="/?action=stream" />
    </center>
  </body>
</html>
nano /www/video.html
<html>
  <head>
    <title>MJPG-Streamer - Stream Example</title>
  </head>
  <body>
    <center>
      <img src="http://192.168.0.102:8080/?action=stream" />
    </center>
  </body>
</html>

Use browser view video page at:

http://192.168.0.102/video.html

It looks clear and simple, I look forward to testing it tonight!!!

I already had the sample page from mpg-streamer, I was just missing this part “” to put in my own page…

Is there a way to add a button on a webpage to start/stop the stream? Like a reset button... I want to send a command line to the yun via browser but I have no idea how to do it...

nano /www/cgi-bin/mjpg-restart.cgi
#!/bin/ash
/etc/init.d/mjpg-streamer restart
echo "Content-type: text/html"
echo ""
echo "Restart..."
exit 0
chmod 755 /www/cgi-bin/mjpg-restart.cgi

http://arduino.local/cgi-bin/mjpg-restart.cgi

nano /www/webcam/stream.html
...
<form action="http://arduino.local/cgi-bin/mjpg-restart.cgi" method="get" target="_blank">
    <input type="submit" value="Restart">
</form>
...

http://arduino.local:8080/stream.html

substitute start,stop for restart if you needed.

When I try to submit over the html page I get the following: "Access to this resource is forbidden"

EDIT: Forgot to "chmod 755 ..." I'ts working fine now. Thanks!

EDIT2: Is there a way to autoclose the new tab that opens with that form?

Solved it with this :slight_smile:

nano /www/webcam/stream.html
...
<form action="http://arduino/cgi-bin/mjpg-restart.cgi" method="get" target="_self">
    <input type="submit" value="Restart">
</form>
...

and

nano /www/cgi-bin/mjpg-restart.cgi
#!/bin/ash
echo "Content-type: text/html"
echo
echo "<html><head><meta http-equiv='refresh' content='0;URL=http://arduino:8081/index.html' /><title>Stream Restart</title></head><body><center><p>Restart in 10 seconds...</center></body></html>"

/etc/init.d/mjpg-streamer stop
sleep 10s; /etc/init.d/mjpg-streamer start
exit 0

Stops the stream for 10 seconds and redirects to the stream page after the stream “break”

I want this because I’m worried about overheating the Arduino Yun. Anyone having problem keeping the board running 24/7? I’m waiting for a Keyes L9110 Fan Module to help cooling the precessor…

Hasr:
Solved it with this :slight_smile:

nano /www/webcam/stream.html
...
    ... > ``` > > > > and > > > > ``` > nano /www/cgi-bin/mjpg-restart.cgi > ``` > > > > > > ``` > #!/bin/ash echo "Content-type: text/html" echo echo "Stream Restart

Restart in 10 seconds..."

/etc/init.d/mjpg-streamer stop
sleep 10s; /etc/init.d/mjpg-streamer start
exit 0




Stops the stream for 10 seconds and redirects to the stream page after the stream "break"
...

Great work.