After-sales service

开发文档

  • 单点登录接口

  • 录播对接规范

  • 互动对接规范

  • 软件下载

  • 单点登录接口


    1. 单点登录的应用场景

    开发文档流程图.jpg

    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 项目)

    ssotest.zip


    1.1.1.  ssotest 项目说明

    ssotest 项目是由maven管理的javaweb项目,项目所依赖的jar文件包 都在项目根目录下的pom.xml 文件内定义,文件内除com.sanbu.shiro jar包外均为maven仓库的官方jar包。

    2.png

    1.1.2.  在项目web.xml文件添加以下内容

    登出配置

    3.png

    shiroFilter过滤器

    5.png

    本过滤 器用于过滤项目中需要使用单点登录的服务信息。


    1.1.3.  Spring配置详见

    6.png

    1.1.4.  配置cas.properties

    7.png

    参数说明

    序号

    参数名称

    说明

    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



    系统封装了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

     


    登录

    方法名: login

    参数说明:

    序号

    参数名称

    数据类型

    说明

    1

    platformId

    String

    平台ID

    2

    username

    String

    用户名

    3

    password

    String

    密码

    4

    clientId

    String

    客户ID, 通常使用常量

    "6b4cfaea-7016-11e5-bd19-68f728833c05"

     

    返回说明:json类型:

    序号

    参数名称

    数据类型

    说明

    1

    access_token

    String

    令牌

     

    异常:

    HttpException, IOException, JSONException, Exception

     

    调用POST接口

    方法名: callPost

    参数说明:

    序号

    参数名称

    数据类型

    说明

    1

    postUrl

    String

    API地址

    2

    params

    Map<String, String>

    参数

    3

    contentType

    String

    数据类型

     

    返回类型:

     Object类型,JSONObject/JSONArray,视具体接口而定

    异常:

    IOException

     

    调用GET接口

    方法名: callGet

    参数说明:

    序号

    参数名称

    数据类型

    说明

    1

    getUrl


    API地址

    2

    params

    Map<String, String>

    参数

    3

    contentType

    String

    数据类型

     

    返回类型:

     Object类型,JSONObject/JSONArray,视具体接口而定

    异常:

    IOException

    调用GET接口(重载方法)

    方法名: callGet

    参数说明:

    序号

    参数名称

    数据类型

    说明

    1

    getUrl


    API地址

    2

    params

    Map<String, String>

    参数

    3

    header

    Map<String, String>

    HTTP定制HEAD

    返回类型:

     Object类型,JSONObject/JSONArray,视具体接口而定

    异常:

    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.png

    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);//连接上ip10.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>");//发送指令给设备,参数poweroff0:关机  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流程图:

    目测对接的图.png

    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的在线状态、序列号、软件版本、总资源数、剩余资源数等状态,

    功能说明

    条件