跳到主要內容

host camera module mjpeg output on remote server?


https://www.raspberrypi.org/forums/viewtopic.php?t=85768

Hello,

Is it possible to "forward" the mjpeg output stream to a remote server, and then view the stream by visiting that server? For instance, ff the rPi is behind a wifi/firewall that won't enable me to browse to it from an external browser, is it possible to somehow netcat that mjpeg file (or some other means) to an external location of my choosing, and be able to view it that way?

I've browsed around these forums, and the googles, but haven't seen any examples of this setup. Thanks for any ideas!

Greg
User avatar
kusti8

Re: host camera module mjpeg output on remote server?

You could just setup port forwarding and view it directly on the pi to reduce latency and the use for another server.
There are 10 types of people: those who understand binary and those who don't.
ohm3141

Re: host camera module mjpeg output on remote server?

kusti8 wrote:You could just setup port forwarding and view it directly on the pi to reduce latency and the use for another server.
In this example, I don't have access to the (open Wifi) router. How can I "push" the mjpeg feed to another server (e.g., my website)?

Greg
User avatar
kusti8

Re: host camera module mjpeg output on remote server?

I don't understand what you mean. Where is the website server. If it is your local computer, run a Ethernet cable from that to the raspberry pi and google how to bridge a network. If the website is hosted by a service, there is no way without a network.
There are 10 types of people: those who understand binary and those who don't.
ohm3141

Re: host camera module mjpeg output on remote server?

kusti8 wrote:I don't understand what you mean. Where is the website server. If it is your local computer, run a Ethernet cable from that to the raspberry pi and google how to bridge a network. If the website is hosted by a service, there is no way without a network.
The Pi is going to be located in a public place, associated to a public wifi that I don't have control over, viewing a TV screen that I'd want to stream back to me, say, sitting at home. So the server could be my home computer, or a hosted web server owned by me. I'm just wondering if there's a way to forward, or access remotely, the mjpeg stream that's created locally on the Pi, keeping in mind I can't port forward on the wifi router the Pi is attached to.

It'd be awesome if the output location of the mjpeg-streamer program could be, instead of "/var/www", "user@www.xxx.yyy.zzz:/var/www". But if that's not possible, some kind of script or program that could constantly re-stream the mjpeg file to another server of my choosing. Does that make sense? I'm trying to find examples of people doing something like this but I'm not coming up with anything.

Greg
ghans

Re: host camera module mjpeg output on remote server?

Ahh , the wonders of NATing .

Well this is a though one. The scalable solution is to set up
a VPN server and have the Pi act as client. With OpenVPN
you can mitigate the "impact" of firewalls and NAT easily
(at least that's what i heard).

The hacky solution is to use reverse SSH tunneling.
First get grips on using mjpeg-streamer. It is a popular piece
of software , and the foundations V4L2 driver has
made it quite easy to use it with the official camera .
See here for a good guide :
http://www.raspberrypi.org/forums/viewt ... 43&t=83570

Report your progress after trying that , while i look for
my notes on SSH tunneling ...

ghans
• Don't like the board ? Missing features ? Change to the prosilver theme ! You can find it in your settings.
• Don't like to search the forum BEFORE posting 'cos it's useless ? Try googling : yoursearchtermshere site:raspberrypi.org
philthy07

Re: host camera module mjpeg output on remote server?

There is a post on how to forward a stream to a FTP server. Won't be real time, but if you started viewing the file @ 1 fps less than was being saved it should flow pretty well.

https://medium.com/@Cvrsor/how-to-make- ... 5a2d61da3d
ohm3141

Re: host camera module mjpeg output on remote server?

ghans wrote:The hacky solution is to use reverse SSH tunneling.
Ghans,

I've successfully setup an automatic reverse SSH connection with the Pi in the past. If I get that up and running again, do you think I'd be able to port forward http requests from my local computer across the ssh tunnel? So when the user browses to ":80/var/www/video_feed.mjpeg" it actually sends them down the ssh tunnel to ":80/var/www/video_feed.mjpeg"?

Thanks for the suggestion philthy07, but the lag with the motion/ftp setup will be too great for my application.

Greg
ghans

Re: host camera module mjpeg output on remote server?

Yes , but then the stream is only accessible for people in
your LAN. Except you make your SSH server listen on
all interfaces , enable portforwarding and run a DynDNS
client in parallel.

ghans
• Don't like the board ? Missing features ? Change to the prosilver theme ! You can find it in your settings.
• Don't like to search the forum BEFORE posting 'cos it's useless ? Try googling : yoursearchtermshere site:raspberrypi.org
User avatar
kusti8

Re: host camera module mjpeg output on remote server?

ghans wrote:Yes , but then the stream is only accessible for people in
your LAN. Except you make your SSH server listen on
all interfaces , enable portforwarding and run a DynDNS
client in parallel.

ghans

Above it says that he does not have access to the network and cannot configure port forwarding since it is public.
There are 10 types of people: those who understand binary and those who don't.
ohm3141

Re: host camera module mjpeg output on remote server?

ghans wrote:The hacky solution is to use reverse SSH tunneling.
SSH tunneling was the appropriate solution - thanks ghans. For those that are interested, here's what I had to do. When the pi starts up I automatically start a reverse SSH connection back to a computer I control like so:

ssh -fN -p 22222 -R \*:9000:localhost:22 @

This sets up a listening port (9000) on my computer that enables me to login to the pi when it's behind its wifi/firewall. Then I initiate a port forward command using ssh on the computer I control like so:

ssh -L \*:8080:localhost:80 @localhost -p 9000

Now, when I browse localhost:8080 on my computer, it forwards all requests over port 9000 to the pi, essentially serving up the webpage that the Pi is hosting (an mjpeg feed from the camera). I also have my home router setup to forward external 8080 requests to my computer that has the port forward running, so I can access the pi's webcam externally.

Greg
ghans

Re: host camera module mjpeg output on remote server?

Check out autossh to keep your connection up all the time:
http://www.harding.motd.ca/autossh/

ghans
• Don't like the board ? Missing features ? Change to the prosilver theme ! You can find it in your settings.
• Don't like to search the forum BEFORE posting 'cos it's useless ? Try googling : yoursearchtermshere site:raspberrypi.org
bobdxcool

Re: host camera module mjpeg output on remote server?

ohm3141 wrote:
ghans wrote:The hacky solution is to use reverse SSH tunneling.
SSH tunneling was the appropriate solution - thanks ghans. For those that are interested, here's what I had to do. When the pi starts up I automatically start a reverse SSH connection back to a computer I control like so:

ssh -fN -p 22222 -R \*:9000:localhost:22 @

This sets up a listening port (9000) on my computer that enables me to login to the pi when it's behind its wifi/firewall. Then I initiate a port forward command using ssh on the computer I control like so:

ssh -L \*:8080:localhost:80 @localhost -p 9000

Now, when I browse localhost:8080 on my computer, it forwards all requests over port 9000 to the pi, essentially serving up the webpage that the Pi is hosting (an mjpeg feed from the camera). I also have my home router setup to forward external 8080 requests to my computer that has the port forward running, so I can access the pi's webcam externally.

Greg
Hi

I was using motion to setup a live webcam feed from the pi 3. I am using a 3g dongle for internet. I want to stream the live video onto my web server with a static IP. I have a frontend UI running on my webserver and I wish to view the live video stream , when I click a certain Tab on the UI. I was going through your method of using a reverse ssh tunnel to view the live stream. So when the pi boots up, I send the command
Code: Select all
ssh -fN -p 22222 -R \*:9000:localhost:22 @
And when I want to view the live stream from the pi and click on the particular tab on the UI of my web server, I make the server send out the command in the background:
Code: Select all
ssh -L \*:8080:localhost:80 @localhost -p 9000

After the command is sent ,the particular tab (video stream tab) on the UI is directed to the URL, "localhost:8080".

Is this correct ? Is there anything else that would be required for me to do ?
RpiName

Re: host camera module mjpeg output on remote server?

ohm3141 wrote:Is it possible to "forward" the mjpeg output stream to a remote server, and then view the stream by visiting that server? For instance, ff the rPi is behind a wifi/firewall that won't enable me to browse to it from an external browser, is it possible to somehow netcat that mjpeg file (or some other means) to an external location of my choosing, and be able to view it that way?
See this:
http://www.linux-projects.org/uv4l/tuto ... to-camera/
bobdxcool

Re: host camera module mjpeg output on remote server?

RpiName wrote:
ohm3141 wrote:Is it possible to "forward" the mjpeg output stream to a remote server, and then view the stream by visiting that server? For instance, ff the rPi is behind a wifi/firewall that won't enable me to browse to it from an external browser, is it possible to somehow netcat that mjpeg file (or some other means) to an external location of my choosing, and be able to view it that way?
See this:
http://www.linux-projects.org/uv4l/tuto ... to-camera/
Thanks. I was looking online regarding using uv4l for streaming. It does stream the video with good quality. But again, I have to enter the raspberry pi IP address again to view the stream and so the stream can only be viewed locally. My question is how do I make it stream to my server ?
RpiName

Re: host camera module mjpeg output on remote server?

bobdxcool wrote:Thanks. I was looking online regarding using uv4l for streaming. It does stream the video with good quality. But again, I have to enter the raspberry pi IP address again to view the stream and so the stream can only be viewed locally. My question is how do I make it stream to my server ?
I do not know what you exactly mean by "my server", but UV4L not only supports end-to-end audio/video streaming like you said, but, to put it simple, it can "push" audio/video streams from any supported device (or pseudo-device in your case) to a given Janus or Jitsi Meet server deployed on internet or other networks. In other words, you do not necessarily need to know the address of your Raspberry Pi. I suggest that you read through the tutorials at http://linux-projects.org for more informations.
bobdxcool

Re: host camera module mjpeg output on remote server?

RpiName wrote:
bobdxcool wrote:Thanks. I was looking online regarding using uv4l for streaming. It does stream the video with good quality. But again, I have to enter the raspberry pi IP address again to view the stream and so the stream can only be viewed locally. My question is how do I make it stream to my server ?
I do not know what you exactly mean by "my server", but UV4L not only supports end-to-end audio/video streaming like you said, but, to put it simple, it can "push" audio/video streams from any supported device (or pseudo-device in your case) to a given Janus or Jitsi Meet server deployed on internet or other networks. In other words, you do not necessarily need to know the address of your Raspberry Pi. I suggest that you read through the tutorials at http://linux-projects.org for more informations.
When I say my server, I mean I have rented a linux server on AWS with a static IP and have a UI running on the front end of this server.
bobdxcool

Re: host camera module mjpeg output on remote server?

ghans wrote:Check out autossh to keep your connection up all the time:
http://www.harding.motd.ca/autossh/

ghans
I have a server with public IP hosted by AWS. Now I have been able to connect to my PI (running wirh a 3g dongle) through the server using reverse ssh. I followed the guide, http://jerrygamblin.com/2016/04/23/pers ... spberrypi/

Now, there is a video stream running on my pi (motion) on the port 8081 (mypiipaddress:8081). Can you please help me on how to forward this stream onto my server with public IP so that I can view the stream on any browser by typing :portno
punktea

Re: host camera module mjpeg output on remote server?

If you re-phrase your question to "live video streaming on your website" or "embed live video in your webpage" you will get a lot more leads. Essentially you need to subscribe to a video broadcasting service (like ipcamlive.com) then make your Pi feed a video stream to that service then embed required HTML snippet on your website. To configure Pi to stream video, search for "raspberry pi rtsp streaming" and you will see various implementations. I also found this link in raspberry pi forum viewtopic.php?f=43&t=132503
thebeachtoday

Re: host camera module mjpeg output on remote server?

In case anyone needs this...two things: Cloud-based web server, I use AWS EC2, that runs a web server [Apache in my case] and has two virtual hosts - one for the web and one for the stream. These are very basic, do not overthink it. Remember to reload the webserver after creating the virtual host files:
Code: Select all

ServerName webserver.somedomain.com
ProxyPreserveHost On

Order allow,deny
Allow from all

ProxyPass / http://localhost:10100/
ProxyPassReverse / http://localhost:10100/


ServerName livestream.somedomain.com
ProxyPreserveHost On

Order allow,deny
Allow from all

ProxyPass / http://localhost:10101/
ProxyPassReverse / http://localhost:10101/
On the RPi, set up autossh. I run it as a service and use ExecStart to point to this simple bash script that sets up tunnels to both the web and live stream:
Code: Select all
/usr/bin/autossh -N -q -o "ExitOnForwardFailure yes" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -N -i /etc/cloud_server_secure_key_file.pem  ubuntu@ec2-XX-YY-ZZ-00.compute-1.amazonaws.com -g -R ec2-XX-YY-ZZ-00.compute-1.amazonaws.com:10100:127.0.0.1:80 &
/usr/bin/autossh -N -q -o "ExitOnForwardFailure yes" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -N -i /etc/cloud_server_secure_key_file.pem  ubuntu@ec2-XX-YY-ZZ-00.compute-1.amazonaws.com -g -R ec2-XX-YY-ZZ-00.compute-1.amazonaws.com:10101:127.0.0.1:8080 &
To call the stream in HTML file, use the tag with the src as livestream.somedomain.com/stream.

You will want to tinker with /etc/uv4l/uv4l-raspicam.conf to get the best settings - standard live stream settings, nothing specific to RPi or UV4L
User avatar
SlowBro

Re: host camera module mjpeg output on remote server?

A down side of SSH port forwarding: If someone were to hack the web server (not unthinkable) they would then be able to reach into your home network. They would have to then hack the IP camera but that's definitely not difficult these days; many of them don't get new firmwares. Typically they have a telnet port (!) open and are running Linux. Once in the IP camera they have your entire network.

I'm looking into RTMP myself, I think that's the best solution.
ghans

Re: host camera module mjpeg output on remote server?

Reverse SSH does not need port forwarding. That's why it is so attractive. Together with SSH keys it is raher secure.

ghans
• Don't like the board ? Missing features ? Change to the prosilver theme ! You can find it in your settings.
• Don't like to search the forum BEFORE posting 'cos it's useless ? Try googling : yoursearchtermshere site:raspberrypi.org
User avatar
SlowBro

Re: host camera module mjpeg output on remote server?

Yes but I am not talking about firewall port forwarding. I’m talking about what is being recommended here. If someone gains access into the server on the outside of your home network where reverse forwarding is being sent to, they can reach into your network via the reverse port, is my point. It just takes a vulnerability to your camera and they’re in.

This is more secure than firewall port forwarding, but not much.

留言

這個網誌中的熱門文章

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示 LIS   發表於 2017年11月16日 10:31   收藏此文 2017通訊大賽「聯發科技物聯網開發競賽」決賽於11月4日在台北文創大樓舉行,共有29個隊伍進入決賽,角逐最後的大獎,並於11月24日進行頒獎,現場會有全部進入決賽團隊的展示攤位,總計約為100個,各種創意作品琳琅滿目,非常值得一看,這次錯過就要等一年。 「聯發科技物聯網開發競賽」決賽持續一整天,每個團隊都有15分鐘面對評審團做簡報與展示,並接受評審們的詢問。在所有團隊完成簡報與展示後,主辦單位便統計所有評審的分數,並由評審們進行審慎的討論,決定冠亞季軍及其他各獎項得主,結果將於11月24日的「2017通訊大賽頒獎典禮暨成果展」現場公佈並頒獎。 在「2017通訊大賽頒獎典禮暨成果展」現場,所有入圍決賽的團隊會設置攤位,總計約為100個,展示他們辛苦研發並實作的作品,無論是想觀摩別人的成品、了解物聯網應用有那些新的創意、尋找投資標的、尋找人才、尋求合作機會或是單純有興趣,都很適合花點時間到現場看看。 頒獎典禮暨成果展資訊如下: 日期:2017年11月24日(星期五) 地點:中油大樓國光廳(台北市信義區松仁路3號) 我要報名參加「2017通訊大賽頒獎典禮暨成果展」>>> 在參加「2017通訊大賽頒獎典禮暨成果展」之前,可以先在本文觀看各團隊的作品介紹。 決賽29強團隊如下: 長者安全救星 可隨意描繪或書寫之電子筆記系統 微觀天下 體適能訓練管理裝置 肌少症之行走速率檢測系統 Sugar Robot 賽亞人的飛機維修輔助器 iTemp你的溫度個人化管家 語音行動冰箱 MR模擬飛行 智慧防盜自行車 跨平台X-Y視覺馬達控制 Ironmet 菸消雲散 無人小艇 (Mini-USV) 救OK-緊急救援小幫手 穿戴式長照輔助系統 應用於教育之模組機器人教具 這味兒很台味 Aquarium Hub 發展遲緩兒童之擴增實境學習系統 蚊房四寶 車輛相控陣列聲納環境偵測系統 戶外團隊運動管理裝置 懷舊治療數位桌曆 SeeM智能眼罩 觸...

完形心理學!?讓我們了解“介面設計師”為什麼這樣設計

完形心理學!?讓我們了解“介面設計師”為什麼這樣設計 — 說服客戶與老闆、跟工程師溝通、強化設計概念的有感心理學 — 情況 1 : 為何要留那麼多空白? 害我還要滾動滑鼠(掀桌) 情況 2 : 為什麼不能直接用一頁展現? 把客戶的需求塞滿不就完工啦! (無言) 情況 3: 這種設計好像不錯,但是為什麼要這樣做? (直覺大神告訴我這樣設計,但我說不出來為什麼..) 雖然世界上有許多 GUI 已經走得又長又遠又厲害,但別以為這種古代人對話不會出現,一直以來我們只是習慣這些 GUI 被如此呈現,但為何要這樣設計我們卻不一定知道。 由於 完形心理學 歸納出人類大腦認知之普遍性的規則,因此無論是不是 UI/UX 設計師都很適合閱讀本篇文章。但還是想特別強調,若任職於傳統科技公司,需要對上說服老闆,需要平行說服(資深)工程師,那請把它收進最愛;而習慣套用設計好的 UI 套件,但不知道為何這樣設計的 IT 工程師,也可以透過本文來強化自己的產品說服力。 那就開始吧~(擊掌) 完形心理學,又稱作格式塔(Gestalt)心理學,於二十世紀初由德國心理學家提出 — 用以說明人類大腦如何解釋肉眼所觀察到的事物,並轉化為我們所認知的物件。它可說是現代認知心理學的基礎,其貫徹的概念就是「整體大於個體的總合 “The whole is other than the sum of the parts.” —  Kurt Koffka」。 若深究完整的理論將會使本文變得非常的艱澀,因此筆者直接抽取個人認為與 UI 設計較為相關的 7 個原則(如下),並搭配實際案例做說明。有興趣了解全部理論的話可以另外 Google。 1. 相似性 (Similarity)  — 我們的大腦會把相似的事物看成一體 如果數個元素具有類似的尺寸、體積、顏色,使用者會自動為它們建立起關聯。這是因為我們的眼睛和大腦較容易將相似的事物組織在一起。如下圖所示,當一連串方塊和一連串的圓形並排時,我們會看成(a)一列方塊和兩列圓形(b)一排圓形和兩排三角形。 對應用到介面設計上,FB 每則文章下方的按鈕圖標(按讚 Like / 留言Comment / 分享 Share)雖然功能各不相同,但由於它們在視覺上顏色、大小、排列上的相似性,用戶會將它們視認為...
opencv4nodejs Asynchronous OpenCV 3.x Binding for node.js   122     2715     414   0   0 Author Contributors Repository https://github.com/justadudewhohacks/opencv4nodejs Wiki Page https://github.com/justadudewhohacks/opencv4nodejs/wiki Last Commit Mar. 8, 2019 Created Aug. 20, 2017 opencv4nodejs           By its nature, JavaScript lacks the performance to implement Computer Vision tasks efficiently. Therefore this package brings the performance of the native OpenCV library to your Node.js application. This project targets OpenCV 3 and provides an asynchronous as well as an synchronous API. The ultimate goal of this project is to provide a comprehensive collection of Node.js bindings to the API of OpenCV and the OpenCV-contrib modules. An overview of available bindings can be found in the  API Documentation . Furthermore, contribution is highly appreciated....