Changeset 79
- Timestamp:
- 10/08/08 10:56:42 (5 years ago)
- Location:
- branches/4.2
- Files:
-
- 11 edited
-
com/jeroenwijering/models/RTMPModel.as (modified) (5 diffs)
-
com/jeroenwijering/parsers/SRTParser.as (modified) (1 diff)
-
com/jeroenwijering/parsers/TTParser.as (modified) (4 diffs)
-
com/jeroenwijering/player/Controller.as (modified) (1 diff)
-
com/jeroenwijering/player/Model.as (modified) (9 diffs)
-
com/jeroenwijering/player/Player.as (modified) (1 diff)
-
com/jeroenwijering/player/View.as (modified) (3 diffs)
-
com/jeroenwijering/plugins/Accessibility.as (modified) (4 diffs)
-
com/jeroenwijering/utils/NetClient.as (modified) (7 diffs)
-
player.pdf (modified) (previous)
-
player.swf (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
branches/4.2/com/jeroenwijering/models/RTMPModel.as
r77 r79 32 32 /** Interval ID for the time. **/ 33 33 private var timeinterval:Number; 34 /** Timeout ID for cleaning up idle streams. **/34 /** Timeout ID for CDN subscription pings. **/ 35 35 private var timeout:Number; 36 /** Metadata received switch. **/37 private var metadata:Boolean;38 36 39 37 … … 91 89 /** Get metadata information from netstream class. **/ 92 90 public function onData(dat:Object):void { 93 if(dat.type == 'metadata' && !metadata) { 94 metadata = true; 91 if(dat.type == 'metadata') { 95 92 if(dat.width) { 96 93 video.width = dat.width; … … 106 103 setStream(); 107 104 clearInterval(timeout); 108 } else if(dat.type == 'bandwidth') {109 setStream('?bw='+dat.bandwidth);110 105 } 111 106 model.sendEvent(ModelEvent.META,dat); … … 181 176 } 182 177 // connection.call("checkBandwidth",null); 183 // For FMS3 bandwidth checking, uncomment the line above and comment the one below.178 // Uncomment the above line to run an FMS3 bandwidth check. 184 179 setStream(); 185 180 // If you use Limelight/Akamai: comment the line above and uncomment the one below. … … 202 197 /** Destroy the stream. **/ 203 198 public function stop():void { 204 metadata = false;205 199 clearInterval(timeinterval); 206 200 connection.close(); -
branches/4.2/com/jeroenwijering/parsers/SRTParser.as
r78 r79 1 /** 2 * Parse an Subrip caption file and return an array of captions. 3 * 4 * The entries in the array look like: 5 * []['begin'] 6 * []['end'] 7 * []['text'] 8 **/ 9 package com.jeroenwijering.parsers { 10 11 12 import com.jeroenwijering.utils.Strings; 13 14 15 public class SRTParser { 16 17 18 /** Parse the cationing array. **/ 19 public static function parseCaptions(dat:String):Array { 20 var arr:Array = new Array(); 21 var lst:Array = dat.split("\r\n\r\n"); 22 if(lst.length > 1) { 23 for(var i:Number=0; i<arr.length; i++) { 24 arr.push(SRTParser.parseCaption(lst[i])); 25 } 26 } 27 return arr; 28 }; 29 30 31 /** Parse a single captions entry. **/ 32 private static function parseCaption(dat:String):Object { 33 var obj:Object = new Object(); 34 var arr:Array = dat.split("\r\n"); 35 var idx:Number = arr[1].indexOf(' --> '); 36 obj['begin'] = Strings.seconds(arr[1].substr(0,idx-1)); 37 obj['end'] = Strings.seconds(arr[1].substr(idx+5)); 38 obj['text'] = arr[2]; 39 if(arr[3]) { obj['text'] += '<br />'+arr[3]; } 40 return obj; 41 }; 42 43 44 } 45 46 47 } -
branches/4.2/com/jeroenwijering/parsers/TTParser.as
r12 r79 1 1 /** 2 * Parse a TimedText XML and return a rich array. 2 * Parse a TimedText XML and return an array of captions. 3 * 4 * The entries in the array look like: 5 * []['begin'] 6 * []['end'] 7 * []['text'] 8 * 3 9 **/ 4 10 package com.jeroenwijering.parsers { … … 11 17 12 18 13 /** All supported styling elements. **/ 14 public static var STYLING:Object = { 15 'id':0, 16 'backgroundColor':'000000', 17 'color':'FFFFFF', 18 'displayAlign':'after', 19 'fontFamily':'Arial', 20 'fontSize':12, 21 'fontStyle':false, 22 'fontWeight':false, 23 'opacity':0, 24 'padding':20, 25 'textAlign:':'center' 26 }; 27 /** All supported paragraph elements. **/ 19 /** The supported paragraph elements. **/ 28 20 private static var ELEMENTS:Object = { 29 21 'begin':undefined, 30 22 'dur':undefined, 31 23 'end':undefined, 32 'style':undefined,33 24 'text':undefined 34 };35 /** Default style ID **/36 private static var style:Number;37 38 39 /** Parse the styling head. **/40 public static function parseStyles(dat:XML):Array {41 var arr = new Array(TTParser.STYLING);42 for each (var i in dat.children()[0].children()) {43 if (i.localName() == 'styling') {44 for each (var j in i.children()) {45 var obj = TTParser.parseStyle(j);46 arr[obj.id] = obj;47 }48 }49 }50 return arr;51 };52 53 54 /** Parse a single style definition. **/55 private static function parseStyle(dat:XML):Object {56 var obj = new Object();57 for(var i in TTParser.STYLING) {58 obj[i] = TTParser.STYLING[i];59 }60 for (var j=0; j<dat.attributes().length(); j++) {61 obj[dat.attributes()[j].localName()] = dat.attributes()[j];62 }63 return obj;64 25 }; 65 26 … … 69 30 var arr = new Array(); 70 31 var div = dat.children()[1].children()[0]; 71 if(dat.children()[1].@style > 0) {72 TTParser.style = dat.children()[1].@style;73 } else if(div.@style > 0) {74 TTParser.style = div.@style;75 }76 32 for each (var i in div.children()) { 77 33 if(i.localName() == 'p') { … … 89 45 dur:Strings.seconds(dat.@dur), 90 46 end:Strings.seconds(dat.@end), 91 text:Strings.strip(dat.children()), 92 style:dat.@style.toString() 47 text:dat.children().toString() 93 48 }; 94 49 if(obj['dur']) { 95 50 obj['end'] = obj['begin'] + obj['dur']; 96 51 delete obj['dur']; 97 }98 if(obj['style'] == '') {99 obj['style'] = TTParser.style;100 52 } 101 53 return obj; -
branches/4.2/com/jeroenwijering/player/Controller.as
r78 r79 248 248 dat.width = skin.stage.stageWidth; 249 249 dat.height = skin.stage.stageHeight; 250 } else if(config[' scaling']) {250 } else if(config['resizing']) { 251 251 dat.fullscreen = false; 252 252 dat.width = skin.stage.stageWidth; -
branches/4.2/com/jeroenwijering/player/Model.as
r77 r79 31 31 private var currentURL:String; 32 32 /** Loader for the preview image. **/ 33 private var loader:Loader;33 private var thumb:Loader; 34 34 35 35 … … 39 39 skin = skn; 40 40 Draw.clear(skin.display.media); 41 skin.display.thumb = Draw.clone(skin.display.media,true);42 41 controller = ctr; 43 42 controller.addEventListener(ControllerEvent.ITEM,itemHandler); … … 50 49 controller.addEventListener(ControllerEvent.STOP,stopHandler); 51 50 controller.addEventListener(ControllerEvent.VOLUME,volumeHandler); 52 loader = new Loader(); 53 loader.contentLoaderInfo.addEventListener(Event.INIT,thumbHandler); 51 thumb = new Loader(); 52 thumb.contentLoaderInfo.addEventListener(Event.INIT,thumbHandler); 53 skin.display.addChildAt(thumb,skin.display.getChildIndex(skin.display.media)); 54 54 models = new Object(); 55 55 }; … … 121 121 Draw.clear(skin.display.media); 122 122 skin.display.media.addChild(chd); 123 Stretcher.stretch(skin.display.media,config['width'],config['height'],config['stretching']);123 resizeHandler(); 124 124 }; 125 125 … … 169 169 private function resizeHandler(evt:ControllerEvent=null):void { 170 170 Stretcher.stretch(skin.display.media,config['width'],config['height'],config['stretching']); 171 Stretcher.stretch( skin.display.thumb,config['width'],config['height'],config['stretching']);171 Stretcher.stretch(thumb,config['width'],config['height'],config['stretching']); 172 172 }; 173 173 … … 205 205 duration:playlist[config['item']]['duration'] 206 206 }); 207 skin.display.thumb.visible = true;207 thumb.visible = true; 208 208 skin.display.media.visible = false; 209 209 break; … … 211 211 var ext = playlist[config['item']]['file'].substr(-3); 212 212 if(ext != 'aac' && ext != 'mp3' && ext != 'm4a') { 213 skin.display.thumb.visible = false;213 thumb.visible = false; 214 214 skin.display.media.visible = true; 215 215 } else { 216 skin.display.thumb.visible = true;216 thumb.visible = true; 217 217 skin.display.media.visible = false; 218 218 } … … 230 230 /** Load a thumb on stage. **/ 231 231 private function thumbHandler(evt:Event):void { 232 Draw.clear(skin.display.thumb); 233 skin.display.thumb.addChild(evt.target.content); 232 try { 233 Bitmap(thumb.content).smoothing = true; 234 } catch (err:Error) {} 234 235 resizeHandler(); 235 236 }; … … 240 241 var img = playlist[config['item']]['image']; 241 242 if(img) { 242 loader.load(new URLRequest(img));243 thumb.load(new URLRequest(img)); 243 244 } 244 245 }; -
branches/4.2/com/jeroenwijering/player/Player.as
r77 r79 52 52 quality:true, 53 53 repeat:'none', 54 resizing:true, 54 55 shuffle:false, 55 scaling:true,56 56 state:'IDLE', 57 57 stretching:'uniform', -
branches/4.2/com/jeroenwijering/player/View.as
r77 r79 44 44 _config['client'] = 'FLASH '+Capabilities.version; 45 45 _skin = skn; 46 if(_config[' scaling']) {46 if(_config['resizing']) { 47 47 _skin.stage.scaleMode = "noScale"; 48 48 _skin.stage.align = "TL"; … … 99 99 prm = '('+prm.substr(0,prm.length-1)+')'; 100 100 } 101 if(config['trace r'] == 'arthropod') {101 if(config['tracecall'] == 'arthropod') { 102 102 var obj = {CONTROLLER:'0xFF6666',VIEW:'0x66FF66',MODEL:'0x6666FF'}; 103 103 Debug.log(typ+' '+prm,obj[tgt]); 104 } else if(config['trace r']) {105 ExternalInterface.call(config['trace r'],tgt+': '+typ+' '+prm);104 } else if(config['tracecall']) { 105 ExternalInterface.call(config['tracecall'],tgt+': '+typ+' '+prm); 106 106 } else { 107 107 trace(tgt+': '+typ+' '+prm); … … 221 221 /** Setup listeners to all events for tracing / javascript. **/ 222 222 private function setListening():void { 223 if(config['trace r'] == 'arthropod') { Debug.clear(); }223 if(config['tracecall'] == 'arthropod') { Debug.clear(); } 224 224 addControllerListener(ControllerEvent.ERROR,setController); 225 225 addControllerListener(ControllerEvent.ITEM,setController); -
branches/4.2/com/jeroenwijering/plugins/Accessibility.as
r78 r79 7 7 import com.jeroenwijering.events.*; 8 8 import com.jeroenwijering.parsers.TTParser; 9 import com.jeroenwijering.parsers.SRTParser; 9 10 import com.jeroenwijering.utils.Draw; 10 11 import flash.display.MovieClip; … … 22 23 /** Reference to the MVC view. **/ 23 24 private var view:AbstractView; 24 /** URL of the captions file. **/25 private var location:String;26 25 /** XML connect and parse object. **/ 27 26 private var loader:URLLoader; 28 27 /** The array the captions are loaded into. **/ 29 28 private var captions:Array; 30 /** The array with data for styling of the captions **/31 private var styles:Array;32 29 /** Displayelement to load the captions into. **/ 33 30 private var clip:MovieClip; … … 45 42 view.addControllerListener(ControllerEvent.ITEM,itemHandler); 46 43 view.addControllerListener(ControllerEvent.RESIZE,resizeHandler); 47 view.addModelListener(ModelEvent.META,metaHandler);48 44 view.addModelListener(ModelEvent.STATE,stateHandler); 49 45 loader = new URLLoader(); … … 57 53 /** Check for captions with a new item. **/ 58 54 private function itemHandler(evt:ControllerEvent):void { 59 current = -1; 60 setCaption(''); 55 current = null; 61 56 captions = new Array(); 62 57 var cap = view.playlist[view.config['item']]['captions']; -
branches/4.2/com/jeroenwijering/utils/NetClient.as
r75 r79 39 39 40 40 41 /** Handler for captionate events. **/41 /** Captionate caption handler. **/ 42 42 public function onCaption(cps:String,spk:Number):void { 43 43 var dat = {type:'caption',captions:cps,speaker:spk}; … … 46 46 47 47 48 /** Handler for captionate events. **/48 /** Captionate metadata handler. **/ 49 49 public function onCaptionInfo(obj:Object):void { 50 50 var dat = {type:'captioninfo'}; … … 54 54 55 55 56 /** Handler for captionate events. **/56 /** Cuepoint handler. **/ 57 57 public function onCuePoint(obj:Object):void { 58 58 var dat = {type:'cuepoint'}; … … 62 62 63 63 64 /** CDN subscription callback. **/64 /** CDN subscription handler. **/ 65 65 public function onFCSubscribe(obj:Object):void { 66 66 var dat = {type:'fcsubscribe'}; … … 70 70 71 71 72 /** Get image data from netstream. **/72 /** Image data (iTunes-style) handler. **/ 73 73 public function onImageData(obj:Object):void { 74 var dat = {type:'imagedata'}; 75 forward(obj); 74 forward({type:'imagedata'}); 76 75 }; 77 76 78 77 79 /** Handler for LaasstSecond call. **/78 /** Lastsecond call handler. **/ 80 79 public function onLastSecond(obj:Object):void { 81 var dat = {type:'lastsecond'}; 82 forward(dat); 80 forward({type:'lastsecond'}); 83 81 }; 84 82 … … 88 86 var dat = {type:'metadata'}; 89 87 for(var i in obj) { dat[i] = obj[i]; } 90 if((dat.videocodecid || dat.videodatarate) && !dat.width) {91 dat.width = 320;92 dat.height = 240;93 }94 88 forward(dat); 95 89 }; … … 99 93 public function onPlayStatus(dat:Object):void { 100 94 if(dat.code == "NetStream.Play.Complete") { 101 var dat = {type:'complete'}; 102 forward(dat); 95 forward({type:'complete'}); 103 96 } 104 97 }; 105 98 106 99 107 /** RTMP Sample callback. **/100 /** RTMP Sample handler (what is this for?). **/ 108 101 public function RtmpSampleAccess(obj:Object):void { 109 var dat = {type:'rtmpsampleaccess'}; 110 forward(dat); 102 forward({type:'rtmpsampleaccess'}); 111 103 }; 112 104 113 105 114 /** Get textdata from netstream. **/106 /** Textdata handler (MP4 text tracks). **/ 115 107 public function onTextData(obj:Object):void { 116 108 var dat = {type:'textdata'};
Note: See TracChangeset
for help on using the changeset viewer.
