Playlist:
").appendTo(controls); mbOptions = $("#multiBandwidthOptions"); createMultiBandwithAnchors(currentVideoHeight); multiBandwidth.hover(function () { mbOptions.show(); }, function () { mbOptions.hide(); }); }; // BUILD MULTI-BANDWIDTH PLAYER TOOL function createMultiBandwithAnchors(videoHeight) { videoHeight = checkVideoHeight(videoHeight); updateMultiBandwithAnchors(videoFilesObj, videoHeight); } // CHECK IF CURRENT VIDEO HEIGHT EXISTS function checkVideoHeight(heightToCheck) { var index = videoFilesObj.length - 1; tempHeight = videoFilesObj[index].height; for (var i = 0; i < videoFilesObj.length; i++) { if (videoFilesObj[i].height == heightToCheck) { tempHeight = videoFilesObj[i].height; break; } } return tempHeight; } // SET PLAYER SOURCE AND PLAY VIDEO function setPlayerSource(src) { videoHasPlayed = false; // INIT createMultiBandwithAnchors(currentVideoHeight); // RECREATE THE ANCHORS var time = myPlayer.getCurrentTime(); // GET THE CURRENT TIME myPlayer.setSrc(src); myPlayer.load(); playVideo(); // SET THE TIMER TO THE CURRENT TIME SO IT WILL BE AVAILABLE WHEN THE PLAYER IS RELOADED if (time > 0) { restartTimer = time; } } // The container element is relatively positioned. MediaElement js creates an absolutely // positioned element within. Absolutely positioned items do not respect the containment // of parent relatively positioned elements. This ensures the heights are constrained. function calculateVideoHeight() { if (debug) console.log('DVIDSPlayer() > calculateVideoHeight()'); var playerHeight = $('.DVIDSVideoPlayerItem video').height(); if (debug) console.log('DVIDSPlayer() > calculateVideoHeight', playerHeight); if (playerHeight) { $('.DVIDSVideoPlayer .video-column, .DVIDSVideoPlayerItem, .DVIDSVideoPlayerItemPlaceHolder').css("min-height", playerHeight + 20); $('.DVIDSVideoPlayerItem .mejs__video, .DVIDSVideoPlayerItem video').css('height', playerHeight); } } function debounce(func, wait, immediate) { var timeout; return function () { var context = this, args = arguments; var later = function () { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; function setAspectRatio() { if (debug) console.log('DVIDSPlayer() > setAspectRatio()'); // for portrait aspect ratio, need to wait till video is playing, then redetect height var loopCount = 0; var mainLoopId = setInterval(function () { loopCount++; calculateVideoHeight(); if (loopCount > 10) { clearInterval(mainLoopId); } if (debug) console.log('DVIDSPlayer() > setAspectRatio() > setInterval Running'); }, 500); } function playVideo() { document.getElementById('videoPlayer20016').play(); setAspectRatio(); //var playButton = $(".mejs-overlay-play"); //if (playButton.size() != 0) { // playButton.trigger("click"); //} } myPlayer = new MediaElementPlayer('videoPlayer20016', { videoWidth: '100%', videoHeight: '100%', //enableAutosize: true, pluginPath: "/DesktopModules/SharedLibrary/Plugins/MediaElement4.2.9/", hls: { debug: false, capLevelToPlayerSize: true, capLevelOnFPSDrop: true, startLevel: -1, abrMaxWithRealBitrate: true }, features: ["playpause", "progress", "current", "duration", "tracks", "volume", "fullscreen"], success: function (mediaElement, domObject) { $(".DVPPlayerBackground .mejs__poster-img").attr("alt", "The 355th Wing’s mission is to RESCUE \u0026 ATTACK!\u003cbr /\u003eThe 355th Wing’s vision is a Lead Wing with lethal, agile and resilient Airmen.\u003cbr /\u003eThe 355th Wing’s priorities are respected, protected, connected, fight, fit and family."); mediaElement.addEventListener('playing', function (e) { if (defaultButton.length) { if (playEventButtonTriggered === false) { defaultButton.hide(); hoverButton.hide(); playEventButtonTriggered = true; } } if (playEventAlreadyTriggered === false) { DVIDSVideoAnalytics.track('play', analyticsParams); if(debug) { console.debug('DVIDSVideoAnalytics PLAY EVENT'); } playEventAlreadyTriggered = true; } }); mediaElement.addEventListener('play', function (e) { if ($(".mejs__controls").is(":hidden") ) $(".mejs__controls").show(); // if overlay exists, hide it if ($(".mejs__layer.video-overlay").length) $(".mejs__layer.video-overlay").hide(); setAspectRatio(); }); mediaElement.addEventListener('ended', function (e) { DVIDSVideoAnalytics.track('ended', analyticsParams); if(debug) { console.debug('DVIDSVideoAnalytics ENDED EVENT'); } //play next media var nextURL = ""; if (nextURL != "") { document.location = nextURL; } }); //$('#videoPlayer20016').css({'width': '100%', 'height':'100%'}); // EVENT LISTENER FOR WHEN VIDEO TIME HAS BEEN UPDATED mediaElement.addEventListener('timeupdate', function (e) { // IF VIDEO HAS NOT BEEN PLAYED AND SAVED POSITION IS GREATER THAN 0 if (!videoHasPlayed && restartTimer > 0) { // SET THE START TIME FROM THE RELATION IN SECONDS myPlayer.setCurrentTime(restartTimer); // SET THE VIDEO HAS PLAYED FLAG AND CLEAR THE TIMER // OTHERWISE KEEP CONTINUAL LOOP GOING BACK TO THIS TIME // THIS EVENT GETS CALLED AROUND EVERY 250MS videoHasPlayed = true; restartTimer = 0; } }, false); mediaElement.addEventListener('canplay', function (e) { CheckCaptions(); }, false); mediaElement.addEventListener('pause', function (e) { if (defaultButton.length) { defaultButton.removeAttr("style"); hoverButton.removeAttr("style"); playEventButtonTriggered = false; } }, false); mbOptions.delegate("a", "click", function () { var obj = $(this); if (obj.hasClass("chosenMBLink")) { return false; } else { mbOptions.find("a.chosenMBLink").removeClass("chosenMBLink"); obj.addClass("chosenMBLink"); currentVideoHeight = obj.html().substring(0, obj.html().length - 1); setPlayerSource(obj.attr("fileurl")); } mbOptions.hide(); return false; }); // ASSIGN CAPTIONS SELECTOR TO JQUERY OBJECT, SET CLICK DELEGATE AND TURN ON CAPTIONS IF PREVIOUSLY ENABLED captionsSelector = $("div.mejs-captions-selector"); captionsSelector.delegate("input:radio", "click", function () { var lang = this.value; if (lang == "none") { dvpCCEnabled = false; } else { dvpCCEnabled = true; } }); turnOnCaptionsIfEnabled(); } }); $window.on("resize", function () { if ($(".mejs__time-total.mejs__time-slider").attr("aria-valuemax") == "NaN") { $(".mejs__time-total.mejs__time-slider").attr("aria-valuemax",285); } var debouncedFn = debounce(calculateVideoHeight, 250); debouncedFn(); }); // AUTOMATICALLY PLAY VIDEO IF ID PASSED OR VIDEO CLICKED if (true) { playVideo(); //document.getElementById('videoPlayer20016').play(); } }); function updateMultiBandwithAnchors(files, videoHeight) { var mbOptions = $("#multiBandwidthOptions"); var multiBandwidthHTML = []; for (var i = 0; i < files.length; i++) { if (i == files.length - 1) { multiBandwidthHTML.unshift("" + files[i].height + "p"); } else { if (files[i].height != files[i+1].height) { multiBandwidthHTML.unshift("" + files[i].height + "p"); } } } multiBandwidthHTML.push("
"); mbOptions.html(multiBandwidthHTML.join("")); var mbAnchors = mbOptions.children("a"); for (i = 0; i < mbAnchors.length; i++) { if (mbAnchors.eq(i).html() == videoHeight + "p") { mbAnchors.eq(i).addClass("chosenMBLink"); } } mbOptions.css("height", 20 * mbAnchors.length); } function PlayAssetAJAX(id) { var baseUrl = $.ServicesFramework().getServiceRoot('DVIDSVideoPlayer'); $.ajax({ type: "GET", url: baseUrl + "Public/GetAsset?id=" + id, headers: { "ModuleId": 20016, "TabId": 6166, "RequestVerificationToken": $("input[name='__requestverificationtoken']").val() }, success: function (data) { // remove the poster so the initial poster doesn't display while switching videos. $(".DVPPlayerBackground .mejs__poster").css("background-image", ""); $(".DVPPlayerBackground .mejs__poster-img").removeAttr("src"); $(".DVPPlayerBackground video").removeAttr("poster"); // analytics playEventAlreadyTriggered = false; gaUrl = data.AnalyticsUrl; gaTitle = data.AnalyticsTitle; gaID = data.ID; // play through mediaelementjs const $tracks = $(`track.DVIDSCaptions`); if ($tracks.length > 0) { $tracks.attr('src', data.CaptionsUrl); } myPlayer.rebuildtracks(); myPlayer.setSrc(data.Video.HlsSrc); myPlayer.play(); updateMultiBandwithAnchors(data.Bandwidth, 700); }, error: function () { if(debug) { console.log("error loading asset"); } } }); } Video by Airman 1st Class Devlin Bishop, Tech. Sgt. Sergio Gamboa, Airman 1st Class Jhade Herrera, Capt. Mickel McGann, Staff Sgt. Nicholas Ross, Senior Airman William Turnbull, Senior Airman Vaughn Weber, Senior Airman Paige Weldon, Staff Sgt. Kristine Legate, Staff Sgt. Alex Stephens, Staff Sgt. Jacob Stephens
355th Wing mission, vision and priorities
355th Wing
May 31, 2023 | 4:45
The 355th Wing’s mission is to RESCUE & ATTACK!
The 355th Wing’s vision is a Lead Wing with lethal, agile and resilient Airmen.
The 355th Wing’s priorities are respected, protected, connected, fight, fit and family.
More
Tags
visionfamilypriorities355th WingLead Wing
More
Up Next
More Videos