海康网页播放小程序(支持多路):基于跨浏览器的原生小程序系统-PluginOK(牛插)中间件( https://github.com/wangzuohuai/WebRunLocal )网络高级版开发,底层调用海康威视的原生SDK播放库实现播放。最低可用在Chrome 41、Firefox 50、Edge 80(Chromium内核)、360极速/安全、IE 8、Oprea 36、QQ、搜狗等浏览器,也兼容运行于这些浏览器的最新版本。 本小程序具有如下优点: 1)、全市场可实现较低延迟(200毫秒左右)的独家播放方案,主流版本的浏览器都支持; 2)、支持多路同时播放、支持抓图、录屏、高清视频或大屏播放性能好; 3)、底层播放技术采用海康原生SDK播放库(版权贵原厂家,最终用户需获得原厂使用授权),支持海康私有协议及RTSP流播放、云台控制、语音对讲等,支持H.264和H.265; 4)、播放小程序额外付费后可获得源代码进行定制开发; 5)、支持海康的摄像头和硬盘录像机等各系列的设备; 6)、支持本地MP4等视频文件循环播放。 1、牛插(PluginOK)中间件的安装: 1)、如果是exe的安装程序,请直接运行安装; 2)、如果是绿色版的程序包,请解压到磁盘某个目录后,双击“InstallWrl.bat”进行安装; 3)、安装完成时会启动PluginOK中间件服务,在安装目录下的Data子目录有ZbaService.txt日志文件输出运行情况。 2、海康网页播放小程序控制相关接口: 说明:以下功能请通过Web Socket连接PluginOK主服务(ws://localhost:83?sid=12345&flag=1)后可执行,如默认侦听端口不是83(关于如何配置侦听端口,请参考SDK包中的文档“PluginOK开发者手册.pdf”),请在连接地址中指定端口号进行连接。 HTTP网页在线测试:http://local.zorrosoft.com/HKFrame.html HTTPS网页在线测试:https://local.zorrosoft.com/HKFrame.html 如还需兼容IE浏览器使用,网络版测试网页中 的CLSID需要替换为:21ADE2E6-B4DD-4F3E-8BD5-9DDAD1785F3A 前端集成可参考以上测试网页进行,HTML网页中需要嵌入以下类似代码; A、标记小程序的显示位置和大小 .HKWebPlayer { margin: 20px 0 0 20px; width: 480px; height: 320px; border: 1px solid blue; } 或者 .HKWebPlayer { width: 480px; height: 320px; top: 20px; left: 20px; border: 1px solid blue; } 如果在网页Header区没有标记小程序初始显示位置和大小,请在启动小程序的JSON参数里,添加以下参数: "Left":20,"Top":20,"Width":480,"Height":320 B、网页中嵌入元素 支持IFrame的: 或者直接用 另外需要嵌入用到的JS脚本,脚本程序是完全开源的。 播放窗口选中状态时单击即可全屏显示,全屏显示状态通过ESC或Windows按键取消,全屏切换会发送JSON包的VLC_FullScreen通知。 1)、请求启动海康网页播放小程序: Type为浏览器类型,传0自动判断(前提是当前浏览器已启动并显示在最前端,Flag指定当前页加载时必须是0) 可强制指定浏览器类型Type(1代表IE 2代表Chrome 4代表Firefox 8代表Opera 16代表Edge(Chromium内核) 32代表360极速浏览器 33代表360安全浏览器 34代表360企业安全浏览器 50代表QQ浏览器 60代表搜狗浏览器) Title:网页标题中的关键词 Flag掩码标记:1指定新标签加载(1和16都不指定时为当前页加载) 2小程序显示窗口边框 4不自动裁剪越界窗口 8自动适配网页高度和宽度显示 ShowType 播放窗口分屏类型,默认1只显示一个播放窗口,支持1-22 24 25等多达20种多窗口播放 Url:加载小程序所在的网页实际地址,在网页中指定小程序的显示位置和大小,分屏多窗口播放地址和选项等 IframeX和IframeY分别为iframe嵌套的横竖偏移修正坐标 BarW和BarH分别是网页右侧和底部预留区域,ScrollTop为顶部滚动预留高度 小程序实际显示首先会基于Url网页中指定的坐标和大小,再根据IframeX、IframeY、BarW、BarH设定的值做修正 WebConfig:播放配置(新增方式),可代替Url使用,Flag值+64使用此配置,此命令中必须指定Left、Top、Width、Height的值 Open :启动后第一个窗口自动播放的流地址或本地多媒体文件路径,斜杠\替换成/再传,也可以在WebConfig中指定 注意:Open、Url、WebConfig中如果有特殊字符= & 双引号或中文等,需要用URL编码处理后传递 举例: 自动识别当前浏览器指定位置和大小启动: {"req":"Wrl_HKWebPlayer","rid":2,"para":{"Type":"0","Title":"HK Web Player","Flag":2,"IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"Url":"http://local.zorrosoft.com/HKFrame.html","ShowType":1,"Open":""rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/main/av_stream"}} 自动识别当前浏览器自动适配网页大小启动: {"req":"Wrl_HKWebPlayer","rid":3,"para":{"Type":"0","Title":"HK Web Player","Flag":8,"IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"Url":"http://local.zorrosoft.com/HKFrame.html","ShowType":1,"Open":""rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/main/av_stream"}} 自动识别当前浏览器指定位置和大小启动(不需要Url参数): {"req":"Wrl_HKWebPlayer","rid":4,"para":{"Type":"0","Title":"HK Web Player","Flag":66,"Left":20,"Top":230,"Width":480,"Height":320,"IframeX":0,"IframeY":0,"BarW":0,"BarH":0,"ScrollTop":0,"ShowType":4,"Open":"https://vjs.zencdn.net/v/oceans.mp4","WebConfig":[{"ID":2,"Uri":"rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/main/av_stream","Option":"Link=1"},{"ID":3,"Uri":"http://www.zorrosoft.com/Files/PluginOKBrowserApplet.mp4","Option":"Link=0"},{"ID":4,"Uri":"rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/sub/av_stream","Option":"Caching=1"}]}} 启动后会先后收到三个JSON数据包 A、{"ret":0,"rid":1,"data":{"ID":2}} 代表小程序WS侦听服务就绪 B、{"event":"Wrl_Listen","aid":2,"data":{"SID":"123","PID":"HKWebPlayer","port":920}} 返回的侦听端口,可再建立一个Web Socket连接后,调用小程序中的相关功能,比如新播放一个Player。 代表小程序创建成功,返回ID为当前小程序运行ID,通过此ID,可执行Wrl_AppletControl、Wrl_AppletScroll、Wrl_AppletResize等命令。 C、{"event":"Wrl_AppletOK","aid":2,"rid":1,"data":{"SID":"123","PID":"HKWebPlayer","Port":920}} 2)、请求控制海康网页播放小程序: 当前端不再需要小程序时可指定关闭,或者显示/隐藏及全屏显示等 ID为启动小程序时返回的ID值,Code代表控制类型掩码:1关闭 2全屏显示 4自动隐藏 8还原显示 16自动适配网页高度和宽度显示模式切换 32强制隐藏。其中全屏显示2,可直接通过热键ESC或取消,设置4和32隐藏后可通过8恢复显示 {"req":"Wrl_AppletControl","rid":2,"para":{"ID":"1","Code":4}} 3)、请求滚动网页中海康网页播放小程序: 当前端截取到网页滚动通知时,需要调用此接口实现小程序和网页的滚动联动 ID为启动小程序时返回JSON中的ID值 Code为滚动方向1是水平直,2是垂直,3是同时 Left为横向滚动条位置,Top为纵向滚动条位置 {"req":"Wrl_AppletScroll","rid":3,"para":{"ID":"1","Code":2,"Left":0,"Top":100}} 4)、请求改变网页中海康网页播放小程序显示位置或大小: 当前端网页显示区域缩放时,可动态修改小程序的显示位置或大小 ID为Wrl_HKWebPlayer启动小程序时返回JSON中的ID值,Width和Height分别为新的宽度和高度 X和Y分别为新的显示位置,不指定时保持不变,指定时原设置的IframeX和IframeY失效 {"req":"Wrl_AppletResize","rid":4,"para":{"ID":1,"Width":500,"Height":600}} 或,同时修改小程序显示起始坐标 {"req":"Wrl_AppletResize","rid":5,"para":{"ID":1,"Width":500,"Height":600,"X":20,"Y":20}} 5)、请求设置网页预留右侧宽度和底部高度,滚动条信息、垂直滚动及水平滚动位置: 当小程序显示区域超过当前网页时,需去除滚动条的显示影响 ID为启动小程序时返回JSON中的ID值,BarW为预留右侧宽度 BarH为预留底部高度 Code 1代表有水平滚动条,2代表有垂直滚动条,3代表都有 ScrollTop垂直滚动条位置 ScrollTop水平滚动条位置 {"req":"Wrl_ScrollBar","rid":6,"para":{"ID":"1","Code":2,"BarW":0,"BarH":0,"ScrollTop":0,"ScrollLeft":0}} 6)、请求对小程序窗口做Alpha透明处理,便于前端临时显示覆盖到小程序窗口的菜单等: ID为Wrl_HKWebPlayer启动小程序时返回的ID值,Alpha为透明度百分比,1-100 {"req":"Wrl_AppletAlpha","rid":7,"para":{"ID":1,"Alpha":30}} 7)、请求对小程序窗口内容进行截图: ID为启动小程序时返回JSON中的ID值, File为指定截图文件保存路径或扩展名 Base64指定为1时代表返回BASE64编码的图像内容 {"req":"Wrl_AppletSnap","rid":10,"para":{"ID":1,"Base64":1,"File":".png"}} 8)、请求缩放内嵌网页小程序,用于浏览器网页按比例缩放,一般不需要处理: ID为启动小程序时返回JSON中的ID值,不指定Scale时,获取当前小程序所用的缩放百分比,一般和系统缩放比例一致 {"req":"Wrl_AppletScale","rid":11,"para":{"ID":1,"Scale":120}} 3、小程序安装、升级、卸载 1)、请求安装海康网页播放小程序 请在测试网页输入框中,输入如下请求,然后点击发送,完成安装: {"req":"Plugin_Install","rid":1,"para":{"Name":"海康网页播放小程序","PID":"HKWebPlayer","Date":"2021-11-25","Desc":"PluginOK之上跨浏览器的海康网页播放小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中低延迟多路播放RTSP流","DownAddr":"http://local.zorrosoft.com/Files/Net/HKWebPlayer.pid","MD5":"1E2BD8E53434BBE6D1C3E6CCB47951C1","Version":"2.2.3.6","Size":1114112,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"5B33768516CBFDD67B33740AB7F0021562E6F79507F880DB8D554A178E72A08D43CF61A5D20CAD3CF3A07C650361E41F5B3D697EA45C3DF220A26C54B834468E0A7BC8A4F60F55683B78B24E06C297C2C5F0F38B3970794018C7C71C8FC6884B00706437317DBAB99C385560F9C91E3B1318DC1C4E95CAC81A701918C33A2A29C70A70FEAE816BB589E822867E7DDF546AB659CE30220B6D84C84F2DEBF824B0F7D7C310AF57BE08E919CF3CAAD1EB062045D230DEA6B18AE2D90CDACA16E8DCEA503E3A5A5E428D0FD80E7F93C21635A57FB50981A1A4F3397B3077044D46CEFD19244AFF3C82CD50CC982A25D9FB1E5D957E20499FAD5A00486BD4D40C31FB"}} 启动安装后,会不断收到安装进度直到安装结束。 2)、请求升级海康网页播放小程序: {"req":"Plugin_Update","rid":1,"para":{"Name":"海康网页播放小程序","PID":"HKWebPlayer","Date":"2021-11-25","Desc":"PluginOK之上跨浏览器的海康网页播放小程序,支持在Chrome、Edge、Firefox、IE、Oprea、360、QQ等最新版本浏览器网页中低延迟多路播放RTSP流","DownAddr":"http://local.zorrosoft.com/Files/Net/HKWebPlayer_Update.pid","MD5":"B6A2BC0D2B346C403F6346404C314D01","Version":"2.2.3.6","Size":1114112,"HideIns":0,"Type":8,"Cookie":"","Auth":"","TK":"8D191343EF522DB5B1220E5D9B54727538E9530B0DA99515117E8D0C456A19BA3B6670858E0BC6115F18E9F61F4488BD85BB896683A4247BE576A459EDE5B059C353F8381872DCACD405BCA8ECA34C8E76B7B857EAA3DBE426BB7E531AE007BA5787990468E6BC1B2CCC1473B4329315679CF4A10C1327EF79B61E00EFDF9CF97B2BE33B4C7CA0E3BD68F858FDDC5944D033A5CA49D41A3D6B7918C2203470B05A1071ED28C1E1714D38DCA9D39C9B6342D7F070E6CDA4B57C326387B42B4AA19566A4335ABDAC928FEBEA13E44AFD4CA2AF9A50A69293D22B35955321135F732AE28B692C0EF1E33685C816EAE91112CC97D5B6A874B6ABACF8FE894505C3FB"}} 以上安装和升级的JSON请求包,可能因版本升级导致内容不同,如遇安装或升级时报错,请联系客服获取最新的请求包。 3)、请求卸载海康网页播放小程序: 正式版需要添加TK校验,具体规则请参考SDK包中文档“PluginOK中间件安全解决方案.pdf”,可在SDK包中的打包程序ZbaPackage.exe的中间件维护生成带TK的请求。 {"req":"Plugin_Remove","rid":3,"para":{"PID":"HKWebPlayer","Type":8}} 4、海康网页播放小程序转调用海康原生SDK封装的ActiveX控件HKVideoCom的接口,先根据Wrl_HKWebPlayer请求启动后返回的端口号,新建立一个WebSocket连接后可执行如下指令: A、常用功能请求: 1) 取指定ID播放窗口属性AutoLoop(自动循环播放)值,仅对本地MP4等文件播放有效 请求:{"req":"Player_GetAutoLoop","rid":41,"para":[{"ID":1},{"ID":2}]} 返回:{"ret":0,"rid":41,"ID":1,"data":{"Ret":0,"AutoLoop":0}} 和 {"ret":0,"rid":41,"ID":2,"data":{"Ret":0,"AutoLoop":0}} ret为请求返回值,0正常,非零不正常,不正常时请取和ret同级的错误描述err,下同 Ret为调用ActiveX对应函数返回值,0代表正常 AutoLoop为1代表循环播放,0不循环 2) 设置指定ID窗口AutoLoop(自动循环播放)值,仅对本地MP4等文件播放有效 请求:{"req":"Player_PutAutoLoop","rid":42,"para":[{"ID":1,"AutoLoop":1},{"ID":2,"AutoLoop":0}]} 分别返回:{"ret":0,"rid":42,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":42,"ID":2,"data":{"Ret":0}} 3) 取海康SDK的信息,包含版本号、对接及超时配置等信息 请求:{"req":"Player_GetSDKInfo","rid":43,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":43,"ID":1,"data":{"Ret":0,"Ver":"V6.1.6.45","Build":"20210302","GenCfg":{"SplitFile":0,"ResumeUpgrade":0,"ResumeTimeout":0},"OverTimeCfg":{"PreviewTime":5000,"VodTime":5000,"AlarmTime":5000,"ElseTime":5000},"TalkCfg":{"TalkMode":0}}} 4) 取指定ID窗口当前是否是播放本地MP4 请求:{"req":"Player_IsPlayFile","rid":44,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":44,"ID":1,"data":{"Ret":0,"IsPlayFile":0}} 和 {"ret":0,"rid":44,"ID":2,"data":{"Ret":0,"IsPlayFile":1}} 5) 取指定ID窗口当前是否异步播放 本地MP4等文件播放无效 请求:{"req":"Player_GetAsynPlay","rid":45,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":45,"ID":1,"data":{"Ret":0,"AsynPlay":1}} 和 {"ret":0,"rid":45,"ID":2,"data":{"Ret":0,"AsynPlay":0}} 6) 设置指定ID窗口是否异步播放,调用播放前设置 本地MP4等文件播放无效 请求:{"req":"Player_PutAsynPlay","rid":46,"para":[{"ID":1,"AsynPlay":1},{"ID":2,"AsynPlay":0}]} 分别返回:{"ret":0,"rid":46,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":46,"ID":2,"data":{"Ret":0}} 7) 取指定ID窗口当前播放网络缓存帧数 1-50 1实时性好;3实时性较好;6实时性中,15流畅性中 请求:{"req":"Player_GetCaching","rid":47,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":47,"ID":1,"data":{"Ret":0,"Caching":3}} 和 {"ret":0,"rid":47,"ID":2,"data":{"Ret":0,"Caching":1}} 8) 设置指定ID窗口当前播放网络缓存帧数,调用播放前有效 请求:{"req":"Player_PutCaching","rid":48,"para":[{"ID":1,"Caching":3},{"ID":2,"Caching":1}]} 分别返回:{"ret":0,"rid":48,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":48,"ID":2,"data":{"Ret":0}} 9) 取当前连接类型 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP 请求:{"req":"Player_GetLinkMode","rid":49,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":49,"ID":1,"data":{"Ret":0,"LinkMode":1}} 和 {"ret":0,"rid":49,"ID":2,"data":{"Ret":0,"LinkMode":0}} 10) 设置连接类型,调用播放前设置有效 请求:{"req":"Player_PutLinkMode","rid":50,"para":[{"ID":1,"LinkMode":1},{"ID":2,"LinkMode":0}]} 分别返回:{"ret":0,"rid":50,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":50,"ID":2,"data":{"Ret":0}} 11) 取当前流类型 码流类型,0-主码流,1-子码流,2-码流3,3-码流4, 4-码流5,5-码流6,7-码流7,8-码流8,9-码流9,10-码流10 请求:{"req":"Player_GetStreamType","rid":51,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":51,"ID":1,"data":{"Ret":0,"StreamType":1}} 和 {"ret":0,"rid":51,"ID":2,"data":{"Ret":0,"StreamType":0}} 12) 设置当前流类型,非本地文件、调用播放前设置有效 请求:{"req":"Player_PutStreamType","rid":52,"para":[{"ID":1,"StreamType":1},{"ID":2,"StreamType":0}]} 分别返回:{"ret":0,"rid":52,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":52,"ID":2,"data":{"Ret":0}} 13) 取当前协议类型 应用层取流协议,0-私有协议,1-RTSP协议,2-SRTP码流加密(对应此结构体中dwLinkMode 字段,支持如下方式, 为1,表示udp传输方式,信令走TLS加密,码流走SRTP加密,为2,表示多播传输方式,信令走TLS加密,码流走SRTP加密) 请求:{"req":"Player_GetProtoType","rid":53,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":53,"ID":1,"data":{"Ret":0,"ProtoType":0}} 和 {"ret":0,"rid":53,"ID":2,"data":{"Ret":0,"ProtoType":1}} 14) 设置当前协议类型,非本地文件、调用播放前设置有效 请求:{"req":"Player_PutProtoType","rid":54,"para":[{"ID":1,"ProtoType":1},{"ID":2,"ProtoType":0}]} 分别返回:{"ret":0,"rid":54,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":54,"ID":2,"data":{"Ret":0}} 15) 取指定ID窗口设备信息,仅对连接海康硬件设备登录成功后有效 请求:{"req":"Player_GetDeviceInfo","rid":55,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":55,"ID":1,"data":{"Ret":0,"SerialNumber":"DS-3SC3Q150MY-TE20200620AACHG56168112"}} 和 {"ret":0,"rid":55,"ID":2,"data":{"Ret":-2147467262,"SerialNumber":""}} 16) 异步登录设备,仅对连接海康硬件设备有效,本地MP4文件播放无需登录,登录结果通过事件接收 请求:{"req":"Player_Login","rid":56,"para":[{"ID":1,"Server":"admin:test123456@192.168.1.9:8000"},{"ID":2,"Server":"admin:test123456@192.168.1.8:8000"}]} 分别返回:{"ret":0,"rid":56,"ID":1,"data":{"Ret":0,"LoginID":1}} 和 {"ret":0,"rid":56,"ID":2,"data":{"Ret":0,"LoginID":2}} LoginID为登录标识,登录结果事件中携带 17) 取指定ID窗口播放文件时长,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_GetFileTime","rid":57,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":57,"ID":1,"data":{"Ret":0,"FileTime":12}} 和 {"ret":0,"rid":57,"ID":2,"data":{"Ret":0,"FileTime":0}} 18) 取指定ID窗口文件已播放时长,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_GetPlayedTime","rid":58,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":58,"ID":1,"data":{"Ret":0,"PlayedTime":12}} 和 {"ret":0,"rid":58,"ID":2,"data":{"Ret":0,"PlayedTime":0}} 19) 取指定ID窗口文件已播放帧数,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_GetPlayedFrames","rid":59,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":59,"ID":1,"data":{"Ret":0,"PlayedFrames":12}} 和 {"ret":0,"rid":59,"ID":2,"data":{"Ret":0,"PlayedFrames":0}} 20) 取指定ID窗口文件总播放帧数,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_GetTotalFrames","rid":60,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":60,"ID":1,"data":{"Ret":0,"TotalFrames":12}} 和 {"ret":0,"rid":60,"ID":2,"data":{"Ret":0,"TotalFrames":0}} 21) 取指定ID窗口文件播放百分比,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_GetPlayPercent","rid":61,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":61,"ID":1,"data":{"Ret":0,"Percent":12}} 和 {"ret":0,"rid":61,"ID":2,"data":{"Ret":0,"Percent":0}} 22) 设置指定ID窗口文件播放百分比,仅对本地MP4等文件打开播放后有效 请求:{"req":"Player_PutPlayPercent","rid":62,"para":[{"ID":1,"Percent":12},{"ID":2,"Percent":0}]} 分别返回:{"ret":0,"rid":62,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":62,"ID":2,"data":{"Ret":0}} 23) 指定ID窗口文件播放控制,仅对本地MP4等文件打开播放后有效 Type类型 默认1加速播放可多次调用 2降速播放可多次调用 3倒播 请求:{"req":"Player_FileControl","rid":63,"para":[{"ID":2,"Type":1}]} 分别返回:{"ret":0,"rid":63,"ID":1,"data":{"Ret":0}} 24) 指定ID窗口设备类型和序列号,本地MP4等文件播放无效 请求:{"req":"Player_GetDeviceType","rid":64,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":64,"ID":1,"data":{"Ret":0}} 25) 取指定ID窗口当前播放通道,本地MP4等文件播放无效 请求:{"req":"Player_GetCurChannel","rid":65,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":65,"ID":1,"data":{"Ret":0,"CurChannel":2}} 和 {"ret":0,"rid":65,"ID":2,"data":{"Ret":0,"CurChannel":1}} 26) 取指定ID窗口相关状态,本地MP4等文件播放登录状态无效,只有播放状态 请求:{"req":"Player_GetStatus","rid":66,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":66,"ID":1,"data":{"Ret":0,"LoginStatus":2,"PlayStatus":1,"SupportTalk":1}} 和 {"ret":0,"rid":66,"ID":2,"data":{"Ret":0,"PlayStatus":1}} 可以返回是否支持对讲标识SupportTalk 27) 指定ID窗口播放指定通道、本地文件或RTSP流地址,非本地MP4等文件播放需要先登录 指定Channel时为指定通道播放,指定Uri时,要么是本地路径文件,要么是服务器的RTSP流地址(包含回放地址) Uri中如果有特殊字符= & 双引号或中文等,需要用URL编码处理后传递 需要注意的是比如已经启动播放本地MP4文件播放,那么这个窗口调用此接口时也只能切换本地MP4文件播放 请求:{"req":"Player_Play","rid":67,"para":[{"ID":1,"Channel":1},{"ID":2,"Uri":"d:/zorro/test.mp4"},{"ID":3,"Uri":"rtsp://192.168.1.8:554/h264/ch1/sub/av_stream","Option":"Stream=1"}]} 分别返回:{"ret":0,"rid":67,"ID":1,"data":{"Ret":0,"PlayID":1}} {"ret":0,"rid":67,"ID":2,"data":{"Ret":0,"PlayID":2}} 和 {"ret":0,"rid":67,"ID":3,"data":{"Ret":0,"PlayID":3}} PlayID为当前播放ID 28) 指定ID窗口播放控制,需要先调用播放 Type为控制类型,默认1暂停播放 2恢复继续播放 3停止播放 请求:{"req":"Player_Control","rid":68,"para":[{"ID":1,"Type":1},{"ID":2,"Type":2},{"ID":3,"Type":3}]} 分别返回:{"ret":0,"rid":68,"ID":1,"data":{"Ret":0}} {"ret":0,"rid":68,"ID":2,"data":{"Ret":0}} 和 {"ret":0,"rid":68,"ID":3,"data":{"Ret":0}} 29) 指定ID窗口设置声音共享模式,需要先调用播放 AudioMode 1为独占 单路音频模式;2-共享声卡,多路音频模式 请求:{"req":"Player_SetAudioMode","rid":69,"para":[{"ID":1,"AudioMode":2},{"ID":2,"AudioMode":2}]} 分别返回:{"ret":0,"rid":69,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":69,"ID":2,"data":{"Ret":0}} 30) 指定ID窗口打开声音,本地MP4等文件播放需要先打开声音再播放,非本地MP4等文件播放需要先调用播放 请求:{"req":"Player_OpenSound","rid":70,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":70,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":70,"ID":2,"data":{"Ret":0}} 31) 指定ID窗口关闭声音,需要先调用打开声音 请求:{"req":"Player_CloseSound","rid":71,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":71,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":71,"ID":2,"data":{"Ret":0}} 32) 取当前音频音量 0-100,0代表静音,100最大音量 请求:{"req":"Player_GetAudioVolume","rid":72,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":72,"ID":1,"data":{"Ret":0,"AudioVolume":100}} 和 {"ret":0,"rid":72,"ID":2,"data":{"Ret":0,"AudioVolume":0}} 33) 设置当前音频音量 0-100,0代表静音,100最大音量 请求:{"req":"Player_PutAudioVolume","rid":73,"para":[{"ID":1,"AudioVolume":0},{"ID":2,"AudioVolume":100}]} 分别返回:{"ret":0,"rid":73,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":73,"ID":2,"data":{"Ret":0}} 34) 指定ID窗口进行云台控制,需要先调用播放,本地MP4文件播放无效 Type为云台控制类型 PTZTYPE_LIGHT_PWRON = 2, /// 接通灯光电源 PTZTYPE_WIPER_PWRON = 3, /// 接通雨刷开关 PTZTYPE_FAN_PWRON = 4, /// 接通风扇开关 PTZTYPE_HEATER_PWRON = 5, /// 接通加热器开关 PTZTYPE_AUX_PWRON1 = 6, /// 接通辅助设备开关 PTZTYPE_AUX_PWRON2 = 7, /// 接通辅助设备开关 PTZTYPE_SET_PRESET = 8, /// 设置预置点 PTZTYPE_CLE_PRESET = 9, /// 清除预置点 PTZTYPE_ZOOM_IN = 11, /// 焦距以速度SS变大(倍率变大) PTZTYPE_ZOOM_OUT = 12, /// 焦距以速度SS变小(倍率变小) PTZTYPE_FOCUS_NEAR = 13, /// 焦点以速度SS前调 PTZTYPE_FOCUS_FAR = 14, /// 焦点以速度SS后调 PTZTYPE_IRIS_OPEN = 15, /// 光圈以速度SS扩大 PTZTYPE_IRIS_CLOSE = 16, /// 光圈以速度SS缩小 PTZTYPE_TILT_UP = 21, /// 云台以SS的速度上仰 PTZTYPE_TILT_DOWN = 22, /// 云台以SS的速度下俯 PTZTYPE_PAN_LEFT = 23, /// 云台以SS的速度左转 PTZTYPE_PAN_RIGHT = 24, /// 云台以SS的速度右转 PTZTYPE_UP_LEFT = 25, /// 云台以SS的速度上仰和左转 PTZTYPE_UP_RIGHT = 26, /// 云台以SS的速度上仰和右转 PTZTYPE_DOWN_LEFT = 27, /// 云台以SS的速度下俯和左转 PTZTYPE_DOWN_RIGHT = 28, /// 云台以SS的速度下俯和右转 PTZTYPE_PAN_AUTO = 29, /// 云台以SS的速度左右自动扫描 PTZTYPE_FILL_PRE_SEQ = 30, /// 将预置点加入巡航序列 PTZTYPE_SET_SEQ_DWELL = 31, /// 设置巡航点停顿时间 PTZTYPE_SET_SEQ_SPEED = 32, /// 设置巡航速度 PTZTYPE_CLE_PRE_SEQ = 33, /// 将预置点从巡航序列中删除 PTZTYPE_STA_MEM_CRUISE = 34, /// 开始记录轨迹 PTZTYPE_STO_MEM_CRUISE = 35, /// 停止记录轨迹 PTZTYPE_RUN_CRUISE = 36, /// 开始轨迹 PTZTYPE_RUN_SEQ = 37, /// 开始巡航 PTZTYPE_STOP_SEQ = 38, /// 停止巡航 PTZTYPE_GOTO_PRESET = 39, /// 快球转到预置点 PTZTYPE_DEL_SEQ = 43, /// 删除巡航路径 PTZTYPE_STOP_CRUISE = 44, /// 停止轨迹 PTZTYPE_DELETE_CRUISE = 45, /// 删除单条轨迹 PTZTYPE_DELETE_ALL_CRUISE= 46, /// 删除所有轨迹 PTZTYPE_PAN_CIRCLE = 50, /// 云台以SS的速度自动圆周扫描 PTZTYPE_DRAG_PTZ = 51, /// 拖动PTZ PTZTYPE_LINEAR_SCAN = 52, /// 区域扫描 PTZTYPE_CLE_ALL_PRESET = 53, /// 预置点全部清除 PTZTYPE_CLE_ALL_SEQ = 54, /// 巡航全部清除 PTZTYPE_CLE_ALL_CRUISE = 55, /// 轨迹全部清除 PTZTYPE_POPUP_MENU = 56, /// 显示操作菜单 PTZTYPE_TILT_DOWN_ZOOM_IN = 58, /// 云台以SS的速度下俯&&焦距以速度SS变大(倍率变大) PTZTYPE_TILT_DOWN_ZOOM_OUT = 59, /// 云台以SS的速度下俯&&焦距以速度SS变小(倍率变小) PTZTYPE_PAN_LEFT_ZOOM_IN = 60, /// 云台以SS的速度左转&&焦距以速度SS变大(倍率变大) PTZTYPE_PAN_LEFT_ZOOM_OUT = 61, /// 云台以SS的速度左转&&焦距以速度SS变小(倍率变小) PTZTYPE_PAN_RIGHT_ZOOM_IN = 62, /// 云台以SS的速度右转&&焦距以速度SS变大(倍率变大) PTZTYPE_PAN_RIGHT_ZOOM_OUT = 63, /// 云台以SS的速度右转&&焦距以速度SS变小(倍率变小) PTZTYPE_UP_LEFT_ZOOM_IN = 64, /// 云台以SS的速度上仰和左转&&焦距以速度SS变大(倍率变大) PTZTYPE_UP_LEFT_ZOOM_OUT = 65, /// 云台以SS的速度上仰和左转&&焦距以速度SS变小(倍率变小) PTZTYPE_UP_RIGHT_ZOOM_IN = 66, /// 云台以SS的速度上仰和右转&&焦距以速度SS变大(倍率变大) PTZTYPE_UP_RIGHT_ZOOM_OUT = 67, /// 云台以SS的速度上仰和右转&&焦距以速度SS变小(倍率变小) PTZTYPE_DOWN_LEFT_ZOOM_IN = 68, /// 云台以SS的速度下俯和左转&&焦距以速度SS变大(倍率变大) PTZTYPE_DOWN_LEFT_ZOOM_OUT = 69, /// 云台以SS的速度下俯和左转&&焦距以速度SS变小(倍率变小) PTZTYPE_DOWN_RIGHT_ZOOM_IN = 70, /// 云台以SS的速度下俯和右转&&焦距以速度SS变大(倍率变大) PTZTYPE_DOWN_RIGHT_ZOOM_OUT = 71, /// 云台以SS的速度下俯和右转&&焦距以速度SS变小(倍率变小) PTZTYPE_TILT_UP_ZOOM_IN = 72, /// 云台以SS的速度上仰&&焦距以速度SS变大(倍率变大) PTZTYPE_TILT_UP_ZOOM_OUT = 73, /// 云台以SS的速度上仰&&焦距以速度SS变小(倍率变小) Speed是否指定速度 用户按不同解码器的速度控制值设置。取值范围[1,7] 不需要速度控制时不设置此值 Stop是否停止 0-开始,1-停止 请求:{"req":"Player_PTZControl","rid":74,"para":[{"ID":1,"Type":1,"Speed":5,"Stop":0}]} 分别返回:{"ret":0,"rid":74,"ID":1,"data":{"Ret":0}} 35) 取指定ID窗口连接信息,本地MP4文件播放无效 Type为获取类型 1预览 2回放 3 对讲 不支持对讲的设备调用返回空 请求:{"req":"Player_GetLinkAddr","rid":75,"para":[{"ID":1,"Type":1}]} 分别返回:{"ret":0,"rid":75,"ID":1,"data":{"Ret":0,"LinkInfo":{}}} 36) 取指定ID窗口可用对讲通道,本地MP4文件播放无效,不支持对讲的设备调用返回值无效 请求:{"req":"Player_GetTalkChannel","rid":76,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":76,"ID":1,"data":{"Ret":0,"TalkStatus":""}} 和 {"ret":0,"rid":76,"ID":2,"data":{"Ret":0,"TalkStatus":""}} 37) 刷新指定ID窗口对讲状态,本地MP4文件播放无效,不支持对讲的设备调用返回值无效 请求:{"req":"Player_UpdateTalkStatus","rid":77,"para":[{"ID":1,"Channel":0}]} 分别返回:{"ret":0,"rid":77,"ID":1,"data":{"Ret":0,"TalkStatus":""}} 38) 开始指定ID窗口对讲 Channel 为对讲通道,同时只能开一个对讲 TalkVolume 对讲音量 LocalFile和DeviceFile分别为本地和设备对讲内容保存文件路径 请求:{"req":"Player_StartTalk","rid":78,"para":[{"ID":1,"Channel":0,"TalkVolume":60,"LocalFile":"d:/Zorro/Local.mp4","DeviceFile":"d:/Zorro/Device.mp4"}]} 分别返回:{"ret":0,"rid":78,"ID":1,"data":{"Ret":0,"TID":1}} 39) 取指定ID窗口当前对讲音量 0-100,0代表静音,100最大音量 请求:{"req":"Player_GetTalkVolume","rid":79,"para":[{"ID":1},{"ID":2}]} 分别返回:{"ret":0,"rid":79,"ID":1,"data":{"Ret":0,"TalkVolume":100}} 和 {"ret":0,"rid":79,"76":2,"data":{"Ret":0,"TalkVolume":0}} 40) 设置指定ID窗口当前对讲音量 0-100,0代表静音,100最大音量 请求:{"req":"Player_SetTalkVolume","rid":80,"para":[{"ID":1,"TalkVolume":50},{"ID":2,"TalkVolume":50}]} 分别返回:{"ret":0,"rid":80,"ID":1,"data":{"Ret":0}} 和 {"ret":0,"rid":80,"ID":2,"data":{"Ret":0}} 41) 指定ID窗口对讲请求停止 请求:{"req":"Player_StopTalk","rid":81,"para":[{"ID":1}]} 分别返回:{"ret":0,"rid":81,"ID":1,"data":{"Ret":0}} 42) 指定ID窗口截图 Type 指定图像类型,可指定1(BMP,不支持BASE64编码内容)、默认3(JPG)、4(PNG) Base64指定为1时代表返回BASE64编码的图像内容 Count截取图数量,默认截取一张,Delay指定延迟毫秒数开始,Interval多张时间隔毫秒数 PathType 指定截图图片保存路径类型,0默认临时目录,1操作系统桌面 2当前登录用户我的图片目录 3中间件数据目录 请求:{"req":"Player_SnapshotImg","rid":82,"para":[{"ID":1,"Type":4,"Count":3,"Base64":1,"Delay":1000,"Interval":200}]} 分别返回:{"ret":0,"rid":82,"data":{"Ret":0,"Img":[{"Size":0,"Width":0,"Height":0,"File":""}]}} 和 {"ret":0,"rid":82,"ID":2,"data":{"Ret":0,,"Img":[{"Size":0,"Width":0,"Height":0,"File":""}]}} 43) 指定ID窗口录像到文件 File为录像目标文件不指定时自动生成 Second为录制限时时间(秒),0代表由前端指定停止 {"req":"Player_RecordFile","rid":83,"para":[{"ID":1,"File":"D:/Zorro/Record.mp4","Second":30}]} 返回:{"ret":0,"rid":83,"ID":1,"data":{"Ret":0,"PID":1}} 44) 指定ID窗口停止录像 {"req":"Player_StopRecord","rid":84,"para":[{"ID":1}]} File为录像文件路径,Size为录像文件大小 返回:{"ret":0,"rid":84,"ID":1,"data":{"Ret":0,"PID":1,"File":"D:/Zorro/Record.mp4","Size":321}} 45) 动态改变分屏数量或播放内容,播放非MP4文件如需要登录的话,需要指定Server参数 ShowType指定分屏数量,如果不变就不设置 Play指定播放内容:Uri中如果有特殊字符= & 双引号或中文等,需要用URL编码处理后传递 请求范例1:{"req":"Player_ChangePlay","rid":85,"para":{"ShowType":2}} 请求范例2:{"req":"Player_ChangePlay","rid":85,"para":{"Play":[{"ID":1,"Server":"admin:test123456@192.168.1.9:8000","Option":"Stream=1 Link=0 caching=3"},{"ID":2,"Uri":"D:/Zorro/test.mp4"}]}} 请求范例3:{"req":"Player_ChangePlay","rid":85,"para":{"ShowType":3,"Play":[{"ID":1,"Uri":"rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/main/av_stream","Option":"caching=3"},{"ID":2,"Uri":"D:/Zorro/test.mp4","Option":""},{"ID":3,"Server":"admin:test123456@192.168.1.9:8000","Uri":"rtsp://wzh:test123456@192.168.1.8:554/h264/ch1/main/av_stream","Option":"Stream=1"}]}} 分别返回:{"ret":0,"rid":85,"data":{"Ret":0,"Play":[]}} 46) 设置当前焦点播放窗口 ID是当前播放窗口序号,ID是从1开始,需要确保不越界 {"req":"Player_SetSelect","rid":86,"para":{"ID":2}} 返回:{"ret":0,"rid":86,"ID":2,"data":{"Ret":1}} 47) 获取当前焦点播放窗口序号 {"req":"Player_GetSelect","rid":87,"para":{}} 返回:{"ret":0,"rid":87,"ID":2,"data":{"Ret":1}} ID为当前播放焦点窗口 5、海康网页播放小程序接收的通知: 这些通知必须通过WebSocket连接到此小程序侦听的端口才能接收到。 A、小程序: 1) Selected 选中分屏窗口序号通知 {"event":"Player_Selected","ID":1,"data":{}} 2) FullScreen 分屏窗口切换全屏通知 {"event":"Player_FullScreen","ID":1,"data":{}} 3) 录像结束通知(限时录制时发出) ID 为窗口序号 PID为录像ID Size录像文件大小 File录像实际全路径 {"event":"Player_StopRecord","ID":1,"data":{"Ret":0,"PID":1,"File":"D:/Zorro/test.mp4","Size":321}} 4) 登录状态通知,播放MP4等本地文件无效 {"event":"Player_LoginStatus","ID":1,"data":{"LID":1,"Status":0,"Desc":"登录失败"}} 5) 播放状态通知 {"event":"Player_PlayStatus","ID":1,"data":{"PID":1,"Status":10,"Desc":"播放结束"}} 6) 异常通知 Type 0x8001语音对讲异常 0x8003网络预览异常 0x8005预览时重新连接 0x8010回放异常 0x8015预览时重连成功 {"event":"Player_Exception","ID":1,"data":{"Type":1}} B、PluginOK支持的事件通知: 1) 小程序是否响应了热键全屏 {"event":"Player_FullScreen","data":{"FullScreen":0}} FullScreen为当前是否全屏标记 2) Wrl_AppletExit 小程序退出通知 {"event":"Wrl_AppletExit","data":{"ID":1}} 6、其它 请求参数的JSON数据包,请确保是UTF-8无签名的编码。 更多接口请求说明,请参考安装目录中的文档TestWrl.txt、SDK包中的“PluginOK开发者手册.pdf”及“PluginOK中间件安全解决方案.pdf”。 如还有疑问请直接联系客服 加微信:ZorroSoft,或加QQ群:23126938