From 19f9342034ce1cbc5e60fef75d3a8e24d9d8c57b Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 27 Dec 2013 18:49:34 +0800 Subject: [PATCH] refine bandwidth test --- trunk/research/players/js/srs.bandwidth.js | 161 +++++++++++++--- trunk/research/players/js/srs.page.js | 21 +++ trunk/research/players/js/srs.player.js | 2 +- trunk/research/players/js/srs.publisher.js | 2 +- trunk/research/players/srs_bwt.html | 174 +++++++----------- .../players/srs_bwt/.actionScriptProperties | 8 +- .../players/srs_bwt/release/srs_bwt.swf | Bin 2603 -> 4656 bytes trunk/research/players/srs_bwt/src/srs_bwt.as | 125 ++++++++++--- 8 files changed, 322 insertions(+), 171 deletions(-) diff --git a/trunk/research/players/js/srs.bandwidth.js b/trunk/research/players/js/srs.bandwidth.js index 79c51e2f8..1b63b2ac8 100755 --- a/trunk/research/players/js/srs.bandwidth.js +++ b/trunk/research/players/js/srs.bandwidth.js @@ -1,27 +1,136 @@ -// 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; +/** +* the SrsBandwidth object. +* @param container the html container id. +* @param width a float value specifies the width of bandwidth. +* @param height a float value specifies the height of bandwidth. +* @param private_object [optional] an object that used as private object, +* for example, the logic chat object which owner this bandwidth. +*/ +function SrsBandwidth(container, width, height, private_object) { + if (!SrsBandwidth.__id) { + SrsBandwidth.__id = 100; + } + if (!SrsBandwidth.__bandwidths) { + SrsBandwidth.__bandwidths = []; + } + + SrsBandwidth.__bandwidths.push(this); + + this.private_object = private_object; + this.container = container; + this.width = width; + this.height = height; + this.id = SrsBandwidth.__id++; + this.stream_url = null; + this.callbackObj = null; + + // the callback set data. + this.percent = 0; + this.status = ""; +} +/** +* user can set some callback, then start the bandwidth. +* @param url the bandwidth test url. +* callbacks: +* on_bandwidth_ready():void, when srs bandwidth ready, user can play. +* on_update_progress(percent:Number):void, when srs bandwidth update the progress. +* percent:Number 100 means 100%. +* on_update_status(status:String):void, when srs bandwidth update the status. +* status:String the human readable status text. +*/ +SrsBandwidth.prototype.start = function(url) { + if (url) { + this.stream_url = url; + } + + // embed the flash. + var flashvars = {}; + flashvars.id = this.id; + flashvars.on_bandwidth_ready = "__srs_on_bandwidth_ready"; + flashvars.on_update_progress = "__srs_on_update_progress"; + flashvars.on_update_status = "__srs_on_update_status"; + + var params = {}; + params.wmode = "opaque"; + params.allowFullScreen = "true"; + params.allowScriptAccess = "always"; + + var attributes = {}; + + var self = this; + + swfobject.embedSWF( + "srs_bwt/release/srs_bwt.swf?_version="+srs_get_version_code(), + this.container, + this.width, this.height, + "11.1.0", "js/AdobeFlashbandwidthInstall.swf", + flashvars, params, attributes, + function(callbackObj){ + self.callbackObj = callbackObj; + } + ); + + return this; +} +/** +* play the stream. +* @param stream_url the url of stream, rtmp or http. +* @param volume the volume, 0 is mute, 1 is 100%, 2 is 200%. +*/ +SrsBandwidth.prototype.check_bandwidth = function(url) { + this.stop(); + SrsBandwidth.__bandwidths.push(this); + + if (url) { + this.stream_url = url; + } + + this.callbackObj.ref.__check_bandwidth(this.stream_url); +} +SrsBandwidth.prototype.stop = function(url) { + for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) { + var bandwidth = SrsBandwidth.__bandwidths[i]; + + if (bandwidth.id != this.id) { + continue; + } + + SrsBandwidth.__bandwidths.splice(i, 1); + break; + } + + this.callbackObj.ref.__stop(); +} +SrsBandwidth.prototype.on_bandwidth_ready = function() { +} +SrsBandwidth.prototype.on_update_progress = function(percent) { +} +SrsBandwidth.prototype.on_update_status = function(status) { +} +function __srs_find_bandwidth(id) { + for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) { + var bandwidth = SrsBandwidth.__bandwidths[i]; + + if (bandwidth.id != id) { + continue; + } + + return bandwidth; + } + + throw new Error("bandwidth not found. id=" + id); +} +function __srs_on_bandwidth_ready(id) { + var bandwidth = __srs_find_bandwidth(id); + bandwidth.on_bandwidth_ready(); +} +function __srs_on_update_progress(id, percent) { + var bandwidth = __srs_find_bandwidth(id); + bandwidth.percent = percent; + bandwidth.on_update_progress(percent); +} +function __srs_on_update_status(id, status) { + var bandwidth = __srs_find_bandwidth(id); + bandwidth.status = status; + bandwidth.on_update_status(status); } \ No newline at end of file diff --git a/trunk/research/players/js/srs.page.js b/trunk/research/players/js/srs.page.js index 68ce4bd6c..9fd0a5780 100755 --- a/trunk/research/players/js/srs.page.js +++ b/trunk/research/players/js/srs.page.js @@ -80,6 +80,18 @@ function build_default_publish_rtmp_url() { return "rtmp://" + server + ":" + port + "/" + app + "...vhost..." + vhost + "/" + stream; } } +// for the bandwidth tool to init page +function build_default_bandwidth_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)? "bandcheck.srs.com":query.vhost; + var app = (query.app == undefined)? "app":query.app; + var key = (query.key == undefined)? "35c9b402c12a7246868752e2878f7e0e":query.key; + + return "rtmp://" + server + ":" + port + "/" + app + "?key=" + key + "&vhost=" + vhost; +} /** @param server the ip of server. default to window.location.hostname @@ -139,6 +151,15 @@ function srs_init_publish(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) { + $(rtmp_url).val(build_default_bandwidth_rtmp_url()); + } +} // check whether can republish function srs_can_republish() { diff --git a/trunk/research/players/js/srs.player.js b/trunk/research/players/js/srs.player.js index 3d9da3bb5..dad0ba927 100755 --- a/trunk/research/players/js/srs.player.js +++ b/trunk/research/players/js/srs.player.js @@ -63,7 +63,7 @@ SrsPlayer.prototype.start = function(url) { "srs_player/release/srs_player.swf?_version="+srs_get_version_code(), this.container, this.width, this.height, - "11.1", "js/AdobeFlashPlayerInstall.swf", + "11.1.0", "js/AdobeFlashPlayerInstall.swf", flashvars, params, attributes, function(callbackObj){ self.callbackObj = callbackObj; diff --git a/trunk/research/players/js/srs.publisher.js b/trunk/research/players/js/srs.publisher.js index 50363e7d5..25f29bfed 100755 --- a/trunk/research/players/js/srs.publisher.js +++ b/trunk/research/players/js/srs.publisher.js @@ -73,7 +73,7 @@ SrsPublisher.prototype.start = function() { "srs_publisher/release/srs_publisher.swf?_version="+srs_get_version_code(), this.container, this.width, this.height, - "11.1", "js/AdobeFlashPlayerInstall.swf", + "11.1.0", "js/AdobeFlashPlayerInstall.swf", flashvars, params, attributes, function(callbackObj){ self.callbackObj = callbackObj; diff --git a/trunk/research/players/srs_bwt.html b/trunk/research/players/srs_bwt.html index 3f68ea6b5..dc2593adb 100755 --- a/trunk/research/players/srs_bwt.html +++ b/trunk/research/players/srs_bwt.html @@ -12,113 +12,60 @@ - - + @@ -141,38 +88,43 @@
- +
+ + Usage: 点击“开始测速”即可测带宽,最大可测试带宽由服务器限制 +
URL: - + -
- +
-
+
+
+
diff --git a/trunk/research/players/srs_bwt/.actionScriptProperties b/trunk/research/players/srs_bwt/.actionScriptProperties index cd87f23d7..f95be3da9 100755 --- a/trunk/research/players/srs_bwt/.actionScriptProperties +++ b/trunk/research/players/srs_bwt/.actionScriptProperties @@ -1,6 +1,6 @@ - + @@ -17,13 +17,13 @@ - - + + - + diff --git a/trunk/research/players/srs_bwt/release/srs_bwt.swf b/trunk/research/players/srs_bwt/release/srs_bwt.swf index 3e89783117da7113a3b86e0611bfe262224ed0c3..c540d38254800b6a1fb64878bd4e947d503966ea 100755 GIT binary patch literal 4656 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 literal 2603 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