【樹莓派】樹莓派遠程視頻監控與Nginx代理配置

背景介紹:
嘗試用樹莓派板實現遠程視頻監控,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#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章