diff --git a/trunk/research/players/srs_bwt/.actionScriptProperties b/trunk/research/players/srs_bwt/.actionScriptProperties index 62ecf7f78..1a4d9fa33 100755 --- a/trunk/research/players/srs_bwt/.actionScriptProperties +++ b/trunk/research/players/srs_bwt/.actionScriptProperties @@ -38,3 +38,4 @@ + diff --git a/trunk/research/players/srs_bwt/release/srs_bwt.swf b/trunk/research/players/srs_bwt/release/srs_bwt.swf index 6f5a4c5f9..d9c9330c4 100755 Binary files a/trunk/research/players/srs_bwt/release/srs_bwt.swf and b/trunk/research/players/srs_bwt/release/srs_bwt.swf differ diff --git a/trunk/research/players/srs_bwt/src/SrsBandwidth.as b/trunk/research/players/srs_bwt/src/SrsBandwidth.as index 7c5f3ce2f..b88724638 100755 --- a/trunk/research/players/srs_bwt/src/SrsBandwidth.as +++ b/trunk/research/players/srs_bwt/src/SrsBandwidth.as @@ -25,6 +25,7 @@ package import flash.events.NetStatusEvent; import flash.external.ExternalInterface; import flash.net.NetConnection; + import flash.net.NetStream; import flash.net.ObjectEncoding; import flash.utils.clearTimeout; import flash.utils.setTimeout; @@ -92,7 +93,7 @@ package * srs_server: the srs server info. * srs_primary: the srs primary authors info. * srs_authors: the srs authors info. - * srs_id: the tracable log id, to direclty grep the log.. + * srs_id: the tracable log id, to direclty grep the log. * srs_pid: the srs process id, to direclty grep the log. * srs_server_ip: the srs server ip, where client connected at. * @param as_on_complete, function(start_time:Number, end_time:Number, play_kbps:Number, publish_kbps:Number, play_bytes:Number, publish_bytes:Number, play_time:Number, publish_time:Number):void, where @@ -280,6 +281,8 @@ package * check/test with server. */ private var connection:NetConnection = null; + // for bms4, use stream to play then do bandwidth test. + private var stream:NetStream = null; /** * use timeout to sendout publish call packets. @@ -293,7 +296,7 @@ package */ private function system_on_js_ready():void { if (!flash.external.ExternalInterface.available) { - trace("js not ready, try later."); + log("js not ready, try later."); flash.utils.setTimeout(this.system_on_js_ready, 100); return; } @@ -318,6 +321,7 @@ package __on_progress_change(0); // init connection + log("create connection for bandwidth check"); connection = new NetConnection; connection.objectEncoding = ObjectEncoding.AMF0; connection.client = { @@ -350,7 +354,7 @@ package private function onSrsBandCheckStartPlayBytes(evt:Object):void{ var duration_ms:Number = evt.duration_ms; var interval_ms:Number = evt.interval_ms; - trace("start play test, duration=" + duration_ms + ", interval=" + interval_ms); + log("start play test, duration=" + duration_ms + ", interval=" + interval_ms); connection.call("onSrsBandCheckStartingPlayBytes", null); __on_status_change(SrsBandwidth.StatusSrsBwtcPlayStart); @@ -482,8 +486,9 @@ package * get NetConnection NetStatusEvent */ private function onStatus(evt:NetStatusEvent): void { - trace(evt.info.code); + log(evt.info.code); + var srs_version:String = null; if (evt.info.hasOwnProperty("data") && evt.info.data) { if (evt.info.data.hasOwnProperty("srs_server")) { srs_server = evt.info.data.srs_server; @@ -503,6 +508,9 @@ package if (evt.info.data.hasOwnProperty("srs_server_ip")) { srs_server_ip = evt.info.data.srs_server_ip; } + if (evt.info.data.hasOwnProperty("srs_version")) { + srs_version = evt.info.data.srs_version; + } if (this.as_on_srs_info != null) { this.as_on_srs_info(srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); @@ -511,16 +519,46 @@ package flash.external.ExternalInterface.call(this.js_on_srs_info, this.js_id, srs_server, srs_primary, srs_authors, srs_id, srs_pid, srs_server_ip); } - } - if (evt.info.code) { - __on_status_change(evt.info.code); - } - switch(evt.info.code){ - case "NetConnection.Connect.Success": - __on_progress_change(8); - break; - } - + } + + var e:NetStatusEvent = evt; + var foo:Function = function():void{ + var evt:NetStatusEvent = e; + if (evt.info.code) { + __on_status_change(evt.info.code); + } + switch(evt.info.code){ + case "NetConnection.Connect.Success": + __on_progress_change(8); + break; + } + }; + foo(); + + // for bms4, play stream to trigger the bandwidth check. + if (evt.info.code != "NetConnection.Connect.Success") { + return; + } + if (stream != null) { + return; + } + + var is_bms:Boolean = false; + if (srs_server.indexOf("BMS/") == 0 || srs_server.indexOf("UPYUN/") == 0) { + is_bms = true; + } + if (parseInt(srs_version.charAt(0)) >= 4 && is_bms) { + stream = new NetStream(connection); + stream.addEventListener(NetStatusEvent.NET_STATUS, function(evt:NetStatusEvent):void{ + log(evt.info.code); + + if (evt.info.code == "NetStream.Play.Start") { + } + }); + stream.play("test"); + log("play stream for " + srs_server + " " + srs_version); + return; + } } /** @@ -544,5 +582,12 @@ package code, data); } } + + private function log(msg:String):void { + trace(msg); + if (ExternalInterface.available) { + ExternalInterface.call("console.log", msg); + } + } } } diff --git a/trunk/research/players/srs_bwt/src/srs_bwt.as b/trunk/research/players/srs_bwt/src/srs_bwt.as index 5a9ef89b7..5420b6060 100755 --- a/trunk/research/players/srs_bwt/src/srs_bwt.as +++ b/trunk/research/players/srs_bwt/src/srs_bwt.as @@ -121,13 +121,13 @@ package // for directly run swf. if (!conf.id) { - trace("directly run swf, load default url: " + this.default_url); + log("directly run swf, load default url: " + this.default_url); this.bandwidth.check_bandwidth(this.default_url); } } private function on_progress(percent:Number):void { - trace("progress:" + percent + "%"); + log("progress:" + percent + "%"); } private function update_context_items( srs_server:String, srs_primary:String, srs_authors:String, @@ -156,31 +156,31 @@ package contextMenu.customItems = customItems; } public function on_status_change(code:String, data:String): void { - trace(code); + log(code); switch(code){ case "NetConnection.Connect.Failed": - trace("连接服务器失败!"); + log("连接服务器失败!"); break; case "NetConnection.Connect.Rejected": - trace("服务器拒绝连接!"); + log("服务器拒绝连接!"); break; case "NetConnection.Connect.Success": - trace("连接服务器成功!"); + log("连接服务器成功!"); break; case SrsBandwidth.StatusSrsBwtcPlayStart: - trace("开始测试下行带宽"); + log("开始测试下行带宽"); break; case SrsBandwidth.StatusSrsBwtcPlayStop: - trace("下行带宽测试完毕," + data + "kbps,开始测试上行带宽。"); + log("下行带宽测试完毕," + data + "kbps,开始测试上行带宽。"); break; case SrsBandwidth.StatusSrsBwtcPublishStart: - trace("开始测试上行带宽"); + log("开始测试上行带宽"); break; case SrsBandwidth.StatusSrsBwtcPublishStop: - trace("上行带宽测试完毕," + data + "kbps,"); + log("上行带宽测试完毕," + data + "kbps,"); break; case "NetConnection.Connect.Closed": - trace("连接已断开!"); + log("连接已断开!"); break; } } @@ -190,7 +190,14 @@ package ):void { var status:String = "检测结束: 上行: " + publish_kbps + " kbps" + " 下行: " + play_kbps + " kbps" + " 测试时间: " + Number((end_time - start_time) / 1000).toFixed(1) + " 秒"; - trace(status); + log(status); } + + private function log(msg:String):void { + trace(msg); + if (ExternalInterface.available) { + ExternalInterface.call("console.log", msg); + } + } } }