对接海康威视监控-hls实现h5播放
- 前戏
- 联系海康和对接方
- 最后一步配置格式--成功
- 附上对接文档和html
前戏
活干着干着突然老大丢给我一个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";//获取监控点预览取流URLprivate 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