公司新裝了不少海康威視攝像頭,通過NVR連接到了螢石云,由于螢石云免費版限制了單個攝像頭的并發訪問數(每個攝像頭同時只允許4個用戶進行查看實時視頻),但是又不想付費購買企業版,于是著手思考如何解決這個問題,
解決方案思考
需求
需求很明確,每個攝像頭需要支持多用戶同時播放實時視頻(并發可能大于四)
方案
1、通過海康提供的SDK,在攝像頭掛載的局域網內直接獲取視頻流推送到自己的服務器進行直播,繞過螢石云,
2、將自有服務器作為唯一訪問客戶端,拉取視頻流再進行分發,
方案一需要比較大的開發量,并且攝像頭已經部署好,網路環境未知,還需要在本地準備一臺服務端主機用來推流,且由于用戶訪問視頻可能是隨時的,需要24h不間斷推送,對服務器壓力也比較大,方案二更簡單,因此選擇第二種作為實作,
實作

方案驗證
本機使用
wsl2ubuntu16.04進行測驗
1、安裝 ffmpeg
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg
2、原始碼編譯 nginx,并添加 nginx-rtmp 插件
# 安裝gcc g++的依賴庫
sudo apt-get install build-essential
sudo apt-get install libtool
#安裝pcre依賴庫
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
#安裝zlib依賴庫
sudo apt-get install zlib1g-dev
#安裝SSL依賴庫
sudo apt-get install openssl libssl-dev
#安裝nginx,先安裝nginx再添加流媒體插件編譯
wget http://nginx.org/download/nginx-1.9.8.tar.gz
tar -zxvf nginx-1.9.8.tar.gz
cd nginx-1.9.8
./configure --prefix=/usr/local/nginx
#編譯、安裝:
make
sudo make install
#下載rtmp流媒體插件
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
#用unzip解壓,如果沒有unzip,請安裝 sudo apt-get install unzip
unzip master.zip
#解壓好插件后再回到nginx原始碼的解壓目錄里面,將插件配置進去,注意 nginx-rtmp-module-master的相對路徑!!!!
./configure --with-http_ssl_module --add-module=./nginx-rtmp-module-master
#再次編譯安裝
make
sudo make install
#將nginx注冊到服務
sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults
配置 nginx 流媒體服務
編輯組態檔
vim /usr/local/nginx/conf/nginx.conf
加入一段配置,wq保存
#配置到根節點下,不要包含在http中
rtmp {
server {
listen 1935; #流媒體服務埠
chunk_size 4096;
#直播流后綴起始路徑 rtmp://x.x.x.x:1935/live/****
application live {
live on;
#record off;
}
}
}
重啟nginx即可
2、通過螢石云獲取攝像頭 RTMP 臨時授權鏈接

3、進行流轉播
ffmpeg -i "rtmp://rtmp01open.ys7.com:1935/v3/openlive/J17103688_2_1?expire=1671692735&id=3961899259904&t=82f2e5cfce043534db5165ca1d5f58498781f148fb2c4fb249f&ev=100" -vcodec copy -acodec copy -f flv rtmp://localhost:1935/live/test
-i 引數后面為螢石云流地址

4、使用 VLC 播放工具測驗

重復打開多次 VLC ,按此步驟播放視頻流即可

可以看到,視頻訪問并未受并發限制😄
功能完善
1、當前驗證了方案的可行性,由于螢石云流鏈接會失效,所以要配合開放平臺的API進行定期更新拉流服務,
2、視頻流在自建服務器上的推流地址也不應設定為固定,推流服務的推送路徑應當定期更新,例如.. /live/{攝像頭編號}/{token} ,token設定時效性防止視頻流被惡意扒取,
3、為避免長期占用服務器下行帶寬,應當處理每個攝像頭在無任何用戶查看視頻時切斷于螢石云的視頻流連接,可以在前端通過websocket或者http 輪詢 來監測用戶視頻訪問,一定程度上也安全性也提高了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/395090.html
標籤:其他
