From 42ec5f19fc868adcc70877ae77c2c707d5bd69b1 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 20 Dec 2013 18:46:56 +0800 Subject: [PATCH] update the srs player, set the DAR. --- trunk/research/players/jwplayer6.html | 29 ++--- trunk/research/players/osmf.html | 78 +++++------ trunk/research/players/srs_player.html | 122 +++++++++++++++--- .../players/srs_player/release/srs_player.swf | Bin 2697 -> 3452 bytes .../players/srs_player/src/srs_player.as | 114 ++++++++++++++-- 5 files changed, 258 insertions(+), 85 deletions(-) diff --git a/trunk/research/players/jwplayer6.html b/trunk/research/players/jwplayer6.html index 6eb420f73..bf4609ca7 100755 --- a/trunk/research/players/jwplayer6.html +++ b/trunk/research/players/jwplayer6.html @@ -15,8 +15,14 @@ diff --git a/trunk/research/players/osmf.html b/trunk/research/players/osmf.html index 77e59cb22..f69bcf393 100755 --- a/trunk/research/players/osmf.html +++ b/trunk/research/players/osmf.html @@ -14,50 +14,54 @@ } @@ -176,6 +247,15 @@ diff --git a/trunk/research/players/srs_player/release/srs_player.swf b/trunk/research/players/srs_player/release/srs_player.swf index d79fafd00e2665a127d80b7060ca489f52e39722..c3de2e90e3bb5eee7e3a0bd7c033ee39162a85eb 100755 GIT binary patch literal 3452 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 literal 2697 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 diff --git a/trunk/research/players/srs_player/src/srs_player.as b/trunk/research/players/srs_player/src/srs_player.as index a6ade0085..446be1987 100755 --- a/trunk/research/players/srs_player/src/srs_player.as +++ b/trunk/research/players/srs_player/src/srs_player.as @@ -15,14 +15,23 @@ package public class srs_player extends Sprite { + // user set id. private var id:String = null; + // user set callback private var on_player_ready:String = null; + private var on_player_metadata:String = null; + // play param url. private var url:String = null; + // play param, user set width + private var w:int = 0; + // play param, user set height. + private var h:int = 0; private var conn:NetConnection = null; private var stream:NetStream = null; private var video:Video = null; + private var metadata:Object = {}; public function srs_player() { @@ -51,6 +60,7 @@ package this.id = flashvars.id; this.on_player_ready = flashvars.on_player_ready; + this.on_player_metadata = flashvars.on_player_metadata; flash.utils.setTimeout(this.onJsReady, 0); } @@ -66,6 +76,7 @@ package flash.external.ExternalInterface.addCallback("__stop", this.js_call_stop); flash.external.ExternalInterface.addCallback("__pause", this.js_call_pause); flash.external.ExternalInterface.addCallback("__resume", this.js_call_resume); + flash.external.ExternalInterface.addCallback("__dar", this.js_call_dar); var code:int = flash.external.ExternalInterface.call(this.on_player_ready, this.id); if (code != 0) { @@ -87,6 +98,37 @@ package return 0; } + /** + * to set the DAR, for example, DAR=16:9 + * @param num, for example, 9. + * @param den, for example, 16. + */ + public function js_call_dar(num:int, den:int):int { + if (this.video && num > 0 && den > 0 && this.video.width > 0) { + // set DAR. + if (num < den) { + // calc the height by DAR + var _height:int = this.video.width * num / den; + + // height overflow, calc the width by DAR + if (_height > this.h) { + var _width:int = this.video.height * den / num; + + this.video.width = _width; + this.video.height = this.h; + } else { + this.video.width = this.w; + this.video.height = _height; + } + } + + // align center. + this.video.y = (this.h - this.video.height) / 2; + this.video.x = (this.w - this.video.width) / 2; + } + return 0; + } + public function js_call_stop():int { if (this.stream) { this.stream.close(); @@ -106,7 +148,14 @@ package public function js_call_play(url:String, _width:int, _height:int, _buffer_time:Number):int { this.url = url; - trace("start to play url: " + this.url); + this.w = _width; + this.h = _height; + trace("start to play url: " + this.url + ", w=" + this.w + ", h=" + this.h); + + // draw black bg. + this.graphics.beginFill(0x00, 1.0); + this.graphics.drawRect(0, 0, this.w, this.h); + this.graphics.endFill(); js_call_stop(); @@ -122,18 +171,13 @@ package stream = new NetStream(conn); stream.bufferTime = _buffer_time; stream.client = {}; - stream.client.onMetaData = function(metadata:Object):void { - var customItems:Array = [new ContextMenuItem("SrsPlayer")]; - if (metadata.hasOwnProperty("server")) { - customItems.push(new ContextMenuItem("Server: " + metadata.server)); - } - if (metadata.hasOwnProperty("contributor")) { - customItems.push(new ContextMenuItem("Contributor: " + metadata.contributor)); - } - contextMenu.customItems = customItems; - }; + stream.client.onMetaData = on_metadata; stream.addEventListener(NetStatusEvent.NET_STATUS, function(evt:NetStatusEvent):void { trace ("NetStream: code=" + evt.info.code); + + if (evt.info.code == "NetStream.Video.DimensionChange") { + on_metadata(metadata); + } }); stream.play(url.substr(url.lastIndexOf("/"))); @@ -148,5 +192,53 @@ package return 0; } + + private function on_metadata(metadata:Object):void { + this.metadata = metadata; + + // for context menu + var customItems:Array = [new ContextMenuItem("SrsPlayer")]; + if (metadata.hasOwnProperty("server")) { + customItems.push(new ContextMenuItem("Server: " + metadata.server)); + } + if (metadata.hasOwnProperty("contributor")) { + customItems.push(new ContextMenuItem("Contributor: " + metadata.contributor)); + } + contextMenu.customItems = customItems; + + // for js. + var obj:Object = { + width: video.width, + height: video.height, + server: 'srs', + contributor: 'winlin' + }; + + if (metadata.hasOwnProperty("width")) { + obj.width = metadata.width; + } + if (metadata.hasOwnProperty("height")) { + obj.height = metadata.height; + } + + if (video.videoWidth > 0) { + obj.width = video.videoWidth; + } + if (video.videoHeight > 0) { + obj.height = video.videoHeight; + } + + if (metadata.hasOwnProperty("server")) { + obj.server = metadata.server; + } + if (metadata.hasOwnProperty("contributor")) { + obj.contributor = metadata.contributor; + } + + var code:int = flash.external.ExternalInterface.call(on_player_metadata, id, obj); + if (code != 0) { + throw new Error("callback on_player_metadata failed. code=" + code); + } + } } } \ No newline at end of file