安防音视频(rtsp,onvif,gb28181)的HTML5(H5)解决方案(直播,回放,PTZ)

背景

单位需要在基于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>

输入地址后,就可以看到监控画面了。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
RTSP(Real Time Streaming Protocol)是一种用于在计算机网络上实时传输音频和视频的协议。它提供了一种标准的方法,使得用户可以实时地接收和播放音视频数据流。GB28181是中国国家标准,旨在规范监控设备之间的实时视频流传输和控制。它基于RTSP协议,并额外定义了一些特定的数据结构和通信方式,以满足中国国内监控设备市场的需要。 而ONVIF(Open Network Video Interface Forum)是一个开放的行业组织,旨在促进网络视频设备的互操作性。ONVIF定义了一系列标准和协议,使不同厂商生产的监控设备能够互相通信和集成。ONVIF协议包括了设备发现、实时流传输、设备控制等功能,使得用户能够通过统一的接口管理和控制不同品牌的摄像头、录像机等设备。 RTSPGB28181以及ONVIF这三个概念其实是密切相关的。GB28181可以看作是在RTSP协议基础上进行了定制和扩展,以满足中国国内监控设备市场的需求。而ONVIF则是一个更加广泛的标准,旨在解决全球范围内的网络视频设备互操作性问题。ONVIF协议也是基于RTSP协议进行开发的,可以与支持RTSP协议的设备进行通信。 综上所述,RTSPGB28181和ONVIF都是与实时视频流传输和设备互操作性相关的概念。RTSP是一种协议,用于实时传输音视频数据;GB28181是中国国内的监控设备标准,基于RTSP协议进行了定制;而ONVIF则是一个全球范围的标准,使得不同品牌的监控设备能够互相通信和集成。这些标准和协议的发展和应用,为监控设备的智能化和网络化提供了方便和可能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KL_FLSHMAN

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值