背景
单位需要在基于H5的管理软件中接入安防音视频,直接在H5上实现不容易,只能选择第三方开发包,本文对klporxy使用做个简单记录。
开发包的获取
开发包为共享软件,2路视频是免费的,需要的可以点击下载。或者邮件联系5614280@qq.com,也可以私信我。
软件的安装配置
该软件无安装包,解压即可使用,软件里有使用说明以及HTTP-API开发手册和实例,上手比较容易。
下图是我配置的海康威视服务器,只需要输入IP地址,端口号,用户名密码即可!
1.添加设备点击添加设备按钮,根据实际情况填写设备IP地址、端口号、用户名密码等,TOKEN作为访问标志,请填写一个唯一的方便记忆的非中文编码,建议开发者使用。
2.作为开发者建议都与定义设备,当然您也可以不定义任何设备,这需要你在使用相关接口中指定正确的设备IP地址、端口号、用户名、密码等。
3.如果作为GB28181下级这里必须正确填写配置设备,SIPID 必须为20位编号,请按28181规范填写,如果不作为GB28181下级使用,可以不填写,下面举例说明SIPID。
SIPID:34020000001320000012 前10位(3402000000)为SIP域,通常由上级指定,不能随意填写。11-13位为设备类型,132为网络摄像机,本软件要求固定为132,14为网络类型一般填0,15-20为编号,本软件内不能重复。
下图为海康设备实例,其中设备信息为: 192.168.1.73为海康IP摄像机。对应的端口为8000 设备用户名为admin 密码为admin12345,Token为自定义唯一不重复ID,实例中设置为hik173.为了开发简单,请务必定义token,如果未定义,软件将自动匹配IP地址或者设备名,但这并不能保证唯一性。
在HTML5(H5)中使用
HTML就相对容易了,本文引用开发包例子。直接上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flv 播放示例</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="sourcesNode"></div>
<div>
<p style="color:#808080">请输入你的FLV播放地址: </p>
<p style="color:#808080">示例:http://127.0.0.1:8081/cgi-bin/live.flv?devicetoken=ehome&devicechannel=0&streamtype=0</p>
</div>
<div>
<p>
<input id="stream_url" size="100" value= "http://127.0.0.1:8081/cgi-bin/live.flv?devicetoken=ehome&devicechannel=0&streamtype=0">
</p>
<p>
<button id="set_new_url">播放</button>
</p>
</div>
<div>
<video id="videoElement" controls autoplay muted style="width:640px;height:360px;background-color:Black;">Your browser is too old which doesn't support HTML5 video.</video>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.5.0/flv.js"></script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
var urlButton = document.getElementById("set_new_url");
var urlEdit = document.getElementById("stream_url");
var player = document.getElementById("videoElement");
//player.controls = false; //显示控件按钮
var flvPlayer = null;
urlButton.onclick = ()=>
{
setPlayerSource(urlEdit.value);
};
$(document).ready(function()
{
//setPlayerSource(urlEdit.value);
});
window.onload = function ()
{
//setPlayerSource(urlEdit.value);
}
function setPlayerSource(newSource)
{
flvPlayer = flvjs.createPlayer
(
{
type: 'flv',
isLive: true,
url: newSource,
enableWorker: false,
fixAudioTimestampGap: false,
autoCleanupSourceBuffer:true
},
{
azyLoadMaxDuration: 30*60,
isLive: true,
lazyLoad:false,
controls:true//显示控件按钮
}
);
if (flvPlayer)
{
flvPlayer.on(flvjs.Events.ERROR, (errType, errDetail) =>
{
// errType是 NetworkError时,对应errDetail有:Exception、HttpStatusCodeInvalid、ConnectingTimeout、EarlyEof、UnrecoverableEarlyEof
// errType是 MediaError时,对应errDetail是MediaMSEError
alert(errDetail);
});
flvPlayer.on(flvjs.Events.LOADING_COMPLETE, () =>
{
//alert('MEDIA_SOURCE_CLOSE'); //直播中途断开
});
flvPlayer.on(flvjs.Events.METADATA_ARRIVED, () =>
{
});
}
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load(); //加载
flvPlayer.play();
/*
player = new FlvPlayer
(
{
id: 'test_video',
isLive: true,
url: newSource,
playsinline: true,
autoplay: true,
controls:false,//显示控件按钮
preloadTime: 1,
minCachedTime: 5,
cors: true,
height: 360,
width: 640
},
{
enableWorker: true,
azyLoadMaxDuration: 2,
seekType: 'range',
fixAudioTimestampGap: false,
}
);
*/
setInterval(() =>
{
if (!player.buffered.length)
{
return;
}
let end = player.buffered.end(0);
let diff = end - player.currentTime;
if (diff >= 3)
{
player.currentTime = end - 1;
}
},
5 * 1000);
}
</script>
</body>
</html>
输入地址后,就可以看到监控画面了。