一、 场景描述
第三方对接 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)
。