mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
video: better extension extraction for explicit video info (use format
if ext is unknown) improved support for _pywbvid=html, forces generic html player over yt player, better deletion of ytplayer
This commit is contained in:
parent
ad5a43db76
commit
ca17410056
@ -23,7 +23,7 @@ __wbvidrw = (function() {
|
|||||||
|
|
||||||
var found_embeds = false;
|
var found_embeds = false;
|
||||||
|
|
||||||
var vid_type = "html";
|
var vid_type = "default";
|
||||||
|
|
||||||
var FLASH_PLAYER = wbinfo.static_prefix + "/flowplayer/flowplayer-3.2.18.swf";
|
var FLASH_PLAYER = wbinfo.static_prefix + "/flowplayer/flowplayer-3.2.18.swf";
|
||||||
|
|
||||||
@ -61,31 +61,12 @@ __wbvidrw = (function() {
|
|||||||
|
|
||||||
found_embeds = true;
|
found_embeds = true;
|
||||||
|
|
||||||
|
handle_yt_videos(vid_type);
|
||||||
|
|
||||||
//window.setInterval(handle_all_embeds, 1000);
|
//window.setInterval(handle_all_embeds, 1000);
|
||||||
|
|
||||||
//_wb_wombat.add_tag_handler("embed", handle_all_embeds);
|
//_wb_wombat.add_tag_handler("embed", handle_all_embeds);
|
||||||
//_wb_wombat.add_tag_handler("object", handle_all_objects);
|
//_wb_wombat.add_tag_handler("object", handle_all_objects);
|
||||||
|
|
||||||
// special case: yt
|
|
||||||
/*
|
|
||||||
if (!found_embeds && wbinfo.url.indexOf("://www.youtube.com/watch") > 0) {
|
|
||||||
var ytvideo = document.getElementsByTagName("video");
|
|
||||||
|
|
||||||
if (ytvideo.length == 1) {
|
|
||||||
if (ytvideo[0].getAttribute("data-youtube-id") != "") {
|
|
||||||
// Wait to see if video is playing, if so, don't replace it
|
|
||||||
window.setTimeout(function() {
|
|
||||||
if (!ytvideo || !ytvideo.length || ytvideo[0].readyState == 0) {
|
|
||||||
delete window.yt;
|
|
||||||
delete window.ytplayer;
|
|
||||||
console.log("REPLACING YT: " + wbinfo.url);
|
|
||||||
check_replacement(ytvideo[0], wbinfo.url);
|
|
||||||
}
|
|
||||||
}, 4000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handle_embed_tag(elem)
|
function handle_embed_tag(elem)
|
||||||
@ -151,11 +132,52 @@ __wbvidrw = (function() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var YT_RX = /^(https?:\/\/.*youtube.com)\/v\/([^&?]+)(.*)$/;
|
var YT_W_E_RX = /^(https?:\/\/.*youtube.com)\/(watch|embed).*$/;
|
||||||
|
var YT_V_RX = /^(https?:\/\/.*youtube.com)\/v\/([^&?]+)(.*)$/;
|
||||||
var VIMEO_RX = /^https?:\/\/.*vimeo.*clip_id=([^&]+)/;
|
var VIMEO_RX = /^https?:\/\/.*vimeo.*clip_id=([^&]+)/;
|
||||||
|
|
||||||
|
|
||||||
|
function handle_yt_videos(vid_type)
|
||||||
|
{
|
||||||
|
function do_yt_video_replace()
|
||||||
|
{
|
||||||
|
console.log("REPLACING YT: " + wbinfo.url);
|
||||||
|
ytvideo[0].autoplay = false;
|
||||||
|
ytvideo[0].preload = "none";
|
||||||
|
|
||||||
|
var elem = ytvideo[0];
|
||||||
|
// get ancestor 'div'
|
||||||
|
if (elem.parentElement) {
|
||||||
|
elem = elem.parentElement;
|
||||||
|
}
|
||||||
|
if (elem.parentElement) {
|
||||||
|
elem = elem.parentElement;
|
||||||
|
}
|
||||||
|
console.log(elem);
|
||||||
|
|
||||||
|
// Experimental
|
||||||
|
|
||||||
|
check_replacement(elem, wbinfo.url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// special case: yt
|
||||||
|
if (wbinfo.url.match(YT_W_E_RX)) {
|
||||||
|
var ytvideo = document.getElementsByTagName("video");
|
||||||
|
|
||||||
|
if (ytvideo.length == 1 && ytvideo[0].getAttribute("data-youtube-id") != "") {
|
||||||
|
if (vid_type == "html") {
|
||||||
|
do_yt_video_replace();
|
||||||
|
} else {
|
||||||
|
setTimeout(function() {
|
||||||
|
if (!ytvideo || !ytvideo.length || ytvideo[0].readyState == 0) {
|
||||||
|
do_yt_video_replace();
|
||||||
|
}
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function check_replacement(elem, src, no_retry) {
|
function check_replacement(elem, src, no_retry) {
|
||||||
if (!src || src.indexOf("javascript:") == 0) {
|
if (!src || src.indexOf("javascript:") == 0) {
|
||||||
return;
|
return;
|
||||||
@ -176,19 +198,12 @@ __wbvidrw = (function() {
|
|||||||
src = src.replace(VIMEO_RX, "http://player.vimeo.com/video/$1");
|
src = src.replace(VIMEO_RX, "http://player.vimeo.com/video/$1");
|
||||||
|
|
||||||
if (vid_type == "orig") {
|
if (vid_type == "orig") {
|
||||||
var repl_src = src.replace(YT_RX, "$1/embed/$2?$3&controls=0");
|
var repl_src = src.replace(YT_V_RX, "$1/embed/$2?$3&controls=0");
|
||||||
if (repl_src != src) {
|
if (repl_src != src) {
|
||||||
do_replace_iframe(elem, repl_src);
|
do_replace_iframe(elem, repl_src);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window.yt) {
|
|
||||||
delete window.yt;
|
|
||||||
}
|
|
||||||
if (window.ytplayer) {
|
|
||||||
delete window.ytplayer;
|
|
||||||
}
|
|
||||||
// end special cases
|
// end special cases
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
@ -257,8 +272,14 @@ __wbvidrw = (function() {
|
|||||||
|
|
||||||
elem.parentNode.replaceChild(replacement, elem);
|
elem.parentNode.replaceChild(replacement, elem);
|
||||||
|
|
||||||
} else if (tag_name == "video") {
|
} else {
|
||||||
elem.parentNode.replaceChild(replacement, elem);
|
elem.parentNode.replaceChild(replacement, elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window.yt) {
|
||||||
|
yt.player.Application.create("player-api", ytplayer.config).dispose();
|
||||||
|
delete window.yt;
|
||||||
|
delete window.ytplayer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,6 +337,14 @@ __wbvidrw = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_format_ext(info_format) {
|
||||||
|
if (info_format.ext == "unknown_video") {
|
||||||
|
return info_format.format_id;
|
||||||
|
} else {
|
||||||
|
return info_format.ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function can_play_video_or_audio(elem, info) {
|
function can_play_video_or_audio(elem, info) {
|
||||||
var types = ["video", "audio"];
|
var types = ["video", "audio"];
|
||||||
var type = undefined;
|
var type = undefined;
|
||||||
@ -330,7 +359,9 @@ __wbvidrw = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0; j < types.length; j++) {
|
for (var j = 0; j < types.length; j++) {
|
||||||
if (can_play(elem, info.formats[i].ext, types[j])) {
|
var ext = get_format_ext(info.formats[i]);
|
||||||
|
|
||||||
|
if (can_play(elem, ext, types[j])) {
|
||||||
info.formats[i]._wb_canPlay = true;
|
info.formats[i]._wb_canPlay = true;
|
||||||
info._wb_avail++;
|
info._wb_avail++;
|
||||||
type = types[j];
|
type = types[j];
|
||||||
@ -389,13 +420,13 @@ __wbvidrw = (function() {
|
|||||||
|
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
url = info.url;
|
url = info.url;
|
||||||
format = info.ext;
|
format = get_format_ext(info);
|
||||||
} else {
|
} else {
|
||||||
url = info.formats[i].url;
|
|
||||||
format = info.formats[i].ext;
|
|
||||||
if (!info.formats[i]._wb_canPlay) {
|
if (!info.formats[i]._wb_canPlay) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
url = info.formats[i].url;
|
||||||
|
format = get_format_ext(info.formats[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
url = wbinfo.prefix + url;
|
url = wbinfo.prefix + url;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user