").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('videoPlayer581').play();
setAspectRatio();
//var playButton = $(".mejs-overlay-play");
//if (playButton.size() != 0) {
// playButton.trigger("click");
//}
}
myPlayer = new MediaElementPlayer('videoPlayer581', {
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", "Secretary of Defense Lloyd J. Austin III and Charlene Austin send holiday greetings to Department of Defense service members and civilians.");
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 = "javascript:GetCCURL('https://www.defense.gov/Multimedia/Videos/?videoid=953069#DVIDSVideoPlayer581')";
if (nextURL != "") {
document.location = nextURL;
}
});
//$('#videoPlayer581').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",106);
}
var debouncedFn = debounce(calculateVideoHeight, 250);
debouncedFn();
});
// AUTOMATICALLY PLAY VIDEO IF ID PASSED OR VIDEO CLICKED
if (true) {
playVideo();
//document.getElementById('videoPlayer581').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": 581,
"TabId": 150,
"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");
}
}
});
}
Secretary and Mrs. Austin 2024 Holiday Message to the Department
Secretary of Defense Lloyd J. Austin III and Charlene Austin send holiday greetings to Department of Defense service members and civilians.