Changeset 79


Ignore:
Timestamp:
10/08/08 10:56:42 (5 years ago)
Author:
jeroen
Message:

fixed a few small bugs (resizing), updated the pdf and added the parsers for TT and SRT

Location:
branches/4.2
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/com/jeroenwijering/models/RTMPModel.as

    r77 r79  
    3232        /** Interval ID for the time. **/ 
    3333        private var timeinterval:Number; 
    34         /** Timeout ID for cleaning up idle streams. **/ 
     34        /** Timeout ID for CDN subscription pings. **/ 
    3535        private var timeout:Number; 
    36         /** Metadata received switch. **/ 
    37         private var metadata:Boolean; 
    3836 
    3937 
     
    9189        /** Get metadata information from netstream class. **/ 
    9290        public function onData(dat:Object):void { 
    93                 if(dat.type == 'metadata' && !metadata) { 
    94                         metadata = true; 
     91                if(dat.type == 'metadata') { 
    9592                        if(dat.width) { 
    9693                                video.width = dat.width; 
     
    106103                        setStream(); 
    107104                        clearInterval(timeout); 
    108                 } else if(dat.type == 'bandwidth') { 
    109                         setStream('?bw='+dat.bandwidth); 
    110105                } 
    111106                model.sendEvent(ModelEvent.META,dat); 
     
    181176                        } 
    182177                        // 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. 
    184179                        setStream(); 
    185180                        // If you use Limelight/Akamai: comment the line above and uncomment the one below. 
     
    202197        /** Destroy the stream. **/ 
    203198        public function stop():void { 
    204                 metadata = false; 
    205199                clearInterval(timeinterval); 
    206200                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**/ 
     9package com.jeroenwijering.parsers { 
     10 
     11 
     12import com.jeroenwijering.utils.Strings; 
     13 
     14 
     15public 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  
    11/** 
    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* 
    39**/ 
    410package com.jeroenwijering.parsers { 
     
    1117 
    1218 
    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. **/ 
    2820        private static var ELEMENTS:Object = { 
    2921                'begin':undefined, 
    3022                'dur':undefined, 
    3123                'end':undefined, 
    32                 'style':undefined, 
    3324                '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; 
    6425        }; 
    6526 
     
    6930                var arr = new Array(); 
    7031                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                 } 
    7632                for each (var i in div.children()) { 
    7733                        if(i.localName() == 'p') { 
     
    8945                        dur:Strings.seconds(dat.@dur), 
    9046                        end:Strings.seconds(dat.@end), 
    91                         text:Strings.strip(dat.children()), 
    92                         style:dat.@style.toString() 
     47                        text:dat.children().toString() 
    9348                }; 
    9449                if(obj['dur']) { 
    9550                        obj['end'] = obj['begin'] + obj['dur']; 
    9651                        delete obj['dur']; 
    97                 } 
    98                 if(obj['style'] == '') { 
    99                         obj['style'] = TTParser.style; 
    10052                } 
    10153                return obj; 
  • branches/4.2/com/jeroenwijering/player/Controller.as

    r78 r79  
    248248                        dat.width = skin.stage.stageWidth; 
    249249                        dat.height = skin.stage.stageHeight; 
    250                 } else if(config['scaling']) { 
     250                } else if(config['resizing']) { 
    251251                        dat.fullscreen = false; 
    252252                        dat.width = skin.stage.stageWidth; 
  • branches/4.2/com/jeroenwijering/player/Model.as

    r77 r79  
    3131        private var currentURL:String; 
    3232        /** Loader for the preview image. **/ 
    33         private var loader:Loader; 
     33        private var thumb:Loader; 
    3434 
    3535 
     
    3939                skin = skn; 
    4040                Draw.clear(skin.display.media); 
    41                 skin.display.thumb = Draw.clone(skin.display.media,true); 
    4241                controller = ctr; 
    4342                controller.addEventListener(ControllerEvent.ITEM,itemHandler); 
     
    5049                controller.addEventListener(ControllerEvent.STOP,stopHandler); 
    5150                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)); 
    5454                models = new Object(); 
    5555        }; 
     
    121121                Draw.clear(skin.display.media); 
    122122                skin.display.media.addChild(chd); 
    123                 Stretcher.stretch(skin.display.media,config['width'],config['height'],config['stretching']); 
     123                resizeHandler(); 
    124124        }; 
    125125 
     
    169169        private function resizeHandler(evt:ControllerEvent=null):void { 
    170170                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']); 
    172172        }; 
    173173 
     
    205205                                                duration:playlist[config['item']]['duration'] 
    206206                                        }); 
    207                                         skin.display.thumb.visible = true; 
     207                                        thumb.visible = true; 
    208208                                        skin.display.media.visible = false; 
    209209                                        break; 
     
    211211                                        var ext = playlist[config['item']]['file'].substr(-3); 
    212212                                        if(ext != 'aac' && ext != 'mp3' && ext != 'm4a') { 
    213                                                 skin.display.thumb.visible = false; 
     213                                                thumb.visible = false; 
    214214                                                skin.display.media.visible = true; 
    215215                                        } else {  
    216                                                 skin.display.thumb.visible = true; 
     216                                                thumb.visible = true; 
    217217                                                skin.display.media.visible = false; 
    218218                                        } 
     
    230230        /** Load a thumb on stage. **/ 
    231231        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) {} 
    234235                resizeHandler(); 
    235236        }; 
     
    240241                var img = playlist[config['item']]['image']; 
    241242                if(img) { 
    242                         loader.load(new URLRequest(img)); 
     243                        thumb.load(new URLRequest(img)); 
    243244                } 
    244245        }; 
  • branches/4.2/com/jeroenwijering/player/Player.as

    r77 r79  
    5252                quality:true, 
    5353                repeat:'none', 
     54                resizing:true, 
    5455                shuffle:false, 
    55                 scaling:true, 
    5656                state:'IDLE', 
    5757                stretching:'uniform', 
  • branches/4.2/com/jeroenwijering/player/View.as

    r77 r79  
    4444                _config['client'] = 'FLASH '+Capabilities.version; 
    4545                _skin = skn; 
    46                 if(_config['scaling']) { 
     46                if(_config['resizing']) { 
    4747                        _skin.stage.scaleMode = "noScale"; 
    4848                        _skin.stage.align = "TL"; 
     
    9999                        prm = '('+prm.substr(0,prm.length-1)+')'; 
    100100                } 
    101                 if(config['tracer'] == 'arthropod') { 
     101                if(config['tracecall'] == 'arthropod') { 
    102102                        var obj = {CONTROLLER:'0xFF6666',VIEW:'0x66FF66',MODEL:'0x6666FF'}; 
    103103                        Debug.log(typ+' '+prm,obj[tgt]); 
    104                 } else if(config['tracer']) {  
    105                         ExternalInterface.call(config['tracer'],tgt+': '+typ+' '+prm); 
     104                } else if(config['tracecall']) {  
     105                        ExternalInterface.call(config['tracecall'],tgt+': '+typ+' '+prm); 
    106106                } else { 
    107107                        trace(tgt+': '+typ+' '+prm); 
     
    221221        /** Setup listeners to all events for tracing / javascript. **/ 
    222222        private function setListening():void { 
    223                 if(config['tracer'] == 'arthropod') { Debug.clear(); } 
     223                if(config['tracecall'] == 'arthropod') { Debug.clear(); } 
    224224                addControllerListener(ControllerEvent.ERROR,setController); 
    225225                addControllerListener(ControllerEvent.ITEM,setController); 
  • branches/4.2/com/jeroenwijering/plugins/Accessibility.as

    r78 r79  
    77import com.jeroenwijering.events.*; 
    88import com.jeroenwijering.parsers.TTParser; 
     9import com.jeroenwijering.parsers.SRTParser; 
    910import com.jeroenwijering.utils.Draw; 
    1011import flash.display.MovieClip; 
     
    2223        /** Reference to the MVC view. **/ 
    2324        private var view:AbstractView; 
    24         /** URL of the captions file. **/ 
    25         private var location:String; 
    2625        /** XML connect and parse object. **/ 
    2726        private var loader:URLLoader; 
    2827        /** The array the captions are loaded into. **/ 
    2928        private var captions:Array; 
    30         /** The array with data for styling of the captions **/ 
    31         private var styles:Array; 
    3229        /** Displayelement to load the captions into. **/ 
    3330        private var clip:MovieClip; 
     
    4542                view.addControllerListener(ControllerEvent.ITEM,itemHandler); 
    4643                view.addControllerListener(ControllerEvent.RESIZE,resizeHandler); 
    47                 view.addModelListener(ModelEvent.META,metaHandler); 
    4844                view.addModelListener(ModelEvent.STATE,stateHandler); 
    4945                loader = new URLLoader(); 
     
    5753        /** Check for captions with a new item. **/ 
    5854        private function itemHandler(evt:ControllerEvent):void { 
    59                 current = -1; 
    60                 setCaption(''); 
     55                current = null; 
    6156                captions = new Array(); 
    6257                var cap = view.playlist[view.config['item']]['captions']; 
  • branches/4.2/com/jeroenwijering/utils/NetClient.as

    r75 r79  
    3939 
    4040 
    41         /** Handler for captionate events. **/ 
     41        /** Captionate caption handler. **/ 
    4242        public function onCaption(cps:String,spk:Number):void { 
    4343                var dat = {type:'caption',captions:cps,speaker:spk}; 
     
    4646 
    4747 
    48         /** Handler for captionate events. **/ 
     48        /** Captionate metadata handler. **/ 
    4949        public function onCaptionInfo(obj:Object):void { 
    5050                var dat = {type:'captioninfo'}; 
     
    5454 
    5555 
    56         /** Handler for captionate events. **/ 
     56        /** Cuepoint handler. **/ 
    5757        public function onCuePoint(obj:Object):void { 
    5858                var dat = {type:'cuepoint'}; 
     
    6262 
    6363 
    64         /** CDN subscription callback. **/ 
     64        /** CDN subscription handler. **/ 
    6565        public function onFCSubscribe(obj:Object):void { 
    6666                var dat = {type:'fcsubscribe'}; 
     
    7070 
    7171 
    72         /** Get image data from netstream. **/ 
     72        /** Image data (iTunes-style) handler. **/ 
    7373        public function onImageData(obj:Object):void { 
    74                 var dat = {type:'imagedata'}; 
    75                 forward(obj); 
     74                forward({type:'imagedata'}); 
    7675        }; 
    7776 
    7877 
    79         /** Handler for LaasstSecond call. **/ 
     78        /** Lastsecond call handler. **/ 
    8079        public function onLastSecond(obj:Object):void { 
    81                 var dat = {type:'lastsecond'}; 
    82                 forward(dat); 
     80                forward({type:'lastsecond'}); 
    8381        }; 
    8482 
     
    8886                var dat = {type:'metadata'}; 
    8987                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                 } 
    9488                forward(dat); 
    9589        }; 
     
    9993        public function onPlayStatus(dat:Object):void { 
    10094                if(dat.code == "NetStream.Play.Complete") { 
    101                         var dat = {type:'complete'}; 
    102                         forward(dat); 
     95                        forward({type:'complete'}); 
    10396                } 
    10497        }; 
    10598 
    10699 
    107         /** RTMP Sample callback. **/ 
     100        /** RTMP Sample handler (what is this for?). **/ 
    108101        public function RtmpSampleAccess(obj:Object):void { 
    109                 var dat = {type:'rtmpsampleaccess'}; 
    110                 forward(dat); 
     102                forward({type:'rtmpsampleaccess'}); 
    111103        }; 
    112104 
    113105 
    114         /** Get textdata from netstream. **/ 
     106        /** Textdata handler (MP4 text tracks). **/ 
    115107        public function onTextData(obj:Object):void { 
    116108                var dat = {type:'textdata'}; 
Note: See TracChangeset for help on using the changeset viewer.