序文
この章では、再生および分割画面デモ用の公式 h5player ツールのみを提供します。
もちろん、この章は、すでに Hikvision ビデオ ドッキングに連絡している開発者も対象としています。
準備
ビデオデモ
公式文書
API https://open.hikvision.com/docs/docId?productId=5c67f20bb254d61550c2f63e&version=%2F658c4efa2595486c9ff140401628ff41&curNodeId=39e50b5c0aa84b47995614c9a102b75f
公式ツール
https://open.hikvision.com/download/5c67f20bb254d61550c2f63e?type=10&id=53a1d2fe6a6f4b34b7aaccd37cd9c73d
オープンソースツール
Dplayer: https://dplayer.diygod.dev/、これは多くの形式をサポートしますが、MSE サポートが必要です
開発を開始する
コードは比較的単純です。直接実行して、最初にコードを確認してください。
<template>
<div id="app">
<el-container>
<el-row>
<el-input v-model="code" placeholder="输入监控点编码" @change="onChangeCode"></el-input>
<el-button @click="onSubmit">默认预览</el-button>
<el-button @click="onTwoSubmit(2)">4分屏</el-button>
<el-button @click="onTwoSubmit(4)">16分屏</el-button>
<el-button @click="onTwoSubmit(8)">64分屏</el-button>
</el-row>
<el-row>
<div id="player" style="width: 800px;height: 800px;"></div>
</el-row>
</el-container>
</div>
</template>
// 请求工具
import http from '@/http/http2.js'
// 官方提供的播放工具
import '@/static/util/h5player.min.js'
export default {
name: 'hik',
data () {
return {
// 监控点编码
code: '',
// 播放器对象
player: null
}
},
mounted () {
// 页面加载初始化
this.initPlayer()
},
methods: {
/**
* 初始化播放器
*/
initPlayer () {
this.player = new window.JSPlugin({
// 需要英文字母开头 必填
szId: 'player',
// 必填,引用H5player.min.js的js相对路径
szBasePath: './static/util',
// 当容器div#play_window有固定宽高时,可不传iWidth和iHeight,窗口大小将自适应容器宽高
iWidth: 600,
iHeight: 400,
// 分屏播放,默认最大分屏4*4
iMaxSplit: 16,
iCurrentSplit: 1,
// 样式
oStyle: {
border: '#343434',
borderSelect: '#FFCC00',
background: '#000'
}
})
},
/**
* 获取取流连接
* @returns {*}
*/
getPreviewUrl () {
let tempCode = '61077001001320000018'
if (this.code) {
tempCode = this.code
}
const param = {
'cameraIndexCode': tempCode,
'streamType': 0,
'protocol': 'ws',
'transmode': 1
}
// 这里
return http.post('/ay-video-manage/video/monitor/getRealTimeMonitorVideo', param)
},
/**
* 播放
*/
play (index) {
const _this = this
this.getPreviewUrl().then(res => {
if (res.status !== 200) {
_this.$message.warning('获取视频流失败!')
return
}
let preUrl = res.data.data.url
const param = {
playURL: preUrl,
// 1:高级模式 0:普通模式,高级模式支持所有
mode: 1
}
// 索引默认0
if (!index) {
index = 0
}
_this.player.JS_Play(preUrl, param, index).then(() => {
// 播放成功回调
console.log('播放成功')
},
(err) => {
console.log('播放失败')
})
})
},
/**
* 监控点更新
* @param data
*/
onChangeCode (data) {
this.code = data
this.play()
},
/**
* 默认预览
*/
onSubmit () {
this.play()
},
/**
* 分屏,这里我太懒了,就循环了一个视频流
*/
onTwoSubmit (num) {
const _this = this
// 这里的分屏,是以列来算的,如果这里参数2,那么就是横竖两列,就是4格
this.player.JS_ArrangeWindow(num).then(
() => {
// 循环取流
for (let i = 0; i < num * num; i++) {
_this.play(i)
}
},
e => {
console.error(e) }
)
}
}
}
ここで使用するjsはHaikang Toolsからダウンロードしたものです
ダウンロード後、/bin
ディレクトリ内のファイルをプロジェクトにコピーしますstatic
。このツールのドキュメント(API)は上位層のドキュメントの下にあります
効果
問題点
- 公式のjsファイルは複数あり、初期化時や再生時に他のjsファイルも呼び出されるのでパスの問題があり、全て同じディレクトリ
js
下に置き、さらにその下にもディレクトリがありますが、 1 つだけが配置されているため、使用時に他の JS を呼び出すことができます。src
static
src
static
h5player.min.js
h5player.min.js
- プレーヤーを初期化するとき、 js の相対パス属性を設定する必要があります
szBasePath
。すべての js はこのパス プレフィックスを追加します。 - Haikang ビデオのほとんどは
h264
コード化されていますが、ビデオコードも存在し、再生できないビデオコードをh265
使用する場合は、公式のものを使用する方法を見つける必要があります。hls
h265
h5player
- rtspとrtmpの方が面倒なので考えたくない
次に、これはビデオストリームの ws ストリームのサポートです
フロントエンドは素人なので、何か間違っているところがあればご指摘ください