After-sales service
开发文档
- 
								
								单点登录接口
- 
								
								录播对接规范
- 
								
								互动对接规范
- 
								
								软件下载
- 
							单点登录接口1. 单点登录的应用场景 1. 用户登录XX平台门户。 2. XX平台保存用户会话信息,在浏览器COOKIE中保存用户TGC信息。 3. 用户在XX平台选择应用,XX平台将用户重向至应用。 4. 用户在应用内访问受保护资源,应用将用户重定至XX平台。 5. XX平台从浏览器中获取用户TGC信息,并根据TGC校验用户会话。 6. XX平台生成ST,并携带ST将用户从XX平台重定向至应用。 7. 应用使用ST请求平台校验。 8. 平台向应用返回校验结果及用户信息。 1.1. 单点登录配置说明:以下给出的配置是通用的客户端配置Demo,只适合跳转地址固定的场景。如有其他特殊需求,需客户端程序自己实现。 Java语言客户端配置(示例-ssotest 项目) 1.1.1. ssotest 项目说明ssotest 项目是由maven管理的javaweb项目,项目所依赖的jar文件包都在项目根目录下的pom.xml 文件内定义,文件内除com.sanbu.shiro jar包外均为maven仓库的官方jar包。  1.1.2. 在项目web.xml文件添加以下内容登出配置  shiroFilter过滤器  本过滤器用于过滤项目中需要使用单点登录的服务信息。 1.1.3. Spring配置详见 1.1.4. 配置cas.properties 参数说明 序号 参数名称 说明 1 cas.server.url.prefix 单点登录认证服务地址 2 Cas.service 客户端认证服务地址 3 login.url 登陆拦截认证跳转地址 1.1.5. 取得用户的信息用户登录后,可以通过接口取得用户信息,这些信息包含在java.util. map对象中。 例如: 取得登录用户的信息 import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.shiro.subject.Subject; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.PrincipalCollection; public class LoginUserUtil { public static Map getLoginUser(){ Map<?, ?> userMap = null; Subject subject = SecurityUtils.getSubject(); PrincipalCollection principals = subject.getPrincipals(); if(principals!=null&&!principals.isEmpty()){ List<?> list=principals.asList(); if(!list.isEmpty()){ userMap = (Map<?, ?>) list.get(1); } } return userMap; } ... ... } 数据说明: 序号 字段名(Map的Key) 类型 说明 1 id string 用户识别ID 2 username string 用户名 3 usertype string 用户类型 4 schoolid string 用户学校识别ID 5 platmark string 用户平台识别ID 6 schoolgroupid string 用户学校组识别id 2. 接口参考2.1. 单点登录2.1.1. 单点登录接口单点登录接口用于显示登录界面,登录成功后,单点登录平台生成票据信息ticket,单点登录客户应用携带票据信息ticket,并重定向到service参数所指定的地址 。 参数说明 序号 参数名称 是否必须 类型 描述 1 service 必选 string 登录成功后重定向的应用的目标地址即应用的入口地址。 例如:http://ip:port/ssotest/ 返回说明 登录成功后获取票据信息ticket数据并缓存,然后重定向到目标地址。 2.1.2. Ticket验证接口验证Ticket,验证成功后并返回当前登录用户信息。 接口说明 url http://10.1.53.100/middlecas/serviceValidate 协议 http 请求方式 post 格式 xml 接口方向 应用à平台 参数说明 序号 参数名称 是否必须 类型 描述 1 ticket 必选 string 单点登录成功后生成的票据信息 2 serivce 必选 string http://ip:port/ssotest/ 例: http://10.1.53.100/middlecas/serviceValidate?ticket=SO6YEWI93093UTYDVXBZ4513&service=http://ip:port/ssotest/ 返回说明 序号 字段名 约束 类型 说明 1 cas:serviceResponse 必选 1.1 cas:authenticationSuccess 必选 1.1.1 cas:user 必选 String 用户标识ID 1.1.2 cas:attributes 必选 1.1.2.1 cas:truename 必选 String 用户真实名称 1.1.2.2 cas:mobile 可选 String 手机号 1.1.2.3 cas:usertype 必选 String 用户类型 1.1.2.4 cas:schoolgroupid 必选 String 用户学校分组标识ID 1.1.2.5 cas:password 可选 String 用户密码 1.1.2.6 cas:schoolid 必选 String 归属机构\学校ID 1.1.2.7 cas:name 必选 String 用户名 1.1.2.8 cas:groupleader 可选 String 是否是组长 1.1.2.9 cas:registertype 可选 String 用户注册方式 1.1.2.10 cas:id 必选 String 用户标识ID,与1.1.1一致 1.1.2.11 cas:usercode 可选 String 用户编码 1.1.2.12 cas:platmark 必选 String 用户平台ID 1.1.2.13 cas:email 可选 String 用户邮件地址 示例:验证通过报文 <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationSuccess> <!—用户ID --> <cas:user>6769bc63-636e-423b-9d19-e6b8a9f13227</cas:user> <!—附加信息 --> <cas:attributes> <!—用户真实名称 --> <cas:truename>XXXX</cas:truename> <!—手机号 --> <cas:mobile/> <!—用户类型 --> <cas:usertype>e9f46d6c-c44d-463b-a6ff-80b74cd3edee</cas:usertype> <!用户学校分组标识ID --> <cas:schoolgroupid/> <cas:password/> <!—归属机构\学校ID --> <cas:schoolid>a57f69f6-89ff-4a1d-aa69-799d5db1b15d</cas:schoolid> <!—用户名 --> <cas:name>jssadmin</cas:name> <!—是否是组长 --> <cas:groupleader>0</cas:groupleader> <!—用户注册方式 --> <cas:registertype>0</cas:registertype> <!—用户ID --> <cas:id>6769bc63-636e-423b-9d19-e6b8a9f13227</cas:id> <cas:usercode/> <!—用户平台ID --> <cas:platmark>e7fcf0e4-6fd7-49a0-9343-847d86be2822</cas:platmark> <!—用户邮箱 --> <cas:email/> <cas:username>6769bc63-636e-423b-9d19-e6b8a9f13227</cas:username> </cas:attributes> <!—附加结束 --> </cas:authenticationSuccess> </cas:serviceResponse> 验证不通过的报文: <cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationFailure code="INVALID_REQUEST">必须同时提供'service'和'ticket'参数</cas:authenticationFailure> </cas:serviceResponse> 客户端解释XML报文对验证通过的报文中取得<cas:id>节点的值,得到当前登录的用户标识ID。 客户端收到校验通过后的报文,取得用户标识ID,根据ID建立本地的用户会话。会话时间默认的保持时间为30分钟;或根据需要具体配置,客户端再根据ID调用平台接口取得当前用户的用户信息。 2.2. OAuth接口XX用户平台集成了OAuth接口,用于提供给非WEB应用系统。非WEB应用系统可以使用OAuth接口,访问平台的资源数据。 2.2.1. OAuth接口的使用平台中封装了OAuth接口的调用。要使用OAuth接口,必须使用平台提供的jar包:  middleware.core-1.0.3.A.8-pg.jar.zip middleware.core-1.0.3.A.8-pg.jar.zip系统封装了com.3bu.middle.util.OAuthClient对象,用于访问OAuth接口。 2.2.2. OAuthClient对象说明构造函数 序号 参数名称 数据类型 说明 1 serverUrl String 平台服务应用的URL 2 authorizeUrl String 认证地址,一般是/oauth2/authorize 3 redirectUrl String 重定向地址,使用null的缺省值: /oauth2/access_token 登录 l 方法名: login l 参数说明: 序号 参数名称 数据类型 说明 1 platformId String 平台ID 2 username String 用户名 3 password String 密码 4 clientId String 客户ID, 通常使用常量 "6b4cfaea-7016-11e5-bd19-68f728833c05" l 返回说明:json类型: 序号 参数名称 数据类型 说明 1 access_token String 令牌 l 异常: HttpException, IOException, JSONException, Exception 调用POST接口 l 方法名: callPost l 参数说明: 序号 参数名称 数据类型 说明 1 postUrl String API地址 2 params Map<String, String> 参数 3 contentType String 数据类型 l 返回类型: Object类型,JSONObject/JSONArray,视具体接口而定 l 异常: IOException 调用GET接口 l 方法名: callGet l 参数说明: 序号 参数名称 数据类型 说明 1 getUrl API地址 2 params Map<String, String> 参数 3 contentType String 数据类型 l 返回类型: Object类型,JSONObject/JSONArray,视具体接口而定 l 异常: IOException 调用GET接口(重载方法) l 方法名: callGet l 参数说明: 序号 参数名称 数据类型 说明 1 getUrl API地址 2 params Map<String, String> 参数 3 header Map<String, String> HTTP定制HEAD l 返回类型: Object类型,JSONObject/JSONArray,视具体接口而定 l 异常: IOException 2.3. 调用示例import java.util.HashMap; import java.util.Map; import javax.ws.rs.core.MediaType; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import com.3bu.middle.util.OAuthClient /** * OAuth访问示例类 */ public class TestCenterOAuthCaller { //平台服务应用的URL final static String ServiceApp = "https://dev.3bu.com:8443/middlecenter"; final static String AuthorizeUrl="/oauth2/authorize"; public static void main(String[] args) throws Exception { OAuthClient client=new OAuthClient(ServiceApp, AuthorizeUrl, null); //平台租户ID String platformId = "29a5350d-aee2-4c30-894e-47124f4c6084"; String username = "xxxx"; //用户名 String password = "yyyyyy"; //密码 String clientID = "6b4cfaea-7016-11e5-bd19-68f728833c05" ; //常量 JSONObject json = client.login( platformId, username, password, clientID); //API路径 final String apiUrl ="/service/api/v1/auth/area/areaTree/"; Map<String,String> para = new HashMap<>(); para.put("nodeid", "1"); JSONArray data=(JSONArray)client.callPost( apiUrl, para, MediaType.APPLICATION_FORM_URLENCODED); System.out.println(data); } } 
- 
							录播对接规范此文档仅用于实现用户的应用场景使用,其它任何人都不能用于其它用途。 1. 前言1.1. 背景此文档仅用于实现用户的应用场景使用,其它任何人都不能用于其它用途。 三步TSCloud平台控制第三方录播流程图:  1.1. 基础信息品牌 产品负责人: 研发负责人: 产品型号: 软件版本: 其它: 备注: 1. 为方便对接以上信息要求真实可靠; 2. 如果用户现场环境中软件版本与填表不一至,必须同步提交该软件版本; 2. 连接通讯2.1. 基本通讯需要提供:品牌及型号识别、传输协议、数据传输格式、验证方式、通讯端口等信息, 功能说明 条件 发送 返回 其它 例如: tcp客户端 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * TCP链接 */ public class TCPClient { /* 日志 */ private Logger logger = LoggerFactory.getLogger(TCPClient.class); /* socket实例 */ private Socket s; private DataOutputStream out private DataInputStream in; /** * 连接设备 * @param ddr 地址 * @param port 端口 */ public void connect(String ddr, int port) { try { s = new Socket(ddr, port); if (s.isConnected()) { logger.info("连接录播 :" + ddr + " 端口:" + port + "成功"); } } catch (UnknownHostException e) { logger.error("错误的地址" + e.getMessage(), e); } catch (IOException e) { logger.error("建立连接失败" + e.getMessage(), e); } } /** * 发送消息 * @param msg 指令 */ public void sendMag(String msg) { try { out = new DataOutputStream(s.getOutputStream()); byte[] bt = msg.getBytes(); out.write(bt); } catch (IOException e) { logger.error("发送消息失败" + e.getMessage(), e); } } /** * 返回信息 */ public String response() { StringBuffer result = new StringBuffer(); try { in = new DataInputStream(s.getInputStream()); byte[] buf = new byte[2048]; int readLen = 0; while ((readLen = in.read(buf)) != -1) { String s1 = new String(buf,0,readLen,"UTF-8"); result.append(s1); } out.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } String rest = result.toString().trim(); return rest; } } /** * mc1000客户端 */ public class MC1000 { private Logger logger = LoggerFactory.getLogger(MC1000.class); public TCPClient TCPClient; public MC1000(){ TCPClient = new TCPClient(); TCPClient.connect("10.1.0.81", 11092); TCPClient.sendMag("<CMD id=\"login_req\"><userid>admin</userid><passwd>admin</passwd><need_db></need_db></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 打开录制 * @param rec_mode 录制模式(0:电影模式,1:资源模式,2:电影+资源) */ public void startRecord(String rec_mode) { TCPClient.sendMag("<CMD id=\"start_rec\"><rec_mode>" + rec_mode + "</rec_mode></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 关闭录制 */ public void stopRecord() { TCPClient.sendMag("<CMD id=\"stop_rec\"></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 设置录制模式 * @param recMode 录制模式(0:电影模式,1:资源模式,2:电影+资源) */ public void setRecMode(String rec_mode) { TCPClient.sendMag("<CMD id=\"set_rec_mode\"><rec_mode>" + rec_mode + "</rec_mode></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 设置自动跟踪 * @param trackMode 跟踪(0:自动跟踪 1:手动跟踪) */ public void setTrackMode(String trackMode) { TCPClient.sendMag("<CMD id=\"set_track_mode\"><track_mode>" + trackMode + "</track_mode>"); logger.info("设备返回信息" + TCPClient.response()); } } 2.2. 网络连接用来连接设备,连接时会传用户名和密码给设备。连接上设备才可以操作设备,需要提供如何通过网络指令登录录播设备、如何心跳、如何进行验证方法等。 功能说明 条件 发送 返回 其它 备注: 1. 如果录播没有心跳功能,建议指定个查询状态用于心跳连接; 2. 建议此用户名或密码具有一定的权限,用户无法更改密码; 一段代码分别标注包含以上信息。 public MC1000(){ TCPClient = new TCPClient(); //初试化客户端时new一个TCP连接对象 TCPClient.connect("10.1.0.81", 11092);//连接上ip为10.1.0.81的设备 TCPClient.sendMag("<CMD id=\"login_req\"><userid>admin</userid><passwd>admin</passwd><need_db></need_db></CMD>");//发送验证信息给设备(包括用户名,密码) logger.info("设备返回信息" + TCPClient.response());//验证成功,设备返回信息(需要处理的信息) } 备注:登录成功后,设备会返回所有设备相关信息。 3. 管理功能3.1. 在线状态提供如何获取录播的在线状态、录制状态、直播状态、文件上传状态、硬盘剩余空间等状态, 功能说明 发送 返回 其它 例如: /** * 心跳 */ public void heartBeaten() { TCPClient.sendMag("<CMD id=\"heart_beaten\"></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:mc1000支持心跳,心跳指令heart_beaten,会返回设备状态(比如:在线状态、录制状态、直播状态、画面状态等) 3.2. 开关机通过网络指令实现对录播设备开机或关机,如果不能返回状态需要说明是否可以重复发送。 功能说明 发送 返回 其它 一段代码分别标注包含以上信息。 例如: /** * 关机/重启 * @param poweroff 0:关机 1:重启 */ public void reboot(String poweroff) { TCPClient.sendMag("<CMD id=\"reboot\"><poweroff>" + poweroff + "</poweroff>");//发送指令给设备,参数poweroff(0:关机 1:重启) logger.info("设备返回信息" + TCPClient.response());//设备返回信息(需要处理) } 3.3. 查询录播详情可以查询录制、直播、接口等参数的详情。 功能说明 条件 发送 返回 其它 备注:mc1000会主动推送设备详情 4. 基本录直播功能4.1. 录制功能包括录制的开始、暂停、结束,如果录制开始需要传参数,请详细说明传哪些参数。 功能说明 条件 发送 返回 其它 /** * 打开录制 * @param rec_mode 录制模式(0:电影模式,1:资源模式,2:电影+资源) */ public void startRecord(String rec_mode) { TCPClient.sendMag("<CMD id=\"start_rec\"><rec_mode>" + rec_mode + "</rec_mode></CMD>");//打开录制需要传入录制模式 logger.info("设备返回信息" + TCPClient.response());//这里会返回设备当前录制信息(比如:录制状态,录制时间,录制开始时间,录制模式...) } 备注:mc1000打开录制,需要传入参数录制模式(0:电影模式,1:资源模式,2:电影+资源)。 /** * 关闭录制 */ public void stopRecord() { TCPClient.sendMag("<CMD id=\"stop_rec\"></CMD>");//发送关闭录制指令即可 logger.info("设备返回信息" + TCPClient.response());//返回录制信息 } 4.2. 录制模式包括电影、资源、电影+资源模式,需要说明更改的条件,例如录制开始时不允许更改、或部分场景下不允许更改等。 功能说明 条件 发送 返回 其它 /** * 设置录制模式 * @param recMode 录制模式(0:电影模式,1:资源模式,2:电影+资源) */ public void setRecMode(String rec_mode) { TCPClient.sendMag("<CMD id=\"set_rec_mode\"><rec_mode>" + rec_mode + "</rec_mode></CMD>");//设置录制模式(参数:0:电影模式,1:资源模式,2:电影+资源) logger.info("设备返回信息" + TCPClient.response());//返回录制模式 } 4.3. 画面分屏可以设置的画面分屏模式,例如单屏、画中画等。 功能说明 条件 发送 返回 其它 /** * 设置画面分屏 * @param policy_id 分屏策略(0:互动单屏、1:互动(无VGA)、2:互动(无学生)、3:互动四分屏、4:精品课堂-三分屏、5:学生+VGA、6:精品课堂单屏、7:老师+VGA(画中画)、8:老师+VGA(左右)、9:老师+学生(画中画)、10:老师+学生(左右)、11:听课课堂) * pip_pos 画中画小画面位置(lu:左上、ld:左下、ru:右上、rd:右下) */ public void splitScreen(String policy_id,String pip_pos) { TCPClient.sendMag("<CMD id=\"set_pic_policy\"><pic_id>0</pic_id><policy_id>" + policy_id + "</policy_id><pip_pos>" + pip_pos + "</pip_pos><save_it>1</save_it><use_it>1</use_it></CMD>"); //policy_id 分屏策略(0:互动单屏、1:互动(无VGA)、2:互动(无学生)、3:互动四分屏、4:精品课堂-三分屏、5:学生+VGA、6:精品课堂单屏、7:老师+VGA(画中画)、8:老师+VGA(左右)、9:老师+学生(画中画)、10:老师+学生(左右)、11:听课课堂) pip_pos 画中画小画面位置(lu:左上、ld:左下、ru:右上、rd:右下) logger.info("设备返回信息" + TCPClient.response());//返回画面状态 } 备注:mc1000分屏主要两个重要参数policy_id(分屏策略)、pip_pos(画中画小画面位置),其他的参数设置默认参数即可。 4.4. 画面切换可以切换老师、学生、课件等某个画面到主画面或预览画面。 功能说明 条件 发送 返回 其它 /** * 设置主画面 * @param major 主画面(tq:老师全景、tt:老师特写、bk:板书、sq:学生全景、st:学生特写、vga:vga、 hd:互动远端、-1:自动) */ public void setMajor(String major) { TCPClient.sendMag("<CMD id=\"set_major\"><major>" + major + "</major></CMD>");//设置主画面(参数:tq:老师全景、tt:老师特写、bk:板书、sq:学生全景、st:学生特写、vga:vga、 hd:互动远端、-1:自动) logger.info("设备返回信息" + TCPClient.response());//返回画面状态 } 备注:mc1000主画面支持老师全景(tq)、老师特写(tt)、板书(bk)、学生全景(sq)、学生特写(st)、vga(vga)、互动远端(hd)、自动(-1)。 4.5. 直播功能控制录播直播的配置,例如可配置直播开关、推流地址、协议、分辨率等。 功能说明 条件 发送 返回 其它 备注: 1. 如果录播提供多种直播类型,需要标注出RTMP协议的设置及配置方法; 2. 录播支持多路不同码流的直播时需要标注支持哪些类型; 3. 直播是否有前置条件必须要明确说明; /** * 设置直播参数 * @param params 直播相关参数(bwud:超清直播码率 、 bwhd:高清直播码率 、bwsd:标清直播码率 、resud:超清直播分辨率 、reshd:高清直播分辨率 、ressd:标清直播分辨率 、urlud:超清直播地址、urlhd"高清直播地址、urlsd:标清直播地址) */ public void setBroadParam(Map<String,Object> params) { TCPClient.sendMag("<CMD id=\"set_broad\"><res_ud>" + params.get("res_ud") + "</res_ud><res_hd>" + params.get("res_hd") + "</res_hd><res_sd>" + params.get("res_sd") + "</res_sd><bw_ud>" + params.get("bw_ud") + "</bw_ud><bw_hd>" + params.get("bw_hd") + "</bw_hd><bw_sd>" + params.get("bw_sd") + "</bw_sd><url_ud>" + params.get("url_ud") + "</url_ud><url_hd>" + params.get("url_hd") + "</url_hd><url_sd>" + params.get("url_sd") + "</url_sd></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:mc1000支持推3路直播流,所以可设置三路直播参数。 /** * 打开直播 * @param isOuter 直播类型(0:本地直播 、 1:平台直播) */ public void setLiveOn(String isOuter) { TCPClient.sendMag("<CMD id=\"start_live\"><isOuter>" +isOuter + "</isOuter></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 关闭直播 * @param isOuter 直播类型(0:本地直播 、 1:平台直播) */ public void setLiveOn(String isOuter) { TCPClient.sendMag("<CMD id=\"stop_live\"><isOuter>" +isOuter + "</isOuter></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:mc1000可以支持平台直播和本地直播,对应我们平台的需求,所以都会控制。 5. 跟踪相关功能5.1. 跟踪开关通过录播控制跟踪的指令,必须包含控制老师、学生、板书跟踪的开启与关闭,同时提供同步状态方法。 功能说明 条件 发送 返回 其它 备注:mc1000支持设置老师学生分开控制,也支持同步控制。 1. 建议如果支持老师、学生分开控制提供分开控制方法; /** * 设置学生跟踪 * @param st_manual 学生跟踪(0:自动跟踪开、1:自动跟踪关) */ public void setStudentTrackMode(String st_manual) { TCPClient.sendMag("<CMD id=\"set_track_mode\"><st_manual>" + st_manual + "</st_manual></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } /** * 设置老师跟踪 * @param tt_manual 老师跟踪(0:自动跟踪开、1:自动跟踪关) */ public void seTeacherTrackMode(String tt_manual) { TCPClient.sendMag("<CMD id=\"set_track_mode\"><tt_manual>" + tt_manual + "</tt_manual></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:学生跟踪和老师跟踪的参数都是(0:自动跟踪开、1:自动跟踪关) 2. 需要同步说明跟踪关后是否还会画面切换 。 /** * 设置跟踪 * @param trackMode 跟踪(0:自动跟踪开、1:自动跟踪关) */ public void seTeacherTrackMode(String trackMode) { TCPClient.sendMag"<CMD id=\"set_track_mode\"><track_mode>" + trackMode + "</track_mode></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:这个是mc1000总体设置跟踪,参数trackMode(0:自动跟踪开、1:自动跟踪关) 5.2. 跟踪状态通过录播获取老师、学生、板书、课件的状态,即需要通过接口能够自动获取到目标的状态,建议是发生动作后自己上报状态。 功能说明 条件 发送 返回 其它 备注:mc1000会推送设备状态 5.3. 摄像机控制通过录播控制老师、学生、板书三个摄像机的云台控制、变焦、预置位等控制操作。 功能说明 条件 发送 返回 其它 /** * 摄像机控制 * @param params 摄像机控制相关参数 * cameraIndex:相机编号或者镜头选择 * camAction:摄像机具体控制(left / right / up / down /zoom_in(特写) / zoom_out(全景)) * turnDuration:摄像机运动时长 */ public void CameraControl(Map<String,Object> params) { TCPClient.sendMag("<CMD id=\"move_pan\"><ptzcam_idx>" + params.get("cameraIndex") + "</ptzcam_idx><action>" + params.get("camAction") + "</action><speed>30</speed></CMD>"); //mc1000操控摄像机后,摄像机执行持续时间turnDuration try { Thread.sleep(Integer.parseInt((String)params.get("turnDuration"))); } catch (InterruptedException e) { } //mc1000操控摄像机后,会一直执行下去,所以需要下面的代码来终止操作 TCPClient.sendMag("<CMD id=\"move_pan\"><ptzcam_idx>" + params.get("cameraIndex") + "</ptzcam_idx><action>stop</action><speed>30</speed></CMD>"); } /** * 预制位设置 * * @param params 设置预制位相关信息 * operatePos:具体操作预制位参数 recall_preset(调用预制位)、clear_preset(删除预制位)、set_preset(保存预制位) * cameraIndex:相机编号或者镜头选择 * pos:预制位信息 */ public void setPreset(Map<String, Object> params) { TCPClient.sendMag("<CMD id=\""+ params.get("operatePos") +"\"><ptzcam_idx>" + params.get("cameraIndex") + "</ptzcam_idx><pos>" + params.get("pos") + "</pos></CMD>"); } 6. 文件管理功能6.1. 文件管理提供录播获取录制文件列表的查询、修改、删除操作。 功能说明 条件 发送 返回 其它 备注: 1. 获取文件列表时建议提供详细的文件名称、讲课老师、录制时间、科目等详细的信息; 6.2. 文件上传或获取提供录播录像文件上传的方法,如果没有上传功能,需要提供获取录播录像文件的方法,通过平台先获取再上传。 功能说明 条件 发送 返回 其它 备注: 1. 如果录播支持自动上传(如FTP)功能,需要提供自动上传的方法及配置方案。 2. 自动上传的任务状态需要给出相应的解决方案。 /** * 设置ftp文件上传 * @param ftp_ip 文件服务器地址 * user_id 文件服务器用户名 * passwd 文件服务器密码 * auto_upload 是否自动上传(0:不自动上传、1:自动上传) */ public void setFTP(String ftp_ip,String user_id,String passwd,String auto_upload) { TCPClient.sendMag("<CMD id=\"set_ftp_svr\"><ftp_ip>" +ftp_ip + "</ftp_ip><user_id>" +user_id + "</user_id><passwd>" +passwd + "</passwd><auto_upload>" +auto_upload + "</auto_upload></CMD>"); logger.info("设备返回信息" + TCPClient.response()); } 备注:设置自动上传后,文件录制完成后会自动上传都我们的文件服务器。 7. 其它特有功能其它录播厂商认为自己的特色功能,或用户强烈要求的功能,可在此进行详细的功能说明及控制接口说明。 
- 
							互动对接规范三步TSCloud平台控制第三方MCU流程图:  1. 连接通讯1.1. 基本通讯需要提供:品牌及型号识别、传输协议、数据传输格式、验证方式、通讯端口等信息, 功能说明 条件 发送 返回 其它 示例代码: <?xml version="1.0" encoding="UTF-8"?> <TRANS_MCU> <ACTION> <LOGIN> <MCU_IP> <IP>127.0.0.1</IP> //MCUIP <LISTEN_PORT>80</LISTEN_PORT> //MCU端口 <HOST_NAME /> </MCU_IP> <USER_NAME>UNAME</USER_NAME> //登录名 <PASSWORD>PWORD</PASSWORD> //登录密码 <COMPRESSION>true</COMPRESSION> </LOGIN> </ACTION> </TRANS_MCU> 发送XML给MCU。 2. 管理功能2.1. 设备状态提供如何获取MCU的在线状态、序列号、软件版本、总资源数、剩余资源数等状态, 功能说明 发送 返回 其它 示例代码: <TRANS_RSRC_REPORT> <ACTION> <GET_CARMEL_REPORT/> //获取资源数 </ACTION> </TRANS_RSRC_REPORT> <TRANS_MCU> <ACTION> <GET_CFS /> //获取序列号 </ACTION> </TRANS_MCU> 发送XML给MCU。 2.2. 模版状态包括模版列表的获取、模版的新增、模版的删除等 功能说明 条件 发送 返回 其它 示例代码: <TRANS_RES_LIST> <ACTION> <GET_PROFILE_LIST> //获取模版列表 <OBJ_TOKEN>-1</OBJ_TOKEN> </GET_PROFILE_LIST> </ACTION> </TRANS_RES_LIST> 发送XML给MCU。 2.2.1. 创建模版创建一个新的模版。 功能说明 条件 发送 返回 示例代码: <TRANS_RES_1> <ACTION> <START> <RESERVATION> <OBJ_TOKEN>-1</OBJ_TOKEN> <CHANGED>true</CHANGED> <NAME>dairb_routing</NAME> <ID>-1</ID> <REMARK /> <NETWORK>h320_h323</NETWORK> <MEDIA>video_audio</MEDIA> <PASSWORD /> <VIDEO_SESSION>continuous_presence</VIDEO_SESSION> <VIDEO_PROTOCOL>auto</VIDEO_PROTOCOL> <TRANSFER_RATE>1920</TRANSFER_RATE> <AUDIO_RATE>auto</AUDIO_RATE> <VIDEO_FORMAT>auto</VIDEO_FORMAT> <FRAME_RATE>auto</FRAME_RATE> <ATTENDED_MODE>ivr</ATTENDED_MODE> <AV_MSG>Conference IVR Service</AV_MSG> <RESTRICT_MODE>derestricted</RESTRICT_MODE> <T120_RATE>none</T120_RATE> <ENTRY_TONE>false</ENTRY_TONE> <EXIT_TONE>false</EXIT_TONE> <END_TIME_ALERT_TONE>5</END_TIME_ALERT_TONE> <STAND_BY>false</STAND_BY> <PEOPLE_AND_CONTENT>false</PEOPLE_AND_CONTENT> <ANNEX_N>false</ANNEX_N> <ANNEX_P>false</ANNEX_P> <ANNEX_F>false</ANNEX_F> <OPERATOR_CONF>false</OPERATOR_CONF> <SAME_LAYOUT>false</SAME_LAYOUT> <DUO_VIDEO>false</DUO_VIDEO> </RESERVATION> </START> </ACTION> </TRANS_RES_1> 发送XML给MCU。 2.2.2. 删除模版删除一个模版。 功能说明 条件 发送 返回 示例代码: <TRANS_RES_2> <ACTION> <TERMINATE_PROFILE> <ID>0</ID> //会议ID </TERMINATE_PROFILE> </ACTION> </TRANS_RES_2> 发送XML给MCU。 3. 会议功能3.1. 创建会议需要说明创建会议的流程,包含创建会议是否设定参数信息、调取MCU存储的参数等详细过程及接口。 功能说明 条件 发送 返回 示例代码: <TRANS_RES_1> <ACTION> <START> <RESERVATION> <OBJ_TOKEN+>-1</OBJ_TOKEN> <CHANGED>true</CHANGED> <NAME /> <ID>-1</ID> <REMARK /> <NETWORK>h320_h323</NETWORK> <MEDIA>video_audio</MEDIA> <PASSWORD /> <VIDEO_SESSION>continuous_presence</VIDEO_SESSION> <VIDEO_PROTOCOL>auto</VIDEO_PROTOCOL> <TRANSFER_RATE>384</TRANSFER_RATE> <AUDIO_RATE>auto</AUDIO_RATE> <VIDEO_FORMAT>auto</VIDEO_FORMAT> <FRAME_RATE>auto</FRAME_RATE> <ATTENDED_MODE>ivr</ATTENDED_MODE> <AV_MSG /> <RESTRICT_MODE>derestricted</RESTRICT_MODE> <T120_RATE>none</T120_RATE> <ENTRY_TONE>false</ENTRY_TONE> <EXIT_TONE>false</EXIT_TONE> <END_TIME_ALERT_TONE>5</END_TIME_ALERT_TONE> <STAND_BY>false</STAND_BY> <PEOPLE_AND_CONTENT>false</PEOPLE_AND_CONTENT> <ANNEX_N>false</ANNEX_N> <ANNEX_P>false</ANNEX_P> <ANNEX_F>false</ANNEX_F> <OPERATOR_CONF>false</OPERATOR_CONF> <SAME_LAYOUT>false</SAME_LAYOUT> <DUO_VIDEO>false</DUO_VIDEO> </RESERVATION> </START> </ACTION> </TRANS_RES_1> 发送XML给MCU。 3.1.1. 可召开的会议模式设置会议模式。比如: 1. 可设置所有终端看相同画面, 2. 所有终端看除自己之外的其他终端画面, 3. 指定某个终端看其他终端画面,其他终端均看该的终端画面, 功能说明 条件 发送 返回 3.1.2. 创建级联会议需要说明会议级联的方案,建议是级联的逻辑有TSCloud平台实现,只需要提供创建级联会议的方法及接口文档即可。 备注: 1. 如果MCU自带级联方案,只需要提供接口即可; 2. 级联点需要特别说明; 3.2. 会议管理3.2.1. 会议信息获取指定MCU上的会议列表。 功能说明 条件 发送 返回 示例代码: <TRANS_CONF_LIST> <ACTION> <GET_LS> <OBJ_TOKEN>-1</OBJ_TOKEN> //获取会议列表 </GET_LS> </ACTION> </TRANS_CONF_LIST> 发送XML给MCU。 3.2.2. 删除会议删除指定MCU上的某个会议 功能说明 条件 发送 返回 示例代码: <TRANS_CONF_2> <ACTION> <TERMINATE_CONF> <ID>0</ID> //要删除的会议的ID </TERMINATE_CONF> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3. 会议控制3.3.1. 获取终端信息获取指定会议终端某个终端的详细信息 功能说明 条件 发送 返回 其它 示例代码: <TRANS_PARTY> <ACTION> <GET> <CONF_ID>1</CONF_ID> //会议ID <PARTY_ID>1</PARTY_ID> //终端ID </GET> </ACTION> </TRANS_PARTY> 发送XML给MCU。 3.3.2. 添加终端通过IP地址、H323短号、SIP短号呼叫各类视频会议终端 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_1> <ACTION> <ADD_PARTY> <ID>157</ID> <PARTY> <NAME>1955558</NAME> <ID>0</ID> <INTERFACE>h323</INTERFACE> <CONNECTION>dial_out</CONNECTION> <MEET_ME_METHOD>party</MEET_ME_METHOD> <NUM_TYPE>taken_from_service</NUM_TYPE> <BONDING>auto</BONDING> <MULTI_RATE>auto</MULTI_RATE> <NET_CHANNEL_NUMBER>auto</NET_CHANNEL_NUMBER> <VIDEO_PROTOCOL>auto</VIDEO_PROTOCOL> <CALL_CONTENT>framed</CALL_CONTENT> <ALIAS> <NAME /> <ALIAS_TYPE>323_id</ALIAS_TYPE> </ALIAS> <IP>192.167.2.42</IP> <SIGNALING_PORT>1720</SIGNALING_PORT> <VOLUME>5</VOLUME> <BONDING_PHONE /> <SERVICE_NAME /> <SUB_SERVICE_NAME /> <AUTO_DETECT>false</AUTO_DETECT> <RESTRICT>false</RESTRICT> <ENHANCED_VIDEO>false</ENHANCED_VIDEO> <VIDEO_BIT_RATE>automatic</VIDEO_BIT_RATE> </PARTY> </ADD_PARTY> </ACTION> </TRANS_CONF_1> 发送XML给MCU。 3.3.3. 挂断终端挂断指定会议中的某个终端 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_CONNECT> <ID>1</ID> //会议ID <CONNECT>false</CONNECT> //true:连接,false:挂断 <PARTY_ID>1</PARTY_ID> //终端ID </SET_CONNECT> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.4. 删除终端将指定会议终端某个终端从会议中踢出 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <DELETE_PARTY> <ID>1</ID> //会议ID <PARTY_ID>1</PARTY_ID> //终端ID </DELETE_PARTY> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.5. 静音指定会议终端某个终端静音,静音后,其他终端无法听到该终端的声音 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_VIDEO_MUTE> <ID>1</ID> //会议ID <AUDIO_MUTE>true</AUDIO_MUTE> //true:静音,false:非静音 <VIDEO_MUTE>true</VIDEO_MUTE> // true:阻塞,false:非阻塞 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_VIDEO_MUTE> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.6. 取消静音指定会议终端某个终端取消静音,取消静音后,其他终端可听到该终端的声音 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_VIDEO_MUTE> <ID>1</ID> //会议ID <AUDIO_MUTE>true</AUDIO_MUTE> //true:静音,false:非静音 <VIDEO_MUTE>true</VIDEO_MUTE> // true:阻塞,false:非阻塞 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_VIDEO_MUTE> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.7. 闭音指定会议终端某个终端闭音,闭音后,该终端无法听到其他终端的声音 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_BLOCK> <ID>1</ID> //会议ID <AUDIO_BLOCK>true</AUDIO_BLOCK> //true:闭音,false:非闭音 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_BLOCK> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.8. 取消闭音指定会议终端某个终端取消闭音,取消闭音后,该终端可听到其他终端的声音 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_BLOCK> <ID>1</ID> //会议ID <AUDIO_BLOCK>true</AUDIO_BLOCK> //true:闭音,false:非闭音 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_BLOCK> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.9. 阻塞视频指定会议终端某个终端阻塞视频,阻塞后,该终端画面不可见 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_VIDEO_MUTE> <ID>1</ID> //会议ID <AUDIO_MUTE>true</AUDIO_MUTE> //true:静音,false:非静音 <VIDEO_MUTE>true</VIDEO_MUTE> // true:阻塞,false:非阻塞 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_VIDEO_MUTE> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.10. 取消阻塞视频指定会议终端某个终端取消阻塞视频,取消后,该终端画面可见。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUDIO_VIDEO_MUTE> <ID>1</ID> //会议ID <AUDIO_MUTE>true</AUDIO_MUTE> //true:静音,false:非静音 <VIDEO_MUTE>true</VIDEO_MUTE> // true:阻塞,false:非阻塞 <PARTY_ID>1</PARTY_ID> //终端ID </SET_AUDIO_VIDEO_MUTE> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.11. 双流者指定会议终端某个终端的为双流者,指定后此会议中只有该终端才可发送双流。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_EXCLUSIVE_CONTENT> <ID>1</ID> //会议ID <PARTY_ID>1</PARTY_ID> //终端ID </SET_EXCLUSIVE_CONTENT> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.12. 取消双流者取消当前会议中的双流者。取消双流者后,会议中所有的终端都可发送双流 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <REMOVE_EXCLUSIVE_CONTENT> <ID>1</ID> //会议ID </REMOVE_EXCLUSIVE_CONTENT> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.13. 设置演讲者可以设置会议的演讲者。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_1> <ACTION> <SET_LECTURE_MODE> <ID>1</ID> //会议ID <LECTURE_MODE> <ON>true</ON> <LECTURE_NAME></LECTURE_NAME> // 演讲者名称 <LECTURE_ID>-1</LECTURE_ID> //演讲者ID </LECTURE_MODE> </SET_LECTURE_MODE> </ACTION> </TRANS_CONF_1> 发送XML给MCU。 3.3.14. 设置会议分屏可以设置的会议分屏模式,如单屏、两分屏、四分屏,并指定分屏中每个位置的显示内容。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_1> <ACTION> <SET_VIDEO_LAYOUT> <ID>1</ID> //会议ID <FORCE> <LAYOUT>1x1</LAYOUT> //分屏样式 </FORCE> </SET_VIDEO_LAYOUT> </ACTION> </TRANS_CONF_1> 发送XML给MCU。 3.3.15. 设置终端分屏可以设置某个终端的分屏,如单屏、两分屏、四分屏,并指定分屏中每个位置的显示内容。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_1> <ACTION> <SET_PARTY_VIDEO_LAYOUT_EX> <ID>1</ID> //会议ID <PARTY_ID>1</PARTY_ID> //终端ID <LAYOUT_TYPE>personal</LAYOUT_TYPE> <FORCE> <LAYOUT>1x1</LAYOUT> //分屏样式 </FORCE> </SET_PARTY_VIDEO_LAYOUT_EX> </ACTION> </TRANS_CONF_1> 发送XML给MCU。 3.3.16. 轮询可以设置的会议的轮询终端数量、轮询顺序和轮询间隔。 功能说明 条件 发送 返回 其它 示例代码: <TRANS_CONF_2> <ACTION> <SET_AUTO_SCAN_ORDER> <ID>1</ID> //会议ID <AUTO_SCAN_ORDER> <PARTY_ORDER> <ID>1</ID> //终端ID <ORDER>0</ORDER> //轮询位置 </PARTY_ORDER> <PARTY_ORDER> <ID>0</ID> //终端ID <ORDER>1</ORDER> //轮询位置 </PARTY_ORDER> </AUTO_SCAN_ORDER> </SET_AUTO_SCAN_ORDER> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 3.3.17. 字幕或会场名称设置提供会议过程中对字幕或会场名称设置的参数。 功能说明 条件 发送 返回 其它 示例代码: 会场名: <TRANS_CONF_2> <ACTION> <SET_MESSAGE_OVERLAY> <ID>1953</ID> <MESSAGE_OVERLAY> <ON>true</ON> <MESSAGE_TEXT>11</MESSAGE_TEXT> <MESSAGE_FONT_SIZE>small</MESSAGE_FONT_SIZE> <MESSAGE_COLOR>white_font_on_light_blue_background</MESSAGE_COLOR> <NUM_OF_REPETITIONS>3</NUM_OF_REPETITIONS> <MESSAGE_DISPLAY_SPEED>slow</MESSAGE_DISPLAY_SPEED> <MESSAGE_DISPLAY_POSITION>bottom</MESSAGE_DISPLAY_POSITION> <MESSAGE_DISPLAY_POSITION_INT>10</MESSAGE_DISPLAY_POSITION_INT> <MESSAGE_FONT_SIZE_INT>24</MESSAGE_FONT_SIZE_INT> <MESSAGE_TRANSPARENCE>50</MESSAGE_TRANSPARENCE> </MESSAGE_OVERLAY> </SET_MESSAGE_OVERLAY> </ACTION> </TRANS_CONF_2> 字幕: <TRANS_CONF_2> <ACTION> <SET_MESSAGE_OVERLAY> <ID>1953</ID> <MESSAGE_OVERLAY> <ON>true</ON> <MESSAGE_TEXT>11</MESSAGE_TEXT> <MESSAGE_FONT_SIZE>small</MESSAGE_FONT_SIZE> <MESSAGE_COLOR>white_font_on_light_blue_background</MESSAGE_COLOR> <NUM_OF_REPETITIONS>3</NUM_OF_REPETITIONS> <MESSAGE_DISPLAY_SPEED>slow</MESSAGE_DISPLAY_SPEED> <MESSAGE_DISPLAY_POSITION>bottom</MESSAGE_DISPLAY_POSITION> <MESSAGE_DISPLAY_POSITION_INT>10</MESSAGE_DISPLAY_POSITION_INT> <MESSAGE_FONT_SIZE_INT>24</MESSAGE_FONT_SIZE_INT> <MESSAGE_TRANSPARENCE>50</MESSAGE_TRANSPARENCE> </MESSAGE_OVERLAY> </SET_MESSAGE_OVERLAY> </ACTION> </TRANS_CONF_2> 发送XML给MCU。 4. 其它其它MCU厂商认为自己的特色功能,或用户强烈要求的功能,可在此进行详细的功能说明及控制接口说明。 
- 
														  
 
            
