From 2bc4bd89133f1260bc717f53e4f18844f77a39d8 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 22 Dec 2013 10:57:50 +0800 Subject: [PATCH] update the publisher, to auto prompt the dialog to get the publisher. --- trunk/research/players/js/srs.js | 27 ++++-- .../players/srs_player/release/srs_player.swf | Bin 5271 -> 5274 bytes trunk/research/players/srs_publisher.html | 84 ++++++++++-------- .../srs_publisher/release/srs_publisher.swf | Bin 4435 -> 4524 bytes .../srs_publisher/src/srs_publisher.as | 33 +++---- 5 files changed, 88 insertions(+), 56 deletions(-) diff --git a/trunk/research/players/js/srs.js b/trunk/research/players/js/srs.js index 91f0e6b58..3ca36107a 100755 --- a/trunk/research/players/js/srs.js +++ b/trunk/research/players/js/srs.js @@ -401,13 +401,18 @@ function SrsPublisher(container, width, height) { this.code = 0; // error code defines. - this.error_device_muted = 100; + this.errors = { + "100": "无法获取指定的摄像头", //error_camera_get + "101": "无法获取指定的麦克风", //error_microphone_get + "102": "摄像头为禁用状态,推流时请允许flash访问摄像头", //error_camera_muted + }; } /** * user can set some callback, then start the publisher. * callbacks: * on_publisher_ready(cameras, microphones):int, when srs publisher ready, user can publish. -* on_publisher_error(code):int, when srs publisher error, callback this method. +* on_publisher_error(code, desc):int, when srs publisher error, callback this method. +* on_publisher_warn(code, desc):int, when srs publisher warn, callback this method. */ SrsPublisher.prototype.start = function() { // embed the flash. @@ -415,6 +420,7 @@ SrsPublisher.prototype.start = function() { flashvars.id = this.id; flashvars.on_publisher_ready = "__srs_on_publisher_ready"; flashvars.on_publisher_error = "__srs_on_publisher_error"; + flashvars.on_publisher_warn = "__srs_on_publisher_warn"; var params = {}; params.wmode = "opaque"; @@ -464,9 +470,13 @@ SrsPublisher.prototype.on_publisher_ready = function(cameras, microphones) { /** * when publisher error. * @code the error code. +* @desc the error desc message. */ -SrsPublisher.prototype.on_publisher_error = function(code) { - throw new Error("publisher error. code=" + code); +SrsPublisher.prototype.on_publisher_error = function(code, desc) { + throw new Error("publisher error. code=" + code + ", desc=" + desc); +} +SrsPublisher.prototype.on_publisher_warn = function(code, desc) { + throw new Error("publisher warn. code=" + code + ", desc=" + desc); } function __srs_find_publisher(id) { for (var i = 0; i < SrsPublisher.__publishers.length; i++) { @@ -494,6 +504,13 @@ function __srs_on_publisher_error(id, code) { publisher.code = code; - publisher.on_publisher_error(code); + publisher.on_publisher_error(code, publisher.errors[""+code]); +} +function __srs_on_publisher_warn(id, code) { + var publisher = __srs_find_publisher(id); + + publisher.code = code; + + publisher.on_publisher_warn(code, publisher.errors[""+code]); } diff --git a/trunk/research/players/srs_player/release/srs_player.swf b/trunk/research/players/srs_player/release/srs_player.swf index dfea703f00be4a195bfd85aa13ae2a35c30b83e4..d129187e36f4acaa5bd3d4b0e3915ae05ddbde32 100755 GIT binary patch literal 5274 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 diff --git a/trunk/research/players/srs_publisher.html b/trunk/research/players/srs_publisher.html index eee8c6c50..8d9d5c937 100755 --- a/trunk/research/players/srs_publisher.html +++ b/trunk/research/players/srs_publisher.html @@ -115,30 +115,33 @@ } $("#sl_bitrate option[value='350']").attr("selected", true); }; - srs_publisher.on_publisher_error = function(code) { - if (code == srs_publisher.error_device_muted) { - error(code, "摄像头和麦克风被禁用,请右键flash播放器启用。"); - } else { - error(code, "未知系统错误"); - } + srs_publisher.on_publisher_error = function(code, desc) { + error(code, desc); }; - srs_publisher.start(); - - // start the normal player with HLS supported. - remote_player = new SrsPlayer("remote_player", 430, 185); - remote_player.on_player_ready = function() { - remote_player.set_bt(0.8); - remote_player.set_fs("screen", 100); + srs_publisher.on_publisher_warn = function(code, desc) { + warn(code, desc); }; - remote_player.start(); + srs_publisher.start(); - // start the realtime player. - realtime_player = new SrsPlayer("realtime_player", 430, 185); - realtime_player.on_player_ready = function() { - realtime_player.set_bt(0.8); - realtime_player.set_fs("screen", 100); - }; - realtime_player.start(); + // if no play specified, donot show the player, for debug the publisher. + var query = parse_query_string(); + if (query.no_play != "true") { + // start the normal player with HLS supported. + remote_player = new SrsPlayer("remote_player", 430, 185); + remote_player.on_player_ready = function() { + remote_player.set_bt(0.8); + remote_player.set_fs("screen", 100); + }; + remote_player.start(); + + // start the realtime player. + realtime_player = new SrsPlayer("realtime_player", 430, 185); + realtime_player.on_player_ready = function() { + realtime_player.set_bt(0.8); + realtime_player.set_fs("screen", 100); + }; + realtime_player.start(); + } }); /** @@ -209,28 +212,37 @@ info("开始推流到服务器"); srs_publisher.publish(url, vcodec, acodec); - // directly play the url for the realtime player. - realtime_player.stop(); - realtime_player.play(url); + if (realtime_player) { + // directly play the url for the realtime player. + realtime_player.stop(); + realtime_player.play(url); + } - // the normal player should play the transcoded stream in another vhost. - // for example, publish stream to vhost players, - // the realtime player play the vhost players, which may donot support HLS, - // the normal player play the vhost players_pub, which transcoded to h264/aac with HLS. - var ret = srs_parse_rtmp_url(url); - var pub_url = "rtmp://" + ret.server + ":" + ret.port + "/" + ret.app; - pub_url += "?vhost=" + srs_get_player_publish_vhost(ret.vhost) + "/" + ret.stream; - remote_player.stop(); - remote_player.play(pub_url); + if (remote_player) { + // the normal player should play the transcoded stream in another vhost. + // for example, publish stream to vhost players, + // the realtime player play the vhost players, which may donot support HLS, + // the normal player play the vhost players_pub, which transcoded to h264/aac with HLS. + var ret = srs_parse_rtmp_url(url); + var pub_url = "rtmp://" + ret.server + ":" + ret.port + "/" + ret.app; + pub_url += "?vhost=" + srs_get_player_publish_vhost(ret.vhost) + "/" + ret.stream; + remote_player.stop(); + remote_player.play(pub_url); + } } function info(desc) { - $("#txt_log").removeClass("alert-error").addClass("alert-info"); + $("#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"); + $("#txt_log").removeClass("alert-info").addClass("alert-error").removeClass("alert-warn"); $("#txt_log_title").text("Error:"); $("#txt_log_msg").text("code: " + code + ", " + desc); } @@ -258,7 +270,7 @@
Usage: - 允许Flash访问摄像头,设置编码参数,点“发布视频”即可推流 + 设置编码参数,点“发布视频”,允许Flash访问摄像头即可推流
diff --git a/trunk/research/players/srs_publisher/release/srs_publisher.swf b/trunk/research/players/srs_publisher/release/srs_publisher.swf index 382bf3c83cead9ad87076af60b52a4fc47143bf3..b9aaf49343221e403e259a1fd5bb2b4403f85a73 100755 GIT binary patch literal 4524 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 K_1^-`OfK{8n%bBE literal 4435 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 Z{+GNRB}1qvRQvw_vKb_V{4W@K@fP%tz%2j( diff --git a/trunk/research/players/srs_publisher/src/srs_publisher.as b/trunk/research/players/srs_publisher/src/srs_publisher.as index cc9dc9508..9baafe397 100755 --- a/trunk/research/players/srs_publisher/src/srs_publisher.as +++ b/trunk/research/players/srs_publisher/src/srs_publisher.as @@ -24,6 +24,7 @@ package // user set callback private var js_on_publisher_ready:String = null; private var js_on_publisher_error:String = null; + private var js_on_publisher_warn:String = null; // publish param url. private var user_url:String = null; @@ -41,7 +42,9 @@ package private var media_microphone:Microphone = null; // error code. - private const error_device_muted:int = 100; + private const error_camera_get:int = 100; + private const error_microphone_get:int = 101; + private const error_camera_muted:int = 102; public function srs_publisher() { @@ -74,6 +77,7 @@ package this.js_id = flashvars.id; this.js_on_publisher_ready = flashvars.on_publisher_ready; this.js_on_publisher_error = flashvars.on_publisher_error; + this.js_on_publisher_warn = flashvars.on_publisher_warn; flash.utils.setTimeout(this.system_on_js_ready, 0); } @@ -106,6 +110,10 @@ package trace("system error, code=" + code + ", error=" + desc); flash.external.ExternalInterface.call(this.js_on_publisher_error, this.js_id, code); } + private function system_warn(code:int, desc:String):void { + trace("system warn, code=" + code + ", error=" + desc); + flash.external.ExternalInterface.call(this.js_on_publisher_warn, this.js_id, code); + } /** * publish stream to server. @@ -129,27 +137,22 @@ package // microphone and camera var m:Microphone = Microphone.getMicrophone(acodec.device_code); if(m == null){ - trace("failed to open microphone " + acodec.device_code + "(" + acodec.device_name + ")"); - } - if(m.muted){ - trace("Access Denied, microphone " + acodec.device_code + "(" + acodec.device_name + ") is muted"); - m = null; + this.system_error(this.error_microphone_get, "failed to open microphone " + acodec.device_code + "(" + acodec.device_name + ")"); + return; } + // ignore muted, for flash will require user to access it. // Remark: the name is the index! var c:Camera = Camera.getCamera(vcodec.device_code); if(c == null){ - trace("failed to open camera " + vcodec.device_code + "(" + vcodec.device_name + ")"); - } - if(c.muted){ - trace("Access Denied, camera " + vcodec.device_code + "(" + vcodec.device_name + ") is muted"); - c = null; - } - - if (m == null && c == null) { - system_error(error_device_muted, "failed to publish, for neither camera or microphone is ok."); + this.system_error(this.error_camera_get, "failed to open camera " + vcodec.device_code + "(" + vcodec.device_name + ")"); return; } + // ignore muted, for flash will require user to access it. + // but we still warn user. + if(c && c.muted){ + this.system_warn(this.error_camera_muted, "Access Denied, camera " + vcodec.device_code + "(" + vcodec.device_name + ") is muted"); + } this.media_camera = c; this.media_microphone = m;