Используйте Greasemonkey для загрузки моего собственного видеоплеера, междоменного - PullRequest
2 голосов
/ 21 декабря 2011

Я создаю сценарий для преобразования всех wmv avi mp3 wav mp4 и т. Д. Ссылок для игры со встроенным jwplayer.Проигрыватель загружает, но не воспроизводит видео и вместо этого отображает следующую ошибку: Task Queue failed at step 5: Playlist could not be loaded due to cross-domain policy restrictions.

Поиск в Интернете привел меня к пониманию, что мне нужен файл с именем crossdomain.xml или что-то подобное этому.Теперь, так как это скрипт, предназначенный для запуска на любом сайте, я, очевидно, не могу этого сделать.

Я подумал о том, чтобы встроить весь плеер в URI данных.Я тоже так пробовал: DEMO

Это сайт, с которого я взял плеер: http://player.longtailvideo.com/player.swf

Это то, что я 'пытаюсь сделать возможным?Я предполагаю, что это работает как data uri для img.Я что-то упустил?

РЕДАКТИРОВАТЬ:!
Screen shot of the fabulous ;) GM script under test

1 Ответ

2 голосов
/ 21 декабря 2011

URI данных не работают на узлах <object> или <embed>. Вот почему GM_getResourceURL() не будет работать для этого либо .

Кроме того, при использовании прямого метода <embed> файл player.swf должен находиться в том же домене, что видео или межсайтовая защита заблокирует загрузку видео. Этот конкретный блок может быть встроен в этот конкретный player.swf.

Однако , при использовании функции jwplayer.setup () Longtailvideo (которую они рекомендуют в любом случае), проигрыватель, кажется, работает.

Вы должны использовать размещенную версию плеера, но, к счастью, она предоставляется по адресу http://player.longtailvideo.com/player.swf.
Это даст ошибку NetworkError: 404 Not Found - http://someSite/crossdomain.xml, но видео будет воспроизведено.

Вот пример сценария GM, который работает:

// ==UserScript==
// @name     _Video embed fun
// @include  http://YOUR_SITE/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @require  http://player.longtailvideo.com/jwplayer.js
// ==/UserScript==

//--- Find all hyperlinks to select video files.
var videoLinks  = $("a[href$='.mpg'], a[href$='.mp4'], a[href$='.wmv']");

//--- For each video link, activate our video player.
videoLinks.each ( function (J) {
    var jThis   = $(this);
    var vidURL  = jThis.attr ('href');
    var contID  = 'myVidContainer_' + J;

    jThis.after ('<div id="' + contID + '">Loading the player ...</div>');

    jwplayer (contID).setup ( {
        flashplayer:    "http://player.longtailvideo.com/player.swf",
        file:           vidURL,
        height:         344,
        width:          480
    } );
} );



Предупреждения:

  1. Некоторые типы носителей (или этот проигрыватель) имеют встроенную дополнительную «защиту» XSS. Это означает, что, например, файлы .wmv не будут работать, в то время как многие файлы .mp4 работают.

  2. Видеофайл, по-видимому, должен находиться в том же домене для этого проигрывателя. Таким образом, целевая страница foo.com\somepage.htm, содержащая видео foo.com\somevid.mp4, будет (обычно) работать, но если видео будет cdn.foo.com\somevid.mp4, оно не будет работать.

Единственный надежный способ использовать этот плеер, остаются следующие два варианта:

  • Напишите свой собственный аддон Firefox, который не имеет ограничений на исправление локальных файлов (player.swf), междоменных, на страницу. Вы можете отключить код Greasemonkey или Scriptish.

  • У вашего GM-сценария есть AJAX-видео на вашем собственном сервере (это может быть ваша локальная машина с XAMPP и т. Д.). Затем указанный аппарат будет передавать видео и player.swf обратно к вам, возможно, в <iframe>.

...