Video Embed & Thumbnail Generator - Version 4.6.25

Version Description

  • May 28, 2019 =
  • Fixed bug that broke pop-up galleries when video title had a space in the name.
  • Fixed bug that re-shuffled random gallery order every time a new gallery page was loaded.
  • Fixed bug that disabled auto resolution switching when using the WordPress Default video player.
  • Removed the built-in WordPress Default video player size limit for better responsive sizing.
  • Reduced CPU load when responsive video resizing is enabled.
  • Now selectively enqueuing Video.js resolution selector JavaScript file.
  • Re-ordered resolution list so when original resolution is unknown, "Full" is at the top, enabled translation of the "Full" menu item and now automatically renaming it when video metadata is loaded.
  • Better activation procedure that doesn't generate errors and disables FFMPEG functions if FFMPEG is not found.
  • No longer turning on all video encode formats by default.
  • Fixed bug that couldn't automatically discover alternate formats of videos on other servers via https.
  • Fixed bug that broke tab switching on the settings page when other plugins modified the admin page.
  • Code changes to allow for future child formats that aren't videos.
Download this release

Release Info

Developer kylegilman
Plugin Icon 128x128 Video Embed & Thumbnail Generator
Version 4.6.25
Comparing to
See all releases

Code changes from version 4.6.24 to 4.6.25

css/kgvid_styles.css CHANGED
@@ -475,6 +475,10 @@ span.kgvid_gallery_pagination_arrow {
475
display: none;
476
}
477
478
.vjs-res-button:before {
479
font-family: VideoJs;
480
content: "\f110"; /* Gear icon */
475
display: none;
476
}
477
478
+ .vjs-res-button .vjs-menu li.vjs-menu-item {
479
+ text-transform: none;
480
+ }
481
+
482
.vjs-res-button:before {
483
font-family: VideoJs;
484
content: "\f110"; /* Gear icon */
js/kgvid_video_embed.js CHANGED
@@ -1,16 +1,5 @@
1
- jQuery('.kgvid_videodiv').each(function(){ //setup individual videos. WordPress Default has its own success callback
2
-
3
- var video_vars = jQuery(this).data('kgvid_video_vars');
4
-
5
- if ( video_vars.player_type == "Video.js" ) {
6
-
7
- kgvid_load_videojs(video_vars);
8
-
9
- }
10
- });
11
-
12
jQuery(document).ready(kgvid_document_ready());
13
- jQuery(window).load(kgvid_window_load());
14
15
function kgvid_document_ready() {
16
@@ -18,6 +7,12 @@ function kgvid_document_ready() {
18
19
var video_vars = jQuery(this).data('kgvid_video_vars');
20
21
if ( video_vars.player_type == "JWPlayer" ) {
22
var player_id = jQuery('#video_'+video_vars.id+'_div').children('div[id^="jwplayer"]').attr('id');
23
player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
@@ -316,7 +311,7 @@ function kgvid_load_videojs(video_vars) {
316
else {
317
videojs_options.fluid = false;
318
}
319
- if ( video_vars.width != undefined && video_vars.width.indexOf('%') === -1 && video_vars.height != undefined ) {
320
videojs_options.aspectRatio = video_vars.width + ':' + video_vars.height;
321
}
322
if ( video_vars.nativecontrolsfortouch == "true" ) {
@@ -326,6 +321,8 @@ function kgvid_load_videojs(video_vars) {
326
videojs_options.playbackRates = [0.5, 1, 1.25, 1.5, 2];
327
}
328
if ( video_vars.enable_resolutions_plugin == "true" ) {
329
330
if ( videojs.VERSION.split('.')[0] >= 5 ) {
331
@@ -436,7 +433,10 @@ function kgvid_setup_video(id) {
436
437
if ( video_vars.pauseothervideos == "true" && videojs.VERSION.split('.')[0] >= 5 ) {
438
jQuery.each(videojs.getPlayers(), function(otherPlayerId, otherPlayer) {
439
- if ( player.id() != otherPlayerId && !otherPlayer.paused() && !otherPlayer.autoplay() ) {
440
otherPlayer.pause();
441
}
442
});
@@ -541,6 +541,7 @@ function kgvid_setup_video(id) {
541
var mejs_id = jQuery('#video_'+id+'_div .mejs-container').attr('id');
542
var played = jQuery('#video_'+id+'_div').data("played") || "not played";
543
544
jQuery('#video_'+id+'_div .mejs-container').append(jQuery('#video_'+id+'_watermark'));
545
546
if ( played == "not played" ) { //only turn on the default captions on first load
@@ -562,7 +563,6 @@ function kgvid_setup_video(id) {
562
563
player.on('loadedmetadata', function() {
564
565
- var resolutions = player.availableRes;
566
var played = jQuery('#video_'+id+'_div').data("played") || "not played";
567
568
if ( video_vars.set_volume != "" ) { player[0].volume = video_vars.set_volume; }
@@ -719,9 +719,16 @@ function kgvid_setup_video(id) {
719
720
}
721
722
- if ( video_vars.resize == "true" || window.location.search.indexOf("kgvid_video_embed[enable]=true") !== -1 ) {
723
kgvid_resize_video(id);
724
- jQuery(window).resize( function(){ kgvid_resize_video(id) } );
725
}
726
727
if ( typeof jQuery.modal !== "undefined" && jQuery('#kgvid-simplemodal-container').length > 0 ) { jQuery.modal.setPosition(); }
@@ -780,7 +787,7 @@ function kgvid_resize_video(id) {
780
781
var player = eval('videojs.players.video_'+id);
782
if ( change_aspect ) { player.aspectRatio(Math.floor(set_width)+':'+Math.floor(set_height)); }
783
- player.width(set_width).height(set_height);
784
if ( set_width < 500 ) {
785
var scale = Math.round(100*set_width/500)/100;
786
jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').css('-webkit-transform','scale('+scale+')').css('-o-transform','scale('+scale+')').css('-ms-transform','scale('+scale+')').css('transform','scale('+scale+')');
@@ -828,6 +835,7 @@ function kgvid_resize_video(id) {
828
}
829
});
830
var current_resolution = parseInt(player.getCurrentRes());
831
if ( !isNaN(current_resolution) ) {
832
if ( video_vars.pixel_ratio == "true" && window.devicePixelRatio != undefined ) {
833
var pixel_ratio = window.devicePixelRatio;
@@ -863,9 +871,16 @@ function kgvid_resize_video(id) {
863
if ( video_vars.player_type == "WordPressDefault" ) {
864
865
if ( player.media.paused ) {
866
- jQuery(player.media).one('play', function() {
867
- player.changeRes(set_res+'p');
868
- });
869
}
870
else {
871
player.changeRes(set_res+'p');
1
jQuery(document).ready(kgvid_document_ready());
2
+ jQuery(window).on("load", kgvid_window_load);
3
4
function kgvid_document_ready() {
5
7
8
var video_vars = jQuery(this).data('kgvid_video_vars');
9
10
+ if ( video_vars.player_type == "Video.js" ) {
11
+
12
+ kgvid_load_videojs(video_vars);
13
+
14
+ }
15
+
16
if ( video_vars.player_type == "JWPlayer" ) {
17
var player_id = jQuery('#video_'+video_vars.id+'_div').children('div[id^="jwplayer"]').attr('id');
18
player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
311
else {
312
videojs_options.fluid = false;
313
}
314
+ if ( videojs_options.fluid == true && video_vars.width != undefined && video_vars.width.indexOf('%') === -1 && video_vars.height != undefined ) {
315
videojs_options.aspectRatio = video_vars.width + ':' + video_vars.height;
316
}
317
if ( video_vars.nativecontrolsfortouch == "true" ) {
321
videojs_options.playbackRates = [0.5, 1, 1.25, 1.5, 2];
322
}
323
if ( video_vars.enable_resolutions_plugin == "true" ) {
324
+
325
+ kgvid_load_video_quality_selector(); //defined in video-quality-selector.js
326
327
if ( videojs.VERSION.split('.')[0] >= 5 ) {
328
433
434
if ( video_vars.pauseothervideos == "true" && videojs.VERSION.split('.')[0] >= 5 ) {
435
jQuery.each(videojs.getPlayers(), function(otherPlayerId, otherPlayer) {
436
+ if ( player.id() != otherPlayerId
437
+ && otherPlayer != null
438
+ && !otherPlayer.paused()
439
+ && !otherPlayer.autoplay() ) {
440
otherPlayer.pause();
441
}
442
});
541
var mejs_id = jQuery('#video_'+id+'_div .mejs-container').attr('id');
542
var played = jQuery('#video_'+id+'_div').data("played") || "not played";
543
544
+ jQuery('.wp-video').removeAttr('style');
545
jQuery('#video_'+id+'_div .mejs-container').append(jQuery('#video_'+id+'_watermark'));
546
547
if ( played == "not played" ) { //only turn on the default captions on first load
563
564
player.on('loadedmetadata', function() {
565
566
var played = jQuery('#video_'+id+'_div').data("played") || "not played";
567
568
if ( video_vars.set_volume != "" ) { player[0].volume = video_vars.set_volume; }
719
720
}
721
722
+ if ( video_vars.resize == "true"
723
+ || video_vars.auto_res == "automatic"
724
+ || window.location.search.indexOf("kgvid_video_embed[enable]=true") !== -1
725
+ ) {
726
kgvid_resize_video(id);
727
+ var resizeId;
728
+ jQuery(window).resize( function(){
729
+ clearTimeout(resizeId);
730
+ resizeId = setTimeout(function(){kgvid_resize_video(id)}, 500);
731
+ } );
732
}
733
734
if ( typeof jQuery.modal !== "undefined" && jQuery('#kgvid-simplemodal-container').length > 0 ) { jQuery.modal.setPosition(); }
787
788
var player = eval('videojs.players.video_'+id);
789
if ( change_aspect ) { player.aspectRatio(Math.floor(set_width)+':'+Math.floor(set_height)); }
790
+
791
if ( set_width < 500 ) {
792
var scale = Math.round(100*set_width/500)/100;
793
jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').css('-webkit-transform','scale('+scale+')').css('-o-transform','scale('+scale+')').css('-ms-transform','scale('+scale+')').css('transform','scale('+scale+')');
835
}
836
});
837
var current_resolution = parseInt(player.getCurrentRes());
838
+
839
if ( !isNaN(current_resolution) ) {
840
if ( video_vars.pixel_ratio == "true" && window.devicePixelRatio != undefined ) {
841
var pixel_ratio = window.devicePixelRatio;
871
if ( video_vars.player_type == "WordPressDefault" ) {
872
873
if ( player.media.paused ) {
874
+ if ( player.media.preload == 'none' ) {
875
+ jQuery(player.media).one('canplay', function() {
876
+ player.changeRes(set_res+'p');
877
+ });
878
+ }
879
+ else {
880
+ jQuery(player.media).one('play', function() {
881
+ player.changeRes(set_res+'p');
882
+ });
883
+ }
884
}
885
else {
886
player.changeRes(set_res+'p');
js/kgvid_video_plugin_admin.js CHANGED
@@ -1406,17 +1406,12 @@ function kgvid_switch_settings_tab(tab) {
1406
jQuery("#general_tab").removeClass("nav-tab-active");
1407
jQuery("#encoding_tab").addClass("nav-tab-active");
1408
1409
- if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1410
- jQuery('h2:eq(1), h2:eq(3)').hide();
1411
- jQuery('h2:eq(4)').show();
1412
- }
1413
- else { // before WP version 4.4
1414
- jQuery('h3:eq(0), h3:eq(2)').hide();
1415
- jQuery('h3:eq(3)').show();
1416
- }
1417
- jQuery('table:eq(0), table:eq(1), table:eq(2), table:eq(3)').hide();
1418
jQuery(".kgvid_setting_nearvid").hide();
1419
- jQuery('table:eq(4)').show();
1420
1421
if ( jQuery('#app_path').data('ffmpeg_exists') == "on" && jQuery('#ffmpeg_output').html() == "" ) {
1422
jQuery('#ffmpeg_output').html('Running test...');
@@ -1445,18 +1440,14 @@ function kgvid_switch_settings_tab(tab) {
1445
1446
jQuery("#general_tab").addClass("nav-tab-active");
1447
jQuery("#encoding_tab").removeClass("nav-tab-active");
1448
- if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1449
- jQuery('h2:eq(1), h2:eq(3)').show();
1450
- jQuery('h2:eq(4)').hide();
1451
- }
1452
- else { // before WP version 4.4
1453
- jQuery('h3:eq(0), h3:eq(2)').show();
1454
- jQuery('h3:eq(3)').hide();
1455
- }
1456
- jQuery('table:eq(0), table:eq(1), table:eq(3)').show();
1457
jQuery(".kgvid_setting_nearvid").show();
1458
1459
- jQuery('table:eq(4)').hide();
1460
1461
}
1462
@@ -1473,25 +1464,13 @@ function kgvid_hide_plugin_settings() {
1473
var encoding_tab = jQuery('#encoding_tab').hasClass('nav-tab-active');
1474
1475
if ( playback_option != "Strobe Media Playback" || encoding_tab ) {
1476
- jQuery('table:eq(2)').hide();
1477
- if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1478
- jQuery('h2:eq(2)').hide();
1479
- }
1480
- else { // before WP version 4.4
1481
- jQuery('h3:eq(1)').hide();
1482
- }
1483
}
1484
1485
if ( general_tab ) {
1486
1487
if ( playback_option == "Strobe Media Playback" ) {
1488
- jQuery('table:eq(2)').show();
1489
- if ( jQuery('h3').length < 1 ) { // WP version 4.4 or later
1490
- jQuery('h2:eq(2)').show();
1491
- }
1492
- else {
1493
- jQuery('h3:eq(1)').show();
1494
- }
1495
}
1496
1497
if ( playback_option == "WordPress Default" || playback_option == "JW Player" ) {
1406
jQuery("#general_tab").removeClass("nav-tab-active");
1407
jQuery("#encoding_tab").addClass("nav-tab-active");
1408
1409
+ jQuery('#header_kgvid_video_embed_playback_settings, #header_kgvid_video_embed_plugin_settings').hide();
1410
+ jQuery('#header_kgvid_video_embed_encode_settings').show();
1411
+
1412
+ jQuery('#table_kgvid_video_embed_embed_method, #table_kgvid_video_embed_playback_settings, #table_kgvid_video_embed_flash_settings, #table_kgvid_video_embed_plugin_settings').hide();
1413
jQuery(".kgvid_setting_nearvid").hide();
1414
+ jQuery('#table_kgvid_video_embed_encode_settings').show();
1415
1416
if ( jQuery('#app_path').data('ffmpeg_exists') == "on" && jQuery('#ffmpeg_output').html() == "" ) {
1417
jQuery('#ffmpeg_output').html('Running test...');
1440
1441
jQuery("#general_tab").addClass("nav-tab-active");
1442
jQuery("#encoding_tab").removeClass("nav-tab-active");
1443
+
1444
+ jQuery('#header_kgvid_video_embed_playback_settings, #header_kgvid_video_embed_plugin_settings').show();
1445
+ jQuery('#header_kgvid_video_embed_encode_settings').hide();
1446
+
1447
+ jQuery('#table_kgvid_video_embed_embed_method, #table_kgvid_video_embed_playback_settings, #table_kgvid_video_embed_flash_settings, #table_kgvid_video_embed_plugin_settings').show();
1448
jQuery(".kgvid_setting_nearvid").show();
1449
1450
+ jQuery('#table_kgvid_video_embed_encode_settings').hide();
1451
1452
}
1453
1464
var encoding_tab = jQuery('#encoding_tab').hasClass('nav-tab-active');
1465
1466
if ( playback_option != "Strobe Media Playback" || encoding_tab ) {
1467
+ jQuery('#header_kgvid_video_embed_flash_settings, #table_kgvid_video_embed_flash_settings').hide();
1468
}
1469
1470
if ( general_tab ) {
1471
1472
if ( playback_option == "Strobe Media Playback" ) {
1473
+ jQuery('#header_kgvid_video_embed_flash_settings, #table_kgvid_video_embed_flash_settings').show();
1474
}
1475
1476
if ( playback_option == "WordPress Default" || playback_option == "JW Player" ) {
js/mejs-source-chooser.js CHANGED
@@ -12,7 +12,7 @@
12
'use strict';
13
14
Object.assign(mejs.MepDefaults, {
15
- sourcechooserText: null
16
});
17
18
Object.assign(MediaElementPlayer.prototype, {
@@ -45,10 +45,22 @@ Object.assign(MediaElementPlayer.prototype, {
45
46
t.addControlElement(player.sourcechooserButton, 'sourcechooser');
47
48
for (var _i = 0, _total = sources.length; _i < _total; _i++) {
49
var src = sources[_i];
50
if (src.type !== undefined && typeof media.canPlayType === 'function') {
51
player.addSourceButton(src.src, src.dataset.res, src.type, media.src === src.src);
52
}
53
}
54
@@ -105,65 +117,10 @@ Object.assign(MediaElementPlayer.prototype, {
105
for (var _i2 = 0, _total2 = selectorLIs.length; _i2 < _total2; _i2++) {
106
selectorLIs[_i2].addEventListener('click', function () {
107
var radio = this.querySelectorAll('input[type=radio]')[0];
108
- radio.setAttribute('aria-selected', true);
109
- radio.checked = true;
110
- this.className = 'sourcechooser-selected';
111
-
112
- var otherRadios = this.closest('.' + t.options.classPrefix + 'sourcechooser-selector').querySelectorAll('input[type=radio]');
113
-
114
- for (var j = 0, radioTotal = otherRadios.length; j < radioTotal; j++) {
115
- if (otherRadios[j] !== radio) {
116
- otherRadios[j].setAttribute('aria-selected', 'false');
117
- otherRadios[j].removeAttribute('checked');
118
- otherRadios[j].parentElement.className = '';
119
- }
120
- }
121
-
122
- var src = radio.value;
123
-
124
- if (media.getSrc() !== src) {
125
- var currentTime = media.currentTime;
126
-
127
- var paused = media.paused,
128
- canPlayAfterSourceSwitchHandler = function canPlayAfterSourceSwitchHandler() {
129
- if (!paused) {
130
- media.setCurrentTime(currentTime);
131
- media.play();
132
- }
133
- media.removeEventListener('canplay', canPlayAfterSourceSwitchHandler);
134
- };
135
-
136
- media.pause();
137
-
138
- if ( currentTime != 0 ) {
139
- var video = jQuery(media).children('video')[0];
140
- var canvas = document.createElement("canvas");
141
- canvas.className = 'kgvid_temp_thumb';
142
- canvas.width = ( video.videoWidth > video.videoHeight ) ? video.offsetWidth : video.videoWidth/video.videoHeight*video.offsetHeight;
143
- canvas.height = ( video.videoWidth > video.videoHeight ) ? video.videoHeight/video.videoWidth*video.offsetWidth : video.offsetHeight;
144
- var topOffset = Math.round((video.offsetHeight - canvas.height)/2);
145
- if (topOffset > 2) {
146
- canvas.setAttribute('style', 'top:' + topOffset + 'px;');
147
- }
148
- var leftOffset = Math.round((video.offsetWidth - canvas.width)/2);
149
- if (leftOffset > 2) {
150
- canvas.setAttribute('style', 'left:' + leftOffset + 'px;');
151
- }
152
- var context = canvas.getContext('2d');
153
- context.fillRect(0, 0, canvas.width, canvas.height);
154
- context.drawImage(video, 0, 0, canvas.width, canvas.height);
155
- jQuery('#'+media.id).parents('.mejs-mediaelement').append(canvas);
156
-
157
- jQuery(media).one( 'seeked', function() {
158
- jQuery(canvas).remove();
159
- });
160
- }
161
-
162
- media.setSrc(src);
163
- media.load();
164
- media.addEventListener('canplay', canPlayAfterSourceSwitchHandler);
165
-
166
- }
167
});
168
}
169
@@ -183,7 +140,7 @@ Object.assign(MediaElementPlayer.prototype, {
183
}
184
type = type.split('/')[1];
185
186
- t.sourcechooserButton.querySelector('ul').innerHTML += '<li' + (isCurrent ? ' class="sourcechooser-selected"' : '') + '>' + ('<input type="radio" name="' + t.id + '_sourcechooser" id="' + t.id + '_sourcechooser_' + label + type + '" ') + ('role="menuitemradio" value="' + src + '" ' + (isCurrent ? 'checked="checked"' : '') + ' aria-selected="' + isCurrent + '"/>') + ('<label for="' + t.id + '_sourcechooser_' + label + type + '" aria-hidden="true">' + label + '</label>') + '</li>';
187
188
},
189
hideSourcechooserSelector: function hideSourcechooserSelector() {
@@ -221,6 +178,93 @@ Object.assign(MediaElementPlayer.prototype, {
221
for (var i = 0, total = radios.length; i < total; i++) {
222
radios[i].setAttribute('tabindex', '0');
223
}
224
}
225
});
226
12
'use strict';
13
14
Object.assign(mejs.MepDefaults, {
15
+ sourcechooserText: kgvidL10n_frontend.quality
16
});
17
18
Object.assign(MediaElementPlayer.prototype, {
45
46
t.addControlElement(player.sourcechooserButton, 'sourcechooser');
47
48
+ player.availableRes = new Object();
49
+
50
for (var _i = 0, _total = sources.length; _i < _total; _i++) {
51
var src = sources[_i];
52
if (src.type !== undefined && typeof media.canPlayType === 'function') {
53
player.addSourceButton(src.src, src.dataset.res, src.type, media.src === src.src);
54
+ player.availableRes[src.dataset.res] = src.src;
55
+
56
+ if ( src.dataset.res == kgvidL10n_frontend.fullres ) {
57
+ media.addEventListener('loadedmetadata', function(){
58
+ if ( player.media.originalNode.videoHeight != NaN ) {
59
+ jQuery('.mejs-sourcechooser-button label:contains('+kgvidL10n_frontend.fullres+')').html(media.originalNode.videoHeight+'p');
60
+ }
61
+ });
62
+ }
63
+
64
}
65
}
66
117
for (var _i2 = 0, _total2 = selectorLIs.length; _i2 < _total2; _i2++) {
118
selectorLIs[_i2].addEventListener('click', function () {
119
var radio = this.querySelectorAll('input[type=radio]')[0];
120
+ var target_res = radio.value;
121
+ if (t.getCurrentRes() !== target_res) {
122
+ t.changeRes(target_res);
123
+ }
124
});
125
}
126
140
}
141
type = type.split('/')[1];
142
143
+ t.sourcechooserButton.querySelector('ul').innerHTML += '<li' + (isCurrent ? ' class="sourcechooser-selected"' : '') + '>' + ('<input type="radio" name="' + t.id + '_sourcechooser" id="' + t.id + '_sourcechooser_' + label + '" ') + ('role="menuitemradio" value="' + label + '" ' + (isCurrent ? 'checked="checked"' : '') + ' aria-selected="' + isCurrent + '"/>') + ('<label for="' + t.id + '_sourcechooser_' + label + '" aria-hidden="true">' + label + '</label>') + '</li>';
144
145
},
146
hideSourcechooserSelector: function hideSourcechooserSelector() {
178
for (var i = 0, total = radios.length; i < total; i++) {
179
radios[i].setAttribute('tabindex', '0');
180
}
181
+ },
182
+ getCurrentRes() {
183
+
184
+ if ( typeof this.currentRes !== 'undefined' ) {
185
+
186
+ return this.currentRes;
187
+
188
+ } else {
189
+
190
+ try {
191
+
192
+ return this.node.children[0].dataset.res;
193
+
194
+ } catch(e) {
195
+
196
+ return '';
197
+ }
198
+ }
199
+ },
200
+ changeRes(target_res) {
201
+
202
+ var currentRes = this.getCurrentRes();
203
+
204
+ if ( currentRes == target_res
205
+ || ! this.availableRes
206
+ || ! this.availableRes[target_res] ) { return; }
207
+
208
+ var media = this.media;
209
+ var src = this.availableRes[target_res];
210
+ var currentTime = media.currentTime;
211
+ var paused = media.paused;
212
+
213
+ var radio = document.querySelectorAll('#' + this.id + '_sourcechooser_' + target_res)[0];
214
+ radio.setAttribute('aria-selected', true);
215
+ radio.checked = true;
216
+ radio.parentElement.className = 'sourcechooser-selected';
217
+
218
+ var otherRadios = radio.parentElement.closest('.' + this.options.classPrefix + 'sourcechooser-selector').querySelectorAll('input[type=radio]');
219
+
220
+ for (var j = 0, radioTotal = otherRadios.length; j < radioTotal; j++) {
221
+ if (otherRadios[j] !== radio) {
222
+ otherRadios[j].setAttribute('aria-selected', 'false');
223
+ otherRadios[j].removeAttribute('checked');
224
+ otherRadios[j].parentElement.className = '';
225
+ }
226
+ }
227
+
228
+ var canPlayAfterSourceSwitchHandler = function(e) {
229
+ media.setCurrentTime(currentTime);
230
+ if (!paused) {
231
+ media.play();
232
+ }
233
+ media.removeEventListener('canplay', canPlayAfterSourceSwitchHandler);
234
+ }
235
+ ;
236
+
237
+ media.pause();
238
+
239
+ if ( currentTime != 0 ) {
240
+ var video = jQuery(media).children('video')[0];
241
+ var canvas = document.createElement("canvas");
242
+ canvas.className = 'kgvid_temp_thumb';
243
+ canvas.width = ( video.videoWidth > video.videoHeight ) ? video.offsetWidth : video.videoWidth/video.videoHeight*video.offsetHeight;
244
+ canvas.height = ( video.videoWidth > video.videoHeight ) ? video.videoHeight/video.videoWidth*video.offsetWidth : video.offsetHeight;
245
+ var topOffset = Math.round((video.offsetHeight - canvas.height)/2);
246
+ if (topOffset > 2) {
247
+ canvas.setAttribute('style', 'top:' + topOffset + 'px;');
248
+ }
249
+ var leftOffset = Math.round((video.offsetWidth - canvas.width)/2);
250
+ if (leftOffset > 2) {
251
+ canvas.setAttribute('style', 'left:' + leftOffset + 'px;');
252
+ }
253
+ var context = canvas.getContext('2d');
254
+ context.fillRect(0, 0, canvas.width, canvas.height);
255
+ context.drawImage(video, 0, 0, canvas.width, canvas.height);
256
+ jQuery('#'+media.id).parents('.mejs-mediaelement').append(canvas);
257
+
258
+ jQuery(media).one( 'seeked', function() {
259
+ jQuery(canvas).remove();
260
+ });
261
+ }
262
+
263
+ media.setSrc(src);
264
+ media.load();
265
+ this.currentRes = target_res;
266
+ media.addEventListener('canplay', canPlayAfterSourceSwitchHandler);
267
+
268
}
269
});
270
readme.txt CHANGED
@@ -3,8 +3,9 @@ Contributors: kylegilman
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kylegilman@gmail.com&item_name=Video%20Embed%20And%20Thumbnail%20Generator%20Plugin%20Donation
4
Tags: video, video player, video gallery, video thumbnail, ffmpeg, resolution
5
Requires at least: 4.4
6
- Tested up to: 5.1
7
- Stable tag: 4.6.24
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
@@ -248,6 +249,20 @@ Enter the username & password in the plugin settings "FFMPEG Settings" tab, or u
248
249
== Changelog ==
250
251
= 4.6.24 - April 1, 2019 =
252
* Improved method for assigning Google Analytics Event labels.
253
3
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=kylegilman@gmail.com&item_name=Video%20Embed%20And%20Thumbnail%20Generator%20Plugin%20Donation
4
Tags: video, video player, video gallery, video thumbnail, ffmpeg, resolution
5
Requires at least: 4.4
6
+ Tested up to: 5.2
7
+ Requires PHP: 5.6.0
8
+ Stable tag: 4.6.25
9
License: GPLv2 or later
10
License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
249
250
== Changelog ==
251
252
+ = 4.6.25 - May 28, 2019 =
253
+ * Fixed bug that broke pop-up galleries when video title had a space in the name.
254
+ * Fixed bug that re-shuffled random gallery order every time a new gallery page was loaded.
255
+ * Fixed bug that disabled auto resolution switching when using the WordPress Default video player.
256
+ * Removed the built-in WordPress Default video player size limit for better responsive sizing.
257
+ * Reduced CPU load when responsive video resizing is enabled.
258
+ * Now selectively enqueuing Video.js resolution selector JavaScript file.
259
+ * Re-ordered resolution list so when original resolution is unknown, "Full" is at the top, enabled translation of the "Full" menu item and now automatically renaming it when video metadata is loaded.
260
+ * Better activation procedure that doesn't generate errors and disables FFMPEG functions if FFMPEG is not found.
261
+ * No longer turning on all video encode formats by default.
262
+ * Fixed bug that couldn't automatically discover alternate formats of videos on other servers via https.
263
+ * Fixed bug that broke tab switching on the settings page when other plugins modified the admin page.
264
+ * Code changes to allow for future child formats that aren't videos.
265
+
266
= 4.6.24 - April 1, 2019 =
267
* Improved method for assigning Google Analytics Event labels.
268
video-embed-thumbnail-generator.php CHANGED
@@ -3,7 +3,7 @@
3
Plugin Name: Video Embed & Thumbnail Generator
4
Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
5
Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
6
- Version: 4.6.24
7
Author: Kyle Gilman
8
Author URI: http://www.kylegilman.net/
9
Text Domain: video-embed-thumbnail-generator
@@ -60,7 +60,7 @@ function kgvid_default_options_fn() {
60
$edit_others_capable = kgvid_check_if_capable('edit_others_posts');
61
62
$options = array(
63
- "version" => '4.6.24',
64
"embed_method" => "Video.js",
65
"jw_player_id" => "",
66
"template" => false,
@@ -192,10 +192,9 @@ function kgvid_default_options_fn() {
192
193
$video_formats = kgvid_video_formats();
194
foreach ($video_formats as $format => $format_stats ) {
195
- if (array_key_exists('default_encode', $format_stats)) {
196
$options['encode'][$format] = $format_stats['default_encode'];
197
}
198
- else { $options['encode'][$format] = false; }
199
}
200
201
return $options;
@@ -409,7 +408,7 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true, $
409
$video_formats = array(
410
"fullres" => array(
411
"name" => __("same resolution H.264", 'video-embed-thumbnail-generator'),
412
- "label" => __('Full', 'video-embed-thumbnail-generator'),
413
"width" => INF,
414
"height" => INF,
415
"type" => "h264",
@@ -568,18 +567,22 @@ function kgvid_video_formats( $return_replace = false, $return_customs = true, $
568
unset($video_formats['custom_'.$options['custom_format']['format']]);
569
}
570
571
- $video_formats['fullres'] = array(
572
- 'name' => sprintf( __("Replace original with %s", 'video-embed-thumbnail-generator'), $video_formats[$options['replace_format']]['name'] ),
573
- 'width' => $video_formats[$options['replace_format']]['width'],
574
- 'height' => $video_formats[$options['replace_format']]['height'],
575
- 'type' => $video_formats[$options['replace_format']]['type'],
576
- 'extension' => $video_formats[$options['replace_format']]['extension'],
577
- 'mime' => $video_formats[$options['replace_format']]['mime'],
578
- 'suffix' => '-fullres.'.$video_formats[$options['replace_format']]['extension'],
579
- 'vcodec' => $video_formats[$options['replace_format']]['vcodec']
580
- );
581
582
- if ( !$return_replace && $options['replace_format'] != 'fullres' ) { unset($video_formats[$options['replace_format']]); }
583
584
return apply_filters('kgvid_video_formats', $video_formats, $return_replace, $return_customs, $return_dontembeds);
585
@@ -598,7 +601,7 @@ function kgvid_register_default_options_fn() { //add default values for options
598
$options['ffmpeg_exists'] = 'on';
599
$options['app_path'] = $ffmpeg_check['app_path'];
600
}
601
- else { $options['ffmpeg_exists'] = false; }
602
603
update_option('kgvid_video_embed_options', $options);
604
@@ -885,8 +888,19 @@ function kgvid_is_video($post) {
885
}
886
887
function kgvid_url_exists($url) {
888
- $hdrs = @get_headers($url);
889
- return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*#x2F;',$hdrs[0]) : false;
890
}
891
892
function kgvid_url_mime_type($url, $post_id = false) {
@@ -1245,8 +1259,7 @@ function kgvid_encodevideo_info($movieurl, $postID) {
1245
$args = array(
1246
'numberposts' => '-1',
1247
'post_parent' => $postID,
1248
- 'post_type' => 'attachment',
1249
- 'post_mime_type' => 'video'
1250
);
1251
}
1252
elseif ($moviefile == '' || !is_file($moviefile) ) {
@@ -1271,8 +1284,7 @@ function kgvid_encodevideo_info($movieurl, $postID) {
1271
'numberposts' => '-1',
1272
'post_type' => 'attachment',
1273
'meta_key' => '_kgflashmediaplayer-externalurl',
1274
- 'meta_value' => $sanitized_url['movieurl'],
1275
- 'post_mime_type' => 'video'
1276
);
1277
1278
}
@@ -1384,7 +1396,7 @@ function kgvid_get_video_dimensions($video = false) {
1384
$ffmpegPath = $options['app_path']."/".$options['video_app'];
1385
$movie_info = array();
1386
1387
- if ( strpos($video, 'http://') === 0 ) { //if it's a URL
1388
$video_id = kgvid_url_to_id($video);
1389
if ( $video_id ) {
1390
$video_path = get_attached_file($video_id);
@@ -1396,6 +1408,7 @@ function kgvid_get_video_dimensions($video = false) {
1396
}
1397
}
1398
}
1399
$old_locale = kgvid_set_locale($video); //fixes UTF-8 encoding problems
1400
$command = escapeshellcmd($ffmpegPath . ' -i "' . $video . '"');
1401
$command = $command.' 2>&1';
@@ -1413,6 +1426,7 @@ function kgvid_get_video_dimensions($video = false) {
1413
$movie_info['worked'] = true;
1414
$movie_info['width'] = $regs [1] ? $regs [1] : null;
1415
$movie_info['height'] = $regs [2] ? $regs [2] : null;
1416
preg_match('/Duration: (.*?),/', $output, $matches);
1417
$duration = $matches[1];
1418
$movie_duration_hours = intval(substr($duration, -11, 2));
@@ -1434,15 +1448,20 @@ function kgvid_get_video_dimensions($video = false) {
1434
$old_locale = kgvid_set_locale($video); //fixes UTF-8 encoding problems
1435
$command = escapeshellcmd($ffmpegPath . ' -i "' . $video . '" -codecs');
1436
$command = $command.' 2>&1';
1437
- exec ( $command, $output );
1438
$restore_locale = setlocale(LC_CTYPE, $old_locale);
1439
- $output = implode("\n", $output);
1440
- $configuration = array();
1441
- $video_lib_array = array('libtheora', 'libvorbis', 'libvpx', 'libvpx-vp9', 'libx264');
1442
$aac_array = kgvid_aac_encoders();
1443
$lib_list = array_merge($video_lib_array, $aac_array);
1444
foreach ($lib_list as $lib) {
1445
- if ( strpos($output, $lib) !== false ) { $movie_info['configuration'][$lib] = "true"; }
1446
else { $movie_info['configuration'][$lib] = "false"; }
1447
}
1448
@@ -1451,7 +1470,7 @@ function kgvid_get_video_dimensions($video = false) {
1451
$movie_info['worked'] = false;
1452
}
1453
1454
- return apply_filters('kgvid_get_video_dimensions', $movie_info, $video);
1455
}
1456
1457
function kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $id) {
@@ -1641,10 +1660,9 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1641
$options = kgvid_get_options();
1642
$libraries = $movie_info['configuration'];
1643
$encode_string = strtoupper($options['video_app'])." not found";
1644
1645
- if ( $options['ffmpeg_exists'] == "on" ) {
1646
-
1647
- $video_formats = kgvid_video_formats();
1648
1649
if ( $options['video_app'] == "avconv" || $options['video_bitrate_flag'] != "on" ) {
1650
$video_bitrate_flag = "b:v";
@@ -1672,8 +1690,15 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1672
$options['vp9_CRF'] = round((-0.000002554 * $width * $height) + 35); //formula to generate close to Google-recommended CRFs https://developers.google.com/media/vp9/settings/vod/
1673
}
1674
$crf_flag = "crf";
1675
- if ( $video_formats[$format]['type'] == 'ogv' ) { $crf_flag = $qscale_flag; } //ogg doesn't do CRF
1676
- $rate_control_flag = " -".$crf_flag." ".$options[$crf_option];
1677
}
1678
else {
1679
if ( $video_formats[$format]['type'] == 'vp9' ) {
@@ -1749,12 +1774,14 @@ function kgvid_generate_encode_string($input, $output, $movie_info, $format, $wi
1749
$encode_string[2] = $watermark_strings['filter'];
1750
$encode_string[3] = ' "'.$output.'"';
1751
1752
- $options['encode_string'] = $encode_string;
1753
- update_option('kgvid_video_embed_options', $options);
1754
1755
} //if FFMPEG is found
1756
1757
- return apply_filters('kgvid_generate_encode_string', $encode_string, $input, $output, $movie_info, $format, $width, $height, $rotate);
1758
1759
}
1760
@@ -1817,10 +1844,37 @@ function kgvid_video_embed_enqueue_styles() {
1817
1818
$options = kgvid_get_options();
1819
1820
//Video.js styles
1821
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1822
wp_enqueue_style( 'video-js', plugins_url("", __FILE__).'/video-js/video-js.css', '', '5.20.5' );
1823
if ( $options['js_skin'] == 'kg-video-js-skin' ){ wp_enqueue_style( 'video-js-kg-skin', plugins_url("", __FILE__).'/video-js/kg-video-js-skin.css', '', $options['version'] ); }
1824
}
1825
1826
//plugin-related frontend styles, requires dashicons
@@ -1829,7 +1883,7 @@ function kgvid_video_embed_enqueue_styles() {
1829
if ( $options['alwaysloadscripts'] == 'on' ) {
1830
kgvid_enqueue_shortcode_scripts();
1831
wp_enqueue_script( 'simplemodal', plugins_url("/js/jquery.simplemodal.1.4.5.min.js", __FILE__), '', '1.4.5', true );
1832
- }
1833
1834
}
1835
add_action('wp_enqueue_scripts', 'kgvid_video_embed_enqueue_styles', 12);
@@ -2161,9 +2215,14 @@ function kgvid_enqueue_shortcode_scripts() {
2161
$options = kgvid_get_options();
2162
2163
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
2164
- wp_enqueue_script( 'video-quality-selector', plugins_url("", __FILE__).'/video-js/video-quality-selector.js', array('video-js'), $options['version'], true );
2165
- wp_enqueue_script( 'video-js', plugins_url("", __FILE__).'/video-js/video.js', '', '5.20.5', true );
2166
add_action('wp_footer', 'kgvid_print_videojs_footer', 99);
2167
}
2168
2169
if ( $options['embed_method'] == "Strobe Media Playback" ) {
@@ -2172,7 +2231,7 @@ function kgvid_enqueue_shortcode_scripts() {
2172
2173
if ( !wp_script_is('kgvid_video_embed', 'enqueued') ) {
2174
2175
- wp_enqueue_script( 'kgvid_video_embed', plugins_url("/js/kgvid_video_embed.js", __FILE__), array('jquery'), $options['version'], true );
2176
2177
wp_localize_script( 'kgvid_video_embed', 'kgvidL10n_frontend', array(
2178
'ajaxurl' => admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ),
@@ -2181,7 +2240,8 @@ function kgvid_enqueue_shortcode_scripts() {
2181
'completeview' => _x("Complete View", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
2182
'next' => _x("Next", 'button text to play next video', 'video-embed-thumbnail-generator'),
2183
'previous' => _x("Previous", 'button text to play previous video', 'video-embed-thumbnail-generator'),
2184
- 'quality' => _x("Quality", 'text above list of video resolutions', 'video-embed-thumbnail-generator')
2185
) );
2186
2187
}
@@ -2303,8 +2363,7 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
2303
else { $post_id = 1; }
2304
$content = '';
2305
$popup_code = kgvid_single_video_code($popup_atts, $atts, $content, $post_id);
2306
-
2307
- preg_match('/data-kgvid_video_vars=.*? /', $popup_code, $video_vars);
2308
$popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
2309
2310
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
@@ -2312,7 +2371,7 @@ function kgvid_gallery_page($page_number, $query_atts, $last_video_id = 0) {
2312
$options['js_skin'] = $query_atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
2313
}
2314
2315
- $code .= '<div class="kgvid_video_gallery_thumb" onclick="kgvid_SetVideo(\'kgvid_'.strval($kgvid_video_id-1).'\')" id="kgvid_video_gallery_thumb_kgvid_'.strval($kgvid_video_id-1).'" data-id="kgvid_'.strval($kgvid_video_id-1).'" data-width="'.esc_attr($dimensions['width']).'" data-height="'.esc_attr($dimensions['height']).'" data-meta="'.esc_attr($below_video).'" data-gallery_end="'.esc_attr($query_atts['gallery_end']).'" data-popupcode="'.esc_html($popup_code).'" '.$video_vars[0].'" style="width:'.$query_atts["gallery_thumb"].'px;';
2316
2317
if ( $query_atts['gallery_thumb_aspect'] == "true" ) {
2318
$code .= ' height:'.round($options["height"]/$options["width"]*$query_atts["gallery_thumb"]).'px;';
@@ -2557,7 +2616,7 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2557
}
2558
2559
unset($video_formats['fullres']);
2560
- $video_formats = array('original' => array( "type" => $format_type, "mime" => $mime_type, "name" => "Full", "label" => "Full" ) ) + $video_formats;
2561
2562
if ( in_array($mime_type_check['ext'], $compatible) ) {
2563
@@ -2674,7 +2733,11 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2674
}
2675
else { $source_key = $x; }
2676
2677
- $sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'?id='.$kgvid_video_id.'" type="'.$format_stats["mime"].'"';
2678
if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
2679
if ( $format_stats['type'] == 'h264' ) {
2680
$sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
@@ -2697,6 +2760,10 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2697
2698
if ( $enable_resolutions_plugin ) {
2699
$video_variables['enable_resolutions_plugin'] = "true";
2700
if ( $query_atts["auto_res"] == "highest" ) { $video_variables['default_res'] = end($h264_resolutions); }
2701
if ( $query_atts["auto_res"] == "lowest" ) { $video_variables['default_res'] = reset($h264_resolutions); }
2702
elseif ( in_array($query_atts["auto_res"], $h264_resolutions) ) { $video_variables['default_res'] = $query_atts["auto_res"]; }
@@ -2857,13 +2924,7 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2857
);
2858
2859
if ( $enable_resolutions_plugin && !wp_script_is('mejs_sourcechooser', 'enqueued') ) {
2860
- if ( $wp_version >= 4.9 ) {
2861
- $sourcechooser_path = plugins_url( 'js/mejs-source-chooser.js', __FILE__ );
2862
- }
2863
- else {
2864
- $sourcechooser_path = plugins_url( 'js/mep-feature-sourcechooser.js', __FILE__ );
2865
- }
2866
- wp_enqueue_script( 'mejs_sourcechooser', $sourcechooser_path, array( 'mediaelement' ), $options['version'], true );
2867
array_push($wpmejssettings['features'], 'sourcechooser');
2868
$localize = true;
2869
}
@@ -2875,13 +2936,7 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2875
if ( $query_atts['playback_rate'] == 'true' ) {
2876
array_push($wpmejssettings['features'], 'speed');
2877
$wpmejssettings['speeds'] = array('0.5', '1', '1.25', '1.5', '2');
2878
- if ( $wp_version >= 4.9 ) {
2879
- $speed_path = plugins_url( 'js/mejs-speed.js', __FILE__ );
2880
- }
2881
- else {
2882
- $speed_path = plugins_url( 'js/mep-speed.js', __FILE__ );;
2883
- }
2884
- wp_enqueue_script( 'mejs-speed', $speed_path, array( 'mediaelement' ), $options['version'], true );
2885
}
2886
2887
array_push($wpmejssettings['features'], 'fullscreen');
@@ -2894,7 +2949,6 @@ function kgvid_single_video_code($query_atts, $atts, $content, $post_id) {
2894
if ( function_exists('wp_video_shortcode') ) { $executed_shortcode = wp_video_shortcode($attr); }
2895
else { $executed_shortcode = 'WordPress video shortcode function does not exist.'; }
2896
$content_width = $content_width_save;
2897
-
2898
if ( $enable_resolutions_plugin ) {
2899
$executed_shortcode = preg_replace( '/<source .*<a /', implode(' />', $sources).' /><a ', $executed_shortcode );
2900
}
@@ -3348,8 +3402,7 @@ function KGVID_shortcode($atts, $content = '') {
3348
if ( !is_feed() ) {
3349
3350
$options = kgvid_get_options();
3351
-
3352
- kgvid_enqueue_shortcode_scripts();
3353
3354
if ( in_the_loop() ) {
3355
$post_id = get_the_ID();
@@ -3386,7 +3439,11 @@ function KGVID_shortcode($atts, $content = '') {
3386
$gallery_query_atts = array();
3387
foreach($gallery_query_index as $index) { $gallery_query_atts[$index] = $query_atts[$index]; };
3388
3389
- wp_enqueue_script( 'simplemodal', plugins_url("/js/jquery.simplemodal.1.4.5.min.js", __FILE__), '', '1.4.5', true );
3390
3391
if ( $query_atts['align'] == "left" ) { $aligncode = ' kgvid_textalign_left'; }
3392
if ( $query_atts['align'] == "center" ) { $aligncode = ' kgvid_textalign_center'; }
@@ -3401,6 +3458,8 @@ function KGVID_shortcode($atts, $content = '') {
3401
3402
} //if gallery
3403
3404
} //if not feed
3405
3406
return apply_filters('KGVID_shortcode', $code, $query_atts, $content);
@@ -4306,7 +4365,7 @@ function kgvid_settings_page() {
4306
<form method="post" action="options.php">
4307
<?php settings_fields('kgvid_video_embed_options'); ?>
4308
<input type="hidden" id="kgvid_settings_security" value="<?php echo wp_create_nonce('video-embed-thumbnail-generator-nonce'); ?>">
4309
- <?php do_settings_sections(__FILE__); ?>
4310
<p class='submit'>
4311
<?php submit_button(__('Save Changes', 'video-embed-thumbnail-generator'), 'primary', 'kgvid_submit', false, array( 'onclick' => "jQuery('form :disabled').prop('disabled', false);" ) ); ?>
4312
<?php submit_button(__('Reset Options', 'video-embed-thumbnail-generator'), 'secondary', 'video-embed-thumbnail-generator-reset', false); ?>
@@ -4405,6 +4464,31 @@ function kgvid_video_embed_options_init() {
4405
}//end copying site queues to network
4406
}//end network activation setup
4407
4408
register_setting('kgvid_video_embed_options', 'kgvid_video_embed_options', 'kgvid_video_embed_options_validate' );
4409
4410
$options = kgvid_get_options();
@@ -4522,7 +4606,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4522
4523
$players = apply_filters('kgvid_available_video_players', $players);
4524
4525
- echo "<table class='form-table'><tbody><tr valign='middle'><th scope='row'><label for='embed_method'>".__('Video player:', 'video-embed-thumbnail-generator')."</label></th><td><select class='affects_player' onchange='kgvid_hide_plugin_settings();' id='embed_method' name='kgvid_video_embed_options[embed_method]'>";
4526
foreach($players as $name => $value) {
4527
$selected = ($options['embed_method']==$value) ? 'selected="selected"' : '';
4528
echo "<option value='$value' $selected>$name</option>";
@@ -4958,7 +5042,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4958
$items['custom'] = __('Custom', 'video-embed-thumbnail-generator');
4959
4960
echo "<div class='kgvid_video_app_required'>";
4961
- echo "<input ".checked( array_key_exists('fullres', $options['encode']), true, false )." id='encode_fullres' name='kgvid_video_embed_options[encode][fullres]' type='checkbox' /> <label for='encode_fullres'>".__('Replace original with', 'video-embed-thumbnail-generator');
4962
4963
echo " <select id='replace_format' name='kgvid_video_embed_options[replace_format]' class='affects_ffmpeg' onchange='kgvid_change_replace_format();'>";
4964
foreach($items as $value=>$name) {
@@ -4977,7 +5061,7 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
4977
}
4978
4979
foreach ( $video_formats as $format => $format_stats ) {
4980
- echo "<input ".checked( array_key_exists($format, $options['encode']), true, false )." id='encode_".$format."' name='kgvid_video_embed_options[encode][".$format."]' type='checkbox' /> <label for='encode_".$format."'>".$format_stats['name']."</label><br />";
4981
}
4982
4983
echo "<input ".checked( array_key_exists('custom', $options['encode']), true, false )." id='encode_custom' name='kgvid_video_embed_options[encode][custom]' type='checkbox' /> <label for='encode_custom'>".__('Custom', 'video-embed-thumbnail-generator');
@@ -5280,8 +5364,14 @@ add_action('admin_init', 'kgvid_video_embed_options_init' );
5280
$options = kgvid_get_options();
5281
$video_formats = kgvid_video_formats(false, false);
5282
$encode_string = "";
5283
if ( $options['ffmpeg_exists'] == "on" ) {
5284
5285
$movie_info = kgvid_get_video_dimensions(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4");
5286
$uploads = wp_upload_dir();
5287
$encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$options['sample_format']]);
@@ -7740,14 +7830,24 @@ function kgvid_encode_videos() {
7740
}
7741
}
7742
7743
- if ( $format_stats['type'] == "webm" || $format_stats['type'] == "ogv" || $format_stats['type'] == "vp9" ) { //if it's not H.264 they both work essentially the same
7744
- if ( ! $encodevideo_info[$queued_format]['exists'] || ($encodevideo_info['sameserver'] && filesize($encodevideo_info[$queued_format]['filepath']) < 24576) ) {
7745
if ( $movie_info['configuration']['libvorbis'] == "true" && $movie_info['configuration'][$video_formats[$queued_format]['vcodec']] == "true" ) {
7746
7747
$encode_string = kgvid_generate_encode_string($moviefilepath, $encodevideo_info[$queued_format]['filepath'], $movie_info, $queued_format, $encode_dimensions['width'], $encode_dimensions['height'], $movie_info['rotate']);
7748
$embed_display = sprintf( __('Encoding %s', 'video-embed-thumbnail-generator'), $video_formats[$queued_format]['name'] );
7749
}//if the necessary libraries are enabled
7750
else {
7751
$missing_libraries = array();
7752
if($movie_info['configuration']['libvorbis'] == 'false') { $missing_libraries[] = 'libvorbis'; }
7753
if($movie_info['configuration'][$video_formats[$queued_format]['vcodec']] == 'false') { $missing_libraries[] = $video_formats[$queued_format]['vcodec']; }
@@ -7755,12 +7855,21 @@ function kgvid_encode_videos() {
7755
$video_encode_queue[$video_key]['encode_formats'][$queued_format]['status'] = "error";
7756
$video_encode_queue[$video_key]['encode_formats'][$queued_format]['lastline'] = $lastline;
7757
$embed_display = __("Missing libraries", 'video-embed-thumbnail-generator');
7758
}
7759
}//if file doesn't already exist
7760
else { $embed_display = sprintf( __('%s already encoded.', 'video-embed-thumbnail-generator'), $video_formats[$queued_format]['vcodec'] ); }
7761
7762
}//if webm or ogg format is queued
7763
7764
}//if format is chosen for encoding
7765
7766
}//format loop
@@ -8558,7 +8667,10 @@ add_action('wp_ajax_kgvid_delete_video', 'kgvid_ajax_delete_video');
8558
8559
function kgvid_delete_video_attachment($video_id) {
8560
8561
- if ( strpos(get_post_mime_type( $video_id ), 'video') !== false ) { //only do this for videos
8562
$parent_post = get_post($video_id);
8563
$options = kgvid_get_options();
8564
$video_encode_queue = kgvid_get_encode_queue();
@@ -8581,7 +8693,9 @@ function kgvid_delete_video_attachment($video_id) {
8581
kgvid_save_encode_queue($video_encode_queue);
8582
break;
8583
}//if the video is an original format
8584
- if ( $video_entry['attachmentID'] == $parent_id || get_post_meta($video_id, '_kgflashmediaplayer-externalurl', true) == $video_entry['movieurl'] ) {
8585
foreach ( $video_entry['encode_formats'] as $format => $value ) {
8586
if ( array_key_exists('filepath', $value) ) {
8587
if ( strpos($value['filepath'], $wp_attached_file) !== false ) {
@@ -8632,7 +8746,7 @@ function kgvid_delete_video_attachment($video_id) {
8632
}
8633
}
8634
}//end if there are any children
8635
- }//end if video
8636
8637
elseif ( strpos(get_post_mime_type( $video_id ), 'image') !== false ) {
8638
$args = array(
3
Plugin Name: Video Embed & Thumbnail Generator
4
Plugin URI: http://www.kylegilman.net/2011/01/18/video-embed-thumbnail-generator-wordpress-plugin/
5
Description: Generates thumbnails, HTML5-compliant videos, and embed codes for locally hosted videos. Requires FFMPEG or LIBAV for encoding.
6
+ Version: 4.6.25
7
Author: Kyle Gilman
8
Author URI: http://www.kylegilman.net/
9
Text Domain: video-embed-thumbnail-generator
60
$edit_others_capable = kgvid_check_if_capable('edit_others_posts');
61
62
$options = array(
63
+ "version" => '4.6.25',
64
"embed_method" => "Video.js",
65
"jw_player_id" => "",
66
"template" => false,
192
193
$video_formats = kgvid_video_formats();
194
foreach ($video_formats as $format => $format_stats ) {
195
+ if ( array_key_exists('default_encode', $format_stats) && $format_stats['default_encode'] == 'on' ) {
196
$options['encode'][$format] = $format_stats['default_encode'];
197
}
198
}
199
200
return $options;
408
$video_formats = array(
409
"fullres" => array(
410
"name" => __("same resolution H.264", 'video-embed-thumbnail-generator'),
411
+ "label" => _x('Full', 'Full resolution', 'video-embed-thumbnail-generator'),
412
"width" => INF,
413
"height" => INF,
414
"type" => "h264",
567
unset($video_formats['custom_'.$options['custom_format']['format']]);
568
}
569
570
+ if ( isset($options['replace_format']) ) {
571
+
572
+ $video_formats['fullres'] = array(
573
+ 'name' => sprintf( __("Replace original with %s", 'video-embed-thumbnail-generator'), $video_formats[$options['replace_format']]['name'] ),
574
+ 'width' => $video_formats[$options['replace_format']]['width'],
575
+ 'height' => $video_formats[$options['replace_format']]['height'],
576
+ 'type' => $video_formats[$options['replace_format']]['type'],
577
+ 'extension' => $video_formats[$options['replace_format']]['extension'],
578
+ 'mime' => $video_formats[$options['replace_format']]['mime'],
579
+ 'suffix' => '-fullres.'.$video_formats[$options['replace_format']]['extension'],
580
+ 'vcodec' => $video_formats[$options['replace_format']]['vcodec']
581
+ );
582
583
+ if ( !$return_replace && $options['replace_format'] != 'fullres' ) { unset($video_formats[$options['replace_format']]); }
584
+
585
+ }
586
587
return apply_filters('kgvid_video_formats', $video_formats, $return_replace, $return_customs, $return_dontembeds);
588
601
$options['ffmpeg_exists'] = 'on';
602
$options['app_path'] = $ffmpeg_check['app_path'];
603
}
604
+ else { $options['ffmpeg_exists'] = 'notinstalled'; }
605
606
update_option('kgvid_video_embed_options', $options);
607
888
}
889
890
function kgvid_url_exists($url) {
891
+
892
+ $ssl_context_options = array(
893
+ 'ssl' => array(
894
+ 'verify_peer' => false,
895
+ 'verify_peer_name' => false,
896
+ )
897
+ );
898
+ $ssl_context = stream_context_create($ssl_context_options);
899
+
900
+ $hdrs = @get_headers($url, 0, $ssl_context);
901
+
902
+ return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*#x2F;',$hdrs[0]) : false;
903
+
904
}
905
906
function kgvid_url_mime_type($url, $post_id = false) {
1259
$args = array(
1260
'numberposts' => '-1',
1261
'post_parent' => $postID,
1262
+ 'post_type' => 'attachment'
1263
);
1264
}
1265
elseif ($moviefile == '' || !is_file($moviefile) ) {
1284
'numberposts' => '-1',
1285
'post_type' => 'attachment',
1286
'meta_key' => '_kgflashmediaplayer-externalurl',
1287
+ 'meta_value' => $sanitized_url['movieurl']
1288
);
1289
1290
}
1396
$ffmpegPath = $options['app_path']."/".$options['video_app'];
1397
$movie_info = array();
1398
1399
+ if ( strpos($video, 'http') === 0 ) { //if it's a URL
1400
$video_id = kgvid_url_to_id($video);
1401
if ( $video_id ) {
1402
$video_path = get_attached_file($video_id);
1408
}
1409
}
1410
}
1411
+
1412
$old_locale = kgvid_set_locale($video); //fixes UTF-8 encoding problems
1413
$command = escapeshellcmd($ffmpegPath . ' -i "' . $video . '"');
1414
$command = $command.' 2>&1';
1426
$movie_info['worked'] = true;
1427
$movie_info['width'] = $regs [1] ? $regs [1] : null;
1428
$movie_info['height'] = $regs [2] ? $regs [2] : null;
1429
+
1430
preg_match('/Duration: (.*?),/', $output, $matches);
1431
$duration = $matches[1];
1432
$movie_duration_hours = intval(substr($duration, -11, 2));
1448
$old_locale = kgvid_set_locale($video); //fixes UTF-8 encoding problems
1449
$command = escapeshellcmd($ffmpegPath . ' -i "' . $video . '" -codecs');
1450
$command = $command.' 2>&1';
1451
+ exec ( $command, $codec_output );
1452
$restore_locale = setlocale(LC_CTYPE, $old_locale);
1453
+ $codec_output = implode("\n", $codec_output);
1454
+ $video_lib_array = array('libvorbis');
1455
+ $video_formats = kgvid_video_formats();
1456
+ foreach ( $video_formats as $format => $format_stats ) {
1457
+ if ( isset($format_stats['vcodec']) ) {
1458
+ $video_lib_array[] = $format_stats['vcodec'];
1459
+ }
1460
+ }
1461
$aac_array = kgvid_aac_encoders();
1462
$lib_list = array_merge($video_lib_array, $aac_array);
1463
foreach ($lib_list as $lib) {
1464
+ if ( strpos($codec_output, $lib) !== false ) { $movie_info['configuration'][$lib] = "true"; }
1465
else { $movie_info['configuration'][$lib] = "false"; }
1466
}
1467
1470
$movie_info['worked'] = false;
1471
}
1472
1473
+ return apply_filters('kgvid_get_video_dimensions', $movie_info, $video, $output, $codec_output);
1474
}
1475
1476
function kgvid_generate_flashvars($content, $query_atts, $encodevideo_info, $id) {
1660
$options = kgvid_get_options();
1661
$libraries = $movie_info['configuration'];
1662
$encode_string = strtoupper($options['video_app'])." not found";
1663
+ $video_formats = kgvid_video_formats();
1664
1665
+ if ( $options['ffmpeg_exists'] == "on" && isset($video_formats[$format]) ) {
1666
1667
if ( $options['video_app'] == "avconv" || $options['video_bitrate_flag'] != "on" ) {
1668
$video_bitrate_flag = "b:v";
1690
$options['vp9_CRF'] = round((-0.000002554 * $width * $height) + 35); //formula to generate close to Google-recommended CRFs https://developers.google.com/media/vp9/settings/vod/
1691
}
1692
$crf_flag = "crf";
1693
+ if ( $video_formats[$format]['type'] == 'ogv' ) { //ogg doesn't do CRF
1694
+ $crf_flag = $qscale_flag;
1695
+ }
1696
+ if ( isset( $options[$crf_option] ) ) {
1697
+ $rate_control_flag = " -".$crf_flag." ".$options[$crf_option];
1698
+ }
1699
+ else {
1700
+ $rate_control_flag = '';
1701
+ }
1702
}
1703
else {
1704
if ( $video_formats[$format]['type'] == 'vp9' ) {
1774
$encode_string[2] = $watermark_strings['filter'];
1775
$encode_string[3] = ' "'.$output.'"';
1776
1777
+ $encode_string = apply_filters('kgvid_generate_encode_string', $encode_string, $input, $output, $movie_info, $format, $width, $height, $rotate, $nostdin);
1778
1779
} //if FFMPEG is found
1780
1781
+ $options['encode_string'] = $encode_string;
1782
+ update_option('kgvid_video_embed_options', $options);
1783
+
1784
+ return $encode_string;
1785
1786
}
1787
1844
1845
$options = kgvid_get_options();
1846
1847
+ wp_register_script( 'kgvid_video_embed', plugins_url("/js/kgvid_video_embed.js", __FILE__), array('jquery'), $options['version'], true );
1848
+
1849
+ wp_register_script( 'simplemodal', plugins_url("/js/jquery.simplemodal.1.4.5.min.js", __FILE__), '', '1.4.5', true );
1850
+
1851
//Video.js styles
1852
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
1853
wp_enqueue_style( 'video-js', plugins_url("", __FILE__).'/video-js/video-js.css', '', '5.20.5' );
1854
if ( $options['js_skin'] == 'kg-video-js-skin' ){ wp_enqueue_style( 'video-js-kg-skin', plugins_url("", __FILE__).'/video-js/kg-video-js-skin.css', '', $options['version'] ); }
1855
+
1856
+ wp_register_script( 'video-js', plugins_url("", __FILE__).'/video-js/video.js', '', '5.20.5', true );
1857
+ wp_register_script( 'video-quality-selector', plugins_url("", __FILE__).'/video-js/video-quality-selector.js', array('video-js'), $options['version'], true );
1858
+
1859
+ }
1860
+
1861
+ if ( $options['embed_method'] == "WordPress Default" ) {
1862
+ global $wp_version;
1863
+
1864
+ if ( $wp_version >= 4.9 ) {
1865
+ $sourcechooser_path = plugins_url( 'js/mejs-source-chooser.js', __FILE__ );
1866
+ }
1867
+ else {
1868
+ $sourcechooser_path = plugins_url( 'js/mep-feature-sourcechooser.js', __FILE__ );
1869
+ }
1870
+ wp_register_script( 'mejs_sourcechooser', $sourcechooser_path, array( 'mediaelement' ), $options['version'], true );
1871
+ if ( $wp_version >= 4.9 ) {
1872
+ $speed_path = plugins_url( 'js/mejs-speed.js', __FILE__ );
1873
+ }
1874
+ else {
1875
+ $speed_path = plugins_url( 'js/mep-speed.js', __FILE__ );;
1876
+ }
1877
+ wp_register_script( 'mejs-speed', $speed_path, array( 'mediaelement' ), $options['version'], true );
1878
}
1879
1880
//plugin-related frontend styles, requires dashicons
1883
if ( $options['alwaysloadscripts'] == 'on' ) {
1884
kgvid_enqueue_shortcode_scripts();
1885
wp_enqueue_script( 'simplemodal', plugins_url("/js/jquery.simplemodal.1.4.5.min.js", __FILE__), '', '1.4.5', true );
1886
+ }
1887
1888
}
1889
add_action('wp_enqueue_scripts', 'kgvid_video_embed_enqueue_styles', 12);
2215
$options = kgvid_get_options();
2216
2217
if ( $options['embed_method'] == "Video.js" || $options['embed_method'] == "Strobe Media Playback" ) {
2218
+
2219
+ wp_enqueue_script( 'video-js' );
2220
add_action('wp_footer', 'kgvid_print_videojs_footer', 99);
2221
+
2222
+ if ( $options['alwaysloadscripts'] == 'on' ) {
2223
+ wp_enqueue_script( 'video-quality-selector' );
2224
+ }
2225
+
2226
}
2227
2228
if ( $options['embed_method'] == "Strobe Media Playback" ) {
2231
2232
if ( !wp_script_is('kgvid_video_embed', 'enqueued') ) {
2233
2234
+ wp_enqueue_script( 'kgvid_video_embed' );
2235
2236
wp_localize_script( 'kgvid_video_embed', 'kgvidL10n_frontend', array(
2237
'ajaxurl' => admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ),
2240
'completeview' => _x("Complete View", 'noun for Google Analytics event', 'video-embed-thumbnail-generator'),
2241
'next' => _x("Next", 'button text to play next video', 'video-embed-thumbnail-generator'),
2242
'previous' => _x("Previous", 'button text to play previous video', 'video-embed-thumbnail-generator'),
2243
+ 'quality' => _x("Quality", 'text above list of video resolutions', 'video-embed-thumbnail-generator'),
2244
+ 'fullres' => _x("Full", 'Full resolution', 'video-embed-thumbnail-generator')
2245
) );
2246
2247
}
2363
else { $post_id = 1; }
2364
$content = '';
2365
$popup_code = kgvid_single_video_code($popup_atts, $atts, $content, $post_id);
2366
+ preg_match('/data-kgvid_video_vars=".*?"/', $popup_code, $video_vars);
2367
$popup_code = str_replace(array("\r", "\n", "\t", $video_vars[0]), "", $popup_code);
2368
2369
if ( $options['js_skin'] == "" ) { $options['js_skin'] = "vjs-default-skin"; }
2371
$options['js_skin'] = $query_atts['skin']; //allows user to set skin for individual videos using the skin="" attribute
2372
}
2373
2374
+ $code .= '<div class="kgvid_video_gallery_thumb" onclick="kgvid_SetVideo(\'kgvid_'.strval($kgvid_video_id-1).'\')" id="kgvid_video_gallery_thumb_kgvid_'.strval($kgvid_video_id-1).'" data-id="kgvid_'.strval($kgvid_video_id-1).'" data-width="'.esc_attr($dimensions['width']).'" data-height="'.esc_attr($dimensions['height']).'" data-meta="'.esc_attr($below_video).'" data-gallery_end="'.esc_attr($query_atts['gallery_end']).'" data-popupcode="'.esc_attr($popup_code).'" '.$video_vars[0].'" style="width:'.$query_atts["gallery_thumb"].'px;';
2375
2376
if ( $query_atts['gallery_thumb_aspect'] == "true" ) {
2377
$code .= ' height:'.round($options["height"]/$options["width"]*$query_atts["gallery_thumb"]).'px;';
2616
}
2617
2618
unset($video_formats['fullres']);
2619
+ $video_formats = array('original' => array( "type" => $format_type, "mime" => $mime_type, "name" => "Full", "label" => _x("Full", 'Full resolution', 'video-embed-thumbnail-generator') ) ) + $video_formats;
2620
2621
if ( in_array($mime_type_check['ext'], $compatible) ) {
2622
2733
}
2734
else { $source_key = $x; }
2735
2736
+ if ( strpos($encodevideo_info[$format]["url"], '?') === false ) { //if there isn't already a query string in this URL
2737
+ $encodevideo_info[$format]["url"] = $encodevideo_info[$format]["url"].'?id='.$kgvid_video_id;
2738
+ }
2739
+
2740
+ $sources[$source_key] = "\t\t\t\t\t".'<source src="'.esc_attr($encodevideo_info[$format]["url"]).'" type="'.$format_stats["mime"].'"';
2741
if ( $format == 'vp9' ) { $sources[$source_key] .= ' codecs="vp9, vorbis"'; }
2742
if ( $format_stats['type'] == 'h264' ) {
2743
$sources[$source_key] .= ' data-res="'.$format_stats['label'].'"';
2760
2761
if ( $enable_resolutions_plugin ) {
2762
$video_variables['enable_resolutions_plugin'] = "true";
2763
+ if ( wp_script_is('kgvid_video_embed', 'enqueued') ) {
2764
+ wp_dequeue_script('kgvid_video_embed'); //ensure that the video-quality-selector script is loaded before kgvid_video_embed.js
2765
+ }
2766
+ wp_enqueue_script( 'video-quality-selector' );
2767
if ( $query_atts["auto_res"] == "highest" ) { $video_variables['default_res'] = end($h264_resolutions); }
2768
if ( $query_atts["auto_res"] == "lowest" ) { $video_variables['default_res'] = reset($h264_resolutions); }
2769
elseif ( in_array($query_atts["auto_res"], $h264_resolutions) ) { $video_variables['default_res'] = $query_atts["auto_res"]; }
2924
);
2925
2926
if ( $enable_resolutions_plugin && !wp_script_is('mejs_sourcechooser', 'enqueued') ) {
2927
+ wp_enqueue_script( 'mejs_sourcechooser' );
2928
array_push($wpmejssettings['features'], 'sourcechooser');
2929
$localize = true;
2930
}
2936
if ( $query_atts['playback_rate'] == 'true' ) {
2937
array_push($wpmejssettings['features'], 'speed');
2938
$wpmejssettings['speeds'] = array('0.5', '1', '1.25', '1.5', '2');
2939
+ wp_enqueue_script( 'mejs-speed' );
2940
}
2941
2942
array_push($wpmejssettings['features'], 'fullscreen');
2949
if ( function_exists('wp_video_shortcode') ) { $executed_shortcode = wp_video_shortcode($attr); }
2950
else { $executed_shortcode = 'WordPress video shortcode function does not exist.'; }
2951
$content_width = $content_width_save;
2952
if ( $enable_resolutions_plugin ) {
2953
$executed_shortcode = preg_replace( '/<source .*<a /', implode(' />', $sources).' /><a ', $executed_shortcode );
2954
}
3402
if ( !is_feed() ) {
3403
3404
$options = kgvid_get_options();
3405
+ if ( $options['embed_method'] != 'Video.js' ) { kgvid_enqueue_shortcode_scripts(); }
3406
3407
if ( in_the_loop() ) {
3408
$post_id = get_the_ID();
3439
$gallery_query_atts = array();
3440
foreach($gallery_query_index as $index) { $gallery_query_atts[$index] = $query_atts[$index]; };
3441
3442
+ if ( $gallery_query_atts['gallery_orderby'] == 'rand' ) {
3443
+ $gallery_query_atts['gallery_orderby'] = 'RAND('.rand().')'; //use the same seed on every page load
3444
+ }
3445
+
3446
+ wp_enqueue_script( 'simplemodal' );
3447
3448
if ( $query_atts['align'] == "left" ) { $aligncode = ' kgvid_textalign_left'; }
3449
if ( $query_atts['align'] == "center" ) { $aligncode = ' kgvid_textalign_center'; }
3458
3459
} //if gallery
3460
3461
+ if ( $options['embed_method'] == 'Video.js' ) { kgvid_enqueue_shortcode_scripts(); }
3462
+
3463
} //if not feed
3464
3465
return apply_filters('KGVID_shortcode', $code, $query_atts, $content);
4365
<form method="post" action="options.php">
4366
<?php settings_fields('kgvid_video_embed_options'); ?>
4367
<input type="hidden" id="kgvid_settings_security" value="<?php echo wp_create_nonce('video-embed-thumbnail-generator-nonce'); ?>">
4368
+ <?php kgvid_do_settings_sections(__FILE__); ?>
4369
<p class='submit'>
4370
<?php submit_button(__('Save Changes', 'video-embed-thumbnail-generator'), 'primary', 'kgvid_submit', false, array( 'onclick' => "jQuery('form :disabled').prop('disabled', false);" ) ); ?>
4371
<?php submit_button(__('Reset Options', 'video-embed-thumbnail-generator'), 'secondary', 'video-embed-thumbnail-generator-reset', false); ?>
4464
}//end copying site queues to network
4465
}//end network activation setup
4466
4467
+ function kgvid_do_settings_sections( $page ) {
4468
+ global $wp_settings_sections, $wp_settings_fields;
4469
+
4470
+ if ( ! isset( $wp_settings_sections[ $page ] ) ) {
4471
+ return;
4472
+ }
4473
+
4474
+ foreach ( (array) $wp_settings_sections[ $page ] as $section ) {
4475
+ if ( $section['title'] ) {
4476
+ echo "<h2 id='header_{$section['id']}'>{$section['title']}</h2>\n";
4477
+ }
4478
+
4479
+ if ( $section['callback'] ) {
4480
+ call_user_func( $section['callback'], $section );
4481
+ }
4482
+
4483
+ if ( ! isset( $wp_settings_fields ) || ! isset( $wp_settings_fields[ $page ] ) || ! isset( $wp_settings_fields[ $page ][ $section['id'] ] ) ) {
4484
+ continue;
4485
+ }
4486
+ echo '<table class="form-table" id="table_'.$section["id"].'">';
4487
+ do_settings_fields( $page, $section['id'] );
4488
+ echo '</table>';
4489
+ }
4490
+ }
4491
+
4492
register_setting('kgvid_video_embed_options', 'kgvid_video_embed_options', 'kgvid_video_embed_options_validate' );
4493
4494
$options = kgvid_get_options();
4606
4607
$players = apply_filters('kgvid_available_video_players', $players);
4608
4609
+ echo "<table class='form-table' id='table_kgvid_video_embed_embed_method'><tbody><tr valign='middle'><th scope='row'><label for='embed_method'>".__('Video player:', 'video-embed-thumbnail-generator')."</label></th><td><select class='affects_player' onchange='kgvid_hide_plugin_settings();' id='embed_method' name='kgvid_video_embed_options[embed_method]'>";
4610
foreach($players as $name => $value) {
4611
$selected = ($options['embed_method']==$value) ? 'selected="selected"' : '';
4612
echo "<option value='$value' $selected>$name</option>";
5042
$items['custom'] = __('Custom', 'video-embed-thumbnail-generator');
5043
5044
echo "<div class='kgvid_video_app_required'>";
5045
+ echo "<input ".checked( array_key_exists('fullres', $options['encode']) && $options['encode']['fullres'] == 'on', true, false )." id='encode_fullres' name='kgvid_video_embed_options[encode][fullres]' type='checkbox' /> <label for='encode_fullres'>".__('Replace original with', 'video-embed-thumbnail-generator');
5046
5047
echo " <select id='replace_format' name='kgvid_video_embed_options[replace_format]' class='affects_ffmpeg' onchange='kgvid_change_replace_format();'>";
5048
foreach($items as $value=>$name) {
5061
}
5062
5063
foreach ( $video_formats as $format => $format_stats ) {
5064
+ echo "<input ".checked( array_key_exists($format, $options['encode']) && $options['encode'][$format] == 'on', true, false )." id='encode_".$format."' name='kgvid_video_embed_options[encode][".$format."]' type='checkbox' /> <label for='encode_".$format."'>".$format_stats['name']."</label><br />";
5065
}
5066
5067
echo "<input ".checked( array_key_exists('custom', $options['encode']), true, false )." id='encode_custom' name='kgvid_video_embed_options[encode][custom]' type='checkbox' /> <label for='encode_custom'>".__('Custom', 'video-embed-thumbnail-generator');
5364
$options = kgvid_get_options();
5365
$video_formats = kgvid_video_formats(false, false);
5366
$encode_string = "";
5367
+
5368
if ( $options['ffmpeg_exists'] == "on" ) {
5369
5370
+ if ( !isset( $video_formats[$options['sample_format']] ) ) {
5371
+ $options['sample_format'] = 'mobile';
5372
+ update_option('kgvid_video_embed_options', $options);
5373
+ }
5374
+
5375
$movie_info = kgvid_get_video_dimensions(plugin_dir_path(__FILE__)."images/sample-video-h264.mp4");
5376
$uploads = wp_upload_dir();
5377
$encode_dimensions = kgvid_set_encode_dimensions($movie_info, $video_formats[$options['sample_format']]);
7830
}
7831
}
7832
7833
+ if (
7834
+ $format_stats['type'] == "webm"
7835
+ || $format_stats['type'] == "ogv"
7836
+ || $format_stats['type'] == "vp9"
7837
+ ) { //if it's not H.264 they both work essentially the same
7838
+ if (
7839
+ !$encodevideo_info[$queued_format]['exists']
7840
+ || ($encodevideo_info['sameserver']
7841
+ && filesize($encodevideo_info[$queued_format]['filepath']) < 24576)
7842
+ ) {
7843
if ( $movie_info['configuration']['libvorbis'] == "true" && $movie_info['configuration'][$video_formats[$queued_format]['vcodec']] == "true" ) {
7844
7845
$encode_string = kgvid_generate_encode_string($moviefilepath, $encodevideo_info[$queued_format]['filepath'], $movie_info, $queued_format, $encode_dimensions['width'], $encode_dimensions['height'], $movie_info['rotate']);
7846
$embed_display = sprintf( __('Encoding %s', 'video-embed-thumbnail-generator'), $video_formats[$queued_format]['name'] );
7847
+
7848
}//if the necessary libraries are enabled
7849
else {
7850
+
7851
$missing_libraries = array();
7852
if($movie_info['configuration']['libvorbis'] == 'false') { $missing_libraries[] = 'libvorbis'; }
7853
if($movie_info['configuration'][$video_formats[$queued_format]['vcodec']] == 'false') { $missing_libraries[] = $video_formats[$queued_format]['vcodec']; }
7855
$video_encode_queue[$video_key]['encode_formats'][$queued_format]['status'] = "error";
7856
$video_encode_queue[$video_key]['encode_formats'][$queued_format]['lastline'] = $lastline;
7857
$embed_display = __("Missing libraries", 'video-embed-thumbnail-generator');
7858
+
7859
}
7860
+
7861
}//if file doesn't already exist
7862
else { $embed_display = sprintf( __('%s already encoded.', 'video-embed-thumbnail-generator'), $video_formats[$queued_format]['vcodec'] ); }
7863
7864
}//if webm or ogg format is queued
7865
7866
+ else { //a format type we haven't accounted for yet
7867
+ if ( !$encodevideo_info[$queued_format]['exists'] ) {
7868
+ $encode_string = kgvid_generate_encode_string($moviefilepath, $encodevideo_info[$queued_format]['filepath'], $movie_info, $queued_format, $encode_dimensions['width'], $encode_dimensions['height'], $movie_info['rotate']);
7869
+ $embed_display = sprintf( __('Encoding %s', 'video-embed-thumbnail-generator'), $video_formats[$queued_format]['name'] );
7870
+ }
7871
+ }
7872
+
7873
}//if format is chosen for encoding
7874
7875
}//format loop
8667
8668
function kgvid_delete_video_attachment($video_id) {
8669
8670
+ if ( strpos(get_post_mime_type( $video_id ), 'video') !== false
8671
+ || !empty(get_post_meta($video_id, '_kgflashmediaplayer-format', true))
8672
+ ) { //only do this for videos or other child formats
8673
+
8674
$parent_post = get_post($video_id);
8675
$options = kgvid_get_options();
8676
$video_encode_queue = kgvid_get_encode_queue();
8693
kgvid_save_encode_queue($video_encode_queue);
8694
break;
8695
}//if the video is an original format
8696
+ if ( $video_entry['attachmentID'] == $parent_id
8697
+ || get_post_meta($video_id, '_kgflashmediaplayer-externalurl', true) == $video_entry['movieurl']
8698
+ ) {
8699
foreach ( $video_entry['encode_formats'] as $format => $value ) {
8700
if ( array_key_exists('filepath', $value) ) {
8701
if ( strpos($value['filepath'], $wp_attached_file) !== false ) {
8746
}
8747
}
8748
}//end if there are any children
8749
+ }//end if video or other child format
8750
8751
elseif ( strpos(get_post_mime_type( $video_id ), 'image') !== false ) {
8752
$args = array(
video-js/video-quality-selector.js CHANGED
@@ -142,16 +142,6 @@ videojs.ResolutionSelector.prototype.createItems = function() {
142
items = [],
143
current_res;
144
145
- // Add the menu title item
146
- items.push( new videojs.ResolutionTitleMenuItem( player, {
147
-
148
- el : videojs.getComponent( 'Component' ).prototype.createEl( 'li', {
149
-
150
- className : 'vjs-menu-title vjs-res-menu-title',
151
- innerHTML : kgvidL10n_frontend.quality
152
- })
153
- }));
154
-
155
// Add an item for each available resolution
156
for ( current_res in player.availableRes ) {
157
@@ -171,12 +161,30 @@ videojs.ResolutionSelector.prototype.createItems = function() {
171
172
return -1;
173
174
- } else {
175
176
return parseInt( b.resolution ) - parseInt( a.resolution );
177
}
178
});
179
180
return items;
181
};
182
@@ -229,6 +237,15 @@ videojs.plugin( 'resolutionSelector', function( options ) {
229
}
230
231
available_res[current_res].push( sources[i] );
232
}
233
234
// Check for forced types
@@ -439,5 +456,3 @@ videojs.plugin( 'resolutionSelector', function( options ) {
439
});
440
441
}
442
-
443
- kgvid_load_video_quality_selector();
142
items = [],
143
current_res;
144
145
// Add an item for each available resolution
146
for ( current_res in player.availableRes ) {
147
161
162
return -1;
163
164
+ }
165
+ else if ( a.resolution == kgvidL10n_frontend.fullres ) { //sort the 'Full' resolution value to the top of the list
166
+ return -1;
167
+ }
168
+ else if ( b.resolution == kgvidL10n_frontend.fullres ) {
169
+ return 1;
170
+ }
171
+ else {
172
173
return parseInt( b.resolution ) - parseInt( a.resolution );
174
+
175
}
176
});
177
178
+ // Add the menu title item
179
+ items.unshift( new videojs.ResolutionTitleMenuItem( player, {
180
+
181
+ el : videojs.getComponent( 'Component' ).prototype.createEl( 'li', {
182
+
183
+ className : 'vjs-menu-title vjs-res-menu-title',
184
+ innerHTML : kgvidL10n_frontend.quality
185
+ })
186
+ }));
187
+
188
return items;
189
};
190
237
}
238
239
available_res[current_res].push( sources[i] );
240
+
241
+ if ( current_res == kgvidL10n_frontend.fullres ) {
242
+ player.on('loadedmetadata', function(){
243
+ if ( player.videoHeight() != NaN ) {
244
+ jQuery('.vjs-res-button li:contains('+kgvidL10n_frontend.fullres+')').html(player.videoHeight()+'p');
245
+ }
246
+ });
247
+ }
248
+
249
}
250
251
// Check for forced types
456
});
457
458
}