| 1 | /** |
|---|
| 2 | * Player that reads all media formats Flash can read. |
|---|
| 3 | * |
|---|
| 4 | * @author Jeroen Wijering |
|---|
| 5 | * @version 1.10 |
|---|
| 6 | **/ |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | import com.jeroenwijering.players.*; |
|---|
| 10 | import com.jeroenwijering.utils.BandwidthCheck; |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | class com.jeroenwijering.players.MediaPlayer extends AbstractPlayer { |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | /** Array with all config values **/ |
|---|
| 17 | private var config:Object = { |
|---|
| 18 | clip:undefined, |
|---|
| 19 | height:260, |
|---|
| 20 | width:320, |
|---|
| 21 | controlbar:20, |
|---|
| 22 | displayheight:undefined, |
|---|
| 23 | displaywidth:undefined, |
|---|
| 24 | searchbar:'true', |
|---|
| 25 | |
|---|
| 26 | file:undefined, |
|---|
| 27 | fallback:undefined, |
|---|
| 28 | image:undefined, |
|---|
| 29 | link:undefined, |
|---|
| 30 | id:undefined, |
|---|
| 31 | type:undefined, |
|---|
| 32 | captions:undefined, |
|---|
| 33 | audio:undefined, |
|---|
| 34 | category:undefined, |
|---|
| 35 | |
|---|
| 36 | frontcolor:0x000000, |
|---|
| 37 | backcolor:0xffffff, |
|---|
| 38 | lightcolor:0x000000, |
|---|
| 39 | screencolor:0x000000, |
|---|
| 40 | |
|---|
| 41 | autoscroll:"false", |
|---|
| 42 | largecontrols:"false", |
|---|
| 43 | logo:undefined, |
|---|
| 44 | showdigits:'true', |
|---|
| 45 | showdownload:'false', |
|---|
| 46 | showeq:'false', |
|---|
| 47 | showicons:'true', |
|---|
| 48 | shownavigation:'true', |
|---|
| 49 | showstop:'false', |
|---|
| 50 | thumbsinplaylist:'true', |
|---|
| 51 | usefullscreen:'true', |
|---|
| 52 | fsbuttonlink:undefined, |
|---|
| 53 | |
|---|
| 54 | autostart:'false', |
|---|
| 55 | bufferlength:3, |
|---|
| 56 | overstretch:'false', |
|---|
| 57 | repeat:'list', |
|---|
| 58 | rotatetime:5, |
|---|
| 59 | shuffle:'false', |
|---|
| 60 | smoothing:'true', |
|---|
| 61 | volume:80, |
|---|
| 62 | |
|---|
| 63 | bwfile:"100k.jpg", |
|---|
| 64 | bwstreams:undefined, |
|---|
| 65 | callback:undefined, |
|---|
| 66 | enablejs:'false', |
|---|
| 67 | javascriptid:'', |
|---|
| 68 | linkfromdisplay:'false', |
|---|
| 69 | linktarget:'_blank', |
|---|
| 70 | midroll:undefined, |
|---|
| 71 | prefix:'', |
|---|
| 72 | recommendations:undefined, |
|---|
| 73 | searchlink:'http://search.longtail.tv/?q=', |
|---|
| 74 | streamscript:undefined, |
|---|
| 75 | useaudio:'true', |
|---|
| 76 | usecaptions:'true', |
|---|
| 77 | usemute:'false', |
|---|
| 78 | usekeys:'true', |
|---|
| 79 | |
|---|
| 80 | abouttxt:'JW Player 3.16', |
|---|
| 81 | aboutlnk:'http://www.jeroenwijering.com/?about=JW_FLV_Media_Player' |
|---|
| 82 | }; |
|---|
| 83 | |
|---|
| 84 | |
|---|
| 85 | /** Constructor **/ |
|---|
| 86 | public function MediaPlayer(tgt:MovieClip) { |
|---|
| 87 | super(tgt); |
|---|
| 88 | }; |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | /** check bandwidth for streaming **/ |
|---|
| 92 | private function checkStream() { |
|---|
| 93 | var ref = this; |
|---|
| 94 | var str = config["bwstreams"].split(","); |
|---|
| 95 | var bwc = new BandwidthCheck(config["bwfile"]); |
|---|
| 96 | bwc.onComplete = function(kbps) { |
|---|
| 97 | trace("bandwidth: "+kbps); |
|---|
| 98 | var bwc = new ContextMenuItem("Detected bandwidth: "+kbps+" kbps"); |
|---|
| 99 | bwc.separatorBefore = true; |
|---|
| 100 | ref.manager.context.customItems.push(bwc); |
|---|
| 101 | if(ref.config['enablejs'] == "true" && |
|---|
| 102 | flash.external.ExternalInterface.available) { |
|---|
| 103 | flash.external.ExternalInterface.call("getBandwidth",kbps); |
|---|
| 104 | } |
|---|
| 105 | for (var i=1; i<str.length; i++) { |
|---|
| 106 | if (kbps < Number(str[i])) { |
|---|
| 107 | ref.loadFile(str[i-1]); |
|---|
| 108 | return; |
|---|
| 109 | } |
|---|
| 110 | } |
|---|
| 111 | ref.loadFile(str[str.length-1]); |
|---|
| 112 | }; |
|---|
| 113 | }; |
|---|
| 114 | |
|---|
| 115 | |
|---|
| 116 | /** Setup all necessary MCV blocks. **/ |
|---|
| 117 | private function setupMCV() { |
|---|
| 118 | // set controller |
|---|
| 119 | controller = new PlayerController(config,feeder); |
|---|
| 120 | // set default views |
|---|
| 121 | var dpv = new DisplayView(controller,config,feeder); |
|---|
| 122 | var vws = new Array(dpv); |
|---|
| 123 | if(config['shownavigation'] == "true") { |
|---|
| 124 | var cbv = new ControlbarView(controller,config,feeder); |
|---|
| 125 | vws.push(cbv); |
|---|
| 126 | } else { |
|---|
| 127 | config['clip'].controlbar._visible = false; |
|---|
| 128 | } |
|---|
| 129 | // set optional views |
|---|
| 130 | if(config["displayheight"] < config["height"]-config['controlbar']-config['searchbar'] || |
|---|
| 131 | config["displaywidth"] < config["width"]) { |
|---|
| 132 | var plv = new PlaylistView(controller,config,feeder); |
|---|
| 133 | vws.push(plv); |
|---|
| 134 | } else { |
|---|
| 135 | config["clip"].playlist._visible = |
|---|
| 136 | config["clip"].playlistmask._visible = false; |
|---|
| 137 | } |
|---|
| 138 | if(config["usekeys"] == "true") { |
|---|
| 139 | var ipv = new InputView(controller,config,feeder); |
|---|
| 140 | vws.push(ipv); |
|---|
| 141 | } |
|---|
| 142 | if(config["showeq"] == "true") { |
|---|
| 143 | var eqv = new EqualizerView(controller,config,feeder); |
|---|
| 144 | vws.push(eqv); |
|---|
| 145 | } else { |
|---|
| 146 | config["clip"].equalizer._visible = false; |
|---|
| 147 | } |
|---|
| 148 | var cpv = new CaptionsView(controller,config,feeder); |
|---|
| 149 | vws.push(cpv); |
|---|
| 150 | if(config['recommendations'] != undefined) { |
|---|
| 151 | var rlv = new RecommendationsView(controller,config,feeder); |
|---|
| 152 | vws.push(rlv); |
|---|
| 153 | } else { |
|---|
| 154 | config["clip"].recommendations._visible = false; |
|---|
| 155 | } |
|---|
| 156 | if(config['searchbar'] > 0) { |
|---|
| 157 | var sev = new SearchView(controller,config,feeder); |
|---|
| 158 | vws.push(sev); |
|---|
| 159 | } else { |
|---|
| 160 | config["clip"].search._visible = false; |
|---|
| 161 | } |
|---|
| 162 | if(config['midroll'] != undefined) { |
|---|
| 163 | var mrv = new MidrollView(controller,config,feeder); |
|---|
| 164 | vws.push(mrv); |
|---|
| 165 | } else { |
|---|
| 166 | config["clip"].midroll._visible = false; |
|---|
| 167 | } |
|---|
| 168 | if(feeder.audio == true) { |
|---|
| 169 | var adv = new AudioView(controller,config,feeder,true); |
|---|
| 170 | vws.push(adv); |
|---|
| 171 | } |
|---|
| 172 | if(config["enablejs"] == "true") { |
|---|
| 173 | var jsv = new JavascriptView(controller,config,feeder); |
|---|
| 174 | vws.push(jsv); |
|---|
| 175 | } |
|---|
| 176 | if(config["callback"] != undefined) { |
|---|
| 177 | var cav = new CallbackView(controller,config,feeder); |
|---|
| 178 | vws.push(cav); |
|---|
| 179 | } |
|---|
| 180 | // set models |
|---|
| 181 | var mp3 = new MP3Model(vws,controller,config,feeder,config["clip"]); |
|---|
| 182 | var flv = new FLVModel(vws,controller,config,feeder,config["clip"].display.video); |
|---|
| 183 | var img = new ImageModel(vws,controller,config,feeder,config["clip"].display.image); |
|---|
| 184 | var ytm = new YoutubeModel(vws,controller,config,feeder,config["clip"].display.youtube); |
|---|
| 185 | var mds:Array = new Array(mp3,flv,img,ytm); |
|---|
| 186 | if(feeder.captions == true) { flv.capView = cpv; } |
|---|
| 187 | // start mcv cycle |
|---|
| 188 | controller.startMCV(mds); |
|---|
| 189 | }; |
|---|
| 190 | |
|---|
| 191 | |
|---|
| 192 | /** Application startup, used for MTASC compilation **/ |
|---|
| 193 | public static function main() { |
|---|
| 194 | var mpl = new MediaPlayer(_root.player); |
|---|
| 195 | } |
|---|
| 196 | |
|---|
| 197 | |
|---|
| 198 | } |
|---|