根据萤石开放平台进行视频直播
第一步application.properties的配置:
#萤石个人用户编码 AppKey=3f29a131b62742949d7d841b7242060f #个人密文 Secret=920418c120bbffe4798b3e8364b564e0
第二步HTTP链接工具类,需要导入httpclient依赖包:
import com.front.FrontApplication; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.*; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller;import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set;/** *http链接工具类 * urltool * * @author * @create 2018-02-23 10:19 **/ @Controller public class HttpClient {protected final static Logger logger = LoggerFactory.getLogger(HttpClient.class);private RequestConfig requestConfig;private final static String ENCODING_DEFAULT = "UTF-8";private static HttpClient httpClient = new HttpClient();/** * 默认无参构造器 */ private HttpClient() {requestConfig = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(15000).build();// 设置请求和传输超时时间 }public static HttpClient singleInstacne() {return httpClient;}/** * @param url * @param * @return * @throws ClientProtocolException * @throws IOException */ public String sendWithPut(String url,String stringJson,Map<String,String> headers)throws ClientProtocolException, IOException {HttpPut httpPut= new HttpPut(url);httpPut.setConfig(requestConfig);CloseableHttpResponse response = null;String ret = null;CloseableHttpClient httpclient = null;//设置header httpPut.setHeader("Content-type", "application/json");if (headers != null && headers.size() > 0) {for (Map.Entry<String, String> entry : headers.entrySet()) {httpPut.setHeader(entry.getKey(),entry.getValue());}}//组织请求参数 StringEntity stringEntity = new StringEntity(stringJson,"utf-8");httpPut.setEntity(stringEntity);try {httpclient = HttpClients.createDefault();response = httpclient.execute(httpPut);HttpEntity entity = response.getEntity();ret = EntityUtils.toString(entity, ENCODING_DEFAULT);} catch (ClientProtocolException e) {logger.warn("Http client ClientProtocolException : " + e.getMessage());e.printStackTrace();throw e;} catch (IOException e) {logger.warn("Http client IOException : " + e.getMessage());e.printStackTrace();throw e;} finally {if (response != null) {response.close();}if (httpclient != null) {httpclient.close();}}//log.debug("receipt is : " + ret); return ret;}/** * @param url * @param * @return * @throws ClientProtocolException * @throws IOException */ public String sendWithDelete(String url, String message)throws ClientProtocolException, IOException {if (StringUtils.isNotBlank(message)) {url = url + "?" + message;}HttpDelete httpDelete= new HttpDelete(url);httpDelete.setConfig(requestConfig);CloseableHttpResponse response = null;String ret = null;CloseableHttpClient httpclient = null;try {httpclient = HttpClients.createDefault();response = httpclient.execute(httpDelete);HttpEntity entity = response.getEntity();ret = EntityUtils.toString(entity, ENCODING_DEFAULT);} catch (ClientProtocolException e) {logger.warn("Http client ClientProtocolException : " + e.getMessage());e.printStackTrace();throw e;} catch (IOException e) {logger.warn("Http client IOException : " + e.getMessage());e.printStackTrace();throw e;} finally {if (response != null) {response.close();}if (httpclient != null) {httpclient.close();}}//log.debug("receipt is : " + ret); return ret;}/** * @param url * @param json * @return * @throws ClientProtocolException * @throws IOException */ public String sendWithPost(String url, String json )throws ClientProtocolException, IOException {String APPLICATION_JSON = "application/json";String CONTENT_TYPE_TEXT_JSON = "text/json";HttpPost httpPost = new HttpPost(url);httpPost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);httpPost.setConfig(requestConfig);CloseableHttpResponse response = null;String ret = null;CloseableHttpClient httpclient = null;try {httpclient = HttpClients.createDefault();StringEntity se = new StringEntity(json,"utf-8");se.setContentType(CONTENT_TYPE_TEXT_JSON);se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON));httpPost.setEntity(se);response = httpclient.execute(httpPost);HttpEntity entity = response.getEntity();ret = EntityUtils.toString(entity, ENCODING_DEFAULT);} catch (ClientProtocolException e) {logger.warn("Http client ClientProtocolException : " + e.getMessage());e.printStackTrace();throw e;} catch (IOException e) {logger.warn("Http client IOException : " + e.getMessage());e.printStackTrace();throw e;} finally {if (response != null) {response.close();}if (httpclient != null) {httpclient.close();}}logger.debug("receipt is : " + ret);return ret;}/** * @Title: postForm * @Description: post封装from * @param url * @param params * @return */ private HttpPost postForm(String url, Map<String, String> params) {HttpPost httpost = new HttpPost(url);List<NameValuePair> nvps = new ArrayList<NameValuePair>();Set<String> keySet = params.keySet();for (String key : keySet) {nvps.add(new BasicNameValuePair(key, params.get(key)));}try {httpost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));} catch (UnsupportedEncodingException e) {logger.warn("Http client UnsupportedEncodingException : " + e.getMessage());e.printStackTrace();}return httpost;}/** * @param url * @param message * @return * @throws ClientProtocolException * @throws IOException */ public String sendWithGet(String url, String message)throws ClientProtocolException, IOException {if (StringUtils.isNotBlank(message)) {url = url + "?" + message;}System.out.println(url);HttpGet httpGet = new HttpGet(url);httpGet.setConfig(requestConfig);CloseableHttpResponse response = null;String ret = null;CloseableHttpClient httpclient = null;try {httpclient = HttpClients.createDefault();response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();ret = EntityUtils.toString(entity, ENCODING_DEFAULT);} catch (ClientProtocolException e) {logger.warn("Http client ClientProtocolException : " + e.getMessage());e.printStackTrace();throw e;} catch (IOException e) {logger.warn("Http client IOException : " + e.getMessage());e.printStackTrace();throw e;} finally {if (response != null) {response.close();}if (httpclient != null) {httpclient.close();}}return ret;}}
第三步获得令牌工具类:
import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller;import java.io.IOException;/** * 获得用户令牌的工具类 * * @author * @data 2018-4-2 14:18:58 * */ @Controller public class AccessTokenUtils {private static final Logger log = org.slf4j.LoggerFactory.getLogger(AccessTokenUtils.class);/** * 获得个人ID */ @Value("${AppKey}")private String AppKey;/** * 获得个人密文 */ @Value("${Secret}")private String Secret;/** * 获取令牌接口 */ private String openUrl="https://open.ys7.com/api/lapp/token/get";/** * 获得用户个人token * @return */ public String getAccessToken(){String jsonData = "{\"appKey\":" + AppKey + "&\"appSecret\":"+Secret+"}";HttpClient httpClient = HttpClient.singleInstacne();String message= null;try {message= httpClient.sendWithPost(openUrl+"?appKey="+AppKey+"&appSecret="+Secret,jsonData);if(StringUtils.isNotBlank(message)){//将返回去的json转成对象 JSONObject jsonObject = JSONObject.fromObject(message);if(jsonObject.containsKey("code")){String code = jsonObject.getString("code");int i = Integer.parseInt(code);String error = ErrorManage.getError(i);log.info("获取令牌响应的结果是:"+error);}if(jsonObject.containsKey("data")){String data = jsonObject.getString("data");JSONObject jsonObject1 = JSONObject.fromObject(data);if(jsonObject1.containsKey("accessToken")){String accessToken = jsonObject1.getString("accessToken");return accessToken;}}}} catch (IOException e) {e.printStackTrace();}return null;} }
第四步请求获得用户设备信息:
import com.front.entity.Video; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import java.io.IOException; import java.util.ArrayList; import java.util.List;/** * 查询用户设备信息工具类 * * @author * @date 2018-4-4 16:08:42 */ @Controller public class DeviceDataUtils {private static final Logger log= LoggerFactory.getLogger(DeviceDataUtils.class);/** * 获取用户令牌 */ @Autowired private AccessTokenUtils accessTokenUtils;/** * 获取设备信息列表 * @return */ public List<Video> getDevices() {//查询设备列表请求接口 String url="https://open.ys7.com/api/lapp/device/list";//获得用户令牌 String accessToken = accessTokenUtils.getAccessToken();//起始页 int pageStart=0;//每页显示数 int pageSize=50;//创建设备集合 List<Video> list=new ArrayList<>();//创建链接对象 HttpClient client= HttpClient.singleInstacne();String message=null;try {String jsonData = "{\"accessToken\":" + accessToken + "&\"pageStart\":"+pageStart+"&\"pageSize\":"+pageSize+"}";message = client.sendWithPost(url + "?accessToken=" + accessToken + "&pageStart=" + pageStart + "&pageSize=" + pageSize,jsonData);if(StringUtils.isNotBlank(message)){JSONObject jsonObject = JSONObject.fromObject(message);if(jsonObject.containsKey("data")){String data = jsonObject.getString("data");JSONArray jsonArray = JSONArray.fromObject(data);for (Object o : jsonArray) {//创建设备对象 Video video =new Video();JSONObject jsonObject1 = JSONObject.fromObject(o);//设置设备序列号 video.setDeviceSerial(jsonObject1.getString("deviceSerial"));//设置设备名 video.setDeviceName(jsonObject1.getString("deviceName"));//设置设备类型 video.setDeviceType(jsonObject1.getString("deviceType"));//设置设备版本号 video.setDeviceVersion(jsonObject1.getString("deviceVersion"));list.add(video);}String code = ErrorManage.getError(Integer.parseInt(jsonObject.getString("code")));log.info("查询设备分页响应状态:"+code);}}} catch (IOException e) {e.printStackTrace();}return list;}}
第五步获得直播地址:
import com.front.entity.Video; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import java.io.IOException; import java.util.ArrayList; import java.util.List;/** * 用户视频直播列表工具类 */ @Controller public class DeviceLiveBroadcast {private static final Logger log= LoggerFactory.getLogger(DeviceLiveBroadcast.class);/** * 获得用户令牌 */ @Autowired private AccessTokenUtils accessTokenUtils;/** * 查询用户下直播设备列表 * @return */ public List<Video> getLiveBroadcast() {//查询播放设备列表接口地址 String url="https://open.ys7.com/api/lapp/live/video/list";//获得用户令牌 String accessToken = accessTokenUtils.getAccessToken();//起始页 int pageStart=0;//每页显示数 int pageSize=50;//创建设备集合 List<Video> list=new ArrayList<>();//创建链接对象 HttpClient client= HttpClient.singleInstacne();String message=null;String jsonData = "{\"accessToken\":" + accessToken + "&\"pageStart\":"+pageStart+"&\"pageSize\":"+pageSize+"}";try {message=client.sendWithPost(url+"?accessToken=" + accessToken + "&pageStart=" + pageStart + "&pageSize=" + pageSize,jsonData);if(StringUtils.isNotBlank(message)){JSONObject jsonObject = JSONObject.fromObject(message);if(jsonObject.containsKey("data")){String data = jsonObject.getString("data");JSONArray jsonArray = JSONArray.fromObject(data);for (Object o : jsonArray) {//创建设备对象 Video video =new Video();JSONObject jsonObject1 = JSONObject.fromObject(o);//设置设备序列号 video.setDeviceSerial(jsonObject1.getString("deviceSerial"));//设置设备通道 video.setChannelNo(Integer.parseInt(jsonObject1.getString("channelNo")));//设置设备hls协议标准播放地址 video.setHls(jsonObject1.getString("liveAddress"));//设置设备hls协议高清播放地址 video.setHlsHd(jsonObject1.getString("hdAddress"));//设置设备rtmp协议标准播放地址 video.setRtmp(jsonObject1.getString("rtmp"));//设置设备rtmp高清播放地址 video.setRtmpHd(jsonObject1.getString("rtmpHd"));list.add(video);}String code = ErrorManage.getError(Integer.parseInt(jsonObject.getString("code")));log.info("查询设备播放列表分页响应状态:"+code);}}} catch (IOException e) {e.printStackTrace();}return list;} }
第六步设备实体类:
import com.fasterxml.jackson.annotation.JsonProperty; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field;/** * 视频实体类 * * @author * @date 2018-4-3 10:13:20 */ @Document(collection = "Video") public class Video {/** * 设备ID */ @Id private String id;/** * 设备所属组ID */ @Field("groupId")@JsonProperty("groupId")private String groupId;/** * 设备序列号 */ @Field("deviceSerial")@JsonProperty("deviceSerial")private String deviceSerial;/** * 设备名称 */ @Field("deviceName")@JsonProperty("deviceName")private String deviceName;/** * 设备类型 */ @Field("deviceType")@JsonProperty("deviceType")private String deviceType;/** * 设备版本号 */ @Field("deviceVersion")@JsonProperty("deviceVersion")private String deviceVersion;/** * 设备通道号 默认是1 */ @Field("channelNo")@JsonProperty("channelNo")private Integer channelNo;/** * hls协议标准直播地址 */ @Field("hls")@JsonProperty("hls")private String hls;/** * hls协议高清直播地址 */ @Field("hlsHd")@JsonProperty("hlsHd")private String hlsHd;/** * rtmp协议标准播放地址 */ @Field("rtmp")@JsonProperty("rtmp")private String rtmp;/** * rtmp协议高清直播地址 */ @Field("rtmpHd")@JsonProperty("rtmpHd")private String rtmpHd;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public String getHls() {return hls;}public void setHls(String hls) {this.hls = hls;}public String getHlsHd() {return hlsHd;}public void setHlsHd(String hlsHd) {this.hlsHd = hlsHd;}public String getRtmp() {return rtmp;}public void setRtmp(String rtmp) {this.rtmp = rtmp;}public String getRtmpHd() {return rtmpHd;}public void setRtmpHd(String rtmpHd) {this.rtmpHd = rtmpHd;}public Integer getChannelNo() {return channelNo;}public void setChannelNo(Integer channelNo) {this.channelNo = channelNo;}public String getDeviceSerial() {return deviceSerial;}public void setDeviceSerial(String deviceSerial) {this.deviceSerial = deviceSerial;}public String getDeviceName() {return deviceName;}public void setDeviceName(String deviceName) {this.deviceName = deviceName;}public String getDeviceType() {return deviceType;}public void setDeviceType(String deviceType) {this.deviceType = deviceType;}public String getDeviceVersion() {return deviceVersion;}public void setDeviceVersion(String deviceVersion) {this.deviceVersion = deviceVersion;} }
根据萤石开放平台进行视频直播相关推荐
- 萤石开放平台(视屏直播)
萤石开放平台(视屏直播) 1.应用的建立 登入萤石开放平台的后台,[开发者服务]-[我的应用],建立一个应用,用于获取 AppKey,AppSecret 2.设置直播 [开发者服务]-[我的资源] ...
- 萤石开放平台的二次开发——摄像头取流至微博直播平台
1.申请开放平台账号注册 1.1登录萤石开放平台主页:https://open.ys7.com/cn/s/index 1.2点击首页左上方的"注册"入口 1.3进入注册页面:htt ...
- 萤石开放平台二次开发——摄像头取流至抖音直播平台
抖音是一款全民都在使用的社交软件,拥有着上亿的用户,基于如此庞大用户量,不少用户在抖音上开展直播业务. 接下来将为大家介绍如何将接在萤石开放平台上的设备画面同步至抖音直播间. 准备工具: 抖音直播伴侣 ...
- 萤石开放平台——怎么保存下载摄像头的视频片段?
除了本地SD卡之外,还能怎么把摄像头的视频保存下来呢? 现在有云存储和云录制两种方式,其中云存储只提供事件存储,云录制可以通过云录制可以将告警消息产生的时刻对应的视频进行录制,实现告警消息和视频录制之 ...
- 萤石开放平台——摄像头取流有问题怎么排查?
监控地址可以用我们在线工具测试:EZOPEN播放协议 直播地址可以我们在线工具测试:https://open.ys7.com/jssdk/live.html,也可以通过VLC播放器(https://w ...
- Web端接入萤石云平台的视频数据
前言 因为项目需要在Web和App上展示实时视频流信息,所以之前做项目时尝试了很多方法.有用vlc插件播放的(由于使用到了插件,所以安卓App.微信小程序都不能显示视频,最后也放弃了),也有使用海康威 ...
- 萤石开放平台——怎么通过API接口远程添加摄像头?
高科技摄像头特别是海康萤石摄像头,已经不再只局限于简单的视频功能,特别是智能AI的普及,摄像头也华丽变身成了一个个独立的智能个体,可以实现人脸抓拍,人形检测,客流统计等店铺值守场景,也可以实现安全帽识 ...
- 萤石开放平台-怎么做账号之间的联动操作?(设备托管)
典型场景: 我是一个总部(公司下有多地分部)技术开发者,现在总部让我把所有地区分布的摄像头对接到总部进行统一管理.这类场景无论在连锁门店.工地.养殖的行业下都是常见的技术实现要求. 难点: 需要保证分 ...
- 海康威视网络摄像头开发流程(一)------ 萤石开放平台的账号申请
简述 在大二下学期的时候,做过海康威视网络摄像头的系统,当时这个是我首次独立开发的系统,所以一切都是零起步.在开发过程中,遇到了很多问题,当然也都被我解决了(哈哈).今年寒假由于疫情的原因,学校开学推 ...
最新文章
- 【数据库】sqlite中的限制:数据库大小、表数、列数、行数、参数个数、连接数等
- 系统目录结构文件类型及ls.alias命令
- Android线程间通信的几种实现方式
- Java 导出excel表 POI
- Metasploit漏洞利用基础教程要出版了
- 导出滴滴行程单_身穿统一的绿马甲!滴滴货运小哥上线首日即爆单
- 【科普】一文把数据科学、人工智能与机器学习讲清楚
- Scala教程之:Option-Some-None
- ios 查询mysql数据库操作系统_iOS数据库FMDB--增删改查(模糊查询)详细介绍
- python编程学习做什么-什么样的人要学点python编程?请你对号入座
- 42 FI配置-财务会计-固定资产-组织结构-将折旧表分配至公司代码
- 机器学习第三回——逻辑回归 (Logistic Regression)
- jquery 取的单选按钮组的值
- Flutter Convex Bottom 底部导航
- java调用shiny_使用Shiny fileInput仅获取路径
- 关于我为什么跨考计算机研究生以及对未来的思考
- 集丰照明|一帖说清6种防眩射灯应用在家装修上
- 双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(十一):时序逻辑...
- 7-2 程序改错题4 (5 分)
- 基于python实现的聊天室(客户端:一)窗口设置