如何不花錢讓html5播放rtsp視頻流(第二彈)

前言

書接上文,上期教程咱們實現了利用FFmpeg將rtsp轉碼爲rtmp,nginx分發,在頁面上播放視頻。可是rtmp也有仍是具備缺陷的,比方說:前端

  • rtmp視屏流基於flash才能播放,因此你的電腦必須安裝flash,可是當前各大瀏覽器都準備再也不支持flash
  • rtmp視頻流播放仍是具備2-3秒的延遲實現,這對實時告警系統仍是不太理想。

那麼這期教程就搭建一個完整的視頻系統,順便優化一下這兩個問題。node

項目地址

github.com/JackFlyL/no…linux

項目需求

  • 多平臺IPC實時播放視頻
  • 歷史錄像播放
  • 雲臺控制
  • 輪詢轉碼任務防止視頻斷連
  • node.js實現接口交互

技術架構

上期已經說過怎麼經過腳本建立FFmpeg轉碼命令,這套方案仍是一樣的套路,但不是轉rtmp 經過nginx分發了。轉碼後經過node建立websocket鏈接,客戶端鏈接,動態展現視頻。

技能棧

前端:nginx

  • jsmpeg.js (鏈接wbesocket,繪製視頻圖像)

服務端(node):git

  • express(靜態服務,接口處理)
  • body-parser(處理接口接收數據)
  • node-rtsp-stream-jsmpeg (下發FFmpeg指令,建立websocke服務端)
  • child_process(啓動shell腳本指令)

其餘:github

  • FFmpeg(視頻流轉碼)
  • pm2(node進程守護)
  • 雲臺控制程序(經過視頻廠家提供的sdk二次開發,經過ajax調用)

服務端

  • 使用Node.js建立一個靜態服務器 web

  • 接收參數以及跨域處理 ajax

  • post接口案例 shell

  • Node.js調用shell腳本(child_process) express

  • 啓動轉碼建立websocket服務端

  • 定時查殺FFmpeg進程,websocket後重啓防止視頻斷開鏈接

客戶端

使用jsmpeg.js 指定websocket地址和dom就能夠愉快的播放啦!

pm2進程守護

  • linux安裝node和npm
  • npm install pm2 -g
  • pm2 start xx.js (啓動)
  • pm2 stop xx.js (中止)
  • pm2 list (服務列表)
  • pm2 log (日誌輸出)
  • pm2 monit (服務監控)

這大概就是經常使用的幾個命令,很是簡單好用的pm2 詳細的能夠去官網看看

看一下效果

總結

到此爲止,咱們就用node全棧實現了一個簡單工的是視頻平臺,優勢:

  • 同時預覽來自海康,大華等能生產rtsp流的IPC視頻和錄像。
  • 不須要安裝任何插件
  • 不依賴flash播放視頻
  • 視頻延時縮小到1s內

固然也有一些已知問題:

  • 主碼流轉碼時性能消耗巨大(每一個邏輯cpu佔用率達到120左右,因此儘可能使用子碼流轉碼,性能消耗大概是20)
  • 歷史視頻流轉碼只支持海康(部分nvr不支持歷史rtsp錄像輸出)
  • 前端jsmpeg 鏈接websocket 頻繁切換會致使內存溢出,刷新後正常顯示
  • 視頻沒有聲音

最後,若是項目需求 對錄像以及聲音沒有要求的話這套方案仍是很是不錯的,它具有很是良好的兼容性,移動端pc端基本都沒什麼限制,其次延遲也比較理想,畢竟通過轉碼處理,確定比不上源視頻,可是目前他的延遲時間應該算的上是理想的了。

相關文章
相關標籤/搜索