Just realised that I am having an issue trying to play videos in Odyssey in YouTube. I always spoof as IPad 6.1, when I travel to YouTube it is in the m.youtube.com form.
I'm running an X1000 and spoof as IPad 6.1 and YouTube is working find for me. Both playing videos and searching. I'm in the U.S. and using english language.
I can't reproduce this, when I click on search it will let me search for videos. X5000, Odyssey v1.23 r5_beta07 with fix for youtube full screen, spoofed as iPad 6.1 on m.youtube.com.
var head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style');
head.appendChild(style);
style.type = 'text/css';
if (style.styleSheet){
// This is required for IE8 and below.
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
2. GitHub CSS fixes
// GitHub CSS fixes
// version 1.1
// 2022-04-04
// Copyright (c) 2021 Created by Georgios Sokianos
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html //
// ==UserScript==
// @name GitHub CSS fixes
// @namespace none
// @description Fixes css in GitHub
// @include https://github.com/*
// @version $VER: GitHub CSS fixes 1.1 (04.04.2022)
// @url https://ko-fi.com/walkero // ==/UserScript==
var head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style');
head.appendChild(style);
style.type = 'text/css';
if (style.styleSheet){
// This is required for IE8 and below.
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
window.onload = function () {
var canonicalElem = document.querySelector("link[rel='canonical']");
if (canonicalElem !== null) {
var canonicalUrl = canonicalElem.href;
var container = document.getElementById("repository-container-header");
var archiveText = document.createTextNode("Download ZIP");
var archiveUrl = canonicalUrl;
if (canonicalUrl.indexOf("tree") > -1) {
archiveUrl = archiveUrl.replace("tree", "archive/refs/heads");
} else {
var branchElem = document.querySelector("span[data-menu-button]");
if (branchElem !== null) {
archiveUrl += "/archive/refs/heads/" + branchElem.textContent;
}
}
if (archiveUrl != canonicalUrl) {
var archiveLink = document.createElement("a");
archiveLink.appendChild(archiveText);
archiveLink.title = "Download as a ZIP file";
archiveLink.href = archiveUrl + ".zip";
container.appendChild(archiveLink);
}
}
}
3. Youtube HTML5 Converter
// Youtube HTML5 converter
// version 0.95
// 2014-03-19
// Copyright (c) 2010, Arne Schneck, Rob Middleton(aka themiddleman), chromeuser8
// Reworked by Fabien Coeurjoly to be up-to-date and work properly with current HTML5 implementations and Youtube endless changes
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html //
// Changes version 0.94 -> 0.95 :
// * Don't use for...of construct for pre-1.24 Odyssey versions.
// Changes version 0.92 -> 0.94 :
// * Added support for videos using encrypted signatures, which should hopefully fix many videos that didn't work anymore. VEVO ones should also work.
// * Fixed a layout issue with the video element caused by recent youtube changes.
// * Downloading a video now shows the video title instead of a meaningless "videoplayback" filename.
// * Code cleanup here and there.
// Changes version 0.91 -> 0.92 :
// * Reworked script initialization to work more reliably with all Youtube "modes" (HTML5, broken HTML5 and Flash)
// Changes version 0.90 -> 0.91 :
// * Also suppressed more Youtube's madness : when html5 cookie is set and flash is disabled, they sometimes show a "you need flash player" message while their html5 player is already loaded ready to play the video. Seriously...
// Changes version 0.89 -> 0.90 :
// * Heavy refactoring to deal with all recent YouTube changes.
// Changes version 0.88 -> 0.89 :
// * Adapted to work again with latest changes from YouTube.
// Changes version 0.87 -> 0.88 :
// * Adapted to work again with latest changes from YouTube.
// Changes version 0.86 -> 0.87 :
// * Adapted to work again with latest changes from YouTube.
// Changes version 0.85 -> 0.86 :
// * Fixes download links after Youtube's latest changes.
// Changes version 0.84 -> 0.85 :
// * Don't attempt to execute anything of this script in HTML5 mode.
// Changes version 0.83 -> 0.84 :
// * YouTube suppressed the url_fmt_map this script relied on previously...
// Now using another method, let's hope it won't change too soon!
// * Removed some dead code and cleanup in a few places
// Changes version 0.82 -> 0.83 :
// * Added very basic support for YouTube channels (only first title is played).
// Changes version 0.81 -> 0.82 :
// * The player container height set by YouTube is too small to show entirely
// the HTML5 bultin-player controls. Adjusted its height accordingly.
// Changes version 0.80 -> 0.81 :
// * "get_video" mode isn't supported by YouTube anymore, so "raw" mode is now
// the default and only available mode.
//
// ==UserScript==
// @name Youtube HTML5 Converter
// @namespace none
// @description Adds links below the video and replaces Flash with the builtin HTML5 mediaplayer.
// @include http://youtube.com/watch*
// @include http://*.youtube.com/watch*
// @include http://youtube.*/watch*
// @include http://youtube-nocookie.com/watch*
// @include http://*.youtube-nocookie.com/watch*
// @include http://youtube-nocookie.*/watch*
// @include http://*.youtube.com/user/*
// @include http://www.youtube.com/results*
// @include http://www.youtube.com/*
// @include https://youtube.com/watch*
// @include https://*.youtube.com/watch*
// @include https://youtube.*/watch*
// @include https://youtube-nocookie.com/watch*
// @include https://*.youtube-nocookie.com/watch*
// @include https://youtube-nocookie.*/watch*
// @include https://*.youtube.com/user/*
// @include https://www.youtube.com/results*
// @include https://www.youtube.com/*
// @version $VER: Youtube HTML5 converter 0.95 (19.03.2014)
// @url http://fabportnawak.free.fr/owb/scripts/Youtube.js // ==/UserScript==
var startupDelay = 500; // delay in ms before the script kicks in (lame workaround for lame YouTube behaviour).
/*
* Players
* The default is the generic player that should work with whatever
* plugin is installed.
* All should have the following:
*
* string name
*
* string desctiption
*
* function init
* arguments: (none)
* returns "this" player object
*
* function writePlayer
* arguments: (string) id of the parent element to fill with player
* (string) video url
* (string) autoplay (true or false)
* (string) width (number and 'px')
* (string) height (number and 'px')
* returns: none
*
* function seek
* arguments: (int) time to seek to in seconds
* returns: none
* (If this doesnt work just use an empty function anyway.)
*/
function qr(sr) {
var qa = [];
var params = sr.split('&');
for (i = 0; i < params.length; i++) {
prs = params[i];
var pra = prs.split('=');
qa[pra[0]] = pra[1];
}
return qa;
}
function dc(sg) {
var xhr = new XMLHttpRequest();
/* cors-anywhere.herokuapp.com */
px = 'allow-any-origin.appspot.com/https:';
xhr.open('get', 'https://' + px + ytplayer.config.assets.js, false);
xhr.send();
var rpt = xhr.responseText;
var fcnm = rpt.match(/signature=([^(]+)/)[1];
var fs = new RegExp('function ' + fcnm + '[^}]+}[^}]+}');
eval(rpt.match(fs)[0]);
return eval(fcnm + '("' + sg + '")');
}
function getFormatName(quality) {
var ret = "(" + quality.toString() + ") unknown";
switch(quality)
{
case 5:
ret = "(" + quality.toString() + ") FLV H.263 400x240";
break;
case 34:
ret = "(" + quality.toString() + ") FLV H.264 640x360";
break;
case 35:
ret = "(" + quality.toString() + ") FLV H.264 854x480";
break;
case 18:
ret = "(" + quality.toString() + ") MP4 H.264 640x360";
break;
case 22:
ret = "(" + quality.toString() + ") MP4 H.264 1280x720";
break;
case 37:
ret = "(" + quality.toString() + ") MP4 H.264 1920x1080";
break;
case 38:
ret = "(" + quality.toString() + ") MP4 H.264 4096x3072";
break;
case 43:
ret = "(" + quality.toString() + ") WEBM VP8 640x360";
break;
case 44:
ret = "(" + quality.toString() + ") WEBM VP8 854x480";
break;
case 45:
ret = "(" + quality.toString() + ") WEBM VP8 1280x720";
break;
case 46:
ret = "(" + quality.toString() + ") WEBM VP8 1920x1080";
break;
case 17:
ret = "(" + quality.toString() + ") 3GP MP4 176x144";
break;
}
return ret;
}
function getFormatExtension(quality) {
var ret = ".unknown";
switch(parseInt(quality))
{
case 5:
ret = ".flv";
break;
case 34:
ret = ".flv";
break;
case 35:
ret = ".flv";
break;
case 18:
ret = ".mp4";
break;
case 22:
ret = ".mp4";
break;
case 37:
ret = ".mp4";
break;
case 38:
ret = ".mp4";
break;
case 43:
ret = ".webm";
break;
case 44:
ret = ".webm";
break;
case 45:
ret = ".webm";
break;
case 46:
ret = ".webm";
break;
case 17:
ret = ".3gp";
break;
}
return ret;
}
function getHTML5Object()
{
var ret = null;
var elements = document.getElementsByTagName("video");
if(elements.length > 0)
{
var element = elements[0];
if(element.className == "video-stream html5-main-video")
{
ret = element;
}
}
var prefMan = new pMan({
title:"Youtube HTML5 Converter Preferences",
color:"black",
bgcolor:"white",
bordercolor:"black",
prefs:[
{
name:"Default Quality",
description:"If the default quality is not available the next best quality video will be played",
opts:[ getFormatName(5),getFormatName(34),getFormatName(35),
getFormatName(18),getFormatName(22),getFormatName(37),getFormatName(38),
getFormatName(43),getFormatName(44),getFormatName(45),getFormatName(46),
getFormatName(17),
"Flash"
],
vals:["5","34","35","18","22","37","38","43","44","45","17","Flash"],
defaultVal:3
},{
name:"Autoplay",
description:"",
opts:["On","Off"],
vals:["true","false"],
defaultVal:0
},{
name:"Player Size",
description:"The size of the player",
opts:["small","big"],
defaultVal:0
}
],
elmId:"ywofpreferences"
});
// Add css for links.
// This is probably the best way to make text look like links, using the
// normal ways wont work in GM because there is nowhere to put
// "return false;" in the link.
GM_addGlobalStyle(".link{color:#0033CC;}" +
".link:hover{cursor: pointer; text-decoration:underline;}");
var defaultQuality = prefMan.getVal("Default Quality");
// Retrieve direct links
GMlog("Available YouTube direct links:");
var urlsAvailable = new Array();
var formatsAvailable = new Array();
var titlesAvailable = new Array();
// Retrieving direct links
var args = ytplayer.config.args;
i = 0;
stream_maps = new Array(args.url_encoded_fmt_stream_map, args.adaptive_fmts);
for (j = 0; j < stream_maps.length; j++) {
var ft = stream_maps[j];
if(ft)
{
var ft_params = ft.split(',');
for (k = 0; k < ft_params.length; k++) {
z = ft_params[k];
var qs = qr(z);
var href = unescape(qs.url);
try
{
if(qs.itag <= 130)
{
if (qs.sig)
href += '&signature=' + qs.sig;
if (qs.s)
href += '&signature=' + dc(qs.s);
if(defaultQualityId < 0)
format = 18; // Try to force it anyway
else
format = formatsAvailable[defaultQualityId];
writePlayer(format);
}
// Make sure we remove explicitely the HTMLMediaElement, since it can be leaked in some cases
function pageUnloaded()
{
playerDiv.removeChild(playerDiv.firstChild);
}
function startup()
{
if(Flashobj)
{
// Erase it, this will cause the Flash element to be loaded again, caught in beforeloadevent.
var obj = document.getElementById("player-api");
if(obj)
obj.innerHTML = "";
}
}
var embedded = document.location.href.indexOf("/embed/") !== -1;
var allHTMLTags = document.getElementsByTagName("*");
var found = false;
var activeVideo = "";
function goFullscreen(e)
{
e.preventDefault();
e.stopPropagation();
for (i=0; i < allHTMLTags.length; i++)
{
if(allHTMLTags[i].className == "video-stream html5-main-video" && allHTMLTags[i].src != "")
{
allHTMLTags[i].webkitEnterFullScreen();
}
}
return false;
}
function bindEvent()
{
if(!found)
{
for (i=0; i < allHTMLTags.length; i++)
{
var name = allHTMLTags[i].className;
var rel = allHTMLTags[i].getAttribute("rel");
// Bind fullscreen to large size button
if (name && name.length && name.search("ytp-size-button") != -1)
{
found = true;
allHTMLTags[i].addEventListener('click', goFullscreen, true);
}
else if (name && name.length && name.search("ytp-fullscreen-button") != -1)
{
found = true;
allHTMLTags[i].addEventListener('click', goFullscreen, true);
}
// Add fullscreen button of mobile version of YouTube
else if (name && name.length && name.search("fullscreen-icon") != -1)
{
found = true;
allHTMLTags[i].addEventListener('click', goFullscreen, true);
}
// Since FS icon is not shown in embedded mode, we use this one instead...
else if (embedded && name && name.length && name.search("ytp-settings-button") != -1)
{
found = true;
allHTMLTags[i].addEventListener('click', goFullscreen, true);
}
// Force youtube to reload when selecting links in related videos, so that this script is reloaded again
else if(rel && rel.length && rel.search("spf-prefetch") != -1)
{
allHTMLTags[i].setAttribute("rel", rel.replace("spf-prefetch", ""));
}
// Force youtube to reload when selecting links in related videos, so that this script is reloaded again
else if(name && name.length && name.search("spf-link") != -1)
{
allHTMLTags[i].className = allHTMLTags[i].className.replace("spf-link", "");
}
}
}
else
{
if(document.getElementById("movie-player").firstElementChild.firstElementChild.src)
{
if(document.getElementById("movie-player").firstElementChild.firstElementChild.src !== activeVideo)
{
activeVideo = document.getElementById("movie-player").firstElementChild.firstElementChild.src;
var found = false;
}
}
window.clearInterval(timer_fix);
}
}
// Lame workaround
var timer_fix = window.setInterval(bindEvent, 1000);
I have not modified any of these scripts.
In my "URL Preferences" I have an entry for: "https://www.youtube.com/": - JavaScript Support (Enabled) - Load images automatically (Enabled) - Plugins (Enabled) - Enable local storage (Enabled) Spoof As: IPad 6.1 Cookie Policy: Accept. Cookie Name Filter: .*
For me, the reproducible steps: 1 - Start the X5000 2 - Open Odyssey 3 - Click on the "YouTube" bookmark 4 - When the site loads click the YouTube search button 5 - Notice that I get a pop up saying "newlib.library error: exit() of process 125 called from wrong process 198, using IExec->RemTask(NULL)"
I can also sometimes reproduce it when instead of doing step 4 I just click on one of the videos that pops up.
newlib.library error: exit() of process 125 called from wrong process 198, using
IExec->RemTask(NULL)
[DOS] NOTE: RemTask()->ResourceHook doing full cleanup for PPC program #198 "[OW
B] MediaPlayer"
[DOS] NOTE: CleanupProcess() is now deleting proc #198 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess() removing from proc list #198 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess() unlocking the CD for proc #198 ('[OWB] MediaPlayer'
)
[DOS] NOTE: CleanupProcess() unlocking the PD for proc #198 ('[OWB] MediaPlayer'
)
[DOS] NOTE: CleanupProcess() closing COS for proc #198 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess() closing CIS for proc #198 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess() freeing localvars for proc #198 ('[OWB] MediaPlayer
')
[DOS] NOTE: CleanupProcess() clearing; tc_Flags/tc_Launch/tc_Switch for proc #19
8 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess empty RestoreList for proc #198 ('[OWB] MediaPlayer')
[DOS] NOTE: CleanupProcess() freeing ETask's DOS nodes for proc #198 ('[OWB] Med
iaPlayer')
[DOS] NOTE: CleanupProcess() checking for children of proc #198 ('[OWB] MediaPla
yer')
[DOS] NOTE: CleanupProcess() freeing launch-seglist for proc #198 ('[OWB] MediaP
layer')
[DOS] NOTE: CleanupProcess() sending DeathMessage 0x61CF8ED8 for proc #198 ('[OW
B] MediaPlayer')
[DOS] NOTE: CleanupProcess() now exiting for proc #198 ('[OWB] MediaPlayer')
[DOS]...bye !!
Will I need to use debuglevel=20 in combination with the debug kernel to get even more information?
If liberty means anything at all, it means the right to tell people what they do not want to hear. George Orwell.