对接海康威视监控-hls实现h5播放
前戏
活干着干着突然老大丢给我一个css文件,说是改吧成Java的
public class OnLineVideoController {
private static String appkey = "xx";
private static String secret = "xxx";
private static String ip = "36.26.24.126";
private static int port = 4443;
//分页获取监控点资源
private static String cameras = "/artemis/api/resource/v1/cameras";
//获取监控点预览取流URL
private static String previewURLs = "/artemis/api/video/v1/cameras/previewURLs";
/**
* @description json中传入PageSize,和PageIndex 大小和页数 来获取列表数
*/
@ApiOperation(value = "获取摄像头列表")
@RequestMapping(value = "/queryList", method = RequestMethod.POST)
public String Cameras(@RequestBody JSONObject requestval) {
int pagesize = requestval.getInteger("pageSize");
if (pagesize == 0) pagesize = 10;
int pageindex = requestval.getInteger("pageIndex");
if (pageindex == 0) pageindex = 1;
Map<String, String> path = new HashMap<String, String>(2) {
{
put("https://", cameras);//根据现场环境部署确认是http还是https
}
};
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost(ip + ":" + port);
artemisConfig.setAppKey(appkey);
artemisConfig.setAppSecret(secret);
String contentType = "application/json";
JSONObject jsonBody = new JSONObject();
jsonBody.put("pageSize", pagesize);
jsonBody.put("pageNo", pageindex);
String body = jsonBody.toJSONString();
/**
* STEP6:调用接口
*/
String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
/* JSONObject object = JSONObject.parseObject(result);
JSONObject data = (JSONObject) object.get("data");
JSONArray dataList = (JSONArray) data.get("list");
// List<String> cameraCodeList = new ArrayList<>();
// 获取视频列表
for (Object obj : dataList) {
System.out.println(obj);
// cameraCodeList.add(((JSONObject) obj).getString("cameraIndexCode"));
}*/
return result;
}
/**
* @description 根据json中传入的cameraIndexCode,获取url
*/
@ApiOperation(value = "获取摄像头访问地址")
@RequestMapping(value = "/queryUrl", method = RequestMethod.POST)
public String PreviewURLs(@RequestParam String cameraIndexCode) {
Map<String, String> path = new HashMap<String, String>(2) {
{
put("https://", previewURLs);//根据现场环境部署确认是http还是https
}
};
ArtemisConfig artemisConfig = new ArtemisConfig();
artemisConfig.setHost(ip + ":" + port);
artemisConfig.setAppKey(appkey);
artemisConfig.setAppSecret(secret);
String contentType = "application/json";
String body = "{\"cameraIndexCode\":\"" + cameraIndexCode + "\",\"streamType\":1,\"protocol\":\"hls\",\"transmode\": 1}";
// String body = "{\"cameraIndexCode\":\"" + cameraIndexCode + "\",\"streamType\":1,\"protocol\":\"rtmp\",\"transmode\": 1}";
// String body = "{\"cameraIndexCode\":\"" + cameraIndexCode + "\",\"streamType\":0,\"protocol\":\"rtsp\",\"transmode\": 1,\"expand\":\"streamform=rtp\"}";
String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
return result;
}
public static void main(String[] args) {
String s = new OnLineVideoController().PreviewURLs("xx");
System.out.println(s);
}
}
改完之后获取到的url地址是 http://10.20.5.10:83/openUrl/xxxx/live.m3u8
然后发现可以获取各种格式的流地址
rtmp://10.20.5.10:1935/live/openUrl/zrPbrXi
rtsp://10.20.5.10:554/openUrl/A0HzEQM
内网地址无法访问。
就给了个css代码,没了僵住。
联系海康和对接方
海康那得到的结果是需要能访问10.20.5.10:83内网的机器,访问http://10.20.5.10:8001/center
将你的合作方账号中的domainId字段改成外网的就可以
大概配置这些,然后下面就全部打开就好
结果对接方说打开是下面这样的,找不到配置的地方。。。
我也是找了一圈没找到,后来海康那点了记下进去了,还真有。
直接贴连接
http://10.20.5.10:9017/artemis-web/consumer/index
然后按照上面的访问就可以
最后一步配置格式–成功
用新注册的账号密码,去获取流地址,获取到的是
http://36.26.24.126:83/openUrl/xx/live.m3u8
这种可以外网访问的。
这个时候要选择播放格式了。hls是可以直接h5解析的,其他格式要自己转码比较麻烦,我采用的是hls格式的
hls 协议支持的码流编码格式是 h264,音频格式是 aac(前端是复合流时),需要注意前 端的码流编码格式,要检查下前端设备上的编码格式和音频格式是否符合,编码格式是不是h264,音频格式是不是aac,如果不需要音频,可以把视频类型由复合流改为视频流
去找对接方登陆设备的网址,设置这两个格式
改完格式后,把获取到的流放到html中即可
附上对接文档和html
链接:https://pan.baidu.com/s/1f8UKS2QLOjh0bx2NOFOmDA
提取码:v126