背景介紹:
嘗試用樹莓派板實現遠程視頻監控,so在淘寶上入手一個樹莓派攝像頭,它是通過CSI接口連接到樹莓派板上,之前我的樹莓派使用的是CentOS系統,在網上找了很久,沒有發現能在CentOS系統下的攝像頭驅動(如果各位看客有相關資料或信息,歡迎聯繫本人),沒辦法重新刷了樹莓派官方Debian系統,它自帶樹莓派攝像頭的管理工具—raspistill。
爲了實現樹莓派+攝像頭組合完成遠程監控的目標,我們需要完成的任務包括:
1>. 視頻流實時傳輸(本教程使用web端實現視頻傳輸)
2>. 內網穿透(如果你有公網IP則可忽略此步驟)
如果你的樹莓派只運行視頻監控的端口服務,那麼完成以上兩個步驟就OK了。
如果你的樹莓派還運行其它端口服務,如nginx,tomcat,pythonweb等等,你需要再多進行一項任務3:
3>. 樹莓派端口代理轉發,配置nginx.conf(本教程使用nginx爲例)
一、視頻流實時傳輸
淘寶賣家提供了一個相對簡單的解決方案:下載一個master.zip的包在我們的樹莓派上編譯並運行它,就可以通過web瀏覽器方便的使用攝像頭,運行效果如下圖,可以看出使用了名爲“MJPG-Streamer”的web開源項目:
這套解決方案包含了web前端的與後臺服務端,我們能使用瀏覽器實時查看攝像頭的視頻/圖像信息,但遺憾的是後臺服務端沒辦法修改,所以不能進行如修改端口號的操作(這個系統設定端口號爲8080)。
二、內網穿透
要想實現遠程監控,你的樹莓派必須有一個公網IP。什麼是公網IP這裏就不進行科普了,請自行百度。一般來說,我們現在的家庭網絡是沒有公網IP的,所以需要進行內網穿透的一個操作。實現內網穿透有很多方法,這裏給推薦兩種方法,一種簡易流,一種技術流。
方法1: (簡易流看這裏↓↓↓)
推薦使用花生殼服務(不是打廣告啊,只是個人使用推薦o(╥﹏╥)o)
① 首先你需要在樹莓派上安裝花生殼服務。
很讚的是,花生殼提供了樹莓派版的花生殼程序,大家可參考官方教程安裝。給出鏈接:
官方下載
官方教程
安裝完成後你會看到類似如下輸出:
請使用這個SN作爲賬號名登錄“http://b.oray.com”,默認密碼是“admin”
②登錄以後:
a. 會贈送你一個免費的殼域名
b. 然後再花6塊錢買一個內網穿透的試用服務(只能用一年),內網映射配置如下。
這種方法唯一的一個優點就是超級省心,特別適合小白以及不想折騰的People,缺點也很明顯,試用版的內網穿透服務帶寬只有1M,我自己在用的時候沒辦法流暢的查看視頻監控。
應用名稱和域名自己填,映射類型選擇HTTP80,外網端口不能選,默認80(花錢可以改外網端口),內網主機填"127.0.0.1",內網端口填“8080”(請忽略圖片上的80,爲什麼是8080請回看第一節描述),然後點擊開啓映射服務。到這裏內網穿透就完成了。
確保以上操作都已順利完成,你可以開始使用樹莓派的遠程監控服務了。
這裏的圖像是倒的是因爲我攝像頭就是倒過來的,各位看客不用擔心自己需要倒立去看o(╯□╰)o
方法2: (技術流看這裏↓↓↓)
看我之前的博客 內網穿透 - SSH反向代理 ,有不懂的可以給我留言。
另引用外鏈 frp內網穿透教程
三、樹莓派端口代理轉發
首先聲明,這裏的介紹我就不像前面那樣寫的詳細了,重點在於Nginx的配置。
如果你之前採用 frp內網穿透教程 配置內網穿透,而不是使用花生殼,那麼你不會面臨我下面描述的問題,但你仍然需要對Nginx進行配置,這是很有必要的。
這裏解釋一下爲什麼會需要對Nginx進行配置:在我的樹莓派上還運行了很多端口服務,如Tomcat,Pyserver,MJPG-Streamer,甚至Nginx本身也佔用端口,但是如果我們像前面步驟使用了花生殼免費穿透服務,外網訪問端口固定爲80端口,內網映射端口也設置爲80,但此時內網中有端口號爲8080的MPG-Streamer服務不能被外網訪問,因爲它沒有被映射到外網,與此同時其他端口服務也是不能被訪問的。這裏我們可以利用Nginx對所有的端口服務進行一個代理轉發。
重點是利用Nginx的proxy_pass變量參數:
proxy_pass http://localhost:8080/; # Nginx代理轉發請求到 MJPG-Streamer 服務端的8080端口
在樹莓派上安裝Nginx,修改nginx.conf如下部分:
#設定虛擬主機配置
server {
#偵聽80端口
listen 80;
# 主機域名
server_name xkxzw.iask.in localhost;
#定義服務器的默認網站根目錄位置
root /var/www/html/;
#定義首頁索引文件的名稱
index index.php index.html index.htm;
#設定本虛擬主機的訪問日誌
# access_log logs/nginx.access.log main;
#默認請求
location / {
# 代理轉發請求到Nginx,我這裏設置和內網
proxy_pass http://localhost:80/;
#定義首頁索引文件的名稱
index index.php index.html index.htm;
}
location ^~ /camera/ {
# 代理轉發請求到 MJPG-Streamer 服務端,這裏是重點
proxy_pass http://localhost:8080/;
root /home/pi/mjpg-streamer-master/mjpg-streamer-experimental/www/;
index index.html index.htm;
}
#設定查看Nginx狀態的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file /etc/nginx/htpasswd;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
在配置nginx過程中踩了很多坑,大部分都可以參考如下:
Nginx常見錯誤及處理方法 https://www.cnblogs.com/liyongsan/p/6795851.html
Nginx配置auth_basic, auth_basic_user_file https://www.jianshu.com/p/1c0691c9ad3c
nginx的location配置詳解 https://blog.csdn.net/tjcyjd/article/details/50897959#