關於攝像頭推流拉流的一些內容
近期在做用Django顯示攝像頭實時畫面的需求,本文就大致聊一聊最近搜集到的相關資料。
基本上原理就是有一個中轉服務器(比如Nginx),FFMPEGD推流,html拉流。那Django干啥?控制頁面拉流。或者說python干啥?拉流。
還有一些是用opencv做推流的,但那些基本是在做視覺處理的或者畫面處理的時候才用的,跟我的情況不符,我的情況是:延遲做到最低、最低...
我的環境:海康威視攝像頭,Django后端做
一些關鍵內容:RTMP 、RTSP、hls 、FFMPEG 、nginx-rtmp服務器
目前總結了4種實現方案供參考
實現方案之:NGINX + FFMEPG
-
優點:
方案多,網上教程一大堆
-
缺點:
延遲較高
-
延遲情況:
5、6秒。延遲優化原理參考下方鏈接
-
基本原理:
FFMEPG把RTSP格式的視頻流推到NGINX,NGINX再進行流的處理、轉換。nginx做RTMP服務端
參考鏈接:視頻流多分辨率的處理https://www.jibing57.com/2020/08/01/advanced-configure-of-nginx-rtmp/
實現方案之:NGINX + FFMEPG + opencv
-
優點:
能對畫面做一些處理
單用opencv處理時延遲基本在1、2秒內
-
缺點:
用管道傳輸流,不容易實現。
-
延遲情況:
因報錯問題,無結果
-
基本原理:
opencv讀取攝像頭,處理后用FFMPEG推流到Nginx服務器。django的html拉流。nginx做RTMP服務端
-
參考鏈接:
CSDN一大堆
實現方案之:opencv +Django
-
優點:
實現過程簡單
-
缺點:
無法關閉
-
延遲情況:
在1,2秒內
-
基本原理:
opencv獲取每一幀,然后通過流的HTTP流的方式傳到前端。
-
參考鏈接:
實現方案之:jsmpeg + FFMEPG + http中繼
-
優點:
不需要RTMP服務器(Nginx),解析靠js插件,RTSP流還是通過FFMEPG推,推到websocket頻道
-
缺點:
Django貌似無法做中繼,暫時只能用ginrtsp做中繼。可以嘗試用opencv在django內部推到ws頻道
-
延遲情況:
1,2秒
-
基本原理:
不做RTSP轉RTMP,通過ws將流發布,前端通過jsmpeg解析。
-
參考鏈接:
JSMPEG:https://github.com/phoboslab/jsmpeg