integration/js/tagplayer.js
changeset 81 a2befc2110c1
parent 76 4bdadca1cd5a
child 118 124f7745a3d6
equal deleted inserted replaced
80:46b897524cc4 81:a2befc2110c1
    14         currentSegment,
    14         currentSegment,
    15         currentMedia,
    15         currentMedia,
    16         globalTags = {},
    16         globalTags = {},
    17         seqCount,
    17         seqCount,
    18         mediasInDom = [],
    18         mediasInDom = [],
    19         MAX_LOADED_VIDEOS = 2;
    19         MAX_LOADED_VIDEOS = 2,
       
    20         iPad = /iPad/.test(navigator.userAgent);
    20         
    21         
    21     var ratio = 2.37;
    22     var ratio = 2.37;
    22 
    23 
    23     if (typeof window.localStorage !== "undefined" && window.localStorage.getItem !== "undefined") {
    24     if (typeof window.localStorage !== "undefined" && window.localStorage.getItem !== "undefined") {
    24         var resolution = window.localStorage.getItem("resolution") || "SD";
    25         var resolution = window.localStorage.getItem("resolution") || "SD";
   304                 m.show();
   305                 m.show();
   305             } else {
   306             } else {
   306                 m.hide();
   307                 m.hide();
   307             }
   308             }
   308         });
   309         });
   309         console.log("There are now",mediasInDom.length,'~',$("video").length,"<video>s in DOM");
       
   310         $("#title_sequence li").removeClass("here");
   310         $("#title_sequence li").removeClass("here");
   311         $("#title_sequence li[data-segment-index='" + n + "']").addClass("here");
   311         $("#title_sequence li[data-segment-index='" + n + "']").addClass("here");
   312         resizeSegmentDrag();
   312         resizeSegmentDrag();
   313         $("#duration").text(currentSegment.getDuration().toString());
   313         $("#duration").text(currentSegment.getDuration().toString());
   314         
   314         
   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() {
   543     
   574     
   544     $(".sdhdbtn").click(function() {
   575     $(".sdhdbtn").click(function() {
   545         var newres = $(this).attr("title");
   576         var newres = $(this).attr("title");
   546         if (resolution !== newres) {
   577         if (resolution !== newres) {
   547             window.localStorage.setItem("resolution", newres);
   578             window.localStorage.setItem("resolution", newres);
   548             document.location.reload();
   579              $(".sdhdgroup").removeClass(resolution).addClass(newres);
       
   580             resolution = newres;
       
   581             var t = currentMedia.getCurrentTime(),
       
   582                 mediaList = mediasInDom.slice();
       
   583             _(mediaList).each(function(m) {
       
   584                 m.removeFromDom();
       
   585                 m.addToDom();
       
   586             });
       
   587             currentMedia.show();
       
   588             currentMedia.setCurrentTime(t);
       
   589             currentMedia.play();
   549         }
   590         }
   550         return false;
   591         return false;
   551     });
   592     });
   552     
   593     
   553     $("#btnInfo, .lightBoxClose").click(function() {
   594     $("#btnInfo, .lightBoxClose").click(function() {