海康威视(iSecure Center综合安防管理平台)第三方通过标准协议对接视频流分享

一、 场景描述

         第三方对接 iSC 平台视频功能的时候,大多数情况下都是通过集成我们的视频 SDK( 包括
视频 web 插件、客户端插件、视频 SDK-win32/win64 、视频 SDK-Android/iOS ) 来实现视频
功能的对接,但还是有很大一部分第三方有通过标准协议 (RTSP/RTMP/HLS) 来对接视频流需
求,接下来主要介绍下这三种协议的对接方式
注:关于JAVA如何对接海康威视(iSecure Center综合安防管理平台)门禁和摄像头视频取流,可参考: http://t.csdnimg.cn/yEvFh

二、 流程简介

协议说明:
RTSP
实时串流协议( Real Time Streaming Protocol RTSP )是一种网络应用协议,
专为娱乐和通信系统的使用,以控制流媒体 服务器。该协议用于建立和控制终端
之间的媒体会话。媒体服务器的客户端发布 VCR 命令,例如播放,录制和暂停,
以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)
的媒体流。
HLS
HTTP Live Streaming (缩写是 HLS )是一个由苹果公司提出的基于 HTTP 的流媒
体网络传输协议。
RTMP
实时消息协议(英语: Real-Time Messaging Protocol ,缩写 RTMP )也称实时消
息传输协议,是最初由 Macromedia 为通过互联网在 Flash 播放器与一个服务器
之间传输流媒体音频、视频和数据而开发的一个专有协议。
通过标准协议对接,主要包括以下几个步骤:
1 、 查询监控点信息:通过 OpenApi 接口查询到监控点信息,包括监控点编号、监控点名称、
取流协议等;
2 、 查询监控点的取流 url :通过 OpenApi 接口,根据查询到的监控点信息获取对应的预览、
回放的取流 url
3 、 根据取流 url 开始取流:获取到标准协议的取流 url ,通过第三方播放器发起取流请求,
开始取流,实现视频功能对接。

三、 接口调用流程

1. 查询监控点信息

        第三方调用 API 的视频资源相关接口查询监控点信息,获取到监控点的编号以及监控点
的取流类型。接口定义如下:
 {
    "code": "0", 
    "msg": "success", 
    "data": {
        "total": 13, 
        "pageNo": 1, 
        "pageSize": 1, 
        "list": [
            {
                "altitude": null, 
                "cameraIndexCode": "eddf8458f74d42e9bf4ecfc752dba146", 
                "cameraName": "3层吉米后厨入口", 
                "cameraType": 0, 
                "cameraTypeName": "枪机", 
                "capabilitySet": "io,event_io,event_ias,event_rule,event_heat,record,net,event_face,vss,ptz,status,maintenance,event_device", 
                "capabilitySetName": null, 
                "intelligentSet": null, 
                "intelligentSetName": null, 
                "channelNo": "33", 
                "channelType": "digital", 
                "channelTypeName": "数字通道", 
                "createTime": "2018-09-15T11:14:27.812+08:00", 
                "encodeDevIndexCode": "1d3d5c26e6174cf1aa452f57cac91879", 
                "encodeDevResourceType": null, 
                "encodeDevResourceTypeName": null, 
                "gbIndexCode": null, 
                "installLocation": null, 
                "keyBoardCode": null, 
                "latitude": null, 
                "longitude": null, 
                "pixel": null, 
                "ptz": null, 
                "ptzName": null, 
                "ptzController": null, 
                "ptzControllerName": null, 
                "recordLocation": null, 
                "recordLocationName": null, 
                "regionIndexCode": "2feadc43-ffef-464b-a2e2-b146a02de5ba", 
                "status": null, 
                "statusName": null, 
                "transType": 1, 
                "transTypeName": "TCP", 
                "treatyType": null, 
                "treatyTypeName": null, 
                "viewshed": null, 
                "updateTime": "2018-09-15T11:19:48.973+08:00"
            }
        ]
    }
}
 
其 中 :
(1)"cameraIndexCode": "eddf8458f74d42e9bf4ecfc752dba146" 是 监控点编号; (2)"capabilitySet":
"io,event_io,event_ias,event_rule,event_heat,record,net,event_face,vss,ptz,status,maintenance,event_device"
监控点的能力集;
(3)"transType": 1, "transTypeName": "TCP"是对监控点取流类型的说明。

2. 获取监控点的取流 url

        获取监控点取流 url 主要包括预览和回放,又分别区分 RTSP/RTMP/HLS 三种协议的取流。

2.1 获取监控点预览取流 URL

        获取监控点预览取流 URL 的接口说明如下:
streamType: 码流类型,主码流、子码流、第三码流等;
transmode :传输协议,指的是码流的传输协议,以获取的监控点信息中 transType 为准;
protocol :取流协议,区分是获取 RTSP/RTMP/HLS 哪种协议的取流 URL
RTSP 协议:
        获取的 RTSP 取流 url 通常都是用 vlc 播放测试,由于 vlc 只能解析 rtp 封装的 rtsp 的码
流,所以,获取取流 url 的时候,入参中的 expand 值要传 streamform=rtp ,告诉 mgc 把码流
rtp 封装。
{
"cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
"streamType": 0,
"protocol": "rtsp",
"transmode": 1,
"expand": "streamform=rtp"
}
RTMP 协议:
        Rtmp 协议支持的码流编码格式是 h264 ,音频格式是 aac( 前端是复合流时 ) ,需要注意前
端的码流编码格式 ( 通常子码流的编码格式满足条件,获取取流 url 的时候可以把 streamtype
1 ,取子码流 )
        常见问题是 1.2.0 平台 (mgc V5.7.0) 生成的取流 url ,在 vlc ckplayer 等通用播放器中播放
失败,是已知问题 ( 由于 mgc 解析 rtmp 的取流 url 异常 ) ,需要打 mgc 的补丁。
{
"cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
"streamType": 1,
"protocol": "rtmp",
"transmode": 1
}
HLS 协议:
        hls 协议支持的码流编码格式也是 h264 ,音频格式是 aac( 前端是复合流时 ) ,需要注意前
端的码流编码格式。(通常子码流的编码格式满足条件,获取取流 url 的时候可以把 streamtype
1 ,取子码流 )
{
"cameraIndexCode": "748d84750e3a4a5bbad3cd4af9ed5101",
"streamType": 1,
"protocol": "hls",
"transmode": 1
}

2.2 获取监控点回放取流 URL

        获取监控点回放取流 URL 的接口说明如下:
recordLocation :存储类型, 0 :中心存储, 1 :设备存储,默认为中心存储
transmode :传输协议,指的是码流的传输协议,国标设备存储参考监控点信息中 transType
uuid :分页查询 id ,只有当查询的录像片段超过 1000 的时候,需要查询后边分页中的
录像片段时才需要,所以,第一次查询录像不需要该参数;
protocol :取流协议,区分是获取 RTSP/RTMP/HLS 哪种协议的取流 URL
RTSP 协议:
        常见问题还是通过 VLC 播放失败,入参中的 expand 的值要传 streamform=rtp
{
"cameraIndexCode": "90ad77d8057c43dab140b77361606927",
"recordLocation": "0", "protocol": "rtsp",
"transmode": 1,
"beginTime": "2017-06-15T00:00:00.000+08:00",
"endTime": "2017-06-18T00:00:00.000+08:00",
"expand": "streamform=rtp"
}
RTMP 协议:
        Rtmp 协议支持的码流编码格式是 h264 ,音频格式是 aac ,所以需要确认录像的编码格
式。
{
"cameraIndexCode": "90ad77d8057c43dab140b77361606927",
"recordLocation": "0",
"protocol": "rtmp",
"transmode": 1,
"beginTime": "2017-06-15T00:00:00.000+08:00",
"endTime": "2017-06-18T00:00:00.000+08:00"
}
HLS 协议:
        HLS 协议回放只支持海康 SDK 协议、 EHOME 协议、 ONVIF 协议接入的设备;只支持 H264
视频编码和 AAC 音频编码;云存储版本要求 v2.2.4 及以上的 2.x 版本,或 v3.0.5 及以上的
3.x 版本; ISC 版本要求 v1.2.0 版本及以上,需在运管中心 - 视频联网共享中切换成启动平台
内置 VOD
{
"cameraIndexCode": "90ad77d8057c43dab140b77361606927",
"recordLocation": "0",
"protocol": "hls",
"transmode": 1,
"beginTime": "2017-06-15T00:00:00.000+08:00",
"endTime": "2017-06-18T00:00:00.000+08:00"
}

3. 根据取流 url 开始取流

        上一步获取到监控点的取流 url 后,就可以通过第三方播放器或者插件发起取流请求。
各种协议常用的取流播放器或插件如下:
RTSP 协议: VLC
RTMP 协议: VLC CKPlayer FlashPlayer
HLS 协议: VLC CKPlayer 、手机浏览器等;
        回放取流的时候,需要注意下在取流 url 后边增加 beginTime( 录像回放的开始时间 )
endTime( 录像回放的停止时间 ) playBackMode( 回放模式 ) 相关参数,格式如下:
rtsp://211.139.111.82:554/openUrl/6YNAVUs?beginTime=20190812T000000&endTime=201908
12T000500&playBackMode=1
rtmp://120.234.141.53:1935/vod/openUrl/JG0YnLy?beginTime=20190719T150000&endTime=20
190719T150100&playBackMode=1

四、 常见问题

以下列出几种常见问题:

1. 获取的 rtsp 的预览取流 url vlc 中播放失败

常见原因包括以下几种:
a) 设备本身不在线,可以先在平台上预览检查监控点是否在线;
b) Mgc 554 端口不通;
c) 获取取流 url 的时候未指定 expand 的值为 streamform=rtp

2. 获取的 rtmp 的预览取流 url 播放失败

常见原因包括以下几种:
a) 设备本身不在线,可以先在平台上预览检查监控点是否在线;
b) Mgc 1935 端口不通;
c) 码流的编码格式不是 h264 ,音频格式不是 aac
d) 1.2.0 的平台,在 vlc ckplayer 中播放失败的时候,需要给 mgc 打补丁。

3. 获取的 hls 的预览取流 url 播放失败

常见原因包括以下几种:
a) 设备本身不在线,可以先在平台上预览检查监控点是否在线;
b) Mgc 83 端口不通;
c) 码流的编码格式不是 h264 ,音频格式不是 aac

4. 获取的 rtsp/rtmp 的回放取流 url 播放失败

常见原因包括以下几种:
a) Mgc 的端口不通, rtsp(554)/rtmp(1935)
b) 获取的取流 url 未指定开始和停止时间等参数,
?beginTime=20190719T150000&endTime=20190719T150100&playBackMode=1
c) Rtmp 的录像码流编码格式不是 h264 ,音频格式不是 aac

5. 获取的 hls 的回放取流 url 播放失败

常见原因包括以下几种:
a) Mgc 83 端口不通;
b) 不满足条件:云存储版本要求 v2.2.4 及以上的 2.x 版本,或 v3.0.5 及以上的 3.x 版本; ISC
版本要求 v1.2.0 版本及以上,需在运管中心 - 视频联网共享中切换成启动平台内置 VOD
c) 录像码流编码格式不是 h264 ,音频格式不是 aac

6. 外网调用接口获取到的取流 url 为内网的

常见原因包括以下几种:
a) 调用接口使用的合作方的网域 ID 配置不对, vnsc 是根据合作方配置的网域 ID(domainId)
来判断取流客户端所在网域返回的取流 url 的,所以,需要获取外网的取流 url ,合作方
domainId 需要配成外网线路;
b) MGC 对应协议的多线路没有启用,导致 vnsc 找不到对应线路的 mgc 端口,返回默认线
路的取流 ip 和端口,默认端口: rtsp(554) rtmp(1935) hls(83)
  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值