diff --git a/trunk/research/players/js/srs.js b/trunk/research/players/js/srs.js
deleted file mode 100644
index cc89c4f8a..000000000
--- a/trunk/research/players/js/srs.js
+++ /dev/null
@@ -1,793 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////
-
-/**
-* player specified size.
-*/
-function srs_get_player_modal() { return 740; }
-function srs_get_player_width() { return srs_get_player_modal() - 30; }
-function srs_get_player_height() { return srs_get_player_width() * 9 / 19; }
-
-// to query the swf anti cache.
-function srs_get_version_code() { return "1.9"; }
-// get the default vhost for players.
-function srs_get_player_vhost() { return "players"; }
-// the api server port, for chat room.
-function srs_get_api_server_port() { return 8085; }
-// get the stream published to vhost,
-// generally we need to transcode the stream to support HLS and filters.
-// for example, src_vhost is "players", we transcode stream to vhost "players_pub".
-// if not equals to the player vhost, return the orignal vhost.
-function srs_get_player_publish_vhost(src_vhost) { return (src_vhost != srs_get_player_vhost())? src_vhost:(src_vhost + "_pub"); }
-// for chat, use rtmp only vhost, low latecy, without gop cache.
-function srs_get_player_chat_vhost(src_vhost) { return (src_vhost != srs_get_player_vhost())? src_vhost:(src_vhost + "_pub_rtmp"); }
-
-//////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////////
-/**
-* padding the output.
-* padding(3, 5, '0') is 00003
-* padding(3, 5, 'x') is xxxx3
-* @see http://blog.csdn.net/win_lin/article/details/12065413
-*/
-function padding(number, length, prefix) {
- if(String(number).length >= length){
- return String(number);
- }
- return padding(prefix+number, length, prefix);
-}
-
-/**
-* update the navigator, add same query string.
-*/
-function update_nav() {
- $("#nav_srs_player").attr("href", "srs_player.html" + window.location.search);
- $("#nav_srs_publisher").attr("href", "srs_publisher.html" + window.location.search);
- $("#nav_srs_chat").attr("href", "srs_chat.html" + window.location.search);
- $("#nav_srs_bwt").attr("href", "srs_bwt.html" + window.location.search);
- $("#nav_jwplayer6").attr("href", "jwplayer6.html" + window.location.search);
- $("#nav_osmf").attr("href", "osmf.html" + window.location.search);
- $("#nav_vlc").attr("href", "vlc.html" + window.location.search);
-}
-
-/**
-* log specified, there must be a log element as:
-
-
-
- Usage:
- 创建会议室,或者加入会议室
-
-*/
-function info(desc) {
- $("#txt_log").addClass("alert-info").removeClass("alert-error").removeClass("alert-warn");
- $("#txt_log_title").text("Info:");
- $("#txt_log_msg").text(desc);
-}
-function warn(code, desc) {
- $("#txt_log").removeClass("alert-info").removeClass("alert-error").addClass("alert-warn");
- $("#txt_log_title").text("Warn:");
- $("#txt_log_msg").text("code: " + code + ", " + desc);
-}
-function error(code, desc) {
- $("#txt_log").removeClass("alert-info").addClass("alert-error").removeClass("alert-warn");
- $("#txt_log_title").text("Error:");
- $("#txt_log_msg").text("code: " + code + ", " + desc);
-}
-
-/**
-* parse the query string to object.
-*/
-function parse_query_string(){
- var obj = {};
-
- // parse the host(hostname:http_port), pathname(dir/filename)
- obj.host = window.location.host;
- obj.hostname = window.location.hostname;
- obj.http_port = (window.location.port == "")? 80:window.location.port;
- obj.pathname = window.location.pathname;
- if (obj.pathname.lastIndexOf("/") <= 0) {
- obj.dir = "/";
- obj.filename = "";
- } else {
- obj.dir = obj.pathname.substr(0, obj.pathname.lastIndexOf("/"));
- obj.filename = obj.pathname.substr(obj.pathname.lastIndexOf("/"));
- }
-
- // parse the query string.
- var query_string = String(window.location.search).replace(" ", "").split("?")[1];
- if(query_string == undefined){
- return obj;
- }
-
- var queries = query_string.split("&");
- $(queries).each(function(){
- var query = this.split("=");
- obj[query[0]] = query[1];
- });
-
- return obj;
-}
-
-/**
-@param server the ip of server. default to window.location.hostname
-@param vhost the vhost of rtmp. default to window.location.hostname
-@param port the port of rtmp. default to 1935
-@param app the app of rtmp. default to live.
-@param stream the stream of rtmp. default to livestream.
-*/
-function build_default_rtmp_url() {
- var query = parse_query_string();
-
- var server = (query.server == undefined)? window.location.hostname:query.server;
- var port = (query.port == undefined)? 1935:query.port;
- var vhost = (query.vhost == undefined)? window.location.hostname:query.vhost;
- var app = (query.app == undefined)? "live":query.app;
- var stream = (query.stream == undefined)? "livestream":query.stream;
-
- if (server == vhost || vhost == "") {
- return "rtmp://" + server + ":" + port + "/" + app + "/" + stream;
- } else {
- return "rtmp://" + server + ":" + port + "/" + app + "...vhost..." + vhost + "/" + stream;
- }
-}
-// for the chat to init the publish url.
-function build_default_publish_rtmp_url() {
- var query = parse_query_string();
-
- var server = (query.server == undefined)? window.location.hostname:query.server;
- var port = (query.port == undefined)? 1935:query.port;
- var vhost = (query.vhost == undefined)? window.location.hostname:query.vhost;
- var app = (query.app == undefined)? "live":query.app;
- var stream = (query.stream == undefined)? "livestream":query.stream;
-
- if (server == vhost || vhost == "") {
- return "rtmp://" + server + ":" + port + "/" + app + "/" + stream;
- } else {
- vhost = srs_get_player_chat_vhost(vhost);
- return "rtmp://" + server + ":" + port + "/" + app + "...vhost..." + vhost + "/" + stream;
- }
-}
-
-/**
-@param server the ip of server. default to window.location.hostname
-@param vhost the vhost of hls. default to window.location.hostname
-@param hls_vhost the vhost of hls. override the server if specified.
-@param hls_port the port of hls. default to window.location.port
-@param app the app of hls. default to live.
-@param stream the stream of hls. default to livestream.
-*/
-function build_default_hls_url() {
- var query = parse_query_string();
-
- // for http, use hls_vhost to override server if specified.
- var server = window.location.hostname;
- if (query.server != undefined) {
- server = query.server;
- } else if (query.hls_vhost != undefined) {
- server = query.hls_vhost;
- }
-
- var port = (query.hls_port == undefined)? window.location.port:query.hls_port;
- var app = (query.app == undefined)? "live":query.app;
- var stream = (query.stream == undefined)? "livestream":query.stream;
-
- if (port == "" || port == null || port == undefined) {
- port = 80;
- }
-
- return "http://" + server + ":" + port + "/" + app + "/" + stream + ".m3u8";
-}
-
-/**
-* parse the rtmp url,
-* for example: rtmp://demo.srs.com:1935/live...vhost...players/livestream
-* @return object {server, port, vhost, app, stream}
-*/
-function srs_parse_rtmp_url(rtmp_url) {
- // @see: http://stackoverflow.com/questions/10469575/how-to-use-location-object-to-parse-url-without-redirecting-the-page-in-javascri
- var a = document.createElement("a");
- a.href = rtmp_url.replace("rtmp://", "http://");
-
- var vhost = a.hostname;
- var port = (a.port == "")? "1935":a.port;
- var app = a.pathname.substr(1, a.pathname.lastIndexOf("/") - 1);
- var stream = a.pathname.substr(a.pathname.lastIndexOf("/") + 1);
-
- // parse the vhost in the params of app, that srs supports.
- app = app.replace("...vhost...", "?vhost=");
- if (app.indexOf("?") >= 0) {
- var params = app.substr(app.indexOf("?"));
- app = app.substr(0, app.indexOf("?"));
-
- if (params.indexOf("vhost=") > 0) {
- vhost = params.substr(params.indexOf("vhost=") + "vhost=".length);
- if (vhost.indexOf("&") > 0) {
- vhost = vhost.substr(0, vhost.indexOf("&"));
- }
- }
- }
-
- var ret = {
- server: a.hostname, port: port,
- vhost: vhost, app: app, stream: stream
- };
-
- return ret;
-}
-
-/**
-* initialize the page.
-* @param rtmp_url the div id contains the rtmp stream url to play
-* @param hls_url the div id contains the hls stream url to play
-* @param modal_player the div id contains the modal player
-*/
-function srs_init(rtmp_url, hls_url, modal_player) {
- update_nav();
-
- if (rtmp_url) {
- $(rtmp_url).val(build_default_rtmp_url());
- }
- if (hls_url) {
- $(hls_url).val(build_default_hls_url());
- }
- if (modal_player) {
- $(modal_player).width(srs_get_player_modal() + "px");
- $(modal_player).css("margin-left", "-" + srs_get_player_modal() / 2 +"px");
- }
-}
-
-// for the chat to init the publish url.
-function srs_init_publish(rtmp_url) {
- update_nav();
-
- if (rtmp_url) {
- $(rtmp_url).val(build_default_publish_rtmp_url());
- }
-}
-
-// for bw to init url
-// url: scheme://host:port/path?query#fragment
-function srs_init_bwt(rtmp_url, hls_url) {
- update_nav();
-
- if (rtmp_url) {
- //var query = parse_query_string();
- var search_filed = String(window.location.search).replace(" ", "").split("?")[1];
- $(rtmp_url).val("rtmp://" + window.location.host + ":" + 1935 + "/app?" + search_filed);
- }
- if (hls_url) {
- $(hls_url).val(build_default_hls_url());
- }
-}
-
-function srs_bwt_check_url(url) {
- if (url.indexOf("key") != -1 && url.indexOf("vhost") != -1) {
- return true;
- }
-
- return false;
-}
-
-function srs_bwt_build_default_url() {
- var url_default = "rtmp://" + window.location.host + ":" + 1935 + "/app?key=35c9b402c12a7246868752e2878f7e0e&vhost=bandcheck.srs.com";
- return url_default;
-}
-
-/**
-* when publisher ready, init the page elements.
-*/
-function srs_publisher_initialize_page(
- cameras, microphones,
- sl_cameras, sl_microphones, sl_vcodec, sl_profile, sl_level, sl_gop, sl_size, sl_fps, sl_bitrate
-) {
- $(sl_cameras).empty();
- for (var i = 0; i < cameras.length; i++) {
- $(sl_cameras).append("" + microphones[i] + "" + vcodecs[i] + "" + profiles[i] + "" + levels[i] + "" + gops[i] + "秒" + sizes[i] + "" + Number(fpses[i]).toFixed(2) + " 帧/秒" + bitrates[i] + " kbps" + cameras[i] + "" + microphones[i] + "" + vcodecs[i] + "" + profiles[i] + "" + levels[i] + "" + gops[i] + "秒" + sizes[i] + "" + Number(fpses[i]).toFixed(2) + " 帧/秒" + bitrates[i] + " kbps