fixes videos not playing and also makes it so download button
// ==UserScript==
// @name Bitchute video fix + better download
// @namespace http://tampermonkey.net/
// @version 2024-07-05
// @description fixes videos not playing and also makes it so download button
// @author PsychopathicKiller77
// @match https://www.bitchute.com/api/beta9/embed/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=bitchute.com
// @grant unsafeWindow
// @grant GM_download
// @license MIT
// ==/UserScript==
var setevents = false;
function check() {
if (!setevents && document.getElementById("player_one_html5_api")) {
document.getElementById("player_one_html5_api").addEventListener("stalled", function() {
console.log("Media data is not available");
fixvideo();
});
document.getElementById("player_one_html5_api").addEventListener("error", function() {
console.log("Error! Something went wrong");
fixvideo();
});
//download fix start, remove this part if u dont want better?(in my opinion its better but i guess its subjective) download
document.getElementById("player_one_html5_api").addEventListener('loadedmetadata', function() {
var old_element = document.getElementsByClassName("vjs-download-control vjs-control vjs-button")[0];
var new_element = old_element.cloneNode(true);
new_element.addEventListener("click", downloadVideo)
old_element.parentNode.replaceChild(new_element, old_element);
});
document.getElementById("player_one_html5_api").addEventListener('play', function() {
var old_element = document.getElementsByClassName("vjs-download-control vjs-control vjs-button")[0];
var new_element = old_element.cloneNode(true);
new_element.addEventListener("click", downloadVideo)
old_element.parentNode.replaceChild(new_element, old_element);
});
if (document.getElementsByClassName("vjs-download-control vjs-control vjs-button")) {
var old_element = document.getElementsByClassName("vjs-download-control vjs-control vjs-button")[0];
var new_element = old_element.cloneNode(true);
new_element.addEventListener("click", downloadVideo)
old_element.parentNode.replaceChild(new_element, old_element);
}
//download fix end
setevents = true;
}
}
setInterval(check, 100);
function fixvideo() {
var lastKnownCurrentTime = document.getElementById("player_one_html5_api").currentTime;
function setHtmlPageSeed(seedLink) {
document.getElementById("player_one_html5_api").src = seedLink;
unsafeWindow.media_url = seedLink;
document.getElementById("player_one_html5_api").currentTime = lastKnownCurrentTime
var old_element = document.getElementsByClassName("vjs-download-control vjs-control vjs-button")[0];
var new_element = old_element.cloneNode(true);
new_element.addEventListener("click", downloadVideo)
old_element.parentNode.replaceChild(new_element, old_element);
};
var availableSeedArray = ['seed111', 'seed132', 'seed122', 'seed167', 'seed126', 'seed171', 'seedp29xb', 'seed305', 'seed307', 'seed128', 'seed125', 'seed177', 'zb10-7gsop1v78'];
var seedArrayCurrentPosition = 1;
function getNewRandomSeed() {
var _tempPosition = Math.floor(Math.random(availableSeedArray.length - 1) * 10);
if (_tempPosition == seedArrayCurrentPosition) {
if ((_tempPosition + 1) > (availableSeedArray.length - 1)) {
_tempPosition = 0
} else {
_tempPosition += 1
}
}
seedArrayCurrentPosition = _tempPosition;
return seedArrayCurrentPosition
};
var newSeedVidLink = '';
function getSeedSourceFromSeedNo(seedNo, vidLink) {
if (!vidLink) {
vidLink = document.getElementById("player_one_html5_api").src.split('.bitchute.com/')[1]
}
if (!seedNo) {
seedNo = availableSeedArray[getNewRandomSeed()]
}
newSeedVidLink = 'https://' + seedNo + '.bitchute.com/' + vidLink;
setHtmlPageSeed(newSeedVidLink);
return newSeedVidLink
};
getSeedSourceFromSeedNo();
}
function downloadVideo() {
GM_download({
url: document.getElementById("player_one_html5_api").src,
name: document.getElementById("player_one_html5_api").src.split(/(\\|\/)/g).pop(),
saveAs: false,
conflictAction: "prompt"
});
}