367 if (media.is_added) { |
367 if (media.is_added) { |
368 return; |
368 return; |
369 } |
369 } |
370 media.is_added = true; |
370 media.is_added = true; |
371 |
371 |
372 var videourl = video_url_transform(media.video), |
372 var videoid = "video_" + media.id, |
373 videoid = "video_" + media.id, |
373 mp4_file = media.video.replace(/\.webm$/i,'.mp4'), |
374 mp4_file = videourl.replace(/\.webm$/i,'.mp4'), |
374 webm_file = media.video.replace(/\.mp4$/i,'.webm'); |
375 webm_file = videourl.replace(/\.mp4$/i,'.webm'), |
|
376 video_file = can_play_mp4 ? mp4_file : webm_file, |
|
377 videoEl = undefined, |
|
378 mediaEl = undefined; |
|
379 |
375 |
380 media.addToDom = function() { |
376 media.addToDom = function() { |
381 if (videoEl) { |
377 |
|
378 var video_file = video_url_transform(can_play_mp4 ? mp4_file : webm_file); |
|
379 |
|
380 if (document.getElementById(videoid)) { |
382 return; |
381 return; |
383 } |
382 } |
384 console.log("Adding to DOM",media.title); |
383 |
385 mediasInDom.push(media); |
384 mediasInDom.push(media); |
386 mediasInDom = _(mediasInDom).uniq(); |
385 mediasInDom = _(mediasInDom).uniq(); |
387 media.loaded = false; |
386 media.loaded = false; |
388 media.paused = true; |
387 media.paused = true; |
389 videoEl = $('<video>'); |
388 var videoSelector = $('<video>'); |
390 mediaEl = videoEl[0]; |
389 |
391 |
390 videoSelector.attr({ |
392 videoEl.attr({ |
|
393 src : video_file, |
391 src : video_file, |
394 id : videoid |
392 id : videoid |
395 }).css({ |
393 }).css({ |
396 position : "absolute", |
394 position : "absolute", |
397 left: 0, |
395 left: 0, |
399 width : "100%", |
397 width : "100%", |
400 height : "100%", |
398 height : "100%", |
401 display: "none" |
399 display: "none" |
402 }); |
400 }); |
403 |
401 |
404 $("#video_sequence").append(videoEl); |
402 $("#video_sequence").append(videoSelector); |
405 |
403 |
406 // Binding DOM events to media |
404 // Binding DOM events to media |
407 |
405 |
408 function getVolume() { |
406 function getVolume() { |
409 media.muted = mediaEl.muted; |
407 var videoElement = document.getElementById(videoid); |
410 media.volume = mediaEl.volume; |
408 media.muted = videoElement.muted; |
411 } |
409 media.volume = videoElement.volume; |
412 |
410 } |
413 videoEl.on("loadedmetadata", function() { |
411 |
|
412 videoSelector.on("loadedmetadata", function() { |
414 getVolume(); |
413 getVolume(); |
415 media.loaded = true; |
414 media.loaded = true; |
416 media.trigger("loadedmetadata"); |
415 media.trigger("loadedmetadata"); |
417 media.trigger("volumechange"); |
416 media.trigger("volumechange"); |
418 }) |
417 }) |
419 |
418 |
420 videoEl.on("timeupdate", function() { |
419 videoSelector.on("timeupdate", function() { |
421 media.trigger("timeupdate", new IriSP.Model.Time(1000*mediaEl.currentTime)); |
420 var videoElement = document.getElementById(videoid); |
422 }); |
421 media.trigger("timeupdate", new IriSP.Model.Time(1000*videoElement.currentTime)); |
423 |
422 }); |
424 videoEl.on("volumechange", function() { |
423 |
|
424 videoSelector.on("volumechange", function() { |
425 getVolume(); |
425 getVolume(); |
426 media.trigger("volumechange"); |
426 media.trigger("volumechange"); |
427 }) |
427 }) |
428 |
428 |
429 videoEl.on("play", function() { |
429 videoSelector.on("play", function() { |
430 media.trigger("play"); |
430 media.trigger("play"); |
431 }); |
431 }); |
432 |
432 |
433 videoEl.on("pause", function() { |
433 videoSelector.on("pause", function() { |
434 media.trigger("pause"); |
434 media.trigger("pause"); |
435 }); |
435 }); |
436 |
436 |
437 videoEl.on("seeking", function() { |
437 videoSelector.on("seeking", function() { |
438 media.trigger("seeking"); |
438 media.trigger("seeking"); |
439 }); |
439 }); |
440 |
440 |
441 videoEl.on("seeked", function() { |
441 videoSelector.on("seeked", function() { |
442 media.trigger("seeked"); |
442 media.trigger("seeked"); |
443 }); |
443 }); |
444 } |
444 } |
445 |
|
446 media.removeFromDom = function() { |
445 media.removeFromDom = function() { |
447 console.log("Removing from DOM",media.title); |
446 $("#" + videoid).remove(); |
448 videoEl.remove(); |
|
449 videoEl = undefined; |
|
450 mediaEl = undefined; |
|
451 mediasInDom = _(mediasInDom).without(media); |
447 mediasInDom = _(mediasInDom).without(media); |
452 } |
448 } |
453 media.show = function() { |
449 media.show = function() { |
454 if (!videoEl) { |
450 if (!$("#" + videoid).length) { |
455 media.addToDom(); |
451 media.addToDom(); |
456 } |
452 } |
457 console.log("Showing media",media.title); |
453 $("#" + videoid).show(); |
458 videoEl.show(); |
|
459 } |
454 } |
460 media.hide = function() { |
455 media.hide = function() { |
461 if (videoEl) { |
456 $("#" + videoid).hide(); |
462 videoEl.hide(); |
|
463 } |
|
464 } |
457 } |
465 |
458 |
466 // Binding functions to Media Element Functions |
459 // Binding functions to Media Element Functions |
467 |
460 |
|
461 var deferredTime = undefined, |
|
462 deferredPlayPause = undefined; |
|
463 |
468 media.on("setcurrenttime", function(_milliseconds) { |
464 media.on("setcurrenttime", function(_milliseconds) { |
469 try { |
465 var mediaEl = document.getElementById(videoid); |
470 mediaEl.currentTime = (_milliseconds / 1000); |
466 if (mediaEl && (mediaEl.readyState >= mediaEl.HAVE_METADATA || iPad)) { |
471 } |
467 try { |
472 catch (err) {} |
468 mediaEl.currentTime = (_milliseconds / 1000); |
473 }); |
469 deferredTime = undefined; |
|
470 } catch(err) { |
|
471 deferredTime = _milliseconds; |
|
472 } |
|
473 } else { |
|
474 deferredTime = _milliseconds; |
|
475 } |
|
476 }); |
|
477 |
474 media.on("setvolume", function(_vol) { |
478 media.on("setvolume", function(_vol) { |
475 try { |
479 var mediaEl = document.getElementById(videoid); |
|
480 if (mediaEl && (mediaEl.readyState >= mediaEl.HAVE_METADATA || iPad)) { |
476 media.volume = _vol; |
481 media.volume = _vol; |
477 mediaEl.volume = _vol; |
482 mediaEl.volume = _vol; |
478 } |
483 } |
479 catch (err) {} |
484 }); |
480 }); |
485 |
481 media.on("setmuted", function(_muted) { |
486 media.on("setmuted", function(_muted) { |
482 try { |
487 var mediaEl = document.getElementById(videoid); |
|
488 if (mediaEl && (mediaEl.readyState >= mediaEl.HAVE_METADATA || iPad)) { |
483 media.muted = _muted; |
489 media.muted = _muted; |
484 mediaEl.muted = _muted; |
490 mediaEl.muted = _muted; |
485 } |
491 } |
486 catch (err) {} |
492 }); |
487 }); |
493 |
488 media.on("setplay", function() { |
494 media.on("setplay", function() { |
489 try { |
495 var mediaEl = document.getElementById(videoid); |
490 mediaEl.play(); |
496 if (mediaEl && (mediaEl.readyState >= mediaEl.HAVE_METADATA || iPad)) { |
491 } |
497 try { |
492 catch (err) {} |
498 mediaEl.play(); |
493 }); |
499 deferredPlayPause = undefined; |
|
500 } catch(err) { |
|
501 deferredPlayPause = true; |
|
502 } |
|
503 } else { |
|
504 deferredPlayPause = true; |
|
505 } |
|
506 }); |
|
507 |
494 media.on("setpause", function() { |
508 media.on("setpause", function() { |
495 if (!mediaEl) { |
509 var mediaEl = document.getElementById(videoid); |
496 return; |
510 if (mediaEl && (mediaEl.readyState >= mediaEl.HAVE_METADATA || iPad)) { |
497 } |
511 try { |
498 try { |
512 mediaEl.pause(); |
499 mediaEl.pause(); |
513 deferredPlayPause = undefined; |
500 } |
514 } catch(err) { |
501 catch (err) {} |
515 deferredPlayPause = false; |
|
516 } |
|
517 } else { |
|
518 deferredPlayPause = false; |
|
519 } |
|
520 }); |
|
521 |
|
522 media.on("loadedmetadata", function() { |
|
523 if (typeof deferredTime !== "undefined") { |
|
524 media.setCurrentTime(deferredTime); |
|
525 } |
|
526 if (typeof deferredPlayPause !== "undefined") { |
|
527 if (deferredPlayPause) { |
|
528 media.play(); |
|
529 } else { |
|
530 media.pause(); |
|
531 } |
|
532 } |
502 }); |
533 }); |
503 |
534 |
504 // Binding UI Events and Mashup Playing to Media |
535 // Binding UI Events and Mashup Playing to Media |
505 |
536 |
506 media.on("play", function() { |
537 media.on("play", function() { |