1 /** The minplayer namespace. */ 2 var minplayer = minplayer || {}; 3 4 /** All the media player implementations */ 5 minplayer.players = minplayer.players || {}; 6 7 /** 8 * @constructor 9 * @extends minplayer.display 10 * @class The Flash media player class to control the flash fallback. 11 * 12 * @param {object} context The jQuery context. 13 * @param {object} options This components options. 14 * @param {object} queue The event queue to pass events around. 15 */ 16 minplayer.players.minplayer = function(context, options, queue) { 17 18 // Derive from players flash. 19 minplayer.players.flash.call(this, context, options, queue); 20 }; 21 22 /** Derive from minplayer.players.flash. */ 23 minplayer.players.minplayer.prototype = new minplayer.players.flash(); 24 25 /** Reset the constructor. */ 26 minplayer.players.minplayer.prototype.constructor = minplayer.players.minplayer; 27 28 /** 29 * @see minplayer.plugin.construct 30 * @this minplayer.players.minplayer 31 */ 32 minplayer.players.minplayer.prototype.construct = function() { 33 34 // Call the players.flash constructor. 35 minplayer.players.flash.prototype.construct.call(this); 36 37 // Set the plugin name within the options. 38 this.options.pluginName = 'minplayer'; 39 }; 40 41 /** 42 * Called when the Flash player is ready. 43 * 44 * @param {string} id The media player ID. 45 */ 46 window.onFlashPlayerReady = function(id) { 47 var media = minplayer.get(id, 'media'); 48 var i = media.length; 49 while (i--) { 50 media[i].onReady(); 51 } 52 }; 53 54 /** 55 * Called when the Flash player updates. 56 * 57 * @param {string} id The media player ID. 58 * @param {string} eventType The event type that was triggered. 59 */ 60 window.onFlashPlayerUpdate = function(id, eventType) { 61 var media = minplayer.get(id, 'media'); 62 var i = media.length; 63 while (i--) { 64 media[i].onMediaUpdate(eventType); 65 } 66 }; 67 68 /** 69 * Used to debug from the Flash player to the browser console. 70 * 71 * @param {string} debug The debug string. 72 */ 73 window.onFlashPlayerDebug = function(debug) { 74 if (console && console.log) { 75 console.log(debug); 76 } 77 }; 78 79 /** 80 * @see minplayer.players.base#getPriority 81 * @param {object} file A {@link minplayer.file} object. 82 * @return {number} The priority of this media player. 83 */ 84 minplayer.players.minplayer.getPriority = function(file) { 85 // Force this player if the stream is set. 86 return file.stream ? 100 : 1; 87 }; 88 89 /** 90 * @see minplayer.players.base#canPlay 91 * @return {boolean} If this player can play this media type. 92 */ 93 minplayer.players.minplayer.canPlay = function(file) { 94 95 // If this has a stream, then the minplayer must play it. 96 if (file.stream) { 97 return true; 98 } 99 100 var isWEBM = jQuery.inArray(file.mimetype, [ 101 'video/x-webm', 102 'video/webm', 103 'application/octet-stream' 104 ]) >= 0; 105 return !isWEBM && (file.type == 'video' || file.type == 'audio'); 106 }; 107 108 /** 109 * @see minplayer.players.base#create 110 * @return {object} The media player entity. 111 */ 112 minplayer.players.minplayer.prototype.create = function() { 113 114 // Make sure we provide default options... 115 this.options = jQuery.extend({ 116 swfplayer: 'flash/minplayer.swf' 117 }, this.options); 118 119 minplayer.players.flash.prototype.create.call(this); 120 121 // The flash variables for this flash player. 122 var flashVars = { 123 'id': this.options.id, 124 'debug': this.options.debug, 125 'config': 'nocontrols', 126 'file': this.mediaFile.path, 127 'stream': this.mediaFile.stream, 128 'autostart': this.options.autoplay, 129 'autoload': this.options.autoload 130 }; 131 132 // Return a flash media player object. 133 return this.getFlash({ 134 swf: this.options.swfplayer, 135 id: this.options.id + '_player', 136 width: '100%', 137 height: '100%', 138 flashvars: flashVars, 139 wmode: this.options.wmode 140 }); 141 }; 142 143 /** 144 * Called when the Flash player has an update. 145 * 146 * @param {string} eventType The event that was triggered in the player. 147 */ 148 minplayer.players.minplayer.prototype.onMediaUpdate = function(eventType) { 149 switch (eventType) { 150 case 'mediaMeta': 151 this.onLoaded(); 152 break; 153 case 'mediaPlaying': 154 if (this.minplayerloaded) { 155 this.onPlaying(); 156 } 157 break; 158 case 'mediaPaused': 159 this.minplayerloaded = true; 160 this.onPaused(); 161 break; 162 case 'mediaComplete': 163 this.onComplete(); 164 break; 165 } 166 }; 167 168 /** 169 * Resets all variables. 170 */ 171 minplayer.players.minplayer.prototype.clear = function() { 172 minplayer.players.flash.prototype.clear.call(this); 173 this.minplayerloaded = this.options.autoplay; 174 }; 175 176 /** 177 * @see minplayer.players.base#load 178 * @return {boolean} If this action was performed. 179 */ 180 minplayer.players.minplayer.prototype.load = function(file) { 181 if (minplayer.players.flash.prototype.load.call(this, file)) { 182 this.player.loadMedia(file.path, file.stream); 183 return true; 184 } 185 186 return false; 187 }; 188 189 /** 190 * @see minplayer.players.base#play 191 * @return {boolean} If this action was performed. 192 */ 193 minplayer.players.minplayer.prototype.play = function() { 194 if (minplayer.players.flash.prototype.play.call(this)) { 195 this.player.playMedia(); 196 return true; 197 } 198 199 return false; 200 }; 201 202 /** 203 * @see minplayer.players.base#pause 204 * @return {boolean} If this action was performed. 205 */ 206 minplayer.players.minplayer.prototype.pause = function() { 207 if (minplayer.players.flash.prototype.pause.call(this)) { 208 this.player.pauseMedia(); 209 return true; 210 } 211 212 return false; 213 }; 214 215 /** 216 * @see minplayer.players.base#stop 217 * @return {boolean} If this action was performed. 218 */ 219 minplayer.players.minplayer.prototype.stop = function() { 220 if (minplayer.players.flash.prototype.stop.call(this)) { 221 this.player.stopMedia(); 222 return true; 223 } 224 225 return false; 226 }; 227 228 /** 229 * @see minplayer.players.base#seek 230 * @return {boolean} If this action was performed. 231 */ 232 minplayer.players.minplayer.prototype.seek = function(pos) { 233 if (minplayer.players.flash.prototype.seek.call(this, pos)) { 234 this.player.seekMedia(pos); 235 return true; 236 } 237 238 return false; 239 }; 240 241 /** 242 * @see minplayer.players.base#setVolume 243 * @return {boolean} If this action was performed. 244 */ 245 minplayer.players.minplayer.prototype.setVolume = function(vol) { 246 if (minplayer.players.flash.prototype.setVolume.call(this, vol)) { 247 this.player.setVolume(vol); 248 return true; 249 } 250 251 return false; 252 }; 253 254 /** 255 * @see minplayer.players.base#getVolume 256 */ 257 minplayer.players.minplayer.prototype.getVolume = function(callback) { 258 if (this.isReady()) { 259 callback(this.player.getVolume()); 260 } 261 }; 262 263 /** 264 * @see minplayer.players.flash#getDuration 265 */ 266 minplayer.players.minplayer.prototype.getDuration = function(callback) { 267 if (this.isReady()) { 268 269 // Check to see if it is immediately available. 270 var duration = this.player.getDuration(); 271 if (duration) { 272 callback(duration); 273 } 274 else { 275 276 // If not, then poll every second for the duration. 277 this.poll((function(player) { 278 return function() { 279 duration = player.player.getDuration(); 280 if (duration) { 281 callback(duration); 282 } 283 return !duration; 284 }; 285 })(this), 1000); 286 } 287 } 288 }; 289 290 /** 291 * @see minplayer.players.base#getCurrentTime 292 */ 293 minplayer.players.minplayer.prototype.getCurrentTime = function(callback) { 294 if (this.isReady()) { 295 callback(this.player.getCurrentTime()); 296 } 297 }; 298 299 /** 300 * @see minplayer.players.base#getBytesLoaded 301 */ 302 minplayer.players.minplayer.prototype.getBytesLoaded = function(callback) { 303 if (this.isReady()) { 304 callback(this.player.getMediaBytesLoaded()); 305 } 306 }; 307 308 /** 309 * @see minplayer.players.base#getBytesTotal. 310 */ 311 minplayer.players.minplayer.prototype.getBytesTotal = function(callback) { 312 if (this.isReady()) { 313 callback(this.player.getMediaBytesTotal()); 314 } 315 }; 316