From 531fa6fb762e052e9978646ceb945ade00eae085 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 26 Dec 2013 08:56:13 +0800 Subject: [PATCH] change ui version to 1.15, fix the publiser bug, support chrome/firefox/safari/ie browsers. --- trunk/research/players/js/srs.log.js | 19 ++++- trunk/research/players/js/srs.page.js | 17 +++- trunk/research/players/js/srs.publisher.js | 2 + trunk/research/players/js/srs.utility.js | 51 ++++++++++++ trunk/research/players/srs_chat.html | 27 +++++- trunk/research/players/srs_publisher.html | 27 +++++- .../srs_publisher/release/srs_publisher.swf | Bin 4757 -> 5201 bytes .../srs_publisher/src/srs_publisher.as | 78 ++++++++++++++---- 8 files changed, 198 insertions(+), 23 deletions(-) mode change 100644 => 100755 trunk/research/players/js/srs.log.js mode change 100644 => 100755 trunk/research/players/js/srs.utility.js diff --git a/trunk/research/players/js/srs.log.js b/trunk/research/players/js/srs.log.js old mode 100644 new mode 100755 index c3ffde5f5..eb7d27d3b --- a/trunk/research/players/js/srs.log.js +++ b/trunk/research/players/js/srs.log.js @@ -7,18 +7,31 @@ 日志内容 */ +var srs_log_disabled = false; function info(desc) { + if (srs_log_disabled) { + return; + } + $("#txt_log").addClass("alert-info").removeClass("alert-error").removeClass("alert-warn"); $("#txt_log_title").text("Info:"); - $("#txt_log_msg").text(desc); + $("#txt_log_msg").html(desc); } function warn(code, desc) { + if (srs_log_disabled) { + return; + } + $("#txt_log").removeClass("alert-info").removeClass("alert-error").addClass("alert-warn"); $("#txt_log_title").text("Warn:"); - $("#txt_log_msg").text("code: " + code + ", " + desc); + $("#txt_log_msg").html("code: " + code + ", " + desc); } function error(code, desc) { + if (srs_log_disabled) { + return; + } + $("#txt_log").removeClass("alert-info").addClass("alert-error").removeClass("alert-warn"); $("#txt_log_title").text("Error:"); - $("#txt_log_msg").text("code: " + code + ", " + desc); + $("#txt_log_msg").html("code: " + code + ", " + desc); } diff --git a/trunk/research/players/js/srs.page.js b/trunk/research/players/js/srs.page.js index 322286eae..165b8d8b7 100755 --- a/trunk/research/players/js/srs.page.js +++ b/trunk/research/players/js/srs.page.js @@ -10,7 +10,7 @@ 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.13"; } +function srs_get_version_code() { return "1.15"; } // get the default vhost for players. function srs_get_player_vhost() { return "players"; } // the api server port, for chat room. @@ -139,6 +139,21 @@ function srs_init_publish(rtmp_url) { } } +// check whether can republish +function srs_can_republish() { + var browser = get_browser_agents(); + + if (browser.Chrome || browser.Firefox) { + return true; + } + + if (browser.MSIE || browser.QQBrowser) { + return false; + } + + return false; +} + // without default values set. function srs_initialize_codec_page( cameras, microphones, diff --git a/trunk/research/players/js/srs.publisher.js b/trunk/research/players/js/srs.publisher.js index 3dac341ec..50363e7d5 100755 --- a/trunk/research/players/js/srs.publisher.js +++ b/trunk/research/players/js/srs.publisher.js @@ -54,6 +54,8 @@ SrsPublisher.prototype.start = function() { // embed the flash. var flashvars = {}; flashvars.id = this.id; + flashvars.width = this.width; + flashvars.height = this.height; flashvars.on_publisher_ready = "__srs_on_publisher_ready"; flashvars.on_publisher_error = "__srs_on_publisher_error"; flashvars.on_publisher_warn = "__srs_on_publisher_warn"; diff --git a/trunk/research/players/js/srs.utility.js b/trunk/research/players/js/srs.utility.js old mode 100644 new mode 100755 index 19b715859..1f2bb1eeb --- a/trunk/research/players/js/srs.utility.js +++ b/trunk/research/players/js/srs.utility.js @@ -81,3 +81,54 @@ function srs_parse_rtmp_url(rtmp_url) { return ret; } + +/** +* get the agent. +* @return an object specifies some browser. +* for example, get_browser_agents().MSIE +*/ +function get_browser_agents() { + var agent = navigator.userAgent; + + /** + WindowsPC platform, Win7: + chrome 31.0.1650.63: + Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 + (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 + firefox 23.0.1: + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 + Firefox/23.0 + safari 5.1.7(7534.57.2): + Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 + (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 + opera 15.0.1147.153: + Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 + (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 + OPR/15.0.1147.153 + 360 6.2.1.272: + Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; + Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; + .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; + .NET4.0E) + IE 10.0.9200.16750(update: 10.0.12): + Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; + Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; + .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; + .NET4.0E) + */ + + return { + // platform + Android: agent.indexOf("Android") != -1, + Windows: agent.indexOf("Windows") != -1, + iPhone: agent.indexOf("iPhone") != -1, + // Windows Browsers + Chrome: agent.indexOf("Chrome") != -1, + Firefox: agent.indexOf("Firefox") != -1, + QQBrowser: agent.indexOf("QQBrowser") != -1, + MSIE: agent.indexOf("MSIE") != -1, + // Android Browsers + Opera: agent.indexOf("Presto") != -1, + MQQBrowser: agent.indexOf("MQQBrowser") != -1 + }; +} diff --git a/trunk/research/players/srs_chat.html b/trunk/research/players/srs_chat.html index 09839a09b..804f7efa5 100755 --- a/trunk/research/players/srs_chat.html +++ b/trunk/research/players/srs_chat.html @@ -27,18 +27,23 @@ var previous_chats = []; var no_play = false; + var query = parse_query_string(); $(function(){ // get the vhost and port to set the default url. // for example: http://192.168.1.213/players/jwplayer6.html?port=1935&vhost=demo // url set to: rtmp://demo:1935/live/livestream srs_init_publish("#txt_url"); + if (query.agent == "true") { + document.write(navigator.userAgent); + return; + } + $("#realtime_player_url").tooltip({ title: "右键复制RTMP地址" }); // if no play specified, donot show the player, for debug the publisher. - var query = parse_query_string(); if (query.no_play == "true") { no_play = true; } @@ -65,6 +70,10 @@ ); }; srs_publisher.on_publisher_error = function(code, desc) { + if (!on_publish_stop()) { + return; + } + error(code, desc + "请重试。"); }; srs_publisher.on_publisher_warn = function(code, desc) { @@ -107,6 +116,18 @@ refresh(); }); + function on_publish_stop() { + if (!srs_can_republish()) { + $("#btn_join").attr("disabled", true); + error(0, "您使用的浏览器很弱,请关闭页面后重新打开页面(刷新也不管用)。
推荐使用Chrome/Firefox/Safari/Opera浏览器,支持重试"); + + srs_log_disabled = true; + return false; + } + + return true; + } + function update_play_url() { var url = $("#txt_url").val(); @@ -432,6 +453,10 @@ data : "", dataType : "json", complete : function() { + if (!on_publish_stop()) { + return; + } + $("#btn_join").attr("disabled", false); if (complete_pfn) { complete_pfn(); diff --git a/trunk/research/players/srs_publisher.html b/trunk/research/players/srs_publisher.html index a40382c68..3f90e8983 100755 --- a/trunk/research/players/srs_publisher.html +++ b/trunk/research/players/srs_publisher.html @@ -23,12 +23,18 @@ var remote_player = null; var realtime_player = null; + var query = parse_query_string(); $(function(){ // get the vhost and port to set the default url. // for example: http://192.168.1.213/players/jwplayer6.html?port=1935&vhost=demo // url set to: rtmp://demo:1935/live/livestream srs_init("#txt_url", null, null); + if (query.agent == "true") { + document.write(navigator.userAgent); + return; + } + $("#btn_video_settings").click(function(){ $("#video_modal").modal({show:true}); }); @@ -65,6 +71,9 @@ ); }; srs_publisher.on_publisher_error = function(code, desc) { + if (!on_publish_stop()) { + return; + } error(code, desc + "请重试。"); }; srs_publisher.on_publisher_warn = function(code, desc) { @@ -75,7 +84,6 @@ update_play_url(); // 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); @@ -101,6 +109,18 @@ } }); + function on_publish_stop() { + if (!srs_can_republish()) { + $("#btn_join").attr("disabled", true); + error(0, "您使用的浏览器很弱,请关闭页面后重新打开页面(刷新也不管用)。
推荐使用Chrome/Firefox/Safari/Opera浏览器,支持重试"); + + srs_log_disabled = true; + return false; + } + + return true; + } + /** * we generate the transcoded stream url for flash publish donot support HLS * which requires aac, so the publish vhost maybe players for example, we @@ -112,7 +132,6 @@ function update_play_url() { var url = $("#txt_url").val(); var ret = srs_parse_rtmp_url(url); - var query = parse_query_string(); var remote_url = "rtmp://" + ret.server + ":" + ret.port + "/" + ret.app + "...vhost..." + srs_get_player_publish_vhost(ret.vhost) + "/" + ret.stream; $("#realtime_player_url").attr("href", url).attr("target", "_blank"); @@ -147,6 +166,10 @@ //$("#remote_player_url").attr("href", "#").attr("target", "_self"); //$("#txt_play_hls").text("HLS-m3u8(请发布视频)").attr("href", "#").attr("target", "_self"); //$("#txt_play_jwplayer").text("HLS-JWPlayer(请发布视频)").attr("href", "#").attr("target", "_self"); + + if (!on_publish_stop()) { + return; + } return; } diff --git a/trunk/research/players/srs_publisher/release/srs_publisher.swf b/trunk/research/players/srs_publisher/release/srs_publisher.swf index 0c22b9c9561ddb1e6aea27567f4c67cbadc77811..c7c7b58050120f73b6ef8a14cdc67e9a54d08d50 100755 GIT binary patch literal 5201 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 L{4MdXL7vvI8CWA8 literal 4757 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 diff --git a/trunk/research/players/srs_publisher/src/srs_publisher.as b/trunk/research/players/srs_publisher/src/srs_publisher.as index db889437a..d9141b4ce 100755 --- a/trunk/research/players/srs_publisher/src/srs_publisher.as +++ b/trunk/research/players/srs_publisher/src/srs_publisher.as @@ -16,6 +16,8 @@ package import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; + import flash.system.Security; + import flash.system.SecurityPanel; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.utils.setTimeout; @@ -84,6 +86,18 @@ package this.js_on_publisher_error = flashvars.on_publisher_error; this.js_on_publisher_warn = flashvars.on_publisher_warn; + // initialized size. + this.user_w = flashvars.width; + this.user_h = flashvars.height; + + // try to get the camera, if muted, alert the security and requires user to open it. + var c:Camera = Camera.getCamera(); + if (c.muted) { + Security.showSettings(SecurityPanel.PRIVACY); + } + + __show_local_camera(c); + flash.utils.setTimeout(this.system_on_js_ready, 0); } @@ -221,17 +235,7 @@ package var streamName:String = url.substr(url.lastIndexOf("/")); media_stream.publish(streamName); - media_video = new Video(); - media_video.width = _width; - media_video.height = _height; - media_video.attachCamera(media_camera); - media_video.smoothing = true; - addChild(media_video); - - //__draw_black_background(_width, _height); - - // lowest layer, for mask to cover it. - setChildIndex(media_video, 0); + __show_local_camera(media_camera); }); var tcUrl:String = this.user_url.substr(0, this.user_url.lastIndexOf("/")); @@ -242,11 +246,6 @@ package * function for js to call: to stop the stream. ignore if not publish. */ private function js_call_stop():void { - if (this.media_video) { - this.media_video.attachCamera(null); - this.removeChild(this.media_video); - this.media_video = null; - } if (this.media_stream) { this.media_stream.attachAudio(null); this.media_stream.attachCamera(null); @@ -363,5 +362,52 @@ package // quality=1 is lowest quality, 100 is highest quality. c.setQuality(cameraBitrate / 8.0 * 1000, cameraQuality); } + + private function __show_local_camera(c:Camera):void { + if (this.media_video) { + this.media_video.attachCamera(null); + this.removeChild(this.media_video); + this.media_video = null; + } + + // show local camera + media_video = new Video(); + media_video.attachCamera(c); + media_video.smoothing = true; + addChild(media_video); + + // rescale the local camera. + var cw:Number = user_h * c.width / c.height; + if (cw > user_w) { + var ch:Number = user_w * c.height / c.width; + media_video.width = user_w; + media_video.height = ch; + } else { + media_video.width = cw; + media_video.height = user_h; + } + media_video.x = (user_w - media_video.width) / 2; + media_video.y = (user_h - media_video.height) / 2; + + __draw_black_background(user_w, user_h); + + // lowest layer, for mask to cover it. + setChildIndex(media_video, 0); + } + + /** + * draw black background and draw the fullscreen mask. + */ + private function __draw_black_background(_width:int, _height:int):void { + // draw black bg. + this.graphics.beginFill(0x00, 1.0); + this.graphics.drawRect(0, 0, _width, _height); + this.graphics.endFill(); + + // draw the fs mask. + //this.control_fs_mask.graphics.beginFill(0xff0000, 0); + //this.control_fs_mask.graphics.drawRect(0, 0, _width, _height); + //this.control_fs_mask.graphics.endFill(); + } } } \ No newline at end of file