跳到主要內容

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智能眼罩 觸...
2019全台精選3+個燈會,週邊順遊景點懶人包 2019燈會要去哪裡看?全台精選3+個燈會介紹、週邊順遊景點整理給你。 東港小鎮燈區-鮪鮪到來。 2019-02-15 微笑台灣編輯室 全台灣 各縣市政府 1435 延伸閱讀 ►  元宵節不只看燈會!全台元宵祭典精選、順遊景點整理 [屏東]2019台灣燈會在屏東 2/9-3/3:屏東市 · 東港鎮 · 大鵬灣國家風景區 台灣燈會自1990年起開始辦理,至2019年邁入第30週年,也是首次在屏東舉辦,屏東縣政府與交通部觀光局導入創新、科技元素,融入在地特色文化設計,在東港大鵬灣國家風景區打造廣闊的海洋灣域燈區,東港鎮結合漁港及宗教文化的小鎮燈區,及屏東市綿延近5公里長的綵燈節河岸燈區,讓屏東成為璀璨的光之南國,迎向國際。 詳細介紹 ►  2019台灣燈會在屏東 第一次移師國境之南 大鵬灣燈區 主題樂園式燈會也是主燈所在區,區內分為農業海洋燈區、客家燈區、原住民燈區、綠能環保燈區、藝術燈區、宗教燈區、競賽花燈及317個社區關懷據點手作的萬歲光廊等。 客家燈籠隧道。 平日:周一~周四14:00-22:30(熄燈) 假日:周五~周六10:00-22:30(熄燈)  屏東燈區: 萬年溪畔 屏東綵燈節藍區-生態。 綵燈節--每日17:30 - 22:00(熄燈) 勝利星村--平日:14:00 - 22:30(熄燈) 假日:10:00 - 22:30(熄燈) 燈區以「彩虹」為主題,沿著蜿蜒市區的萬年溪打造近5公里長的光之流域,50組水上、音樂及互動科技等不同類型燈飾,呈現紅色熱情、橙色活力、黃色甜美、綠色雄偉、藍色壯闊、靛色神祕、紫色華麗等屏東風情。勝利星村另有懷舊風的燈飾,及屏東公園聖誕節燈飾。 東港小鎮燈區 東港小鎮燈區-鮪鮪到來。 小鎮燈區以海的屏東為主題,用漁港風情及宗教文化內涵規劃4個主題區,分別為張燈結綵趣、東津好風情、神遊幸福海、延平老街區。每日17:00~22:30(熄燈) 以上台灣燈會資料來源: 2019台灣燈會官網 、 i屏東~愛屏東 。 >> 順遊行程 小吃旅行-東港小鎮 東港小吃和東港人一樣,熱情澎湃...

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

完形心理學!?讓我們了解“介面設計師”為什麼這樣設計 — 說服客戶與老闆、跟工程師溝通、強化設計概念的有感心理學 — 情況 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)雖然功能各不相同,但由於它們在視覺上顏色、大小、排列上的相似性,用戶會將它們視認為...