我们采取的方案是后端获取视频流返回给前端,然后前端播放
private static final String ARTEMIS_PATH = "/artemis";
/**
* 视频设备信息
*/
public static String getCodeList(Integer page, Integer size, String host, String appKey, String appSecret) {
{
/* STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.*/
ArtemisConfig.host = host;
ArtemisConfig.appKey = appKey;
ArtemisConfig.appSecret = appSecret;
String previewUrlsApi = ARTEMIS_PATH + "/api/resource/v2/encodeDevice/search";
Map path = new HashMap(2) {
{
put("https://", previewUrlsApi);//根据现场环境部署确认是http还是https
}
};
String contentType = "application/json";
ObjectMapper mapper = new ObjectMapper();
Map map = new HashMap<>();
map.put("pageNo", page);
map.put("pageSize", size);
String body = "";
try {
body = mapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
}
}
private static String getCameraPreviewUrl(String regionIndexCode, String protocol, String streamform,String host, String appKey, String appSecret) {
/* STEP1:设置平台参数,根据实际情况,设置host apKey appSecret 三个参数.*/
// artemis网关服务器ip端口
ArtemisConfig.host = host;
// 秘钥appKey
ArtemisConfig.appKey = appKey;
// 秘钥appSecret
ArtemisConfig.appSecret = appSecret;
/*** STEP2:设置OpenAPI接口的上下文*/
final String artemisPath = "/artemis";
final String previewUrlsApi = artemisPath + "/api/video/v2/cameras/previewURLs";
Map path = new HashMap(2) {
{
//根据现场环境部署确认是http还是https
put("https://", previewUrlsApi);
}
};
/* STEP4:设置参数提交方式*/
String contentType = "application/json";
/*** STEP5:组装请求参数*/
JSONObject jsonBody = new JSONObject();
jsonBody.put("cameraIndexCode", regionIndexCode);
//下面的参数是我用的参数,根据需要改成传输进来的参数
jsonBody.put("streamType", 0);
//hls返回m3u8
jsonBody.put("protocol", "ws");
jsonBody.put("transmode", 1);
//jsonBody.put("streamform", "rtp");
String body = jsonBody.toString();
String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
return result;
}
海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B
参数名称 | 数据类型 | 是否必须 | 参数描述 |
---|---|---|---|
cameraIndexCode | string | True | 监控点唯一标识,分页获取监控点资源接口获取返回参数cameraIndexCode |
streamType | integer | False | 码流类型,0:主码流 1:子码流 2:第三码流 参数不填,默认为主码流 |
protocol | string | False | 取流协议(应用层协议) “hik”:HIK私有协议,使用视频SDK进行播放时,传入此类型; “rtsp”:RTSP协议; “rtmp”:RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码); “hls”:HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码); “ws”:Websocket协议(一般用于H5视频播放器取流播放)。 参数不填,默认为HIK协议 |
transmode | integer | False | 传输协议(传输层协议),0:UDP 1:TCP 默认是TCP 注:GB28181 2011及以前版本只支持UDP传输 |
expand | string | False | 标识扩展内容,格式:key=value, 调用方根据其播放控件支持的解码格式选择相应的封装类型; 多个扩展时,以“&”隔开; 支持的内容详见附录F expand扩展内容说明 |
streamform | string | False | 输出码流转封装格式,“ps”:PS封装格式、“rtp”:RTP封装协议。 当protocol=rtsp时生效,且不传值时默认为RTP封装协议。 |
/**
* 设备控制
*/
public static String controlling(String cameraIndexCode, Integer action, String command, Integer speed, Integer presetIndex) {
{
/** STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.*/
ArtemisConfig.host = host; // artemis网关服务器ip端口
ArtemisConfig.appKey = appKey; // 秘钥appkey
ArtemisConfig.appSecret = appSecret;// 秘钥appSecret
String previewURLsApi = ARTEMIS_PATH + "/api/video/v1/ptzs/controlling";
Map path = new HashMap(2) {
{
//根据现场环境部署确认是http还是https
put("https://", previewURLsApi);
}
};
String contentType = "application/json";
JSONObject jsonBody = new JSONObject();
try {
jsonBody.put("cameraIndexCode", cameraIndexCode);
jsonBody.put("action", action);
jsonBody.put("command", command);
if (speed != null) {
jsonBody.put("speed", speed);
}
if (presetIndex != null) {
jsonBody.put("presetIndex", presetIndex);
}
} catch (JSONException e) {
e.printStackTrace();
}
String body = jsonBody.toString();
String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);
return result;
}
}
参数名称 | 数据类型 | 是否必须 | 参数描述 |
---|---|---|---|
cameraIndexCode | string | True | 监控点编号, 可通过分页获取监控点资源获取 |
action | number | True | 0-开始 ,1-停止 注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可 |
command | string | True | 不区分大小写 说明: LEFT 左转 RIGHT右转 UP 上转 DOWN 下转 ZOOM_IN 焦距变大 ZOOM_OUT 焦距变小 LEFT_UP 左上 LEFT_DOWN 左下 RIGHT_UP 右上 RIGHT_DOWN 右下 FOCUS_NEAR 焦点前移 FOCUS_FAR 焦点后移 IRIS_ENLARGE 光圈扩大 IRIS_REDUCE 光圈缩小 WIPER_SWITCH 接通雨刷开关 START_RECORD_TRACK 开始记录运行轨迹 STOP_RECORD_TRACK 停止记录运行轨迹 START_TRACK 开始运行轨迹 STOP_TRACK 停止运行轨迹; 以下命令presetIndex不可为空: GOTO_PRESET到预置点 |
speed | number | False | 云台速度,取值范围为1-100,默认50 |
presetIndex | number | False | 预置点编号,可通过查询预置点信息接口获取整数,通常在300以内 |
海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=20
RTSP 是一种应用层协议,用于控制媒体播放,而不是直接传输媒体数据。它通常与 RTP(实时传输协议)一起使用,RTP 负责传输媒体数据。
WebSocket 是一种双向通信协议,可在单个 TCP 连接上进行全双工通信。
HLS 是苹果公司提出的一种基于 HTTP 的流媒体传输协议,主要用于 iOS 设备和 Safari 浏览器播放。
RTMP 是 Adobe Systems 提出的一种流媒体传输协议,主要用于 Flash 播放器。