From a666398b496513f1fe56a44195247c254a861656 Mon Sep 17 00:00:00 2001
From: 胡仁荣 <897853850@qq.com>
Date: 星期三, 29 三月 2023 13:35:34 +0800
Subject: [PATCH] 直播

---
 src/main/java/com/qxueyou/scc/base/util/ClientUtils.java                    |    5 
 src/main/java/com/qxueyou/scc/sdk/CommonResult.java                         |   76 +
 src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java                        |   67 
 src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java        |    4 
 src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java |   14 
 pom.xml                                                                     |   56 
 src/main/java/com/qxueyou/scc/controller/VideoLiveController.java           |   70 
 src/main/java/com/qxueyou/scc/sdk/MTCloud.java                              | 4147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java          |   42 
 src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java          |   15 
 src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java     |    2 
 11 files changed, 4,454 insertions(+), 44 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5462112..d9f2530 100644
--- a/pom.xml
+++ b/pom.xml
@@ -379,6 +379,62 @@
 			<scope>runtime</scope>
 		</dependency>
 
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.7.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<version>1.4</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-collections</groupId>
+			<artifactId>commons-collections</artifactId>
+			<version>3.2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-httpclient</groupId>
+			<artifactId>commons-httpclient</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.9.3</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-collections</groupId>
+			<artifactId>commons-collections</artifactId>
+			<version>3.2.1</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<version>1.1.1</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.ezmorph</groupId>
+			<artifactId>ezmorph</artifactId>
+			<version>1.0.6</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.json-lib</groupId>
+			<artifactId>json-lib</artifactId>
+			<version>2.2.3</version>
+			<classifier>jdk15</classifier><!-- 鎸囧畾jdk鐗堟湰 -->
+		</dependency>
+
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
index 0fadbd9..be22b3a 100644
--- a/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
+++ b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -115,9 +115,10 @@
 
 	/** 寰楀埌classId*/
 	public static String getClassId(){
-		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-		HttpSession session = request.getSession();
 		String info = getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_ID);
+//		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+//		HttpSession session = request.getSession();
+//		String info = getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_ID);
 //		if(info!=null){
 //			info= (String) session.getAttribute(UserInfoWrapper.INF_CLASS_ID);
 //		}
diff --git a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
index 3597283..2db27fb 100644
--- a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
+++ b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
@@ -1,10 +1,13 @@
 package com.qxueyou.scc.controller;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hankcs.hanlp.corpus.tag.Nature;
+import com.qxueyou.scc.sdk.MTCloud;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -24,6 +27,10 @@
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import springfox.documentation.spring.web.json.Json;
+
+import static com.hankcs.hanlp.corpus.tag.Nature.r;
+import static com.hankcs.hanlp.corpus.tag.Nature.s;
 
 @Api(tags="鐩存挱绠$悊鎺ュ彛")
 @RestController
@@ -64,7 +71,7 @@
 		
 		List<MediaVideoLive> data = liveService.listOfMine(keyword, pageNum, pageSize);
 		int count = liveService.listCountOfMine(keyword);
-		
+
 		return new Result(true, "success", CollectionUtils.newObjectMap("videoLiveCount", count, 
 				"videoLiveLst",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
 						"creator","creator",
@@ -79,6 +86,7 @@
 						"pushUrl","rtmpPushUrl",
 						"hlsPullUrl","hlsPullUrl",
 						"previewImgUrl","previewImgUrl"
+
 						))));
 	}
 
@@ -106,12 +114,47 @@
 	@ApiOperation(value = "鍒涘缓缂栬緫鐩存挱")
 	@PostMapping(value = "addOrUpdate")
 	public Result addOrUpdate(String videoLiveId, String name, String content,String teacherId,String teacherName,String subjectId,
-			String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) {
-		if(StringUtils.isEmpty(videoLiveId)) {
-			return liveService.add(name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime), isPlayBack, StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
-		}else {
-			return liveService.update(videoLiveId,name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime), isPlayBack,  StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
+			String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) throws Exception {
+		MTCloud client = new MTCloud();
+		HashMap<Object,Object> options = new HashMap<Object,Object>();
+		options.put("barrage", 1);
+		options.put("isPublic", 1);
+		options.put("robotNumber", 1);
+		options.put("robotType", 1);
+		options.put("pptDisplay", 1);
+		//灏唋ong绫诲瀷杞崲涓篠tring绫诲瀷
+		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
+		String startTime1 = simpleDateFormat.format(new Date(startTime));
+		String endTime1 = simpleDateFormat.format(new Date(endTime));
+		//璋冪敤绗笁鏂圭洿鎾帴鍙�
+		String s = client.courseAdd(name, "16624662432", startTime1, endTime1, ClientUtils.getUserName(), "222", options);
+		//json杞崲鎷垮埌courseId
+		JSONObject jsonObject = JSON.parseObject(s);
+		JSONObject data = jsonObject.getJSONObject("data");
+		String course_id = (String) data.get("course_id");
+//		System.out.println(Integer.parseInt(course_id));
+		if(Nature.s !=null) {
+			liveService.add(name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime),Integer.parseInt(course_id), isPlayBack, StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
+			return new Result(true, "鎴愬姛", s);
 		}
+		return new Result(false);
+	}
+
+	@ApiOperation(value = "寮�鍚洿鎾�")
+	@GetMapping(value = "OpenLive")
+	public Result OpenLive(int courseId) throws Exception {
+		MTCloud client = new MTCloud();
+
+		HashMap<Object,Object> options = new HashMap<Object, Object>();
+		options.put("ssl", false);
+
+		String res = client.courseLogin("16624662432", MTCloud.ACCOUNT_TYPE_THIRD, options);
+		System.out.println(res);
+		JSONObject jsonObject = JSON.parseObject(res);
+		JSONObject data = jsonObject.getJSONObject("data");
+		String protocol = (String) data.get("url");
+		return new Result(true,"寮�鍚垚鍔�",protocol);
 	}
 
 	/**
@@ -200,7 +243,7 @@
 	/**
 	 * 鍒犻櫎/澶氫釜浠ラ�楀彿闅斿紑
 	 * 
-	 * @param videoLiveId
+	 * @param videoLiveIds
 	 * @return
 	 */
 	@ApiOperation(value = "鍒犻櫎鍒涘缓鐨勭洿鎾�")
@@ -246,7 +289,7 @@
 	/**
 	 * 鐩存挱缁撴潫
 	 * 
-	 * @param videoLiveId
+	 * @param videoLiveIds
 	 *            鐩存挱id
 	 */
 	@ApiOperation(value = "鐩存挱缁撴潫")
@@ -300,7 +343,8 @@
 						"status","status",
 						"pushUrl","rtmpPushUrl",
 						"hlsPullUrl","hlsPullUrl",
-						"previewImgUrl","previewImgUrl"
+						"previewImgUrl","previewImgUrl",
+						"courseId","courseId"
 				))));
 	}
 	
diff --git a/src/main/java/com/qxueyou/scc/sdk/CommonResult.java b/src/main/java/com/qxueyou/scc/sdk/CommonResult.java
new file mode 100644
index 0000000..0713f47
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sdk/CommonResult.java
@@ -0,0 +1,76 @@
+package com.qxueyou.scc.sdk;
+
+import java.io.Serializable;
+
+public class CommonResult<T> implements Serializable {
+    private static final long serialVersionUID = 7917345507074842804L;
+    private String code;
+    private String msg;
+    private T data;
+	private String format = "json";
+
+    public static class Builder {
+        public static com.qxueyou.scc.sdk.CommonResult SUCC() {
+            com.qxueyou.scc.sdk.CommonResult vo = new com.qxueyou.scc.sdk.CommonResult();
+            vo.setCode("0");
+            vo.setmsg("suc");
+            return vo;
+        }
+
+        public static com.qxueyou.scc.sdk.CommonResult FAIL() {
+            com.qxueyou.scc.sdk.CommonResult vo = new com.qxueyou.scc.sdk.CommonResult();
+            return vo;
+        }
+    }
+
+    public com.qxueyou.scc.sdk.CommonResult initErrCodeAndMsg(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+        return this;
+    }
+    
+    public com.qxueyou.scc.sdk.CommonResult initErrCodeAndMsg(int code, String msg) {
+        this.code = Integer.toString(code);
+        this.msg = msg;
+        return this;
+    }
+
+    public com.qxueyou.scc.sdk.CommonResult initSuccCodeAndMsg(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+        return this;
+    }
+
+    public com.qxueyou.scc.sdk.CommonResult initSuccData(T data) {
+        this.data = data;
+        return this;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getmsg() {
+        return msg;
+    }
+
+    public void setmsg(String msg) {
+        this.msg = msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/qxueyou/scc/sdk/MTCloud.java b/src/main/java/com/qxueyou/scc/sdk/MTCloud.java
new file mode 100644
index 0000000..24bac56
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sdk/MTCloud.java
@@ -0,0 +1,4147 @@
+/**
+ * Copyright www.talk-fun.com
+ */
+
+package com.qxueyou.scc.sdk;
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Properties;
+import java.net.*;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.UUID;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.StringPart;
+
+import com.qxueyou.scc.sdk.utils.MD5Util;
+
+
+public class MTCloud {
+	    
+	    /**
+	     * 鍚堜綔鏂笽D锛� 鍚堜綔鏂瑰湪娆㈡嫇骞冲彴鐨勫敮涓�ID
+	     */
+	    public String openID = "56407";
+	    
+	    /**
+	     * 鍚堜綔鏂圭閽ワ細 鍚堜綔鏂笽D瀵瑰簲鐨勫弬鏁板姞瀵嗙閽�
+	     */
+	    public String openToken = "cd8ab50fbdb53a3b0338bda46186c58a";
+
+	    /**
+	     * 娆㈡嫇API鎺ュ彛鍦板潃
+	     */
+	    public String restUrl = "http://api.talk-fun.com/portal.php";
+	    public String restUrl2 = "http://api-1.talk-fun.com/portal.php";
+	    
+	    /**
+	     * 杩斿洖鐨勬暟鎹牸寮�
+	     */
+	    public String format = "json";
+	    
+	    /**
+	     * SDK鐗堟湰鍙�(璇峰嬁淇敼)
+	     */
+	    public String version = "java.1.6";
+	    
+	    /**
+	     * 鏄惁寮�鍚祴璇�
+	     */
+	    public boolean debug = false;
+	    
+
+	    /**
+	     * 鐘舵�佺爜
+	     */
+	    public static final int CODE_FAIL = -1;             //澶辫触
+	    public static final int CODE_SUCCESS = 0;           //鎴愬姛
+	    public static final int CODE_PARAM_ERROR = 10;      //鍙傛暟閿欒
+	    public static final int CODE_VIDEO_UPLOADED = 1281; //瑙嗛宸蹭笂浼犺繃
+	    public static final int CODE_SIGN_EXPIRE = 10002;  //绛惧悕杩囨湡
+	    public static final int CODE_SIGN_ERROR = 10003;    //绛惧悕楠岃瘉閿欒
+	    
+
+	    /**
+	     * 瑙掕壊瀹氫箟
+	     */
+	    public static final String ROLE_GUEST = "guest";			//娓稿
+	    public static final String ROLE_USER = "user";				//鏅�氱敤鎴�
+	    public static final String ROLE_ADMIN = "admin";			//绠$悊鍛�
+	    public static final String ROLE_SUPER_ADMIN = "spadmin";	//瓒呯骇绠$悊鍛�
+	    
+	    /**
+	     * 鐢ㄦ埛瀹氫箟
+	     */
+	    public static final int USER_GENDER_UNKNOW = 0;				//鏈煡鐢熺墿
+	    public static final int USER_GENDER_MALE = 1;				//鐢锋��
+	    public static final int USER_GENDER_FEMALE = 2;				//濂虫��
+	    
+	    /**
+	     * 涓绘挱璐﹀彿绫诲瀷
+	     */
+	    public static final int ACCOUNT_TYPE_MT = 1;		//娆㈡嫇璐﹀彿绫诲瀷
+	    public static final int ACCOUNT_TYPE_THIRD = 2;		//绗笁鏂硅处鍙风被鍨�
+	    
+	    /**
+	     * 璇煶甯搁噺
+	     */
+	    public static final int VOICE_FLOW_CLOUD = 1;			//璇煶浜�
+	    public static final int VOICE_FLOW_LISTEN_ONLY = 2;		//鍙惉
+	    public static final int VOICE_FLOW_AUTO = 3;			//鑷姩妯″紡
+	    
+	    /**
+	     * 鐩存挱甯搁噺
+	     */
+	    public static final int LIVE_NO_PLAYBACK = 0;		//娌℃湁鍥炴斁璁板綍			
+	    public static final int LIVE_HAS_PLAYBACK = 1;		//鏈夊洖鏀捐褰�
+	    
+	    public static final int LIVE_PLAYBACK_NOT_CHECK_USER_IP = 0;	//鍥炴斁鍦板潃锛屼笉闄愬埗鎾斁鐢ㄦ埛IP
+	    public static final int LIVE_PLAYBACK_CHECK_USER_IP = 1;		//鍥炴斁鍦板潃锛岄檺鍒舵挱鏀剧敤鎴稩P
+
+		/**
+		 * 澶栭儴鎺ㄦ祦鍒嗚鲸鐜囩被鍨�
+		 */
+		public static final int CUSTOM_RTMP_RATIO_4_3 = 1;       // 4:3姣斾緥
+		public static final int CUSTOM_RTMP_RATIO_16_9 = 2;      // 16:9姣斾緥
+
+	    public MTCloud(){
+	    	
+	    }
+	    
+	    public MTCloud(String openID, String openToken) {
+	        this.openID = openID.trim();
+	        this.openToken = openToken.trim();
+	    }
+	    
+        /**
+         * 璁剧疆娆㈡嫇鏁版嵁鍝嶅簲鐨勬牸寮�
+         * @param String $format
+         */
+        public void setFormat(String format) {
+            this.format = format;
+        }
+
+	    /**
+	     * 鑾峰彇鐢ㄦ埛access_token,access_key鍙婃埧闂村湴鍧�(鏇夸唬roomGetUrl鏂规硶)
+	     * @param String uid		鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname	鐢ㄦ埛鐨勬樀绉�
+	     * @param String role		鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid		鎴块棿ID
+	     * @param int expire		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return String 
+	     * @throws Exception
+	     */
+	    public String userAccess(String uid,String nickname,String role,String roomid,int expire) throws Exception {
+	    	HashMap<Object,Object> options = new HashMap<Object, Object>();
+	    	return this.userAccess(uid, nickname, role, roomid, expire,options);
+	    }
+	    
+	    
+	    /**
+	     * 鐢ㄦ埛杩涘叆鐩存挱闂�
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid 		鎴块棿ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param HashMap options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccess(String uid,String nickname,String role,String roomid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	if(!options.containsKey("gender")){
+	    		//鐢ㄦ埛鎬у埆
+	    		options.put("gender", com.qxueyou.scc.sdk.MTCloud.USER_GENDER_UNKNOW);
+	    	}
+	    	if(!options.containsKey("avatar")){
+	    		//鐢ㄦ埛澶村儚
+	    		options.put("avatar", "");
+	    	}
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("roomid", roomid);
+	    	params.put("expire", expire);
+	    	params.put("options", options);
+	    	return this.call("user.access",params);
+	    }
+	    
+	    /**
+	     * 鐢ㄦ埛杩涘叆鐐规挱
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		鐩存挱ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlayback(String uid,String nickname,String role,String liveid,int expire) throws Exception {
+	    	HashMap<Object,Object> options = new HashMap<Object, Object>();
+	    	return this.userAccessPlayback(uid,nickname,role,liveid,expire,options);
+	    }
+	    
+	    /**
+	     * 鐢ㄦ埛杩涘叆鐐规挱
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		鐩存挱ID
+	     * @param int expire			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param HashMap options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlayback(String uid,String nickname,String role,String liveid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	if(!options.containsKey("gender")){
+	    		//鐢ㄦ埛鎬у埆
+	    		options.put("gender", com.qxueyou.scc.sdk.MTCloud.USER_GENDER_UNKNOW);
+	    	}
+	    	if(!options.containsKey("avatar")){
+	    		//鐢ㄦ埛澶村儚鍦板潃
+	    		options.put("avatar", "");
+	    	}
+	    	
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("liveid", liveid);
+	    	params.put("expire", expire);
+	    	params.put("options", options);
+	    	return this.call("user.access.playback",params);
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱闂村湴鍧�
+	     * @param String uid		鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname	鐢ㄦ埛鐨勬樀绉�
+	     * @param String role		鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid		鎴块棿ID
+	     * @param int expire		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return String 
+	     * @throws Exception
+	     */
+	    public String userAccessUrl(String uid,String nickname,String role,String roomid,int expire) throws Exception {
+	    	String accessAuth = this.userAccessKey(uid, nickname, role, roomid, expire);
+	    	return "http://open.talk-fun.com/room.php?accessAuth=" + accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱闂撮獙璇乲ey
+	     * @param String uid		鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname	鐢ㄦ埛鐨勬樀绉�
+	     * @param String role		鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid		鎴块棿ID
+	     * @param int expire		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return String 
+	     * @throws Exception
+	     */
+	    public String userAccessKey(String uid,String nickname,String role,String roomid,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	params.put("timestamp", ts);
+	    	
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("roomid", roomid);
+	    	params.put("expire", expire);
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String accessAuth = this.base64UrlEncode(JSONObject.fromObject(params).toString());
+	    	return accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱闂村湴鍧�
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid 		鎴块棿ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param HashMap options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessUrl(String uid,String nickname,String role,String roomid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	String accessAuth = this.userAccessKey(uid, nickname, role, roomid, expire, options);
+	    	return "http://open.talk-fun.com/room.php?accessAuth=" + accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱闂撮獙璇乲ey
+	     * @param String uid		鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname	鐢ㄦ埛鐨勬樀绉�
+	     * @param String role		鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid		鎴块棿ID
+	     * @param int expire		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return String 
+	     * @throws Exception
+	     */
+	    public String userAccessKey(String uid,String nickname,String role,String roomid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	params.put("timestamp", ts);
+	    	
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("roomid", roomid);
+	    	params.put("expire", expire);
+	    	params.put("options", JSONObject.fromObject(options).toString());
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String accessAuth = JSONObject.fromObject(params).toString();
+	    	accessAuth = this.base64UrlEncode(accessAuth);
+	    	
+	    	return accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐐规挱鍦板潃
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		鐩存挱ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlaybackUrl(String uid,String nickname,String role,String liveid,int expire) throws Exception {
+	    	String accessAuth = this.userAccessPlaybackKey(uid, nickname, role, liveid, expire);
+	    	return "http://open.talk-fun.com/player.php?accessAuth=" + accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐐规挱楠岃瘉key
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		鐩存挱ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlaybackKey(String uid,String nickname,String role,String liveid,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	params.put("timestamp", ts);
+	    	
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("liveid", liveid);
+	    	params.put("expire", expire);
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String accessAuth = JSONObject.fromObject(params).toString();
+	    	accessAuth = this.base64UrlEncode(accessAuth);
+	    	return accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐐规挱鍦板潃
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		鐩存挱ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param HashMap options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlaybackUrl(String uid,String nickname,String role,String liveid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	String accessAuth = this.userAccessPlaybackKey(uid, nickname, role, liveid, expire, options);
+	    	return "http://open.talk-fun.com/player.php?accessAuth=" + accessAuth;
+	    }
+	    
+	    /**
+	     * 鑾峰彇鐐规挱楠岃瘉key
+	     * @param String uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param String role 			鐢ㄦ埛鐨勮鑹�
+	     * @param String liveid 		涓绘挱ID
+	     * @param int expire 			杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String userAccessPlaybackKey(String uid,String nickname,String role,String liveid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	params.put("timestamp", ts);
+	    	
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("liveid", liveid);
+	    	params.put("expire", expire);
+	    	params.put("options", JSONObject.fromObject(options).toString());
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String accessAuth = JSONObject.fromObject(params).toString();
+	    	accessAuth = this.base64UrlEncode(accessAuth);
+	    	
+	    	return accessAuth;
+	    }
+
+	    /**
+	     * 鑾峰彇涓撹緫鍦板潃
+	     * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param role 			鐢ㄦ埛鐨勮鑹�
+	     * @param album_id 		涓撹緫ID
+	     * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+        public String userAccessPlaybackAlbum(String uid, String nickname, String role, String album_id, int expire, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object, Object>();
+            params.put("uid", uid);
+            params.put("nickname", nickname);
+            params.put("role", role);
+            params.put("album_id", album_id);
+            params.put("expire", expire);
+            params.put("options", options);
+            return this.call("user.access.playbackAlbum", params);
+        }
+	    
+        /**
+	     * 鑾峰彇涓撹緫鍦板潃
+	     * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+	     * @param role 			鐢ㄦ埛鐨勮鑹�
+	     * @param album_id 		涓撹緫ID
+	     * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @param options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+        public String userAccessPlaybackAlbumUrl(String uid, String nickname, String role, String album_id, int expire, HashMap<Object,Object> options) throws Exception {
+        	String accessAuth = this.userAccessPlaybackAlbumKey(uid, nickname, role, album_id, expire, options);
+        	return "http://open.talk-fun.com/player.php?accessAuth=" + accessAuth;
+        }
+        
+        /**
+         * 鑾峰彇涓撹緫鎾斁key
+         * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+         * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+         * @param role 			鐢ㄦ埛鐨勮鑹�
+         * @param album_id 		涓撹緫ID
+         * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+         * @param options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String userAccessPlaybackAlbumKey(String uid, String nickname, String role, String album_id, int expire, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object, Object>();
+        	
+        	params.put("openID", this.openID.trim());
+        	
+        	Date date = new Date();
+        	long time = date.getTime() / 1000;
+        	String ts = time + "";
+        	params.put("timestamp", ts);
+        	
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("role", role);
+        	params.put("album_id", album_id);
+        	params.put("expire", expire);
+        	params.put("options", JSONObject.fromObject(options).toString());
+        	
+        	params.put("sign", this.generateSign(params));
+        	String accessAuth = JSONObject.fromObject(params).toString();
+        	accessAuth = this.base64UrlEncode(accessAuth);
+        	
+        	return accessAuth;
+        }
+        
+        /**
+         * 鑾峰彇鍓緫鍦板潃
+         * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+         * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+         * @param role 			鐢ㄦ埛鐨勮鑹�
+         * @param clipid 		鍓緫ID
+         * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+         * @param options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String userAccessPlaybackClip(String uid, String nickname, String role, int clipid, int expire, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object, Object>();
+            params.put("uid", uid);
+            params.put("nickname", nickname);
+            params.put("role", role);
+            params.put("clipid", clipid);
+            params.put("expire", expire);
+            params.put("options", options);
+            return this.call("user.access.playbackClip", params);
+        }
+        
+        /**
+         * 鑾峰彇鍓緫鍦板潃
+         * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+         * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+         * @param role 			鐢ㄦ埛鐨勮鑹�
+         * @param clipid 		鍓緫ID
+         * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+         * @param options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String userAccessPlaybackClipUrl(String uid, String nickname, String role, int clipid, int expire, HashMap<Object,Object> options) throws Exception {
+        	String accessAuth = this.userAccessPlaybackClipKey(uid, nickname, role, clipid, expire, options);
+        	return "http://open.talk-fun.com/player.php?accessAuth=" + accessAuth;
+        }
+        
+        /**
+         * 鑾峰彇鍓緫鎾斁key
+         * @param uid 			鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+         * @param nickname 		鐢ㄦ埛鐨勬樀绉�
+         * @param role 			鐢ㄦ埛鐨勮鑹�
+         * @param clipid 		鍓緫ID
+         * @param expire 		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+         * @param options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String userAccessPlaybackClipKey(String uid, String nickname, String role, int clipid, int expire, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object, Object>();
+        	
+        	params.put("openID", this.openID.trim());
+        	
+        	Date date = new Date();
+        	long time = date.getTime() / 1000;
+        	String ts = time + "";
+        	params.put("timestamp", ts);
+        	
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("role", role);
+        	params.put("clipid", clipid);
+        	params.put("expire", expire);
+        	params.put("options", JSONObject.fromObject(options).toString());
+        	
+        	params.put("sign", this.generateSign(params));
+        	String accessAuth = JSONObject.fromObject(params).toString();
+        	accessAuth = this.base64UrlEncode(accessAuth);
+        	
+        	return accessAuth;
+        }
+        
+	    /**
+	     * 鑾峰彇鍦ㄧ嚎鐢ㄦ埛鍒楄〃
+	     * @param roomid		鎴块棿ID
+	     * @param start_time	鏌ヨ寮�濮嬫椂闂达紝鏍煎紡: 2015-01-01 12:00:00
+	     * @param end_time		鏌ヨ缁撴潫鏃堕棿锛屾牸寮�: 2015-01-01 13:00:00
+	     * @return String
+	     * @throws Exception
+	     */
+	    public String userOnlineList(String roomid,String start_time,String end_time) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("start_time", start_time);
+	    	params.put("end_time", end_time);
+	    	return this.call("user.online.list",params);
+	    }
+	    
+	    
+	    /**
+	     * 鑾峰彇涓绘挱绠$悊鐧诲綍鍦板潃
+	     * @param liveid
+	     * @param expire
+	     * @return
+	     * @throws Exception
+	     */
+	    public String getManagerUrl(String roomid,int expire,HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("openID", this.openID.trim());
+	    	params.put("roomid", roomid);
+	    	params.put("timestamp", new Date().getTime() / 1000);
+	    	params.put("expire", expire);
+	    	
+	    	if(options.containsKey("nickname")){
+	    		params.put("nickname", options.get("nickname").toString());
+	    	}
+	    	
+	    	if(options.containsKey("role")){
+	    		params.put("role", options.get("role").toString());
+	    	}
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String code = JSONObject.fromObject(params).toString();
+	    	code = this.base64UrlEncode(code);
+	    	return "http://open.talk-fun.com/live/manager.php?code="+code;
+	    }
+
+	    
+	    /**
+	     * 鑾峰彇鐩存挱鎴块棿鍦板潃(浣跨敤userAccess鏂规硶鏇夸唬)
+	     * @param String uid		鍚堜綔鏂圭郴缁熷唴鐨勭敤鎴风殑鍞竴ID
+	     * @param String nickname	鐢ㄦ埛鐨勬樀绉�
+	     * @param String role		鐢ㄦ埛鐨勮鑹�
+	     * @param String roomid		鎴块棿ID
+	     * @param int expire		杩斿洖鐨勫湴鍧�鐨勬湁鏁堟椂闂�
+	     * @return String 
+	     * @throws Exception
+	     */
+	    public String roomGetUrl(String uid,String nickname,String role,String roomid,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("roomid", roomid);
+	    	params.put("expire", expire);
+	        return this.call("user.register",params);
+	    }
+
+
+	    /**
+	     *   鑷姩鍒涘缓涓�涓埧闂�/棰戦亾鍜屼富鎾紝骞朵笖缁戝畾鎴块棿涓绘挱鐨勫叧绯�
+	     *   @param $roomName     鎴块棿鍚嶇О
+	     *   @param $authKey      绠$悊鍛樺瘑鐮�
+	     *   @param $userKey      鏅�氱敤鎴峰瘑鐮�
+	     *   @param $zhuboKey     涓绘挱瀵嗙爜
+	     *   @param $modetype     鎴块棿妯″紡
+	     *   @param $options      鍙�夐」锛屽寘鎷細 barrage:寮瑰箷寮�鍏� 寮�鍚�:1 鍏抽棴:0锛宒epartmentID锛氶儴闂↖D锛寀ser_top锛氭渶楂樺湪绾跨敤鎴锋暟锛宻treamMode锛氬皬鐝悎娴佹ā寮忛厤缃紝1 澶氫汉妯″紡锛�2 鍙屼汉妯″紡
+	     *   @return
+	     *	 @throws Exception
+	     */
+	    public String roomCreatev2(String roomName,String authKey,String userKey,String zhuboKey,int modetype,HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomName", roomName);
+	    	params.put("authKey", authKey);
+	    	params.put("userKey", userKey);
+	    	params.put("zhuboKey", zhuboKey);
+	    	params.put("modetype", modetype);
+	    	params.put("options", options);
+	    	return this.call("room.createv2", params);
+	    }
+	    
+	    	    
+	    /**
+	     * 鏌ヨ鎴块棿淇℃伅
+	     * @param String roomid	鎴块棿ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomGetInfo(String roomid) throws Exception{
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	return this.call("room.getInfo",params);
+	    }
+		
+		/**
+	     * 鑾峰彇鎴块棿鐧诲綍鍦板潃
+	     * @param String roomid	鎴块棿ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomGetUrl(String roomid) throws Exception{
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	return this.call("room.getUrl",params);
+	    }
+	    
+	    /**
+	     * 鍒涘缓鎴块棿
+	     * @param String roomName 鎴块棿鍚嶇О
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomCreate(String roomName) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomName", roomName);
+	    	return this.call("room.create", params);
+	    }
+	    
+	    /**
+	     * 鍒涘缓鎴块棿锛屾柊澧炵鐞嗗憳瀵嗙爜璁剧疆
+	     * @param roomName
+	     * @param authKey
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomCreate(String roomName,String authKey) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomName",roomName);
+	    	params.put("authKey",authKey);
+	    	return this.call("room.create",params);
+	    }
+	    
+	    
+	    /**
+	     * 鍒涘缓鎴块棿
+	     * @param roomName
+	     * @param voiceFlow
+	     * @param authKey
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomCreate(String roomName,int voiceFlow,String authKey, int modetype, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomName",roomName);
+	    	params.put("voiceFlow", voiceFlow);
+	    	params.put("authKey",authKey);
+	    	params.put("modetype", modetype);
+	    	params.put("options", options);
+	    	return this.call("room.create",params);
+	    }
+	    
+	    /**
+	     * 鏇存柊鎴块棿淇℃伅
+	     * @param roomid
+	     * @param params			鍖呭惈瀛楁锛歳oomName锛寁oiceFlow,authKey
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomUpdate(String roomid,HashMap<Object,Object> params) throws Exception {
+	    	params.put("roomid",roomid);
+	    	return this.call("room.update",params);
+	    }
+	    
+	    /**
+	     * 鍒犻櫎鎴块棿
+	     * @param String roomid 鎴块棿ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomDrop(String roomid) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid",roomid);
+	    	return this.call("room.drop",params);
+	    }
+	    
+	    /**
+	     * 鑾峰彇鎴块棿鍒楄〃
+	     * @param int page
+	     * @param int size
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomList(int page,int size) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("page", page);
+	    	params.put("size", size);
+	    	return this.call("room.list", params);
+	    }
+	    
+	    /**
+	     * 鎴块棿缁戝畾涓绘挱
+	     * @param String roomid	鎴块棿ID
+	     * @param String account 涓绘挱璐﹀彿
+	     * @param int accountType 涓绘挱璐﹀彿绫诲瀷
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomBindAccount(String roomid,String account,int accountType) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid",roomid);
+	    	params.put("account",account);
+	    	params.put("accountType",accountType);
+	    	return this.call("room.live.bindAccount",params);
+	    }
+	    
+	    /**
+	     * 鎴块棿鍙栨秷缁戝畾涓绘挱
+	     * @param String roomid 鎴块棿ID
+	     * @param String account 涓绘挱璐﹀彿
+	     * @param int accountType 涓绘挱璐﹀彿绫诲瀷
+	     * @return
+	     * @throws Exception
+	     */
+	    public String roomUnbindAccount(String roomid,String account,int accountType) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	return this.call("room.live.unbindAccount",params);
+	    }
+
+        /**
+         * 鍙戦�佸箍鎾�
+         * @param String roomid  鎴块棿ID
+         * @param String cms
+         * @param HashMap args
+         * @param HashMap options
+         * @return
+	     * @throws Exception
+         */
+        public String roomBroadcastSend(String roomid, String cmd, HashMap<Object,Object> args, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("roomid", roomid);
+            params.put("cmd", cmd);
+            params.put("params", args);
+            params.put("options", options);
+            return this.call("room.broadcast.send", params);
+        }
+        
+        /**
+         * 鏍规嵁鎴块棿ID鑾峰彇褰撳墠鎴块棿鐨勫湪绾夸汉鏁�
+         * @param String 	roomid 	鎴块棿ID
+         * @return
+         * @throws Exception
+         */
+        public String roomOnlineTotal(String roomid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("roomid", roomid);
+        	return this.call("room.online.total", params);
+        }
+		
+		
+		/**
+		 *  铏氭嫙鐢ㄦ埛瀵煎叆
+		 *  @param  String roomid  鎴块棿ID
+		 *  @param  Array  userList  [['nickname'=>'xxx', 'avatar'=>'xxx'], ['nickname'=>'xxxx', 'avatar'=>'xxx'], ......]
+		 *  @return
+		 */
+		public String roomAddRobot(int roomid, ArrayList userList) throws Exception  {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("userList", userList);
+	    	
+	    	HashMap<Object,Object> files = new HashMap<Object,Object>();
+	    	
+	    	return this.call("room.robot.add", params,"POST", files);
+		}
+		
+		/**
+		 * 婊氬姩鍏憡鎺ュ彛
+		 * @param String 	roomid 		鎴块棿ID
+		 * @param String 	content 	婊氬姩鍏憡鍐呭
+		 * @param String 	link 		婊氬姩鍏憡閾炬帴
+		 * @param String 	duration 	婊氬姩鍏憡鏄剧ず鏃堕暱(鍗曚綅锛氱)
+		 * @return
+		 */
+		public String roomNoticeRoll(String roomid, String content, String link, int duration) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("roomid", roomid);
+			params.put("content", content);
+			params.put("link", link);
+			params.put("duration", duration);
+			return this.call("room.notice.roll", params);
+		}
+
+		/**
+		 * 鑾峰彇鎴块棿/棰戦亾鐨勫閮ㄦ帹娴佸湴鍧�
+		 * @param String roomid     鎴块棿/棰戦亾ID
+    	 * @param String title      鐩存挱鏍囬
+     	 * @param int    ratio      鍒嗚鲸鐜囨瘮渚�
+		 * @return
+		 */
+		public String roomPushRtmpUrl(String roomid, String title, int ratio) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("roomid", roomid);
+			params.put("title", title);
+			params.put("ratio", ratio);
+			return this.call("room.pushRtmpUrl", params);
+		}
+
+		/**
+	     *  鏍规嵁鎴块棿ID鑾峰彇涓绘挱鐧诲綍鍦板潃
+	     *  @param  string   roomid     鎴块棿ID
+	     *  @param  HashMap  options    鍏跺畠鍙�夐」锛宻sl锛氭槸鍚︿娇鐢╤ttps(true涓轰娇鐢紝false涓轰笉浣跨敤)
+	     */
+		public String roomLogin(String roomid, HashMap<Object,Object> options) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("roomid", roomid);
+			params.put("options", options);
+			return this.call("room.login", params);
+		}
+
+	    /**
+	     * 鑾峰彇涓绘挱淇℃伅
+	     * @param String account 涓绘挱璐﹀彿
+	     * @param int accountType 涓绘挱璐﹀彿绫诲瀷
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboGet(String account,int accountType) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	return this.call("zhubo.get", params);
+	    }
+	    
+	    /**
+	     * 鍒涘缓涓绘挱
+	     * @param String account 涓绘挱璐﹀彿			(鍚堜綔鏂逛富鎾处鍙风殑鍞竴ID)
+	     * @param String nickname 涓绘挱鏄电О
+	     * @param int accountType 璐﹀彿绫诲瀷		(濡傛灉鏄鎷撶殑璐﹀彿绫诲瀷锛宎ccount鍙互涓虹┖)
+	     * @param String password 涓绘挱璐﹀彿瀵嗙爜 
+	     * @param String description 鐢ㄦ埛绠�浠�
+	     * @param int departmentID 閮ㄩ棬ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboCreate(String account,String nickname,int accountType,String password,String introduce,int departmentID) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("nickname", nickname);
+	    	params.put("accountType",accountType);
+	    	params.put("password", password);
+	    	params.put("intro", introduce);
+	    	params.put("departmentID", departmentID);
+	    	return this.call("zhubo.create",params);
+	    }
+	    
+	    
+	    /**
+	     * 鏇存柊涓绘挱淇℃伅
+	     * @param account
+	     * @param accountType
+	     * @param nickname
+	     * @param introduce
+	     * @param int departmentID 閮ㄩ棬ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboUpdateInfo(String account,int accountType,String nickname,String introduce, int departmentID) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	params.put("nickname",nickname);
+	    	params.put("intro", introduce);
+	    	params.put("departmentID", departmentID);
+	    	return this.call("zhubo.update.info",params);
+	    }
+	    
+	    
+	    /**
+	     * 鏇存柊涓绘挱瀵嗙爜
+	     * @param account
+	     * @param accountType
+	     * @param password
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboUpdatePassword(String account,int accountType,String password) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	params.put("password", password);
+	    	return this.call("zhubo.update.password", params);
+	    }
+	    
+	    
+	    /**
+	     * 鏇存柊涓绘挱澶村儚
+	     * @param account			涓绘挱璐﹀彿
+	     * @param accountType		璐﹀彿绫诲瀷
+	     * @param filename			鍥剧墖璺緞(鏀寔jpeg銆乯pg锛屽浘鐗囧ぇ灏忎笉瓒呰繃1M)
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboUpdatePortrait(String account,int accountType,String filename) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();	    	
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);	    	
+	    	String res = this.call("zhubo.portrait.uploadurl",params);
+	    	
+	    	JSONObject resJson = JSONObject.fromObject(res);
+	    	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+	    		JSONObject resData = resJson.getJSONObject("data");
+	
+	    		File f;
+				f = new File(filename);
+				Part[] parts = {
+	    			new FilePart(resData.getString("field"),f)
+	    		};
+	    		
+	    		return this.doPost(resData.getString("api"), parts);
+	    	}
+	    	return res;
+	    }
+	    
+	    
+	    /**
+	     * 鍒犻櫎涓绘挱
+	     * @param String account 涓绘挱璐﹀彿
+	     * @param int accountType 璐﹀彿绫诲瀷
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboDel(String account, int accountType) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	return this.call("zhubo.del", params);
+	    }
+	    
+	    /**
+	     * 涓绘挱鍒楄〃
+	     * @param int page
+	     * @param int size
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboList(int page ,int size) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("page", page);
+	    	params.put("size", size);
+	    	return this.call("zhubo.list", params);
+	    }
+	    
+	    /**
+	     * 涓绘挱鑾峰彇鐧诲綍椤甸潰
+	     * @param account 	涓绘挱璐︽埛鍚�
+	     * @param accountType 	涓绘挱璐︽埛绫诲瀷
+	     * @param options 	鍏跺畠鍙�夐」锛宻sl锛氭槸鍚︿娇鐢╤ttps(true涓轰娇鐢紝false涓轰笉浣跨敤)
+	     * @return
+	     * @throws Exception
+	     */
+	    public String zhuboLogin(String account, int accountType, HashMap<Object,Object> options) throws Exception{
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	params.put("options", options);
+	    	return this.call("zhubo.login", params);
+	    }
+
+        /**
+         * 鏍规嵁鎴块棿ID鑾峰彇涓绘挱鐧诲綍鍦板潃
+         * @param roomid 	鎴块棿ID
+         * @param options 	鍏跺畠鍙�夐」锛宻sl锛氭槸鍚︿娇鐢╤ttps(true涓轰娇鐢紝false涓轰笉浣跨敤)
+         * @return
+         * @throws Exception
+         */
+        public String zhuboRoomLogin(String roomid, HashMap<Object,Object> options) throws Exception{
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("roomid", roomid);
+            params.put("options", options);
+            return this.call("zhubo.room.login", params);
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱鐧诲綍璁板綍
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @param String 		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @param int           accountType     涓绘挱璐﹀彿绫诲瀷銆�1 娆㈡嫇璐︽埛, 2 鍚堜綔鏂硅处鎴�
+         * @return
+         * @throws Exception
+         */
+        public String zhuboLoginInfo(int page, int size, String account) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("account", account);
+        	return this.call("zhubo.loginInfo", params);
+        }
+        
+        /**
+         * 涓绘挱瑙傜湅鍥哄畾閾炬帴
+         * @param String		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @param int			accountType     涓绘挱璐﹀彿绫诲瀷銆�1 娆㈡嫇璐︽埛, 2 鍚堜綔鏂硅处鎴�
+         * @return
+         * @throws Exception
+         */
+        public String zhuboGetLoginUrl(String account, int accountType) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("account", account);
+        	params.put("accountType", accountType);
+        	return this.call("zhubo.getLoginUrl", params);
+		}
+		
+		/**
+         * 鑾峰彇涓绘挱涓婁笅璇捐褰�
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @param String 		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @param int           accountType     涓绘挱璐﹀彿绫诲瀷銆�1 娆㈡嫇璐︽埛, 2 鍚堜綔鏂硅处鎴�
+         * @return
+         * @throws Exception
+         */
+        public String zhuboClassRecord(int page, int size, String account) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("account", account);
+        	return this.call("zhubo.classRecord", params);
+        }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱鍥炴斁璁板綍(闇�瑕佹惡甯︾敤鎴蜂俊鎭殑锛屼娇鐢╱serAccessPlayback鏂规硶)
+	     * @param String liveid 鐩存挱ID
+	     * @param int expire 鍦板潃鏈夋晥鏃堕棿
+	     * @return 
+	     * @throws Exception
+	     */
+	    public String liveGet(String liveid,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("liveid", liveid);
+	    	params.put("expire",expire);
+	    	return this.call("live.get", params);
+	    }
+	    	
+	    
+	    
+	    /**
+	     * 鎵归噺鑾峰彇鐩存挱鍥炴斁璁板綍
+	     * @param String[] liveids 鐩存挱ID鍒楄〃 
+	     * @param int expire 鍦板潃鏈夋晥鏈�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveGetBatch(String[] liveids,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("liveids", liveids);
+	    	params.put("expire", expire);
+	    	return this.call("live.getBatch",params);
+	    }
+
+        /**
+         * 鑾峰彇鏈�鏂扮殑鍑犱釜鐩存挱璁板綍
+         * @param  int   size    姣忛〉涓暟
+         */
+        public String liveGetLast(int size, int roomid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("size", size);
+            params.put("roomid", roomid);
+            return this.call("live.getlast", params);
+        }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱鍥炴斁璁板綍鍒楄〃
+	     * @param String startDate 寮�濮嬫棩鏈�
+	     * @param String endDate 缁撴潫鏃ユ湡
+	     * @param int page	椤电爜
+	     * @param int size 姣忛〉鏉℃暟
+	     * @param int playback 鏄惁鏈夊洖鏀�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveList(String startDate,String endDate,int page,int size,int playback) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("startDate", startDate);
+	    	params.put("endDate",endDate);
+	    	params.put("page", page);
+	    	params.put("size", size);
+	    	params.put("playback", playback);
+	    	return this.call("live.list",params);
+	    }
+
+	    /**
+         * 鑾峰彇鍏ㄩ儴鐩存挱璁板綍鍒楄〃
+         * @param   int  page   椤电爜(榛樿:1)
+         * @param   int  size   姣忛〉涓暟(榛樿:10)
+         */
+        public String liveListAll(int page, int size, String order, String roomid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("page", page);
+            params.put("size", size);
+            params.put("order", order);
+            params.put("roomid", roomid);
+            return this.call("live.listall", params);
+        }
+	    
+	    /**
+	     * 鑾峰彇鐩存挱鑱婂ぉ鍒楄〃
+	     * @param liveid
+	     * @param page
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveMessageList(String liveid,int page) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("liveid", liveid);
+	    	params.put("page", page);
+	    	return this.call("live.message",params);
+	    }
+	    
+        /**
+         *  鑾峰彇鐩存挱椴滆姳璁板綍
+         *  @param  String  liveid     鐩存挱ID
+         *  @param  int     page       椤电爜(榛樿:1)
+         *  @param  int     size       姣忛〉涓暟(榛樿:10)
+         */
+        public String liveFlowerList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.flower.list", params);
+        }
+	    
+	    /**
+	     * 鍒涘缓鐩存挱鍥炴斁涓撹緫
+	     * @param String album_name 涓撹緫鍚嶇О
+	     * @param String[] liveids 鐩存挱ID鍒楄〃
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAlbumCreate(String album_name,String[] liveids) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("album_name", album_name);
+	    	params.put("liveids", liveids);
+	    	return this.call("live.album.create",params);
+	    }
+	    
+	    /**
+	     * 鑾峰彇涓撹緫淇℃伅
+	     * @param String album_id 涓撹緫ID
+	     * @param int expire 涓撹緫鍦板潃鏈夋晥鏈�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAlbumGet(String album_id,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("album_id", album_id);
+	    	params.put("expire", expire);
+	    	return this.call("live.album.get",params);
+	    }
+	    
+	    /**
+	     * 鍒犻櫎涓撹緫
+	     * @param String album_id 涓撹緫ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAlbumDelete(String album_id) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("album_id", album_id);
+	    	return this.call("live.album.delete",params);
+	    }
+	    
+	    /**
+	     * 寰�涓撹緫閲岄潰澧炲姞鍥炴斁璁板綍
+	     * @param String album_id 涓撹緫ID
+	     * @param String[] liveids 鍥炴斁璁板綍鍒楄〃
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAlbumAdd(String album_id,String[] liveids) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("album_id", album_id);
+	    	params.put("liveids", liveids);
+	    	return this.call("live.album.add",params);
+	    }
+	    
+	    /**
+	     * 浠庝笓杈戜腑绉婚櫎鍥炴斁璁板綍
+	     * @param String album_id 涓撹緫ID
+	     * @param String[] liveids 鍥炴斁璁板綍鍒楄〃
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAlbumRemove(String album_id,String[] liveids) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("album_id", album_id);
+	    	params.put("liveids", liveids);
+	    	return this.call("live.album.remove", params);
+	    }
+	    
+	    /**
+	     * 鍙戣捣鎶曠エ
+	     * @param String 			roomid 			鎴块棿ID
+	     * @param String 			uid				鎶曠エ鍙戝竷鑰咃紝鍚堜綔鏂圭敤鎴稩D
+	     * @param String 			nickname		鎶曠エ鍙戝竷鑰咃紝鍚堜綔鏂圭敤鎴锋樀绉�
+	     * @param String 			title			鎶曠エ涓婚
+	     * @param String 			label			鎶曠エ鏍囩
+	     * @param ArrayList 		op				閫夐」锛宩son鏍煎紡锛屾瘮濡� ["aaa","bbb"]锛宎aa涓虹涓�涓�夐」锛宐bb涓虹浜屼釜閫夐」
+	     * @param int 				type			绫诲瀷锛�0涓哄崟閫夛紝1涓哄閫�
+	     * @param nt 				optional		鑻ヤ负鍗曢�夊垯浼�1锛屽閫夊垯浼犵殑鍊间负澶氬皯琛ㄧず鍙互閫夊嚑椤�
+	     * @param String 			answer			绛旀锛岃缃鍑犻」涓虹瓟妗堬紝浼犲叆 "0" 琛ㄧず绗竴涓�夐」涓烘纭瓟妗堬紝浼犲叆 "0,2" 琛ㄧず绗竴鍜岀涓夐」涓烘纭瓟妗堬紝涓嶈缃瓟妗堝垯浼犵┖瀛楃涓�
+	     * @param String 			image			鍥剧墖璺緞锛岃嫢瑕佷笂浼犲浘鐗囦綔涓洪鐩紝鍒欎紶鍏ュ浘鐗�
+	     * @param HashMap 			options 		鍙�夊弬鏁�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveVoteAdd(String roomid, String uid, String nickname, String title, String label, ArrayList op, int type, int optional, String answer, String image, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("title", title);
+        	params.put("label", label);
+        	params.put("op", op);
+        	params.put("type", type);
+        	params.put("optional", optional);
+        	params.put("answer", answer);
+        	params.put("options", options);
+	    	
+        	HashMap<Object,Object> files = new HashMap<Object,Object>();
+        	if ("" != image) {
+        		files.put("image", "@" + image);
+        	}
+        	
+        	return this.call("live.vote.add", params, "POST", files);
+	    }
+	    
+	    /**
+	     * 缁撴潫鎶曠エ
+	     * @param String 			vid			鎶曠エID
+	     * @param int 				showResult	鏄惁鏄剧ず鎶曠エ缁撴灉锛�0涓轰笉鏄剧ず锛�1涓烘樉绀�
+	     * @param String 			uid			鎶曠エ缁撴潫鑰咃紝鍚堜綔鏂圭敤鎴稩D
+	     * @param String 			nickname	鎶曠エ缁撴潫鑰咃紝鍚堜綔鏂圭敤鎴锋樀绉�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveVoteEnd(String vid, int showResult, String uid, String nickname) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("vid", vid);
+	    	params.put("showResult", showResult);
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	
+	    	return this.call("live.vote.end", params);
+	    }
+	    
+	    /**
+	     * 鍙戝竷棰勫彂甯冪殑鎶曠エ
+	     * @param String 			vid 		鎶曠エID
+	     * @param String 			roomid 		鎴块棿ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveVoteEmit(String vid, String roomid) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("vid", vid);
+	    	params.put("roomid", roomid);
+	    	
+	    	return this.call("live.vote.emit", params);
+	    }
+	    
+	    /**
+	     * 鍒犻櫎鎶曠エ
+	     * @param String 		vid 		鎶曠エID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveVoteDelete(String vid) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("vid", vid);
+	    	
+	    	return this.call("live.vote.delete", params);
+	    }
+	    
+	    /**
+	     * 鏇存柊鎶曠エ
+	     * @param String 		vid 		鎶曠エID
+	     * @param HashMap 		options 	瑕佹洿鏂扮殑淇℃伅
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveVoteUpdate(String vid, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("vid", vid);
+	    	params.put("options", options);
+	    	
+	    	HashMap<Object,Object> files = new HashMap<Object,Object>();
+	    	
+	    	if (options.containsKey("image")) {
+	    		String image = options.get("image").toString();
+	    		if ("" != image) {
+	    			File file = new File(image);
+	    			if (!file.exists()) {
+	    				HashMap<Object,Object> ret = new HashMap<Object,Object>();
+	    				ret.put("code", CODE_FAIL);
+	    				ret.put("msg", "鏂囦欢" + image + "涓嶅瓨鍦�");
+	    				return JSONObject.fromObject(ret).toString();
+	    			}
+	    			
+	    			files.put("image", "@" + image);
+	    		}
+	    	}
+	    	
+	    	return this.call("live.vote.update", params, "POST", files);
+	    }
+
+        /**
+         * 鍒涘缓涓�涓笓杈�
+         * @param  String  $album_name     涓撹緫鍚嶇О
+         * @return
+	     * @throws Exception
+         */
+        public String albumCreate(String album_name, String[] liveids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_name", album_name);
+            params.put("liveids", liveids);
+            return this.call("album.create", params);
+        }
+
+        /**
+         * 鑾峰彇涓�涓洿鎾笓杈�
+         * @param  String album_id        涓撹緫ID
+         * @param  int expire          鍦板潃鏈夋晥鏃堕棿     
+         * @return
+         */
+        public String albumGet(String album_id, int expire) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            params.put("expire", expire);
+            return this.call("album.get", params);
+        }
+
+        /**
+         * 鍒犻櫎涓�涓笓杈�
+         * @param  String album_id   涓撹緫ID
+         * @return
+         */
+        public String albumDelete(String album_id) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            return this.call("album.delete", params);
+        }
+
+        /**
+         * 寰�涓撹緫澧炲姞涓�涓洖鏀捐褰�
+         * @param  String album_id   涓撹緫ID
+         * @param  array course_id  鍥炴斁璁板綍鐨勮绋媔d
+         * @return
+         */
+        public String albumAdd(String album_id, String[] liveids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            params.put("liveids", liveids);
+            return this.call("album.add", params);
+        }
+
+        /**
+         * 浠庝笓杈戦噷闈㈡竻闄ゆ煇涓洖鏀�
+         * @param String  album_id   涓撹緫ID
+         * @param array course_id   鍥炴斁璁板綍鐨勮绋媔d
+         * @param
+         */
+        public String albumRemove(String album_id, String[] liveids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            params.put("liveids", liveids);
+            return this.call("album.remove", params);
+        }
+
+        /**
+         * 鍒涘缓涓�涓绋嬩笓杈�
+         * @param  String  album_name     涓撹緫鍚嶇О
+         * @param  array course_ids      璇剧▼id
+         * @return
+         */
+        public String albumCreateCourse(String album_name, String[] course_ids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_name", album_name);
+            params.put("course_ids", course_ids);
+            return this.call("album.course.create", params);
+        }
+
+        /**
+         * 寰�璇剧▼涓撹緫澧炲姞涓�涓绋嬪洖鏀捐褰�
+         * @param  String album_id   涓撹緫ID
+         * @param  array course_id  璇剧▼鍥炴斁璁板綍ID鍒楄〃
+         * @return
+         */
+        public String albumAddCourse(String album_id, String[] course_ids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            params.put("course_ids", course_ids);
+            return this.call("album.course.add", params);
+        }
+
+        /**
+         * 浠庤绋嬩笓杈戦噷闈㈡竻闄ゆ煇涓绋嬪洖鏀�
+         * @param String  album_id   涓撹緫ID
+         * @param array course_ids   鍥炴斁璁板綍鐨勮绋媔d
+         * @param
+         */
+        public String albumRemoveCourse(String album_id, String[] course_ids) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("album_id", album_id);
+            params.put("course_ids", course_ids);
+            return this.call("album.course.remove", params);
+        }
+	    
+	    /**
+	     * 鏍规嵁鎴块棿鍙婃椂闂磋幏鍙栧洖鏀捐褰�
+	     * @param String roomid 鎴块棿ID
+	     * @param String start_time 寮�濮嬫椂闂� 鏍煎紡:2014-12-26 12:00:00
+	     * @param int expire 鍦板潃鏈夋晥鏈�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveRoomGet(String roomid,String start_time,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("start_time", start_time);
+	    	params.put("expire", expire);
+	    	return this.call("live.room.get",params);
+	    }
+	    
+	    /**
+	     * 鏍规嵁鎴块棿鍙婃椂闂村尯闂磋幏鍙栧洖鏀捐褰�
+	     * @param String roomid 鎴块棿ID
+	     * @param String start_time 璧峰鍖洪棿鏃堕棿鎴�  鏍煎紡锛�2014-12-26 00:00:00
+	     * @param String end_time 缁撴潫鍖洪棿鏃堕棿鎴�  鏍煎紡: 2014-12-26 12:00:00
+	     * @param int expire 鏈夋晥鏈�
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveRoomList(String roomid, String start_time,String end_time,int expire) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("roomid", roomid);
+	    	params.put("start_time", start_time);
+	    	params.put("end_time", end_time);
+	    	params.put("expire", expire);
+	    	return this.call("live.room.list",params);
+	    }
+	    
+        /**
+         * 鏍规嵁鐩存挱ID鑾峰彇璁垮鍒楄〃
+         * @param  String liveid      鐩存挱ID
+         * @param  int page           椤电爜
+         * @param  int size           姣忛〉涓暟 
+         * @return
+         */
+        public String liveVisitorList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.visitor.list", params);
+        }
+
+        /**
+         * 鏍规嵁鐩存挱ID锛岀敤鎴稩D鑾峰彇璁垮鍒楄〃
+         * @param  String liveid      鐩存挱ID
+         * @param  String uid         鐢ㄦ埛ID
+         * @return  
+         */
+        public String liveVisitorGet(String liveid, String uid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("uid", uid);
+            return this.call("live.visitor.get", params);
+        }
+
+        /**
+         * 鏍规嵁鐩存挱ID鑾峰彇鎻愰棶鍒楄〃
+         * @param  String  liveid      鐩存挱ID
+         * @param  int     page        椤电爜
+         * @param  int     size        姣忛〉涓暟
+         * @return
+         */
+        public String liveQuestionList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.question.list", params);
+        }
+	    
+	    /**
+	     * 鑾峰彇闊抽涓嬭浇鍦板潃
+	     * @param String  liveid    鐩存挱ID
+	     * @return
+	     * @throws Exception
+	     */
+	    public String liveAudioDownloadUrl(String liveid) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("liveid", liveid);
+	    	return this.call("live.audio.download.url",params);
+	    }
+	    
+	    /**
+         * 鏍规嵁鐩存挱ID鑾峰彇鍥炴斁璁垮鍒楄〃
+         * @param  String   liveid      鐩存挱ID
+         * @param  int      page        椤电爜
+         * @param  int      size        姣忛〉涓暟
+         * @return
+         */
+        public String livePlaybackVisitorList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.playback.visitor.list", params);
+        }
+
+        /**
+         * 鎸夌収鏃堕棿鍖洪棿鑾峰彇鍥炴斁璁垮鍒楄〃    (鏃堕棿鍖洪棿涓嶈兘澶т簬7澶�)
+         * @param  String  start_time     寮�濮嬫椂闂�    鏍煎紡锛�2016-01-01 00:00:00
+         * @param  String  end_time       缁撴潫鏃堕棿    鏍煎紡锛�2016-01-02 00:00:00
+         * @param  int     page           椤电爜
+         * @param  int     size           姣忛〉涓暟
+         */
+        public String livePlaybackVisitorTimeList(String start_time, String end_time, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("start_time", start_time);
+            params.put("end_time", end_time);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.playback.visitor.timelist", params);
+        }
+        
+        /**
+         * 鏍规嵁鐩存挱id鑾峰彇鍥炴斁瑙嗛
+         * @param int  liveid 	鐩存挱id
+         */
+        public String livePlaybackVideo(int liveid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("liveid", liveid);
+        	return this.call("live.playback.video", params);
+        }
+		
+		/**
+         * 鏍规嵁鐩存挱id鑾峰彇鍥炴斁鐧诲綍鍦板潃
+         * @param int  liveid 	鐩存挱id
+         */
+        public String livePlaybackLoginUrl(int liveid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("liveid", liveid);
+        	return this.call("live.playback.loginUrl", params);
+        }
+
+        /**
+         * 鑾峰彇鐩存挱PPT绔犺妭淇℃伅
+         * @param int  liveid 	鐩存挱id
+         */
+        public String liveChapterList(int liveid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("liveid", liveid);
+        	return this.call("live.chapter.list", params);
+        }
+
+        /**
+         * 鎸夌収鐩存挱ID鑾峰彇鎶曠エ鍒楄〃
+         * @param  String   liveid      鐩存挱ID
+         * @param  int      page        椤电爜
+         * @param  int      size        姣忛〉涓暟
+         * @return
+         */
+        public String liveVoteList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.vote.list", params);
+        }
+
+        /**
+         * 鎸夌収鎶曠エID鍜岀洿鎾璉D鑾峰彇鎶曠エ璇︽儏
+         * @param  int      vid        鎶曠エID
+         * @param  int      liveid     鐩存挱ID
+         * @param  int      page       椤电爜
+         * @param  int      size       姣忛〉涓暟
+         * @return
+         */
+         public String liveVoteDetail(int vid, int liveid, int page, int size) throws Exception {
+             HashMap<Object,Object> params = new HashMap<Object,Object>();
+             params.put("vid", vid);
+             params.put("liveid", liveid);
+             params.put("page", page);
+             params.put("size", size);
+             return this.call("live.vote.detail", params);
+         }
+
+         /**
+          * 鎸夌収鐩存挱ID鑾峰彇鎶藉鍒楄〃
+          * @param  String   liveid      鐩存挱ID
+          * @param  int      page        椤电爜
+          * @param  int      size        姣忛〉涓暟
+          * @return
+          */
+        public String liveLotteryList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.lottery.list", params);
+        }
+        
+        /**
+         * 璁剧疆鏈�楂樺湪绾�
+         * @param options 	鍙紶鐨勫弬鏁�
+         * @return
+         */
+        public String liveMaxUserSet(HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("options", options);
+        	return this.call("live.maxUser.set", params);
+        }
+        
+        /**
+         * 鑾峰彇鏈�楂樺湪绾�
+         * @return
+         */
+        public String liveMaxUserGet() throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	return this.call("live.maxUser.get", params);
+        }
+        
+        /**
+         * 鍙戣捣鎻愰棶
+         * @param string    roomid     鎴块棿ID
+         * @param string    content    鎻愰棶鍐呭
+         * @param string    uid        鐢ㄦ埛id
+         * @param string    role       鐢ㄦ埛瑙掕壊
+         * @param string    nickname   鐢ㄦ埛鏄电О
+         * @param HashMap   options    鍙�夊弬鏁�
+         */
+        public String liveQaAdd(String roomid, String content, String uid, String role, String nickname, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("roomid", roomid);
+        	params.put("content", content);
+        	params.put("uid", uid);
+        	params.put("role", role);
+        	params.put("nickname", nickname);
+        	params.put("options", options);
+        	return this.call("live.qa.add", params);
+        }
+        
+        /**
+         * 瀹℃牳閫氳繃鎻愰棶
+         * @param int       qid        鎻愰棶ID
+         * @param string    roomid     鎴块棿ID
+         */
+        public String liveQaAudit(int qid, String roomid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("roomid", roomid);
+        	return this.call("live.qa.audit", params);
+        }
+        
+        /**
+         * 鍒犻櫎鎻愰棶
+         * @param int       qid        鎻愰棶ID
+         * @param string    roomid     鎴块棿ID
+         */
+        public String liveQaDelete(int qid, String roomid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("roomid", roomid);
+        	return this.call("live.qa.delete", params);
+        }
+        
+        /**
+         * 鍥炲鎻愰棶
+         * @param int       qid        鎻愰棶ID
+         * @param string    roomid     鎴块棿ID
+         * @param string    content    鍥炲鍐呭
+         * @param string    uid        鐢ㄦ埛ID
+         * @param string    nickname   鐢ㄦ埛鏄电О
+         * @param HashMap   options    鍙�夊弬鏁�
+         */
+        public String liveQaAnswer(int qid, String roomid, String content, String uid, String nickname, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("roomid", roomid);
+        	params.put("content", content);
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("options", options);
+        	return this.call("live.qa.answer", params);
+        }
+        
+        /**
+         * 鑾峰彇闂瓟鍒楄〃
+         * @param   String    roomid         鎴块棿ID
+         * @param 	int  	  page 		          椤电爜
+         * @param 	int 	  size 		          姣忛〉鏁伴噺
+         * @param   HashMap   options        鍙�夊弬鏁�
+         */
+        public String liveQaList(String roomid, int page, int size, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("roomid", roomid);
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("options", options);
+        	return this.call("live.qa.list", params);
+        }
+
+        /**
+         * 鎸夌収鐩存挱ID鑾峰彇绉佽亰璁板綍鍒楄〃
+         * @param  String   liveid      鐩存挱ID
+         * @param  int      page        椤电爜
+         * @param  int      size        姣忛〉涓暟
+         * @return
+         */
+        public String livePrivateChatList(String liveid, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("live.privateChat", params);
+        }
+
+        /**
+        *   澧炲姞涓�涓洿鎾绋�
+        *   @param String course_name 璇剧▼鍚嶇О
+        *   @param String account 鍙戣捣鐩存挱璇剧▼鐨勪富鎾处鍙�
+        *   @param String start_time 璇剧▼寮�濮嬫椂闂�,鏍煎紡: 2015-01-10 12:00:00
+        *   @param String end_time 璇剧▼缁撴潫鏃堕棿,鏍煎紡: 2015-01-10 13:00:00
+        *   @return
+        */
+        public String courseAdd(String course_name, String account, String start_time, String end_time, String nickname, String accountIntro, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_name", course_name);
+            params.put("account", account);
+            params.put("start_time", start_time);
+            params.put("end_time", end_time);
+            params.put("nickname", nickname);
+            params.put("accountIntro", accountIntro);
+            params.put("options", options);
+            return this.call("course.add", params);
+        }
+
+        /**
+         *  杩涘叆涓�涓绋�
+         *  @param  String  course_id      璇剧▼ID 
+         *  @param  String  uid            鐢ㄦ埛鍞竴ID
+         *  @param  String  nickname       鐢ㄦ埛鏄电О 
+         *  @param  String  role           鐢ㄦ埛瑙掕壊锛屾灇涓捐:ROLE 瀹氫箟
+         *  @param  Int     expire         鏈夋晥鏈�,榛樿:3600(鍗曚綅:绉�)
+         *  @param  Array   options        鍙�夐」锛屽寘鎷�:gender:鏋氫妇瑙佷笂闈ENDER瀹氫箟,avatar:澶村儚鍦板潃
+         */
+        public String courseAccess(String course_id, String uid, String nickname, String role, int expire, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("uid", uid);
+            params.put("nickname", nickname);
+            params.put("role", role);
+            params.put("expire", expire);
+            params.put("options", options);
+            return this.call("course.access", params);
+        }
+
+        /**
+         *  杩涘叆涓�涓绋嬪洖鏀�
+         *  @param  String  course_id      璇剧▼ID 
+         *  @param  String  uid            鐢ㄦ埛鍞竴ID
+         *  @param  String  nickname       鐢ㄦ埛鏄电О 
+         *  @param  String  role           鐢ㄦ埛瑙掕壊锛屾灇涓捐:ROLE 瀹氫箟
+         *  @param  Int     expire         鏈夋晥鏈�,榛樿:3600(鍗曚綅:绉�)
+         *  @param  Array   options        鍙�夐」锛屽寘鎷�:gender:鏋氫妇瑙佷笂闈ENDER瀹氫箟,avatar:澶村儚鍦板潃
+         */
+        public String courseAccessPlayback(String course_id, String uid, String nickname, String role, int expire, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("uid", uid);
+            params.put("nickname", nickname);
+            params.put("role", role);
+            params.put("expire", expire);
+            params.put("options", options);
+            return this.call("course.access.playback", params);
+        }
+        
+        /**
+         *  鑾峰彇璇剧▼鐩存挱闂村湴鍧�
+         *  @param  String  course_id      璇剧▼ID 
+         *  @param  String  uid            鐢ㄦ埛鍞竴ID
+         *  @param  String  nickname       鐢ㄦ埛鏄电О 
+         *  @param  String  role           鐢ㄦ埛瑙掕壊锛屾灇涓捐:ROLE 瀹氫箟
+         *  @param  Int     expire         鏈夋晥鏈�,榛樿:3600(鍗曚綅:绉�)
+         *  @param  Array   options        鍙�夐」锛屽寘鎷�:gender:鏋氫妇瑙佷笂闈ENDER瀹氫箟,avatar:澶村儚鍦板潃
+         */
+        public String courseAccessUrl(String course_id, String uid, String nickname, String role, int expire, HashMap<Object,Object> options) throws Exception {
+        	String accessAuth = this.courseAccessKey(course_id, uid, nickname, role, expire, options);
+	    	return "http://open.talk-fun.com/room.php?accessAuth=" + accessAuth;
+        }
+        
+        /**
+         *  鑾峰彇璇剧▼鐩存挱key
+         *  @param  String  course_id      璇剧▼ID 
+         *  @param  String  uid            鐢ㄦ埛鍞竴ID
+         *  @param  String  nickname       鐢ㄦ埛鏄电О 
+         *  @param  String  role           鐢ㄦ埛瑙掕壊锛屾灇涓捐:ROLE 瀹氫箟
+         *  @param  Int     expire         鏈夋晥鏈�,榛樿:3600(鍗曚綅:绉�)
+         *  @param  Array   options        鍙�夐」锛屽寘鎷�:gender:鏋氫妇瑙佷笂闈ENDER瀹氫箟,avatar:澶村儚鍦板潃
+         */
+        public String courseAccessKey(String course_id, String uid, String nickname, String role, int expire, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	params.put("timestamp", ts);
+	    	
+	    	params.put("course_id", course_id);
+	    	params.put("uid", uid);
+	    	params.put("nickname", nickname);
+	    	params.put("role", role);
+	    	params.put("expire", expire);
+	    	params.put("options", JSONObject.fromObject(options).toString());
+	    	
+	    	params.put("sign", this.generateSign(params));
+	    	String accessAuth = JSONObject.fromObject(params).toString();
+	    	accessAuth = this.base64UrlEncode(accessAuth);
+	    	
+	    	return accessAuth;
+        }
+        
+        /**
+         *  鑾峰彇璇剧▼鍥炴斁鍦板潃
+         *  @param  String  course_id      璇剧▼ID 
+         *  @param  String  uid            鐢ㄦ埛鍞竴ID
+         *  @param  String  nickname       鐢ㄦ埛鏄电О 
+         *  @param  String  role           鐢ㄦ埛瑙掕壊锛屾灇涓捐:ROLE 瀹氫箟
+         *  @param  Int     expire         鏈夋晥鏈�,榛樿:3600(鍗曚綅:绉�)
+         *  @param  Array   options        鍙�夐」锛屽寘鎷�:gender:鏋氫妇瑙佷笂闈ENDER瀹氫箟,avatar:澶村儚鍦板潃
+         */
+        public String courseAccessPlaybackUrl(String course_id, String uid, String nickname, String role, int expire, HashMap<Object,Object> options) throws Exception {
+        	String accessAuth = this.courseAccessKey(course_id, uid, nickname, role, expire, options);
+	    	return "http://open.talk-fun.com/player.php?accessAuth=" + accessAuth;
+        }
+
+        /**
+        *   鏌ヨ璇剧▼淇℃伅
+        *   @param String course_id 璇剧▼ID
+        */
+        public String courseGet(String course_id, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+			params.put("options", options);
+            return this.call("course.get", params);
+        }
+        
+        /**
+         * 鍙戦�佸箍鎾�
+         * @param String course_id  璇剧▼ID
+         * @param String cms
+         * @param HashMap args
+         * @param HashMap options
+         * @return
+	     * @throws Exception
+         */
+        public String courseBroadcastSend(String course_id, String cmd, HashMap<Object,Object> args, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("cmd", cmd);
+            params.put("params", args);
+            params.put("options", options);
+            return this.call("course.broadcast.send", params);
+        }
+
+        /**
+        *   鍒犻櫎璇剧▼
+        *   @param String course_id 璇剧▼ID
+        */
+        public String courseDelete(String course_id) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            return this.call("course.delete", params);
+        }
+
+        /**
+        *   璇剧▼鍒楄〃(灏嗚繑鍥炲紑濮嬫椂闂村湪鍖洪棿鍐呯殑璇剧▼)
+        *   @param String start_time 寮�濮嬫椂闂村尯闂�,鏍煎紡: 2015-01-01 12:00:00
+        *   @param String end_time 缁撴潫鏃堕棿鍖洪棿,鏍煎紡: 2015-01-02 12:00:00
+        *   @param int 	  page 		椤电爜
+        *   @param int 	  size 		姣忛〉鏁伴噺
+        *   @param HashMap options 	鍏朵粬鍙傛暟锛宻tatus锛氳绋嬬姸鎬�(0涓烘甯哥姸鎬侊紝-1涓哄凡鍒犻櫎)
+        *   @return 
+        */
+        public String courseList(String start_time, String end_time, int page, int size, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("start_time", start_time);
+            params.put("end_time", end_time);
+            params.put("page", page);
+            params.put("size", size);
+            params.put("options", options);
+            return this.call("course.list", params);
+        }
+
+        /**
+        *   鏇存柊璇剧▼淇℃伅
+        *   @param String course_id 璇剧▼ID
+        *   @param String account 鍙戣捣鐩存挱璇剧▼鐨勪富鎾处鍙�
+        *   @param String course_name 璇剧▼鍚嶇О
+        *   @param String start_time 璇剧▼寮�濮嬫椂闂�,鏍煎紡:2015-01-01 12:00:00
+        *   @param String end_time 璇剧▼缁撴潫鏃堕棿,鏍煎紡:2015-01-01 13:00:00
+        *   @param String nickname 	涓绘挱鐨勬樀绉�
+        *   @param String accountIntro 	涓绘挱鐨勭畝浠�
+        *   @param HashMap options 		鍙�夊弬鏁�
+        */
+        public String courseUpdate(String course_id, String account, String course_name, String start_time, String end_time, String nickname, String accountIntro, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("course_name", course_name);
+            params.put("account", account);
+            params.put("start_time", start_time);
+            params.put("end_time", end_time);
+            params.put("nickname", nickname);
+            params.put("accountIntro", accountIntro);
+            params.put("options", options);
+            return this.call("course.update", params);
+        }
+
+        /**
+         *  鎸夌収鎶曠エID鍜岃绋婭D鑾峰彇鎶曠エ璇︽儏
+         *  @param  int      vid        鎶曠エID
+         *  @param  int      course_id   璇剧▼ID
+         *  @param  int      page       椤电爜
+         *  @param  int      size       姣忛〉涓暟
+         *  @return
+         */
+        public String courseVoteDetail(int vid, int course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("vid", vid);
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.votes.detail", params);
+        }
+
+        /**
+         *  鎸夌収璇剧▼ID鑾峰彇鎶曠エ鍒楄〃
+         *  @param  String   course_id      璇剧▼ID
+         *  @param  int      page        椤电爜
+         *  @param  int      size        姣忛〉涓暟
+         *  @return
+         */
+        public String courseVoteList(String course_id, int page, int size, String status) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            params.put("status", status);
+            return this.call("course.votes.list", params);
+        }
+        
+        /**
+         * 鍒犻櫎鎶曠エ
+         * @param String 		vid 		鎶曠エID
+         * @return
+         * @throws Exception
+         */
+        public String courseVoteDelete(String vid) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("vid", vid);
+        	return this.call("course.votes.delete", params);
+        }
+        
+        /**
+         * 鏇存柊鎶曠エ
+         * @param String 		vid 		鎶曠エID
+         * @param HashMap 		options 	瑕佹洿鏂扮殑淇℃伅
+         * @return
+         * @throws Exception
+         */
+        public String courseVoteUpdate(String vid, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("vid", vid);
+	    	params.put("options", options);
+	    	
+	    	HashMap<Object,Object> files = new HashMap<Object,Object>();
+	    	
+	    	if (options.containsKey("image")) {
+	    		String image = options.get("image").toString();
+	    		if ("" != image) {
+	    			File file = new File(image);
+	    			if (!file.exists()) {
+	    				HashMap<Object,Object> ret = new HashMap<Object,Object>();
+	    				ret.put("code", CODE_FAIL);
+	    				ret.put("msg", "鏂囦欢" + image + "涓嶅瓨鍦�");
+	    				return JSONObject.fromObject(ret).toString();
+	    			}
+	    			
+	    			files.put("image", "@" + image);
+	    		}
+	    	}
+	    	
+	    	return this.call("course.votes.update", params, "POST", files);
+        }
+
+        /**
+         *  鎸夌収璇剧▼ID鑾峰彇鎶藉鍒楄〃
+         *  @param  String   course_id      璇剧▼ID
+         *  @param  int      page        椤电爜
+         *  @param  int      size        姣忛〉涓暟
+         *  @return
+         */
+        public String courseLotteryList(String course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.lottery.list", params);
+        }
+
+        /**
+         *  鎸夌収璇剧▼ID鑾峰彇闊抽涓嬭浇鍦板潃
+         *  @param  String   course_id      璇剧▼ID
+         *  @return
+         */
+        public String courseAudioDownloadUrl(String course_id) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            return this.call("course.audio.download.url", params);
+        }
+        
+        /**
+         * 鑾峰彇鍦ㄧ嚎鐢ㄦ埛鍒楄〃
+         * @param 	String 		course_id 		璇剧▼ID
+         * @param 	String 		start_time 		鏌ヨ寮�濮嬫椂闂�,鏍煎紡:2015-01-01 12:00:00
+         * @param 	String 		end_time 		鏌ヨ缁撴潫鏃堕棿,鏍煎紡:2015-01-01 13:00:00
+         * @param 	int 		page 			椤电爜
+         * @param  	int 		size 		 	姣忛〉鏁伴噺
+         * @return
+         * @throws Exception
+         */
+        public String courseOnlineList(String course_id, String start_time, String end_time, int page, int size) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("start_time", start_time);
+        	params.put("end_time", end_time);
+        	params.put("page", page);
+        	params.put("size", size);
+        	return this.call("course.online.list", params);
+        }
+        
+        /**
+         * 鑾峰彇鍦ㄧ嚎绠$悊鍛樺垪琛�
+         * @param 	String 		start_time 		鏌ヨ寮�濮嬫椂闂�,鏍煎紡:2015-01-01 12:00:00
+         * @param 	String 		end_time 		鏌ヨ缁撴潫鏃堕棿,鏍煎紡:2015-01-01 13:00:00
+         * @param 	int 		page 			椤电爜
+         * @param  	int 		size 		 	姣忛〉鏁伴噺
+         * @return
+         * @throws Exception
+         */
+        public String courseOnlineAdmin(String start_time, String end_time, int page, int size) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("start_time", start_time);
+        	params.put("end_time", end_time);
+        	params.put("page", page);
+        	params.put("size", size);
+        	return this.call("course.online.admin", params);
+        }
+
+        /**
+         *  鏍规嵁璇剧▼ID鑾峰彇璁垮鍒楄〃
+         *  @param  String course_id      璇剧▼ID
+         *  @param  int page           椤电爜
+         *  @param  int size           姣忛〉涓暟 
+         *  @param  HashMap options    鍙�夊弬鏁�
+         *  @return
+         */
+        public String courseVisitorList(String course_id, int page, int size, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            params.put("options", options);
+            return this.call("course.visitor.list", params);
+        }
+        
+        /**
+         * 鏍规嵁璇剧▼ID鑾峰彇鍥炴斁璁垮鍒楄〃
+         * @param Stirng course_id 		璇剧▼ID
+         * @param int page 				椤甸潰
+         * @param int size 				姣忛〉涓暟
+         * @param int options 			鍙�夊弬鏁�
+         * @return
+         */
+        public String coursePlaybackVisitorList(String course_id, int page, int size, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            params.put("options", options);
+            return this.call("course.visitor.playback", params);
+        }
+        
+        /**
+         *  鏍规嵁鏃堕棿鑾峰彇璁垮鍒楄〃
+         *  @param  string start_time   鏌ヨ璧峰鏃堕棿,鏍煎紡:2015-01-01 12:00:00
+         *  @param  string end_time     鏌ヨ缁撴潫鏃堕棿,鏍煎紡:2015-01-01 12:00:00
+         *  @param  int $page           椤电爜
+         *  @param  int $size           姣忛〉涓暟 
+         */
+        public String courseVisitorListAll(String start_time, String end_time, int page, int size) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("start_time", start_time);
+        	params.put("end_time", end_time);
+        	params.put("page", page);
+        	params.put("size", size);
+        	return this.call("course.visitor.listall", params);
+        }
+
+        /**
+         *  鏍规嵁璇剧▼ID鑾峰彇鎻愰棶鍒楄〃
+         *  @param  String course_id      璇剧▼ID
+         *  @param  int     page        椤电爜
+         *  @param  int     size        姣忛〉涓暟
+         *  @return
+         */
+        public String courseQuestionList(String course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.question.list", params);
+        }
+
+        /**
+         *  鑾峰彇璇剧▼椴滆姳璁板綍
+         *  @param  string  course_id     璇剧▼ID
+         *  @param  int     page       椤电爜(榛樿:1)
+         *  @param  int     size       姣忛〉涓暟(榛樿:10)
+         */
+        public String courseFlowerList(String course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.flower.list", params);
+        }
+
+        /**
+         *  鑾峰彇璇剧▼鑱婂ぉ鍒楄〃
+         *  @param  string      course_id         璇剧▼id
+         *  @param  int         page           	  椤电爜
+         *  @param  int     	size       		  姣忛〉涓暟         
+         *  @return array 
+         */
+        public String courseMessageList(String course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.message", params);
+        }
+
+        /**
+         *  鑾峰彇璇句欢鍒楄〃
+         *  @param  string      course_id         璇剧▼id
+         *  @param  int         page           椤电爜
+         *  @return array 
+         */
+        public String courseDocumentList(String course_id, int page) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            return this.call("course.document", params);
+        }
+        
+        /**
+         * 鍒犻櫎璇句欢
+         * @param 	String 		id 		璇句欢ID
+         * @return
+         */
+        public String courseDocumentDelete(String id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("id", id);
+            return this.call("document.delete", params);
+        }
+        
+        /**
+         * 鏍规嵁璇剧▼id鑾峰彇鍥炴斁瑙嗛
+         * @param string 	 course_id 		璇剧▼id
+         * @return
+         * @throws Exception
+         */
+        public String courseVideo(String course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	return this.call("course.video", params);
+        }
+        
+        /**
+         * 鏍规嵁璇剧▼id鑾峰彇鍥炴斁瑙嗛
+         * @param string 	 course_id 		璇剧▼id
+         * @prram HashMap 	 options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String courseVideo(String course_id, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("options", options);
+        	return this.call("course.video", params);
+        }
+        
+        /**
+         * 鏍规嵁璇剧▼id鑾峰彇璇剧▼閰嶇疆
+         * @param string 	course_id 		璇剧▼id
+         * @return
+         * @throws Exception
+         */
+        public String courseConfig(String course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	return this.call("course.getConfig", params);
+        }
+        
+        /**
+         * 鏇存柊璇剧▼閰嶇疆淇℃伅
+         * @param String 			course_id 		璇剧▼ID
+         * @param HashMap 			options 		閰嶇疆鍙傛暟
+         * @return
+         * @throws Exception
+         */
+        public String courseUpdateConfig(String course_id, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("options", options);
+        	return this.call("course.updateConfig", params);
+        }
+        
+        /**
+         * 鍙戣捣鎶曠エ
+         * @param String 	course_id 	璇剧▼ID
+         * @param String 	uid 		鎶曠エ鍙戝竷鑰咃紝鍚堜綔鏂圭敤鎴稩D
+         * @param String 	nickname 	鎶曠エ鍙戝竷鑰咃紝鍚堜綔鏂圭敤鎴锋樀绉�
+         * @param String 	title 		鎶曠エ涓婚
+         * @param String 	label 		鎶曠エ鏍囩
+         * @param ArrayList op 			閫夐」
+         * @param int 		type 		绫诲瀷锛�0涓哄崟閫夛紝1涓哄閫�
+         * @param int 		optional 	鑻ヤ负鍗曢�夊垯浼�1锛屽閫夊垯浼犵殑鍊间负澶氬皯琛ㄧず鍙互閫夊嚑椤�
+         * @param String 	answer 		绛旀
+         * @param String 	image 		鍥剧墖璺緞
+         * @param String 	options 	鍙�夊弬鏁�
+         */
+        public String courseVoteAdd(String course_id, String uid, String nickname, String title, String label, ArrayList op, int type, int optional, String answer, String image, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("title", title);
+        	params.put("label", label);
+        	params.put("op", op);
+        	params.put("type", type);
+        	params.put("optional", optional);
+        	params.put("answer", answer);
+        	params.put("options", options);
+        	
+        	HashMap<Object,Object> files = new HashMap<Object,Object>();
+        	
+        	if ("" != image) {
+        		files.put("image", "@" + image);
+        	}
+        	
+        	return this.call("course.votes.add", params, "POST", files);
+        }
+        
+        /**
+         * 缁撴潫鎶曠エ
+         * @param int 		vid 			鎶曠エID
+         * @param int 		showResult 		鏄惁鏄剧ず鎶曠エ缁撴灉锛�1鏄剧ず锛�0涓嶆樉绀�
+         * @param String 	uid 			鎶曠エ缁撴潫鑰咃紝鍚堜綔鏂圭敤鎴稩D
+         * @param String 	nickname 		鎶曠エ缁撴潫鑰咃紝鍚堜綔鏂圭敤鎴锋樀绉�
+         */
+        public String courseVoteEnd(int vid, int showResult, String uid, String nickname) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("vid", vid);
+        	params.put("showVote", showResult);
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	return this.call("course.votes.end", params);
+        }
+        
+        /**
+         * 鍙戝竷棰勫彂甯冪殑鎶曠エ
+         * @param int 		vid 		鎶曠エID
+         * @param int 		course_id 	璇剧▼ID
+         * @return
+         * @throws Exception
+         */
+        public String courseVoteEmit(int vid, int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("vid", vid);
+        	params.put("course_id", course_id);
+        	return this.call("course.votes.emit", params);
+        }
+
+        /**
+       	 * 鍙栬绋婸PT绔犺妭淇℃伅
+         * @param int  course_id 	璇剧▼id
+         */
+        public String courseChapterList(int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	return this.call("course.chapter.list", params);
+        }
+
+        /**
+       	 * 鏍规嵁璇剧▼ID鑾峰彇琚瑷�鐨勭敤鎴峰垪琛�
+         * @param int  course_id 	璇剧▼id
+         */
+        public String courseChatDisableList(int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	return this.call("course.chat.disable.list", params);
+        }
+
+        /**
+         *  娣诲姞鍓緫
+         *  @param Int     liveid      鐩存挱ID
+         *  @param String  name        鍓緫鍚嶇О
+         *  @param Json    time        鍓緫鏃堕棿锛宎rray(array('start'=>60,'end'=>180))
+         *  @param Int     isRelated   鏄惁鍏宠仈婧愮洿鎾紝榛樿涓嶅叧鑱�
+         */
+        public String clipAdd(int liveid, String name, HashMap<Object,Object> time, int isRelated) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("liveid", liveid);
+            params.put("name", name);
+            params.put("time", time);
+            params.put("isRelated", isRelated);
+            return this.call("clip.add", params);
+        }
+
+        /**
+         *  淇敼鍓緫
+         *  @param Int     clipid      鍓緫ID
+         *  @param String  name        鍓緫鍚嶇О
+         *  @param Array   time        鍓緫鏃堕棿锛宎rray(array('start'=>60,'end'=>180))
+         *  @param Int     isRelated   鏄惁鍏宠仈婧愮洿鎾紝榛樿涓嶅叧鑱�
+         */
+        public String clipUpdate(int clipid, String name, HashMap<Object,Object> time, int isRelated) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("clipid", clipid);
+            params.put("name", name);
+            params.put("time", time);
+            params.put("isRelated", isRelated);
+            return this.call("clip.update", params);
+        }
+
+        /**
+         *  鍒犻櫎鍓緫
+         *  @param Int     clipid      鍓緫ID
+         */
+        public String clipDelete(int clipid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("clipid", clipid);
+            return this.call("clip.delete", params);
+        }
+
+        /**
+         *  鑾峰彇鍓緫淇℃伅
+         *  @param Int     clipid      鍓緫ID
+         */
+        public String clipGet(int clipid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("clipid", clipid);
+            return this.call("clip.get", params);
+        }
+
+        /**
+         *  鑾峰彇鍓緫鍒楄〃
+         *  @param Int     page      椤电爜
+         *  @param Int     size      鏉℃暟
+         *  @param Int	   liveid	  鐩存挱id
+         */
+        public String clipList(int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("clip.list", params);
+        }
+        
+        /**
+         *  鑾峰彇鍓緫鍒楄〃
+         *  @param Int     page      椤电爜
+         *  @param Int     size      鏉℃暟
+         *  @param Int	   liveid	  鐩存挱id
+         */
+        public String clipList(int page, int size, int liveid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("page", page);
+            params.put("size", size);
+            params.put("liveid", liveid);
+            return this.call("clip.list", params);
+        }
+
+        /**
+         *  鏍规嵁璇剧▼id鑾峰彇鍓緫鍒楄〃
+         *  @param Int     course_id 璇剧▼id
+         *  @param Int     page      椤电爜
+         *  @param Int     size      鏉℃暟
+         */
+        public String clipListByCid(int course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("clip.course.list", params);
+        }
+
+        /**
+         *  娣诲姞鍓緫
+         *  @param Int     course_id    璇剧▼ID
+         *  @param String  name        鍓緫鍚嶇О
+         *  @param Json    time        鍓緫鏃堕棿锛宎rray(array('start'=>60,'end'=>180))
+         *  @param Int     isRelated   鏄惁鍏宠仈婧愮洿鎾紝榛樿涓嶅叧鑱�
+         */
+        public String clipAddByCid(int course_id, String name, HashMap<Object,Object> time, int isRelated) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("name", name);
+            params.put("time",time);
+            params.put("isRelated", isRelated);
+            return this.call("clip.course.add", params);
+        }
+        
+        /**
+         * 鑾峰彇鍓緫access_token锛屾挱鏀惧湴鍧�
+         * @param int 			clipid 			鍓緫ID
+         * @param String 		uid 			鍚堜綔鏂圭敤鎴峰敮涓�ID
+         * @param String 		nickname 		鍚堜綔鏂圭敤鎴锋樀绉�
+         * @param int 			expire 			鏈夋晥鏈燂紝鍗曚綅锛氱(榛樿3600绉�)
+         */
+        public String clipAccess(int clipid, String uid, String nickname, int expire) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("clipid", clipid);
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("expire", expire);
+        	return this.call("clip.access", params);
+        }
+        
+        /**
+         * 铏氭嫙鐢ㄦ埛瀵煎叆
+         * @param Int 	course_id 	璇剧▼ID
+         * @param Array userList 	铏氭嫙鐢ㄦ埛鍒楄〃
+         * @param int 	total 		鎬绘暟
+         */
+        public String courseRobotSet(int course_id, ArrayList userList, int total) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("userList", userList);
+        	params.put("total", total);
+        	HashMap<Object, Object> files = new HashMap<Object, Object>();
+        	
+        	return this.call("course.robot.set", params, "POST",files);
+        }
+        
+        /**
+         * 婊氬姩鍏憡鎺ュ彛
+         * @param int 		course_id 	璇剧▼ID
+         * @param String 	content 	婊氬姩鍏憡鍐呭
+         * @param String 	link 		婊氬姩鍏憡閾炬帴
+         * @param int 		duration 	婊氬姩閫氱煡鏄剧ず鏃堕暱(鍗曚綅锛氱)
+         * @return
+         * @throws Exception
+         */
+        public String courseNoticeRoll(int course_id, String content, String link, int duration) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("content", content);
+        	params.put("link", link);
+        	params.put("duration", duration);
+        	return this.call("course.notice.roll", params);
+        }
+        
+        /**
+         * 璇剧▼涓婁紶璇句欢
+         * @param course_id		璇剧▼ID
+	     * @param file			鏂囦欢 {"file":"鏂囦欢璺緞","name":"鏂囦欢鍚�"}锛屾敮鎸佺殑璇句欢鏍煎紡涓猴細ppt, pptx, doc, docx, pdf, jpg, jpeg, png, gif
+         */
+        public String courseDocumentUpload(String course_id, HashMap<String,String> file) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();	    	
+	    	params.put("course_id", course_id);
+	    	params.put("name", file.get("name"));
+	    	
+	    	String res = this.call("course.document.uploadurl.get",params);
+	    	
+	    	JSONObject resJson = JSONObject.fromObject(res);
+	    	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+	    		JSONObject resData = resJson.getJSONObject("data");	
+	    		
+	    		File f;
+				f = new File(file.get("file"));
+				Part[] parts = {
+	    			new FilePart(resData.getString("field"),f)
+	    		};
+	    		
+	    		return this.doPost(resData.getString("api"), parts);
+	    	}
+	    	return res;
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱鐧诲綍淇℃伅
+         * @param account 			涓绘挱璐︽埛
+         * @param accountType 		涓绘挱璐︽埛绫诲瀷
+         * @param options 			鍏跺畠鍙�夐」锛宻sl锛氭槸鍚︿娇鐢╤ttps(true涓轰娇鐢紝false涓轰笉浣跨敤)
+         * @return
+         * @throws Exception
+         */
+        public String courseLogin(String account, int accountType, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("account", account);
+	    	params.put("accountType", accountType);
+	    	params.put("options", options);
+	    	return this.call("course.login", params);
+        }
+        
+        /**
+         * 淇敼涓绘挱澶村儚
+         * @param account 			鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿ID
+         * @param filename 			鏈湴鍥剧墖鍥剧墖璺緞
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboPortrait(String account, String filename) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("account", account);
+        	String res = this.call("course.zhubo.portrait",params);
+        	
+        	JSONObject resJson = JSONObject.fromObject(res);
+        	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+        		JSONObject resData = resJson.getJSONObject("data");
+        		
+        		File f;
+        		f = new File(filename);
+        		Part[] parts = {
+        			new FilePart(resData.getString("field"),f)
+        		};
+        		
+        		return this.doPost(resData.getString("api"), parts);
+        	}
+        	
+        	return res;
+        }
+        
+        /**
+         * 娣诲姞涓绘挱
+         * @param String 			account 			鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿ID
+         * @param String 			nickname 			涓绘挱鏄电О
+         * @param String 			intro 				涓绘挱绠�浠�
+         * @param String 			password			涓绘挱瀵嗙爜
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboAdd(String account, String nickname, String intro, String password) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("account", account);
+        	params.put("nickname", nickname);
+        	params.put("intro", intro);
+        	params.put("password", password);
+        	return this.call("course.zhubo.add",params);
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱鍒楄〃
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboList(int page, int size) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	return this.call("course.zhubo.list",params);
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱鍒楄〃
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @param String 		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboList(int page, int size, String account) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("account", account);
+        	return this.call("course.zhubo.list",params);
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱鐧诲綍璁板綍
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @param String 		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @param int           accountType     涓绘挱璐﹀彿绫诲瀷銆�1 娆㈡嫇璐︽埛, 2 鍚堜綔鏂硅处鎴�
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboLoginInfo(int page, int size, String account, int accountType) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("account", account);
+        	params.put("accountType", accountType);
+        	return this.call("course.zhubo.loginInfo", params);
+        }
+        
+        /**
+         * 鑾峰彇涓绘挱涓婁笅璇捐褰�
+         * @param int 			page 			鍒嗛〉椤电爜
+         * @param int 			size 			姣忛〉鏁版嵁涓暟
+         * @param String 		account 		鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿鎴朓D锛岄潪鎸囧畾鏌ヨ鍏蜂綋涓绘挱鏃朵笉瑕佸~
+         * @param int           accountType     涓绘挱璐﹀彿绫诲瀷銆�1 娆㈡嫇璐︽埛, 2 鍚堜綔鏂硅处鎴�
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboClassRecord(int page, int size, String account, int accountType) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("account", account);
+        	params.put("accountType", accountType);
+        	return this.call("course.zhubo.classRecord", params);
+        }
+        
+        /**
+         * 鏇存柊涓绘挱淇℃伅
+         * @param String 			account 			鍙戣捣鐩存挱璇剧▼鐨勫悎浣滄柟涓绘挱鍞竴璐﹀彿ID
+         * @param String 			nickname 			涓绘挱鏄电О
+         * @param String 			intro 				涓绘挱绠�浠�
+         * @param String 			password 			涓绘挱瀵嗙爜
+         * @return
+         * @throws Exception
+         */
+        public String courseZhuboUpdate(String account, String nickname, String intro, String password) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("account", account);
+        	params.put("nickname", nickname);
+        	params.put("intro", intro);
+        	params.put("password", password);
+        	return this.call("course.zhubo.update",params);
+        }
+        
+        /**
+         * 鑾峰彇鐩存挱鍣ㄥ惎鍔ㄥ崗璁�
+         * @param int 		course_id 		璇剧▼ID
+         * @return
+         * @throws Exception
+         */
+        public String courseLaunch(int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	return this.call("course.launch",params);
+        }
+        
+        /**
+         * 鍙戣捣鎻愰棶
+         * @param int       course_id      璇剧▼ID
+         * @param string    content        鎻愰棶鍐呭
+         * @param string    uid            鐢ㄦ埛ID
+         * @param string    role           鐢ㄦ埛瑙掕壊
+         * @param string    nickname       鐢ㄦ埛鏄电О
+         * @param array     options        鍙�夊弬鏁�
+         */
+        public String courseQaAdd(int course_id, String content, String uid, String role, String nickname, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("content", content);
+        	params.put("uid", uid);
+        	params.put("role", role);
+        	params.put("nickname", nickname);
+        	params.put("options", options);
+        	return this.call("course.qa.add", params);
+        }
+        
+        /**
+         * 瀹℃牳閫氳繃鎻愰棶
+         * @param   int         qid        鎻愰棶ID
+         * @param   int         course_id  璇剧▼ID
+         */
+        public String courseQaAudit(int qid, int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("course_id", course_id);
+        	return this.call("course.qa.audit", params);
+        }
+        
+        /**
+         * 鍒犻櫎鎻愰棶
+         * @param int       qid        鎻愰棶ID
+         * @param int       course_id  璇剧▼ID
+         */
+        public String courseQaDelete(int qid, int course_id) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("course_id", course_id);
+        	return this.call("course.qa.delete", params);
+        }
+        
+        /**
+         * 鍥炲鎻愰棶
+         * @param int       qid        鎻愰棶ID
+         * @param int       course_id  璇剧▼ID
+         * @param string    content    鎻愰棶鍐呭
+         * @param string    uid        鐢ㄦ埛ID
+         * @param string    nickname   鐢ㄦ埛鏄电О
+         * @param array     options    鍙�夊弬鏁�
+         */
+        public String courseQaAnswer(int qid, int course_id, String content, String uid, String nickname, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("qid", qid);
+        	params.put("course_id", course_id);
+        	params.put("content", content);
+        	params.put("uid", uid);
+        	params.put("nickname", nickname);
+        	params.put("options", options);
+        	return this.call("course.qa.answer", params);
+        }
+        
+        /**
+         * 鑾峰彇闂瓟鍒楄〃
+         * @param int   course_id      璇剧▼ID
+         * @param int 	page 		      椤电爜
+         * @param int 	size 		      姣忛〉鏁伴噺
+         * @param array options        鍙�夊弬鏁�
+         */
+        public String courseQaList(int course_id, int page, int size, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("course_id", course_id);
+        	params.put("page", page);
+        	params.put("size", size);
+        	params.put("options", options);
+        	return this.call("course.qa.list", params);
+        }
+
+        /**
+		 * 涓婁紶璇剧▼灏侀潰鍥�
+		 * @param  course_id  璇剧▼ID
+		 * @param  filename  鍥剧墖璺緞(鏀寔鍥剧墖鏍煎紡:jpg銆乯peg锛屽浘鐗囧ぇ灏忎笉瓒呰繃2M)
+		 * @return
+         * @throws Exception
+		 */
+        public String courseThumbUpload(int course_id,String filename) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();	    	
+        	params.put("course_id", course_id);
+        	String res = this.call("course.getUploadThumbUrl",params);
+        	
+        	JSONObject resJson = JSONObject.fromObject(res);
+        	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+        		JSONObject resData = resJson.getJSONObject("data");
+    
+        		File f;
+    			f = new File(filename);
+    			Part[] parts = {
+        			new FilePart(resData.getString("field"),f)
+        		};
+        		
+        		return this.doPost(resData.getString("api"), parts);
+        	}
+        	return res;
+        }
+
+        /**
+         * 鎸夌収璇剧▼ID鑾峰彇绉佽亰璁板綍鍒楄〃
+         * @param  String   course_id   璇剧▼ID
+         * @param  int      page        椤电爜
+         * @param  int      size        姣忛〉涓暟
+         * @return
+         */
+        public String coursePrivateChatList(int course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.privateChat", params);
+        }
+
+        /**
+         * 鎸夌収璇剧▼ID鑾峰彇鎺ㄦ祦鍦板潃
+         * @param  String   course_id   璇剧▼ID
+         * @param  int      width       瑙嗛瀹藉害
+         * @param  int      height      瑙嗛楂樺害
+         * @return
+         */
+        public String coursePushRtmpUrl(int course_id, int width, int height) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("width", width);
+            params.put("height", height);
+            return this.call("course.pushRtmpUrl", params);
+        }
+
+        /**
+         * 鎸夌収璇剧▼ID鑾峰彇璇勫垎鍒楄〃
+         * @param  int   course_id   璇剧▼ID
+         * @param  int      page        椤电爜
+         * @param  int      size        姣忛〉涓暟
+         * @returnbi
+         */
+        public String courseScoreList(int course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.score.list", params);
+        }
+
+		/**
+		 *  璁剧疆璇剧▼鎷夋祦杞挱
+		 * @param int 		course_id 璇剧▼id
+		 * @param string      pullUrl 婧愮珯鎷夋祦鍦板潃锛屼负绌烘祴鍋滄鎷夋祦杞帹
+		 * @return array
+		 */
+		public String courseSetPullLive(int course_id, String pullUrl) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("course_id", course_id);
+			params.put("pullUrl", pullUrl);
+			return this.call("course.setPullLive", params);
+		}
+
+		/**
+		 *  鑾峰彇璇剧▼鎷夋祦杞挱璁剧疆
+		 * @param int 		course_id 璇剧▼id
+		 * @return array
+		 */
+		public String courseGetPullLive(int course_id) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("course_id", course_id);
+			return this.call("course.getPullLive", params);
+		}
+
+
+		/**
+		 *  璇剧▼杞挱缁戝畾
+		 * @param string 		course_id 璇剧▼id
+		 * @param string 		rebroCid 琚浆鎾殑璇剧▼id
+		 * @return array
+		 */
+		public String courseRebroAdd(String course_id,String rebroCid) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("course_id", course_id);
+			params.put("rebroCid", rebroCid);
+			return this.call("course.rebro.add", params);
+		}
+
+
+
+		/**
+		 *  璇剧▼杞挱瑙g粦
+		 * @param string 		course_id 璇剧▼id
+		 * @param string 		rebroCid 琚浆鎾殑璇剧▼id
+		 * @return array
+		 */
+		public String courseRebroDelete(String course_id,String rebroCid) throws Exception {
+			HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("course_id", course_id);
+			params.put("rebroCid", rebroCid);
+			return this.call("course.rebro.delete", params);
+		}
+
+
+		/**
+	     * 鐢ㄦ埛韪㈠嚭璁板綍
+	     * @param  int page  椤电爜
+		 * @param  int size 姣忛〉鏉℃暟
+	     * @param  string uid  鐢ㄦ埛ID
+	     */
+	    public String memberBanLog(int page, int size , String uid) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("page", page);
+            params.put("size", size);
+            params.put("uid", uid);
+            return this.call("member.banLog", params);
+	    }
+
+
+        /**
+	     * 鐢ㄦ埛韪㈠嚭灏佺
+	     * @param  int course_id  璇剧▼ID
+	     * @param  string uid  鐢ㄦ埛ID
+	     * @param  int duration 灏佺鏃堕暱锛屽崟浣嶇锛岄粯璁�3灏忔椂
+	     * @param  string ip 灏佺鐨処P锛屼笉灏両P鐨勮瘽浼犵┖瀛楃涓�
+	     */
+	    public String memberBan(int course_id, String uid, int duration, String ip) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("uid", uid);
+            params.put("duration", duration);
+            params.put("ip", ip);
+            return this.call("member.ban", params);
+	    }
+
+	    /**
+	     * 鐢ㄦ埛瑙e皝
+	     * @param  int course_id  璇剧▼ID
+	     * @param  string uid  鐢ㄦ埛ID
+	     * @param  string ip 瑙g鐨処P锛屼笉瑙P浼犵┖瀛楃涓�
+	     */
+	    public String memberFree(int course_id, String uid, String ip) throws Exception {
+	        HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("uid", uid);
+            params.put("ip", ip);
+	        return this.call("member.free", params);
+	    }
+	    
+	    
+	    
+	    /**
+	     * 鑾峰彇鐢熸椿鐩存挱閰嶇疆
+	     * @param int   course_id 鐩存挱id
+	     * @param object options   閰嶇疆
+	     * @return
+	     */
+	    public String getLifeConfig(int course_id, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("course_id", course_id);
+	    	params.put("options", options);
+	        return this.call("course.getLifeConfig", params);
+	    }
+
+	    /**
+	     * 缂栬緫鐢熸椿鐩存挱閰嶇疆
+	     * @param int   course_id 鐩存挱id
+	     * @param object options   閰嶇疆
+	     * @return
+	     */
+	    public String updateLifeConfig(int course_id, HashMap<Object,Object> options) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("course_id", course_id);
+	    	params.put("options", options);
+	        return this.call("course.updateLifeConfig", params, "POST", new HashMap<Object, Object>());
+	    }
+        
+        /**
+         * 鏌ヨ鏌愭湀浠藉嘲鍊�
+         * @param String 			date_time 			鏌ヨ鏈堜唤(鏍煎紡锛�2016-10)
+         * @param int 				vtype 				绫诲瀷(0涓烘�昏锛�1涓虹洿鎾紝2涓哄洖鏀�)
+         * @return
+         * @throws Exception
+         */
+        public String statsPeakMonth(String date_time, int vtype) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("date_time", date_time);
+        	params.put("vtype", vtype);
+        	return this.call("stats.peak.month",params);
+        }
+        
+        /**
+         * 鏌ヨ鏌愭湀浠藉嘲鍊�
+         * @param String 			date_time 			鏌ヨ鏈堜唤(鏍煎紡锛�2016-10)
+         * @param int 				vtype 				绫诲瀷(0涓烘�昏锛�1涓虹洿鎾紝2涓哄洖鏀�)
+         * @param int 				departmentId 		閮ㄩ棬id
+         * @return
+         * @throws Exception
+         */
+        public String statsPeakMonth(String date_time, int vtype, int departmentId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("date_time", date_time);
+        	params.put("vtype", vtype);
+        	params.put("departmentId", departmentId);
+        	return this.call("stats.peak.month",params);
+        }
+        
+        /**
+         * 鏌ヨ鏌愭棩宄板��
+         * @param String 			date_time 			鏌ヨ鏃ユ湡(鏍煎紡锛�2016-10-11)
+         * @param int 				vtype 				绫诲瀷(0涓烘�昏锛�1涓虹洿鎾紝2涓哄洖鏀�)
+         * @return
+         * @throws Exception
+         */
+        public String statsPeakDay(String date_time, int vtype) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("date_time", date_time);
+        	params.put("vtype", vtype);
+        	return this.call("stats.peak.day",params);
+        }
+        
+        /**
+         * 鏌ヨ鏌愭湀浠藉嘲鍊�
+         * @param String 			date_time 			鏌ヨ鏃ユ湡(鏍煎紡锛�2016-10-11)
+         * @param int 				vtype 				绫诲瀷(0涓烘�昏锛�1涓虹洿鎾紝2涓哄洖鏀�)
+         * @param int 				departmentId 		閮ㄩ棬id
+         * @return
+         * @throws Exception
+         */
+        public String statsPeakDay(String date_time, int vtype, int departmentId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("date_time", date_time);
+        	params.put("vtype", vtype);
+        	params.put("departmentId", departmentId);
+        	return this.call("stats.peak.day",params);
+        }
+	    
+	    /**
+	     * 涓婁紶鏂囨。
+	     * @param roomid		鎴块棿ID
+	     * @param file			鏂囦欢 {"file":"鏂囦欢璺緞","name":"鏂囦欢鍚�"}, 鏀寔鐨勮浠舵牸寮忎负锛歱pt, pptx, doc, docx, pdf, jpg, jpeg, png, gif
+	     * @return
+	     * @throws Exception
+	     */
+	    public String documentUpload(String roomid,HashMap<String,String> file) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();	    	
+	    	params.put("roomid", roomid);
+	    	params.put("name", file.get("name"));	
+	    	
+	    	String res = this.call("document.uploadurl.get",params);
+	    	
+	    	JSONObject resJson = JSONObject.fromObject(res);
+	    	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+	    		JSONObject resData = resJson.getJSONObject("data");	
+	    		
+	    		File f;
+				f = new File(file.get("file"));
+				Part[] parts = {
+	    			new FilePart(resData.getString("field"),f)
+	    		};
+	    		
+	    		return this.doPost(resData.getString("api"), parts);
+	    	}
+	    	return res;
+	    }
+
+	    /**
+         * 璇句欢涓嬭浇鍦板潃
+         * @param  intval id 寮�鏀惧钩鍙扮殑鏂囨。ID
+         */
+        public String documentDownload(int id) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();	    	
+            params.put("id", id);
+            return this.call("document.downloadurl.get", params);
+        }
+
+        /**
+         * 璇句欢鍒楄〃
+         * @param  intval roomid 鏍规嵁鎴块棿id鑾峰彇璇句欢鍒楄〃
+         */
+        public String documentList(int roomid) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("roomid", roomid);
+            return this.call("document.list", params);
+        }
+
+        /**
+         * 璇句欢璇︾粏淇℃伅
+         * @param  intval id 鏍规嵁璇句欢id鑾峰彇璇句欢璇︾粏淇℃伅
+         */
+        public String documentGet(int id) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("id", id);
+            return this.call("document.get", params);
+        }
+
+	    /**
+	     * 绗笁鏂圭礌鏉愮粦瀹氾紙鐩墠浠呮敮鎸侀煶瑙嗛锛�
+	     * @param  int bid 涓绘挱id銆傜礌鏉愮粦瀹氱殑涓绘挱锛屽悓涓礌鏉愬彧鑳界粦瀹氫竴涓富鎾�
+	     * @param  String name 绱犳潗鍚嶇О
+	     * @param  String url 绱犳潗鍦板潃
+	     * @param  int filesize 绱犳潗澶у皬
+	     * @param  int duration 绱犳潗鏃堕暱
+	     * @param  String ext 绱犳潗绫诲瀷
+	     * @param  String thumbnail 绱犳潗缂╃暐鍥�
+	     * @param  int courseId 璇剧▼id銆傜礌鏉愮粦瀹氱殑璇剧▼锛屽悓涓礌鏉愬彧鑳界粦瀹氫竴涓绋�
+	     * @param  int roomId 鎴块棿id銆傜礌鏉愮粦瀹氱殑鎴块棿锛屽悓涓礌鏉愬彧鑳界粦瀹氫竴涓埧闂�
+	     */
+        public String documentThirdBinding(int bid, String name, String url, int filesize, int duration, String ext, int type, String thumbnail, int courseId, int roomId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("bid", bid);
+            params.put("name", name);
+            params.put("url", url);
+            params.put("filesize", filesize);
+            params.put("duration", duration);
+            params.put("ext", ext);
+            params.put("type", type);
+            params.put("thumbnail", thumbnail);
+            params.put("course_id", courseId);
+            params.put("roomid", roomId);
+            return this.call("document.thirdBinding", params);
+        }
+        
+        /**
+         * 鍒涘缓閮ㄩ棬
+         * @param String  departmentName 	閮ㄩ棬鍚嶇О
+         */
+        public String departmentCreate(String departmentName) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentName", departmentName);
+        	return this.call("department.create", params);
+        }
+        
+        /**
+         * 鏇存柊閮ㄩ棬淇℃伅
+         * @param  int 		departmentId 	閮ㄩ棬id
+         * @param  String 	departmentName	閮ㄩ棬鍚嶇О
+         */
+        public String departmentUpdate(int departmentId, String departmentName) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentId", departmentId);
+        	params.put("departmentName", departmentName);
+        	return this.call("department.update", params);
+        }
+        
+        /**
+         * 鍒犻櫎閮ㄩ棬 
+         * @param  int 	departmentId 	閮ㄩ棬id
+         */
+        public String departmentDelete(int departmentId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentId", departmentId);
+        	return this.call("department.delete", params);
+        }
+        
+        /**
+         * 鑾峰彇閮ㄩ棬淇℃伅 
+         * @param 	int 	departmentId 	閮ㄩ棬id
+         */
+        public String departmentGet(int departmentId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentId", departmentId);
+        	return this.call("department.get", params);
+        }
+        
+        /**
+         * 鎵归噺鑾峰彇閮ㄩ棬淇℃伅 
+         * @param 	String[] 	departmentIds 	閮ㄩ棬id鏁扮粍
+         */
+        public String departmentGetBatch(String[] departmentIds) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentIds", departmentIds);
+        	return this.call("department.getBatch", params); 
+        }
+        
+
+		/**
+		 * 鎵归噺鏇存柊閮ㄩ棬鍥炶皟鍦板潃
+		 * 
+		 * @param HashMap<String,String> callbackApis 閮ㄩ棬鍥炶皟鍦板潃 {"1":"http://www.talk-fun.com/","2":"https://www.talk-fun.com/"}
+		 */
+        public String departmentUpdateCallbackApiBatch(HashMap<String,String> callbackApis) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("callbackApis", callbackApis);
+        	return this.call("department.updateCallbackApiBatch", params); 
+        }
+
+        /**
+         * 閮ㄩ棬璁剧疆鏈�楂樺湪绾�
+         * @param departmentId
+         * @param options
+         * @throws Exception
+         */
+        public String departmentMaxUserSet(int departmentId, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentId", departmentId);
+        	params.put("options", options);
+        	return this.call("department.maxUser.set", params);
+        }
+        
+        public String departmentMaxUserGet(int departmentId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("departmentId", departmentId);
+        	return this.call("department.maxUser.get", params);
+        }
+        
+        /**
+         * 鑾峰彇瑙嗛涓婁紶鍦板潃
+         * @param 	String 			account 		涓绘挱甯愬彿
+         * @param 	int 			accountType 	甯愬彿绫诲瀷
+         * @param 	String 			title 			瑙嗛鏍囬
+         * @param 	String 			md5 			瑙嗛鏂囦欢md5
+         * @param 	HashMap 		options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String videoGetUploadUrl(String account, int accountType, String title, String md5, HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("account", account);
+        	params.put("accountType", accountType);
+        	params.put("title", title);
+        	params.put("md5", md5);
+        	params.put("options", options);
+        	return this.call("video.getUploadUrl", params);
+        }
+        
+        /**
+         * 鑾峰彇瑙嗛淇℃伅
+         * @param 	int 		videoId 		瑙嗛ID
+         * @param 	int 		expire 			瑙嗛鏈夋晥鏈�(鍗曚綅锛氱)
+         * @return
+         * @throws Exception
+         */
+        public String videoGet(int videoId, int expire) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("videoId", videoId);
+        	params.put("expire", expire);
+        	return this.call("video.get", params);
+        }
+        
+        /**
+         * 鎵归噺鑾峰彇瑙嗛淇℃伅
+         * @param 	int[] 		videoIds 		瑙嗛ID
+         * @param 	int 		expire 			瑙嗛鏈夋晥鏈�(鍗曚綅锛氱)
+         * @return
+         * @throws Exception
+         */
+        public String videoGetBatch(int[] videoIds, int expire) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("videoIds", videoIds);
+        	params.put("expire", expire);
+        	return this.call("video.getBatch", params);
+        }
+
+        /**
+         * 鑾峰彇瑙嗛鍒楄〃
+         * @param 	int 		page 			椤电爜
+         * @param 	int 		expire 			瑙嗛鏈夋晥鏈�(鍗曚綅锛氱)
+         * @return
+         * @throws Exception
+         */
+        public String videoList(int page, int expire) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("page", page);
+        	params.put("expire", expire);
+        	return this.call("video.list", params);
+        }
+        
+        /**
+         * 瑙嗛鍒犻櫎
+         * @param int 		videoId 		瑙嗛ID
+         * @return
+         * @throws Exception
+         */
+        public String videoDelete(int videoId) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("videoId", videoId);
+        	return this.call("video.delete", params);
+        }
+        
+        /**
+         * 瑙嗛鏇存柊
+         * @param int 		videoId 		瑙嗛ID
+         * @param string 	title 			瑙嗛鏍囬
+         * @return
+         * @throws Exception
+         */
+        public String videoUpdate(int videoId, String title) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	params.put("videoId", videoId);
+        	params.put("title", title);
+        	return this.call("video.update", params);
+        }
+        
+        /**
+         * 妯″潡璁剧疆
+         * @param HashMap 		options 		鍙�夊弬鏁�
+         * @return
+         * @throws Exception
+         */
+        public String moduleSet(HashMap<Object,Object> options) throws Exception {
+        	HashMap<Object,Object> params = new HashMap<Object,Object>();
+        	HashMap<Object,Object> files = new HashMap<Object,Object>();
+        	
+        	if (options.containsKey("livePcLogo")) {
+        		String path = options.get("livePcLogo").toString();
+        		
+        		File file = new File(path);
+        		if (!file.exists()) {
+        			HashMap<Object,Object> retval = new HashMap<Object,Object>();
+        			retval.put("code", CODE_FAIL);
+        			retval.put("msg", "鏂囦欢" + path + "涓嶅瓨鍦�");
+        			return JSONObject.fromObject(retval).toString();
+        		}
+        		
+        		files.put("livePcLogo", "@" + path);
+        		options.remove("livePcLogo");
+        	}
+        	
+        	if (options.containsKey("playbackPcLogo")) {
+        		String path = options.get("playbackPcLogo").toString();
+        		
+        		File file = new File(path);
+        		if (!file.exists()) {
+        			HashMap<Object,Object> retval = new HashMap<Object,Object>();
+        			retval.put("code", CODE_FAIL);
+        			retval.put("msg", "鏂囦欢" + path + "涓嶅瓨鍦�");
+        			return JSONObject.fromObject(retval).toString();
+        		}
+        		
+        		files.put("playbackPcLogo", "@" + path);
+        		options.remove("playbackPcLogo");
+        	}
+        	
+        	if (options.containsKey("clientLogo")) {
+        		String path = options.get("clientLogo").toString();
+        		
+        		File file = new File(path);
+        		if (!file.exists()) {
+        			HashMap<Object,Object> retval = new HashMap<Object,Object>();
+        			retval.put("code", CODE_FAIL);
+        			retval.put("msg", "鏂囦欢" + path + "涓嶅瓨鍦�");
+        			return JSONObject.fromObject(retval).toString();
+        		}
+        		
+        		files.put("clientLogo", "@" + path);
+        		options.remove("clientLogo");
+			}
+			
+			if (options.containsKey("watermarkFile")) {
+        		String path = options.get("watermarkFile").toString();
+        		
+        		File file = new File(path);
+        		if (!file.exists()) {
+        			HashMap<Object,Object> retval = new HashMap<Object,Object>();
+        			retval.put("code", CODE_FAIL);
+        			retval.put("msg", "鏂囦欢" + path + "涓嶅瓨鍦�");
+        			return JSONObject.fromObject(retval).toString();
+        		}
+        		
+        		files.put("watermarkFile", "@" + path);
+        		options.remove("watermarkFile");
+        	}
+        	
+        	params.put("options", options);
+        	return this.call("module.set", params, "POST", files);
+        }
+        
+        /**
+         * 涓婁紶瑙嗛
+         * @param 	String 		fileName 		瑕佷笂浼犵殑鏈湴璺緞鏂囦欢
+         * @param 	String 		account 		涓婁紶鑰匢D
+         * @param 	int 		accountType 	甯愬彿绫诲瀷锛�1涓烘鎷撳笎鍙凤紝2涓虹涓夋柟甯愬彿
+         * @param 	String 		title 			瑙嗛鏍囬
+         * @param 	String 		nickname 		涓婁紶鑰呮樀绉�
+         * @param 	String 		accountIntro 	涓婁紶鑰呯畝浠�
+         * @param	HashMap		course			璇剧▼鍙傛暟锛岃嫢涓嶅垱寤鸿绋嬶紝璇风暀绌�
+         * @return
+         * @throws Exception
+         */
+        public String videoUpload(String fileName, String account, int accountType, String title, String nickname, String accountIntro,HashMap<Object,Object> course) throws Exception {
+        	String retval = "";
+        	String fileMd5 = "";
+        	
+        	File file = new File(fileName);
+        	if (file.exists()) {
+        		fileMd5 = MD5Util.getFileMD5String(file);
+        	} else {
+        		retval = "{\"code\":" + com.qxueyou.scc.sdk.MTCloud.CODE_FAIL + ",\"msg\":\"鏂囦欢涓嶅瓨鍦╘"}";
+        		return retval;
+        	}
+        	
+        	HashMap<Object,Object> options = new HashMap<Object,Object>();
+        	options.put("nickname", nickname);
+        	options.put("accountIntro", accountIntro);
+        	options.put("course", course);
+        	
+        	retval = this.videoGetUploadUrl(account, accountType, title, fileMd5, options);
+        	JSONObject resJson = JSONObject.fromObject(retval);
+        	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS) {
+        		JSONObject resData = resJson.getJSONObject("data");
+        		String uploadUrl = resData.getString("uploadUrl");
+        		
+        		File f;
+        		f = new File(fileName);
+        		Part[] parts = {
+        			new FilePart(resData.getString("field"), f)
+        		};
+
+        		int tryTime = 0;
+                while(tryTime<2){
+                    retval = this.doPost(uploadUrl, parts);
+                    JSONObject retvalJson = JSONObject.fromObject(retval);
+	    			if(retvalJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+	    				break;
+	    			}
+	    			tryTime ++;
+            	}
+        		
+        		      		
+        	} else if (resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_VIDEO_UPLOADED) {
+        		resJson.put("code", com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS);
+        		retval = resJson.toString();
+        	}
+        	
+        	return retval;
+        }
+        
+        /**
+         * 鍒嗘涓婁紶瑙嗛
+         * @param 	String 		fileName 		瑕佷笂浼犵殑鏈湴璺緞鏂囦欢
+         * @param 	String 		account 		涓绘挱甯愬彿
+         * @param 	int 		accountType 	甯愬彿绫诲瀷
+         * @param 	String 		title 			瑙嗛鏍囬
+         * @param 	String 		nickname 		涓绘挱鏄电О
+         * @param 	String 		accountIntro 	涓绘挱绠�浠�
+         * @param	HashMap		course			璇剧▼鍙傛暟锛岃嫢涓嶅垱寤鸿绋嬶紝璇风暀绌�
+         * @return
+         * @throws Exception
+         */
+        public String videoSegmentUpload(String fileName, String account, int accountType, String title, String nickname, String accountIntro, HashMap<Object,Object> course) throws Exception {
+        	String retval = "";
+        	String fileMd5 = "";
+        	
+        	File file = new File(fileName);
+        	if (file.exists()) {
+        		fileMd5 = MD5Util.getFileMD5String(file);
+        	} else {
+        		retval = "{\"code\":" + com.qxueyou.scc.sdk.MTCloud.CODE_FAIL + ",\"msg\":\"鏂囦欢涓嶅瓨鍦╘"}";
+        		return retval;
+        	}
+        	
+        	HashMap<Object,Object> options = new HashMap<Object,Object>();
+        	options.put("nickname", nickname);
+        	options.put("accountIntro", accountIntro);
+        	options.put("course", course);
+        	
+        	retval = this.videoGetUploadUrl(account, accountType, title, fileMd5, options);
+        	JSONObject resJson = JSONObject.fromObject(retval);
+        	if(resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS) {
+        		JSONObject resData = resJson.getJSONObject("data");
+        		String uploadUrl = resData.getString("resumeUploadUrl");
+        		String chunkListUrl = resData.getString("chunkListUrl");
+        		
+        		// 鑾峰彇涓婁紶杩囩殑鍒嗙墖
+        		JSONArray chunkList = null;
+        		String chunkListRes = doGet(chunkListUrl);
+        		JSONObject chunkListJson = JSONObject.fromObject(chunkListRes);
+        		if(chunkListJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS) {
+        			chunkList = chunkListJson.getJSONArray("data");
+        		}
+
+        		String fileSeparator = (new Properties(System.getProperties())).getProperty("file.separator");
+        		
+        		// 鍒嗗壊鏂囦欢瀛樺偍鐨勪复鏃剁洰褰�
+                File tempDir = new File(file.getParentFile().toString() + fileSeparator + "mtcloudTemp" + fileMd5 + fileSeparator);
+                if (!tempDir.exists()) {
+                	tempDir.mkdirs();
+                }
+                
+                // 鍙栧緱鏂囦欢鐨勫ぇ灏�
+                long fileLength = file.length();
+                int size = 1048576;
+                
+                // 鍙栧緱琚垎鍓插悗鐨勫皬鏂囦欢鐨勬暟鐩�
+                int num = (fileLength % size != 0) ? (int) (fileLength / size + 1) : (int) (fileLength / size);
+                
+                // 杈撳叆鏂囦欢娴侊紝鍗宠鍒嗗壊鐨勬枃浠�
+                FileInputStream in = new FileInputStream(file);
+                // 璇昏緭鍏ユ枃浠舵祦鐨勫紑濮嬪拰缁撴潫涓嬫爣
+                long end = 0;
+                int begin = 0;
+                
+                // 鏍规嵁瑕佸垎鍓茬殑鏁扮洰杈撳嚭鏂囦欢
+                for (int i = 0; i < num; i++) {
+                	boolean _continue = false;
+                	
+                	if (null != chunkList) {
+                		for (int j = 0; j < chunkList.size(); ++j) {
+                			StringBuilder sb = new StringBuilder();
+                			sb.append(i+1);
+                			String chunk = sb.toString();
+                			
+                			if (chunk.equals(chunkList.get(j).toString())) {
+                				_continue = true;
+                			}
+                		}                		
+                	}
+                	
+                	if (true == _continue) {
+                		continue;
+                	}
+                	
+                	// 瀵逛簬鍓峮um - 1涓皬鏂囦欢锛屽ぇ灏忛兘涓烘寚瀹氱殑size
+                    File outFile = new File(tempDir, file.getName());
+                    
+                    // 鏋勫缓灏忔枃浠剁殑杈撳嚭娴�
+                    FileOutputStream out = new FileOutputStream(outFile);
+
+                    // 灏嗙粨鏉熶笅鏍囧悗绉籹ize
+                    end += size;
+                    end = (end > fileLength) ? fileLength : end;
+                    // 浠庤緭鍏ユ祦涓鍙栧瓧鑺傚瓨鍌ㄥ埌杈撳嚭娴佷腑
+                    for (; begin < end; begin++) {
+                        out.write(in.read());
+                    }
+                    out.close();
+                    
+                    Part[] parts = {
+            			new FilePart("filedata", outFile),
+            			new StringPart("chunk", (i+1) + ""),
+            			new StringPart("chunks", num + ""),
+            			new StringPart("md5", fileMd5),
+            			new StringPart("chunkMd5", MD5Util.getFileMD5String(outFile))
+            		};
+
+            		int tryTime = 0;
+                    while(tryTime<2){
+	                    retval = this.doPost(uploadUrl, parts);
+	                    JSONObject retvalJson = JSONObject.fromObject(retval);
+		    			if(retvalJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS){
+		    				break;
+		    			}
+		    			tryTime ++;
+                	}
+                    
+                    parts = null;
+                    System.gc();
+                    
+                    System.out.println(i);
+                    System.out.println(outFile.delete());
+                }
+                
+                in.close();
+                
+                tempDir.delete();
+        	} else if (resJson.getInt("code") == com.qxueyou.scc.sdk.MTCloud.CODE_VIDEO_UPLOADED) {
+        		resJson.put("code", com.qxueyou.scc.sdk.MTCloud.CODE_SUCCESS);
+        		retval = resJson.toString();
+        	}
+        	
+        	return retval;
+        }
+
+        /**
+	    *   鑾峰彇璇剧▼宄板��
+	    *   @param    int    course_id    璇剧▼ID
+	    *   @return
+	    */
+	    public String statsPeakCourse(int course_id) throws Exception {
+	        HashMap<Object,Object> params = new HashMap<Object,Object>();
+	        params.put("course_id", course_id);
+	        return this.call("stats.peak.course", params);
+	    }
+
+	    /**
+	    *   鑾峰彇鐩存挱宄板��
+	    *   @param    int    liveid    鐩存挱ID
+	    *   @return
+	    */
+	    public String statsPeakLive(int liveid) throws Exception {
+	        HashMap<Object,Object> params = new HashMap<Object,Object>();
+	        params.put("liveid", liveid);
+	        return this.call("stats.peak.live", params);
+	    }
+	    
+	    
+	    /**
+	     *   鑾峰彇娴侀噺鏄庣粏
+	     *   @param    string    date_time   寮�濮嬫棩鏈燂紝鏍煎紡 Y-m-d
+	     *   @param    string    end_time   缁撴潫鏃ユ湡锛屾牸寮� Y-m-d锛屽鏋滀紶绌猴紝鍒欓粯璁や负寮�濮嬫棩鏈�
+	     *   @param    int       vtype      鐩存挱鎴栬�呯偣鎾紙鍥炴斁锛夛紝1鐩存挱锛�2鍥炴斁锛屽叾瀹冨�间负鑾峰彇鍏ㄩ儴
+	     *   @param    int       ctype      褰搗type==2鏃讹紝鐐规挱鐨勭被鍨�,11 浜戠偣鎾紝鍏跺畠鍊间负鍥炴斁锛屼紶-1鍒欒幏鍙栨墍鏈�
+	     *   @param    int       departmentID    閮ㄩ棬ID锛岃幏鍙栧叿浣撻儴闂ㄧ殑缁熻銆�0涓烘棤閮ㄩ棬锛涗紶-100涓烘祦閲忔暟鎹悎璁★紱-1涓哄垪鍑烘墍鏈夐儴闂紝浠ュ強鍚堣
+	     *   @param    int       small      褰搗type==2鏃讹紝鑾峰彇灏忕彮鐨勫洖鏀炬祦閲忥紝浼�1
+	     *   @return   鎴愬姛杩斿洖鏍煎紡 {"code": 0,"data": [{"vtype": "2","ctype": "9","cid": "844891","time": "2020-05-11","flow": 4.661,"departmentID":0},...]}
+	     */
+	    public String statsFlowList(String date_time, String end_time, int vtype, int ctype, int departmentID, int small) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	params.put("date_time", date_time);
+	    	if(end_time != ""){
+	    		params.put("end_time", end_time);
+	    	}
+	    	params.put("vtype", vtype);
+	    	if(ctype != -1){
+	    		params.put("ctype", ctype);
+	    	}
+	    	if(departmentID != -100){
+	    		params.put("departmentID", departmentID);
+	    	}
+	    	params.put("small", small);
+
+	    	return this.call("stats.flow.list", params);
+	    }
+
+	     /**
+	     *   鑾峰彇娴侀噺鎬昏
+	     *   @param    int       departmentID    閮ㄩ棬ID锛岃幏鍙栧叿浣撻儴闂ㄧ殑缁熻锛�0涓烘棤閮ㄩ棬锛屼紶-1涓哄叏閮�
+	     *   @return
+	     */
+	    public String statsPeakExpend(int departmentID) throws Exception {
+	    	HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	if(departmentID != -1){
+	    		params.put("departmentID", departmentID);
+	    	}
+	    	return this.call("stats.flow", params);
+	    }
+	    
+	    /**
+	     *   鑾峰彇闊宠棰戜簰鍔ㄦ椂闀跨粺璁�
+	     *   @param    string  start_time 寮�濮嬫棩鏈燂紝鏍煎紡 Y-m-d锛岄粯璁や负7澶╁墠
+	     *   @param    string  end_time 寮�濮嬫棩鏈燂紝鏍煎紡 Y-m-d锛岄粯璁ゆ槰澶╋紝寮�鏃剁粨鏉熸椂闂磋法搴︿笉鑳借秴杩�31澶�
+	     *   @param    int  departmentID 閮ㄩ棬ID锛岃幏鍙栧叿浣撻儴闂ㄧ殑缁熻锛屼笉浼犳垨浼犵┖鍊硷紝鍒欓粯璁よ繑鍥炴�昏
+	     *   @return 鎴愬姛鏃惰繑鍥炴牸寮忥細{"code":0,"data":{"1v1":[{"date":"05-08","duration":31},{"date":"05-09","duration":89},...],"1v6":[{"date":"05-08","duration":96},...],"1v16":[{"date":"05-08","duration":96},...],"desktop":[{"date":"05-08","duration":175},...]}}锛宒uration鏃堕暱鍗曚綅涓哄垎閽�
+	     */
+	     public String statsRtc(String start_time, String end_time, int departmentID) throws Exception {
+	    	 HashMap<Object,Object> params = new HashMap<Object,Object>();
+	    	 params.put("start_time", start_time);
+	    	 params.put("end_time", end_time);
+	    	 params.put("departmentID", departmentID);
+	         return this.call("stats.rtc", params);
+	     }
+
+
+	    /**
+	     * 鑷姩鐧诲綍鍒版鎷揷onsole鍚庡彴
+	     * @param int 		uid 娆㈡嫇鍚庡彴绠$悊鍛榠d
+	     * @param int 		expire 鑷姩鐧诲綍鍦板潃鐨勮繃鏈熸椂闂�
+	     * @param string 	target 鐧诲綍鎴愬姛鍚庤烦杞殑鐩爣锛屽舰寮忥細绫诲瀷-ID
+	     *                       濡傝烦鍒拌绋婭D涓�"123456"鐨勯〉闈細course-123456
+	     * @return string 	url 鐢熸垚鐨勮嚜鍔ㄧ櫥褰曞湴鍧�
+	     */
+	    public String consoleAutoLogin(int uid, int expire, String target) throws Exception {
+	        HashMap<Object,Object> params = new HashMap<Object, Object>();
+	    	
+	    	params.put("openID", this.openID.trim());
+	    	
+	    	Date date = new Date();
+	    	long expire1 = date.getTime() / 1000 + expire;
+	    	params.put("expire", expire1);
+	    	params.put("id", uid);
+	    	String url="http://console.talk-fun.com/?autologin="+uid+"-"+this.generateSign(params)+"-"+expire1;
+	    	if(target != ""){
+	    		url = url+"&target="+URLEncoder.encode(target,"UTF-8");
+	    	}
+
+	    	return url;
+	    }
+
+		/**
+		 * 鐐硅禐璁板綍
+		 * 
+		 * @param int course_id 璇剧▼id
+		 * @param int page 椤电爜
+		 * @param int size 姣忛〉鏁伴噺
+		 * @return
+		 */
+        public String courseLikeRecord(int course_id,int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+			params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.likeRecord", params);
+        }
+
+
+	    /**
+        * 鐐规挱鍒楄〃
+        * @param int 	  page 		椤电爜
+        * @param int 	  size 		姣忛〉鏁伴噺
+        * @param HashMap options 	鍏朵粬鍙傛暟锛宻tatus锛氳绋嬬姸鎬�(0涓烘甯哥姸鎬侊紝-1涓哄凡鍒犻櫎)
+        * @return 
+        */
+        public String vodList(int page, int size, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("page", page);
+            params.put("size", size);
+            params.put("options", options);
+            return this.call("course.vodList", params);
+        }
+
+	    /**
+        * 鏈哄櫒浜哄彂瑷�
+        * @param int 	course_id 	 璇剧▼id
+        * @param String nickname     鏈哄櫒浜哄悕绉�
+        * @param String msg          鍙戣█
+        * @return 
+        */
+        public String robotChatSend(int course_id, String nickname, String msg, String avatar) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("nickname", nickname);
+            params.put("msg", msg);
+            params.put("avatar", avatar);
+            return this.call("course.robotChatSend", params);
+        }
+
+
+		/**
+        *   鏍规嵁璇剧▼ID鑾峰彇鐢熸椿鐩存挱閭�璇锋鍗曞垪琛�
+        *   @param int 	  course_id 		璇剧▼id
+        *   @param int 	  page 				椤电爜
+        *   @param int 	  size 				姣忛〉鏁伴噺
+        *   @return 
+        */
+        public String courseInviteRankList(int course_id,int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.inviteRankList", params);
+        }
+
+		/**
+        *   鏍规嵁璇剧▼ID銆侀個璇蜂汉ID鑾峰彇鐢熸椿鐩存挱鐨勮閭�璇蜂汉鍒楄〃
+        *   @param int 	  course_id 		璇剧▼id
+        *   @param int 	  xid 				閭�璇蜂汉鐢ㄦ埛id
+        *   @param int 	  page 				椤电爜
+        *   @param int 	  size 				姣忛〉鏁伴噺
+        *   @return 
+        */
+        public String courseInviteRankDetailList(int course_id,int xid,int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("xid", xid);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.inviteRankDetailList", params);
+        }
+
+         /**
+        *	娓犻亾鏍囪瘑璁剧疆
+        * 	@param int 	  	course_id 		璇剧▼id
+        *   @param HashMap 	options 		鍏朵粬鍙傛暟
+        *   @return 
+        */
+        public String courseCtagsSet(int course_id, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("options", options);
+            return this.call("course.ctagsSet", params);
+        }
+
+        /**
+        *   鐐瑰悕鍒楄〃
+        *   @param int 	  course_id 		璇剧▼id
+        *   @param int 	  page 				椤电爜
+        *   @param int 	  size 				姣忛〉鏁伴噺
+        *   @return 
+        */
+        public String courseSignList(int course_id, int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.sign", params);
+        }
+
+        /**
+        *   鐐瑰悕璇︽儏
+        *   @param int 	  course_id 		璇剧▼id
+        *   @param int 	  signId 			鐐瑰悕搴忓垪
+        *   @param int 	  page 				椤电爜
+        *   @param int 	  size 				姣忛〉鏁伴噺
+        *   @return 
+        */
+        public String courseSignDetail(int course_id,int signId,int page, int size) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("signId", signId);
+            params.put("page", page);
+            params.put("size", size);
+            return this.call("course.sign.detail", params);
+        }
+
+        /**
+        *	鍟嗗搧娣诲姞
+        * 	@param int 	  	departmentID 	閮ㄩ棬id
+        *   @param HashMap 	options 		鍏朵粬鍙傛暟
+        *   @return 
+        */
+        public String goodsAdd(int departmentID, HashMap<Object,Object> options) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("departmentID", departmentID);
+            params.put("options", options);
+            return this.call("goods.add", params);
+        }
+
+		/**
+        *   鍥炴斁鏈夋晥鏈熻缃�
+        *   @param int 	  course_id 		璇剧▼id
+        *   @param int 	  enable 			鏄惁鍏抽棴鍥炴斁锛�0鍏抽棴鍥炴斁 锛�1寮�鍚洖鏀�
+        *   @param int 	  expire 			鍥炴斁鏈夋晥鏈燂紝0鏃犻檺鍒讹紝涓嶅ぇ浜�30澶�
+        *   @return 
+        */
+        public String coursePlaybackExpireSet(int course_id,int enable,int expire) throws Exception {
+            HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("course_id", course_id);
+            params.put("enable", enable);
+            params.put("expire", expire);
+            return this.call("course.playback.setExpire", params);
+        }
+
+		/** 
+		 * 鏋勯�犳鎷撲簯绛惧悕
+		 * @param params 涓氬姟鍙傛暟
+		 * @return string
+		 * @throws Exception 
+		 */
+		public String generateSign(HashMap<Object, Object> params) throws Exception{
+			params.remove("sign");		
+	    	Object[] array = params.keySet().toArray();	    	
+	    	java.util.Arrays.sort(array);
+			String keyStr = "";
+			for(int i=0;i<array.length;i++){
+				String key = array[i].toString();
+				keyStr += key+params.get(key);
+			}
+			keyStr += this.openToken.trim();
+			return MD5.md5(keyStr);
+			
+		}
+		
+		public String call(String cmd,HashMap<Object, Object> params) throws Exception{
+			HashMap<Object, Object> files = new HashMap<Object, Object>();
+			
+			return this.call(cmd, params,"GET",files);
+		}
+		
+		//鏋勯�犺姹備覆
+		public String call(String cmd,HashMap<Object, Object> params, String HttpMethod, HashMap<Object, Object> files) throws Exception{
+			//鏋勯�犵郴缁熷弬鏁�
+			HashMap<Object, Object> sysParams = new HashMap<Object, Object>();
+			
+			sysParams.put("openID", this.openID.trim());
+			//鑾峰彇鏃堕棿鎴�
+	    	Date date = new Date();
+	    	long time = date.getTime() / 1000;
+	    	String ts = time + "";
+	    	sysParams.put("timestamp", ts);	
+	    	sysParams.put("ver", this.version);
+	    	sysParams.put("format", this.format);
+	    	sysParams.put("cmd", cmd);
+	    	sysParams.put("params", URLEncoder.encode(JSONObject.fromObject(params).toString(),"UTF-8"));
+	    	//绛惧悕	
+	    	sysParams.put("sign", generateSign(sysParams));	
+	    	
+	    	sysParams.putAll(files);
+	    	String retval = "";
+			
+			if (HttpMethod == "POST") {
+				
+				
+				Object[] array = sysParams.keySet().toArray();
+				Part[] parts = new Part[array.length];
+				for(int i=0;i<array.length;i++){
+					String key = array[i].toString();
+					
+					String value = (String) sysParams.get(key);
+					if (0 == value.indexOf("@")) {
+						File f;
+						f = new File(value.substring(1));
+						
+						parts[i] = new FilePart(key, f);
+					} else {
+						parts[i] = new StringPart(key, value);
+					}
+				}
+				
+				retval = doPost(this.restUrl, parts);
+			} else {
+				//鏋勯�犺姹俇RL
+				String resurl = "";
+				if(this.debug){
+					System.out.println(sysParams);
+				}
+				resurl += this.restUrl + "?" + mapToQueryString(sysParams);
+				if(this.debug){
+					System.out.println(resurl);
+				}
+				retval = doGet(resurl);
+			}
+
+			if(retval == null && this.restUrl != this.restUrl2){
+				String tempUrl = this.restUrl;
+				this.restUrl = this.restUrl2;
+				retval = this.call(cmd, params, HttpMethod, files);
+				this.restUrl = tempUrl;
+			}
+
+			return retval;
+		}
+		
+		//GET璇锋眰
+		public String doGet(String url) throws UnsupportedEncodingException {
+			HttpClient client = new HttpClient();	//瀹炰緥鍖杊ttpClient
+			HttpMethod method = new GetMethod(url);	//
+			method.addRequestHeader("User-Agent", "MT-JAVA-SDK");
+			try {
+				client.executeMethod(method);		//鎵ц		
+
+				InputStream jsonStr;
+
+				jsonStr = method.getResponseBodyAsStream();
+
+				if (200 != method.getStatusCode() && this.restUrl != this.restUrl2) {
+					return null;
+				}
+
+				ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream(); 
+
+		        int   i=-1; 
+		        while((i=jsonStr.read())!=-1){ 
+		        	baos.write(i); 
+		        }
+
+		        jsonStr.close();
+		        baos.close();
+		        method.releaseConnection();
+
+		        return new String(baos.toByteArray(), "UTF-8");
+		        
+			} catch (HttpException e) {
+				if(this.restUrl != this.restUrl2){
+					return null;
+				} else {
+					e.printStackTrace();
+				}				
+				
+			} catch (IOException e) {				
+				if(this.restUrl != this.restUrl2){
+					return null;
+				} else {
+					e.printStackTrace();
+				}				
+			}
+
+		    return null;
+		}
+			
+		
+		public String doPost(String url,Part[] parts) throws FileNotFoundException {
+			 PostMethod filePost = new PostMethod(url);
+			 filePost.addRequestHeader("User-Agent", "MT-JAVA-SDK");
+			  
+			  filePost.setRequestEntity(
+			      new MultipartRequestEntity(parts, filePost.getParams())
+			      );
+			  HttpClient client = new HttpClient();
+			  try {
+				client.executeMethod(filePost);
+				
+				InputStream jsonStr;
+
+				jsonStr = filePost.getResponseBodyAsStream();			
+					
+				ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream(); 
+				
+		        int   i=-1; 
+		        while((i=jsonStr.read())!=-1){ 
+		        	baos.write(i); 
+		        }
+		        
+		        jsonStr.close();
+		        baos.close();
+		        filePost.releaseConnection();
+
+		        return new String(baos.toByteArray(), "UTF-8");
+			} catch (HttpException e) {
+				if(this.restUrl != this.restUrl2){
+					return null;
+				} else {
+					e.printStackTrace();
+				}				
+				
+			} catch (IOException e) {				
+				if(this.restUrl != this.restUrl2){
+					return null;
+				} else {
+					e.printStackTrace();
+				}				
+			}
+			return null;
+		}
+		
+		/**
+        *   鐢熸垚涓�涓父瀹D
+        *   @return string
+        */
+        public UUID generateGuestId() throws Exception {
+            UUID uuid = UUID.randomUUID();
+            return uuid;
+        }
+
+        /**
+        *   鐢熸垚涓�鍊嬬煭鍦板潃
+        *   @return string
+        */
+        public String generateShortUrl(String url) throws Exception {
+	        HashMap<Object,Object> params = new HashMap<Object,Object>();
+            params.put("url", url);
+            return this.call("utils.shorturl", params);
+        }
+		
+	    //灏� map 涓殑鍙傛暟鍙婂搴斿�艰浆鎹负鏌ヨ瀛楃涓�
+	    private String mapToQueryString(HashMap<Object, Object> params){
+	    	Object[] array = params.keySet().toArray();
+	    	
+	    	java.util.Arrays.sort(array);
+	    	String str = "";
+	    	for(int i = 0; i < array.length;i++){
+	    		String key = array[i].toString();
+	    		try {
+		    		if(i!=array.length-1){
+		    			
+							str += key+"="+URLEncoder.encode((String)params.get(key),"UTF-8")+"&";
+						
+		    		}else{
+		    			str += key+"="+URLEncoder.encode((String)params.get(key),"UTF-8");
+		    		}
+	    		} catch (UnsupportedEncodingException e) {
+					e.printStackTrace();
+				}
+	    	}
+	    	return str;
+	    }
+	    
+	    private String base64UrlEncode(String input) throws Exception{
+	    	input = new String(Base64.encodeBase64(input.getBytes("UTF-8")));
+	    	input = input.replace("=", "");
+	    	input = input.replace("+", "-");
+	    	input = input.replace("/", "_");
+	    	return input;
+	    }  
+	    
+	    //MD5鍔犲瘑绫�
+	    private static class MD5 {
+	        private static char md5Chars[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+	        public static String md5(String str) throws Exception {
+	            MessageDigest md5 = getMD5Instance();
+	            md5.update(str.getBytes("UTF-8"));
+	            byte[] digest = md5.digest();
+	            char[] chars = toHexChars(digest);
+	            return new String(chars);
+	        }
+
+	        private static MessageDigest getMD5Instance() {
+	            try {
+	                return MessageDigest.getInstance("MD5");
+	            } catch (NoSuchAlgorithmException ignored) {
+	                throw new RuntimeException(ignored);
+	            }
+	        }
+
+	        private static char[] toHexChars(byte[] digest) {
+	            char[] chars = new char[digest.length * 2];
+	            int i = 0;
+	            for (byte b : digest) {
+	                char c0 = md5Chars[(b & 0xf0) >> 4];
+	                chars[i++] = c0;
+	                char c1 = md5Chars[b & 0xf];
+	                chars[i++] = c1;
+	            }
+	            return chars;
+	        }
+	    }
+			
+	    public static void main(String[] args){
+	    	
+	    }
+}
+
diff --git a/src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java b/src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java
new file mode 100644
index 0000000..265bd0a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java
@@ -0,0 +1,67 @@
+package com.qxueyou.scc.sdk.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class MD5Util {
+
+	protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };
+	protected static MessageDigest messagedigest = null;
+	static{
+	   try{
+	    messagedigest = MessageDigest.getInstance("MD5");
+	   }catch(NoSuchAlgorithmException nsaex){
+	    System.err.println(MD5Util.class.getName()+"鍒濆鍖栧け璐ワ紝MessageDigest涓嶆敮鎸丮D5Util銆�");
+	    nsaex.printStackTrace();
+	   }
+	}
+	
+	
+	public static String getFileMD5String(File file) throws IOException {
+	   FileInputStream in = new FileInputStream(file);
+	   FileChannel ch = in.getChannel();
+	   MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
+	   messagedigest.update(byteBuffer);
+	   return bufferToHex(messagedigest.digest());
+	}
+	
+	public static String getMD5String(String s) {
+	   return getMD5String(s.getBytes());
+	}
+	
+	public static String getMD5String(byte[] bytes) {
+	   messagedigest.update(bytes);
+	   return bufferToHex(messagedigest.digest());
+	}
+	
+	private static String bufferToHex(byte bytes[]) {
+	   return bufferToHex(bytes, 0, bytes.length);
+	}
+	
+	private static String bufferToHex(byte bytes[], int m, int n) {
+	   StringBuffer stringbuffer = new StringBuffer(2 * n);
+	   int k = m + n;
+	   for (int l = m; l < k; l++) {
+	    appendHexPair(bytes[l], stringbuffer);
+	   }
+	   return stringbuffer.toString();
+	}
+	
+	
+	private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
+	   char c0 = hexDigits[(bt & 0xf0) >> 4];
+	   char c1 = hexDigits[bt & 0xf];
+	   stringbuffer.append(c0);
+	   stringbuffer.append(c1);
+	}
+	
+	public static boolean checkPassword(String password, String md5PwdStr) {
+	   String s = getMD5String(password);
+	   return s.equals(md5PwdStr);
+	}
+}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
index 0e76919..7f889bc 100644
--- a/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
@@ -1,11 +1,10 @@
 package com.qxueyou.scc.stucontroller;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.sdk.MTCloud;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -115,22 +114,27 @@
 	
 	/**
 	 * 鏌ョ湅鐩存挱鏄庣粏
-	 * @param liveId 鐩存挱id
+	 * @param couresId 鐩存挱id
 	 * @return
 	 */
 	@GetMapping(value = "view")
-	public Result view(String liveId) {
-			
-		MediaVideoLive live = liveService.read(liveId);
-		
-		return new Result(true, "success", CollectionUtils.newObjectMap(
-				"startTime",live.getStartTime(),
-				"endTime",live.getEndTime(),
-				"name",live.getName(),
-				"hlsPullUrl",live.getHlsPullUrl(),
-				"imgPath",live.getPreviewImgUrl(),
-				"chatroomId",dao.getChatRoomId(liveId),
-				"remark",live.getRemark()
-				));
+	public Result view(String couresId) throws Exception {
+
+
+		MTCloud client = new MTCloud();
+
+		HashMap<Object,Object> options = new HashMap<Object, Object>();
+
+		String res = client.courseAccess(couresId, ClientUtils.getUserId(), ClientUtils.getUserName(), MTCloud.ROLE_USER, 10000, options);
+
+		JSONObject jsonObject = JSON.parseObject(res);
+
+		JSONObject data = jsonObject.getJSONObject("data");
+
+		String liveUrl = (String) data.get("liveUrl");
+
+		System.out.println(liveUrl);
+
+		return new Result(true, "success",liveUrl);
 	}
 }
diff --git a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
index d825713..0ecbbdf 100644
--- a/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
+++ b/src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
@@ -284,6 +284,10 @@
 	/**  鍞愭ˉ鍔犲叆璇惧爞瀵嗙爜 */
 	@Column(name="TQ_MEETING_PWD", length=32)
 	private String meetingPwd;
+
+	/**  绗笁鏂圭洿鎾叆鍙� */
+	@Column(name="COURSE_ID", length=32)
+	private int courseId;
 	
 	@OneToMany(fetch = FetchType.LAZY, mappedBy = "videoLive")
 	@JsonIgnore
@@ -720,8 +724,17 @@
 		return subject;
 	}
 
+	public int getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(int courseId) {
+		this.courseId = courseId;
+	}
+
 	public void setSubject(Subject subject) {
 		this.subject = subject;
 	}
+
 	
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
index de7b42a..9222dfc 100644
--- a/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
@@ -19,7 +19,7 @@
 	 * @param classId 鐝骇ids
 	 * @return
 	 */
-	Result add(String name,String content,String teacherId,String teacherName,String subjectId,String subjectName,String definition,String imgPath,Date startTime,Date endTime,boolean record,List<String> classIds);
+	Result add(String name,String content,String teacherId,String teacherName,String subjectId,String subjectName,String definition,String imgPath,Date startTime,Date endTime,Integer courseId,boolean record,List<String> classIds);
 	
 	/**
 	 * 鏌ヨ鐩存挱
diff --git a/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
index b095a0e..4bcd977 100644
--- a/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
+++ b/src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
@@ -7,6 +7,7 @@
 import java.util.List;
 import java.util.Map;
 
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -51,14 +52,15 @@
 	
 	
 	@Override
-	public Result add(String name, String content, String teacherId,String teacherName ,String subjectId,String subjectName,
-			String definition,String imgPath, Date startTime, Date endTime, boolean record,List<String> classIds) {
+	public Result add(String name, String content, String teacherId, String teacherName , String subjectId, String subjectName,
+					  String definition, String imgPath, Date startTime, Date endTime, Integer courseId, boolean record, List<String> classIds) {
 		
 		UserTeacher teacher = teacherService.getTeacherByUserId(ClientUtils.getUserId());
 		
 		MediaVideoLive live = new MediaVideoLive();
 		TraceUtils.setCreateTrace(live);
-		
+
+		live.setCourseId(courseId);
 		live.setName(name);
 		live.setRemark(content);
 		live.setPreviewImgUrl(imgPath);
@@ -262,14 +264,14 @@
 	public List<MediaVideoLive> list(String keyword, String [] classIds,String subjectId,Short status,Integer pageNum, Integer pageSize) {
 		StringBuffer hql = new StringBuffer(1000);
 		Map<String,Object> params = new HashMap<String,Object>();
-		hql.append("from MediaVideoLive m left join fetch m.classes c left join fetch m.subject s where m.deleteFlag is false  and m.name like :name ");
+		hql.append("from MediaVideoLive m left join fetch m.classes  c left join fetch m.subject s where m.deleteFlag is false  and m.name like :name ");
 		
 		params.put("name",keyword + "%");
 		
 		if(classIds!=null && classIds.length>0){
-			hql.append(" and (c.classId in(:classIds) or s.type=:subjectType)");
+			hql.append(" and (c.classId in(:classIds) or s.type=:Type)");
 			params.put("classIds", classIds);
-			params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
+			params.put("Type", Subject.TYPE_PUBLIC_SUBJECT);
 		}else{
 			hql.append(" and  s.type=:subjectType");
 			params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
index 0c96522..90d6499 100644
--- a/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
@@ -306,9 +306,9 @@
     public Result readAccessPath(String resId, String attribute) {
 
         Res res = read(Res.class, resId);
-
+        String type="0";
 //        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? JSONObject.parse(resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute)):CollectionUtils.newObjectMap("path", resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute));
-        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute):resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute);
+        Object path = Res.FILE_TYPE_VIDEO.equals(type)? resItemServiceMap.get(type).readAccessPath(res.getItemDestId(), attribute):resItemServiceMap.get(type).readAccessPath(res.getItemDestId(), attribute);
         if(Res.FILE_TYPE_DOC.equals(res.getType())) {
         	 return new Result(true, "success",
                      CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size",

--
Gitblit v1.8.0