1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +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:
Ilya Kreymer 2014-12-24 18:13:12 -08:00
parent ad5a43db76
commit ca17410056

View File

@ -23,7 +23,7 @@ __wbvidrw = (function() {
var found_embeds = false;
var vid_type = "html";
var vid_type = "default";
var FLASH_PLAYER = wbinfo.static_prefix + "/flowplayer/flowplayer-3.2.18.swf";
@ -61,31 +61,12 @@ __wbvidrw = (function() {
found_embeds = true;
handle_yt_videos(vid_type);
//window.setInterval(handle_all_embeds, 1000);
//_wb_wombat.add_tag_handler("embed", handle_all_embeds);
//_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)
@ -151,11 +132,52 @@ __wbvidrw = (function() {
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=([^&]+)/;
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) {
if (!src || src.indexOf("javascript:") == 0) {
return;
@ -176,19 +198,12 @@ __wbvidrw = (function() {
src = src.replace(VIMEO_RX, "http://player.vimeo.com/video/$1");
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) {
do_replace_iframe(elem, repl_src);
return;
}
}
if (window.yt) {
delete window.yt;
}
if (window.ytplayer) {
delete window.ytplayer;
}
// end special cases
var xhr = new XMLHttpRequest();
@ -257,8 +272,14 @@ __wbvidrw = (function() {
elem.parentNode.replaceChild(replacement, elem);
} else if (tag_name == "video") {
elem.parentNode.replaceChild(replacement, elem);
} else {
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) {
var types = ["video", "audio"];
var type = undefined;
@ -330,7 +359,9 @@ __wbvidrw = (function() {
}
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._wb_avail++;
type = types[j];
@ -389,13 +420,13 @@ __wbvidrw = (function() {
if (i < 0) {
url = info.url;
format = info.ext;
format = get_format_ext(info);
} else {
url = info.formats[i].url;
format = info.formats[i].ext;
if (!info.formats[i]._wb_canPlay) {
continue;
}
url = info.formats[i].url;
format = get_format_ext(info.formats[i]);
}
url = wbinfo.prefix + url;