大華監控

[TOC]

一、為什么重構?

  • 原調用方法過于復雜,使用者需要花時間閱讀代碼、關注插件內部實現,所以需要重構,讓使用者無需關心內部邏輯,輕松實現我們所支持的視頻相關業務。

二、設計構思

將 <u>videoPlayer.js</u>(與C++服務進行交互的方法庫) 和 <u>DHPlayer.vue</u>打成一個DHPlayer.js,非Vue環境下也可使用。兩種引用方式如下:

原生h5下——引入后可直接使用VideoPlayer對象:(Vue下也可如此引用,全局vue對象會自動注冊DHPlayer組件)

    <script src="/static/DHPlayer.js"></script>

Vue下:

    import DHPlayer from 'static/DHPlayer.js'
    Vue.use(DHPlayer)
  • videoPlayer.js

基本功能:

1、窗口初始化:websocket嘗試連接服務,包含成功回調與失敗回調
- 連接規則:目前是對localhost:8000-8004端口進行遍歷連接,如果全都不通就請求打開DHPlayer服務,無論點擊打開還是取消(<font color="red">web無法捕獲</font>),在此過程中都會進行重連,直到連通或1分鐘以后自動刪除重連定時器。
- 成功回調:觸發成功回調,并創建窗口(根據是否需要創建窗口參數,默認需要創建)
- 失敗回調:連續1分鐘無法連接,觸發失敗回調。
- 注:如果創建多個視頻窗口,將會在同一個websocket連接中進行通信,該websocket連接將會作為全局對象綁定到windows上。

2、創建/銷毀窗口、窗口顯示/隱藏、窗口滾動

> 這些基本功能都會獨立的方法,可直接使用,但是一般使用場景(如下)都在內部進行封裝。
  • 監聽頁面刷新、銷毀事件,通知服務銷毀窗口。
  • 監聽頁面顯隱事件(切換瀏覽器頁簽、最小化瀏覽器等會觸發該事件),通知服務顯隱窗口。
  • 監聽瀏覽器窗口的放大縮小、滾動事件,會重新獲取傳入掛載窗口dom節點的位置,通知服務調整窗口位置。

3、錄像回放、實時預覽

  • 可通過在初始化的時候傳定義好的type類型,內部根據type來調用發送對應的消息。

4、每個功能都會提供對應的回調方法

傳參params:

為了使用的方便,決定在初始化的時候可以直接傳入所有的參數,使用方法如下:

var oVideoControl = new VideoPlayer({
       videoId: 'DHVideoPlayer',
       createWindow: true,
       connectSuccess: function () {
           console.log('ws初始化成功')
       },
       connectClose: function () {
           oVideoControl = null
       },
       creatSuccess(e) {
           console.log(e) //窗口創建成功
       }
   })

傳參API

參數名 類型 必傳 作用 默認值
videoId String 用戶定義的 video 容器的 id 屬性值
createWindow Boolean 是否需要初始化創建窗口 true
windowType Number 窗口類型:0-普通預覽,1-普通回放(含分屏、不含時間軸),2-預覽(不含分屏),3-錄像回放(不含分屏、含時間軸)
mount Boolean 掛載方式(true:掛載為瀏覽器子窗口;false:獨立窗口) true
chooseWindow Number 服務支持的選擇窗口功能,不知道什么應用場景,先加上
num Number 子窗口數量,可選值:1、4、9、16 1
showBar Boolean 是否顯示下方控制欄。 true: 顯示, false:隱藏 true
shieldClass Array 遮擋的元素類名數組
windowParams Array 窗口的對象數組 []
> path String 視頻url
> snum Number 子窗口編號(從0開始)
> type Number 1-實時視頻,2-錄像回放
> startTime Number 當前播放的錄像開始時間的時間戳
> endTime Number 當前播放的錄像結束
> redirect Boolean 是否重定向
> records Array 傳值具體需參考大華播放控件開發手冊
> 其他傳值 -- -- 傳值具體需參考大華播放控件開發手冊
callback -------- -- 回調方法對象(e: 統一返回ws響應消息體;若沒有觸發回調,可能是插件不支持該功能)
connectSuccess function(e) websocket初始化連接成功回調
connectError function(e) websocket初始化連接失敗后的回調
creatSuccess function(e) 創建窗口成功回調
creatError function(e) 創建窗口失敗回調
destroySuccess function(e) 銷毀成功回調
destroyError function(e) 銷毀失敗回調
playbackSuccess function(e) 錄像回放成功
playbackError function(e) 錄像回放失敗(返回值沒有 snum,所以不知道哪個失敗,需要c++服務加上)
realTimeSuccess function(e) 實時預覽成功
realTimeError function(e) 實時預覽失敗(返回值沒有 snum,多窗口所以不知道哪個失敗,需要c++服務加上)
chooseWindowSuccess function(e) 選擇窗口成功
chooseWindowError function(e) 選擇窗口失敗
showWindowSuccess function(e) 顯示窗口成功
showWindowError function(e) 顯示窗口失敗
hideWindowSuccess function(e) 隱藏窗口成功
hideWindowError function(e) 隱藏窗口失敗

VideoPlayer對象內置屬性

參數名 類型(option: 具體參照大華播放控件開發手冊) 作用
windowState string 視頻大窗口狀態(wsPending-websocket正在連接,wsFail-websocket連接失敗, wsSuccess-websocket連接成功, createPending-正在創建窗口, createFail-窗口創建失敗, createSuccess-窗口創建成功)
getWindowState Function(callback) 獲取所有小窗口的狀態,callback返回ws返回值
getVersion Function(callback) 獲取DHPlayer服務版本,callback返回ws返回值
create Function(option, callback) 創建視頻窗口
chooseWindow Function(option, callback) 選擇視頻窗口
realmonitor Function(option, callback) 播放實時視頻
playback Function(option, callback) 播放錄像回放
resizePage Function(option, callback) 重置窗口位置、大小
showControlBar Function(show) 顯示下方控制欄, show: true-顯示,false-隱藏
hide Function(callback) 隱藏窗口
show Function(callback) 顯示窗口
WindowShield Function(option: {shieldClass: ['視頻被遮擋的dom節點class']}, callback) 視頻被遮擋處理
destroy Function(callback) 銷毀窗口
  • DHPlayer.vue

基于 videoPlayer.js封裝的的VUE組件,包含 <u>DOM節點</u> 和 <u>基礎方法</u>(目前包含初始化窗口后播放視頻),以及獲取token、對視頻路徑進行token拼接等業務處理。

包含業務

  1. 判斷本地視頻插件是否安裝(websocket連接1分鐘后還未連接成功,提示安裝插件)
  2. 比較本地插件與線上的版本,如果本地插件版本低于線上插件,提示更新(在websocket連接成功后拿到版本號,再調brm的獲取插件信息的接口獲取版本號進行比較)【該提示基于ICC框架實現,下載地址為服務器上固定路徑,UI基于ant-design-vue,第三方可自行進行修改。】
  3. websocket連接成功以后,創建窗口,子窗口數量根據通道個數或者rtsp地址數量進行計算,1(length = 1)、4(1 < length <= 4)、9(4 < length <= 9)、 16(9 < length <= 16)
  4. 窗口創建成功以后,
    • 如果有rtsp路徑傳入(pathList),根據type去調用對應的錄像回放/實時預覽方法加載視頻;
    • 如果沒有路徑,需要傳入videoPlayList/realTimeList,根據type并通過傳入的streamType(不傳按照路數判斷,超過4路自動默認輔碼流,不超過默認是主碼流)、channelId 獲取對應的視頻流地址,如果流地址端口為9090端口時,需要重定向(redirect=true),不需要加 token,其他端口均不需要重定向,從獲取rtsp接口中拿到token并拼上。然后再根據type去調用對應的方法加載視頻。

調用方法

<template>
    <DHPlayer :type="1" :windowType="0" :realTimeList="realTimeList"/>
</template>
<script>
    import DHPlayer from 'DHPlayer'
    export default {
        data() {
            return {
                realTimeList: [
                    {streamType: 1, channelId: '111$120'},
                    {streamType: 2, channelId: '111$121'}
                ]
            }
        }
    }
</script>

傳參

參數名 類型 必傳 作用 默認值
videoId String dom節點ID
type Number 1-實時視頻,2-錄像回放
num Number 子窗口個數 1
connectTime Number 嘗試連接事件,默認60s,一定時間連接斷開,并彈出下載插件提示 60
outContent Object 當前窗口所處可視窗口的位置,比如iframe外部距離瀏覽器的位置 {}
videoPlayList Array 包含多個錄像回放對象 []
> ssId String SS服務ID
> endTime String 結束時間(時間戳:單位秒)
> startTime String 開始時間(時間戳:單位秒)
> fileName String 錄像文件信息
> diskId String 磁盤ID
> recordSource Number 錄像來源:1=全部,2=設備,3=中心
> recordType Number 錄像類型:0=全部,1=手動錄像,2=報警錄像,3=動態監測,4=視頻丟失,5=視頻遮擋,6=定時錄像,7=全天候錄像,8=文件錄像轉換
> channelId String 通道編碼
> playbackMode Number 回放模式:0=普通回放,1=實時回放
> streamId String 碼流處理
> 一些其他參數(待收集) String wiki無
realTimeList Array 包含多個實時預覽對象 []
> streamType Number 碼流類型:1=主碼流, 2=輔碼流 不傳按照路數判斷,超過4路自動默認輔碼流,不超過默認是主碼流
> channelId String 通道編碼
> dataType Number 視頻類型:1=視頻, 2=音頻, 3=音視頻 1
pathList Array 錄像回放/實時視頻路徑列表(實時視頻-string數組['rtsp://xx/'];錄像回放-對象數組[{path:'rtsp://xx/'}],錄像回放傳參如下)
> path String 視頻路徑
> endTime String 錄像回放結束時間
> startTime String 錄像回放結束時間
> recordType String 錄像文件類型 0 所有,1 手動錄像,2 報警錄像,3 動態檢測,4 視頻丟失,5 視頻遮擋,6 定時錄像,7 全天候錄像,8 文件錄像轉換,9 普通錄像,11 智能錄像,25 卡號錄像,10 報警開始(匹配協議棧里的定義 10~300 -m -f -c 等特殊報警),1000 智能 報 警 結 束 ( 匹 配 協 議 棧 里 的 定 義300~1000 智能報警)
> recordName String 錄像文件名
> fileLength String 單位為 kb
windowType Number 窗口類型:0-普通預覽,1-普通回放(含分屏、不含時間軸),2-預覽(不含分屏),3-錄像回放(不含分屏、含時間軸)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容