前言:上一篇博文已经分享了如何获取直播列表,本篇博文是在上一篇博文的基础上做了完善,实现了实时预览和云台控制。因此,部分代码会有重复。
步骤一:在 萤石云开发平台 注册开发者并添加球机设备
步骤二:获取accessToken和直播列表请参考上一篇博文 海康威视4G球机对接萤石云平台获取直播视频列表
步骤三:云台控制
后端代码:action类
package com.jk.action;
import com.jk.comm.action.BaseAction;
import com.jiankong.util.HttpRequest;
import com.jiankong.util.TokenThread;
public class JianKongAction extends BaseAction{
private String device; //设备序列号,存在英文字母的设备序列号,字母需为大写
private Integer channelNo; //通道号
private Integer direction; //操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距
private Integer speed; //云台速度:0-慢,1-适中,2-快,海康设备参数不可为0
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public Integer getChannelNo() {
return channelNo;
}
public void setChannelNo(Integer channelNo) {
this.channelNo = channelNo;
}
public Integer getDirection() {
return direction;
}
public void setDirection(Integer direction) {
this.direction = direction;
}
public Integer getSpeed() {
return speed;
}
public void setSpeed(Integer speed) {
this.speed = speed;
}
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 获取直播列表
*/
public void getList(){
String accessToken = MyHttpRequest.getAccessToken("https://open.ys7.com/api/lapp/token/get?appKey=xxxxxxxxxxxxxxxx&appSecret=xxxxxxxxxxxxxxxxx");
//获取直播列表
String list = HttpRequest.getList("https://open.ys7.com/api/lapp/live/video/list?accessToken="+accessToken+"&pageStart=0&pageSize=3");
printJsonString(list);
}
/**
* 云台控制
* 开始云台控制之后必须先调用停止云台控制接口才能进行其他操作,包括其他方向的云台转动
*/
public void setCloudControl(){
String accessToken = MyHttpRequest.getAccessToken("https://open.ys7.com/api/lapp/token/get?appKey=xxxxxxxxxxxxxxxx&appSecret=xxxxxxxxxxxxxxxxx");
String start = "accessToken="+accessToken+"&deviceSerial="+device+"&channelNo="+channelNo+"&direction="+direction+"&speed="+speed;
String stop = "accessToken="+accessToken+"&deviceSerial="+device+"&channelNo="+channelNo+"&direction="+direction;
jsonMsg = HttpRequest.setStartCloudControl("https://open.ys7.com/api/lapp/device/ptz/start?"+start);
if(jsonMsg.equals("开始云台控制成功")){
HttpRequest.setStopCloudControl("https://open.ys7.com/api/lapp/device/ptz/stop?"+stop);
}
printJsonString(jsonMsg);
}
}
action父类:
public class BaseAction extends ActionSupport {
protected int page = 1; //当前第几页
protected int rows = 10; // 每页数量
protected String jsonMsg = "";
/**
* 打印Json字符串返回给客户
* @param jsonString
* @Description:
*/
protected void printJsonString ( String jsonString ) {
PrintWriter out = null;
try {
HttpServletResponse response = getResponse();
response.setCharacterEncoding ( "UTF-8" );
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter ();
out.print ( jsonString );
}
catch (IOException e) {
e.printStackTrace ();
}
finally {
out.close ();
}
}
}
util类
package com.jiankong.util;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpRequest {
/**
* 获取监控应用的 accessToken
* @param url
* @return
*/
public static String getAccessToken(String url) {
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS,true);
HttpPost httpost = getPostMethod(url);
String accessToken = "";
try {
try {
HttpResponse response = client.execute(httpost);
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("jsonStr:"+jsonStr);
JSONObject jsStr = JSONObject.fromObject(jsonStr);
System.out.println("jsStr:"+jsStr);
String code = String.valueOf(jsStr.get("code"));
if(code.equals("200")){
String data = jsStr.getString("data");
JSONObject dataJson = JSONObject.fromObject(data);
accessToken = dataJson.getString("accessToken");
return accessToken;
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(!httpost.isAborted()){
httpost.abort();
}
client.getConnectionManager().shutdown();