MediaElement.js setSrc не работает для резервных флэш-памяти на FF, IE7-8 - PullRequest
3 голосов
/ 09 сентября 2011

Я видел несколько дискуссий по этому поводу, но никаких реальных ответов.Я добился большого успеха в работе mediaelement.js на меня, за исключением того, что он просто не даст мне setSrc() в случае откатов флэш-памяти.Это огромный облом после такой большой работы.

Для небольшого фона я использую mediaelement-and-player.js v2.1.9 и использую API их проигрывателя для смены медиа-источника с помощью player.setSrc.Я играю аудио MP3.

Я получаю эту ошибку в FF Mac:

this.media.setSrc не является функцией

И эта ошибка в IE8 Win:

SCRIPT445: объект не поддерживает это действие

Мне трудно поверить, что это не было полностью проверено, учитывая, что онокажется базовой частью их API.Я видел некоторые другие проблемы с похожими проблемами, но опять же, никаких реальных ответов.

Ответы [ 4 ]

0 голосов
/ 24 сентября 2014

Я ответил на аналогичный вопрос на github .Вот мое решение:

Это происходит, когда метод setSrc вызывается слишком рано после инициализации проигрывателя mediaElement.Из-за аварийного восстановления флэш-памяти swf (и, следовательно, его методы API) не будут доступны, пока не произойдет событие успеха.После этого setSrc отлично работает в IE8 ..

Я не хотел устанавливать исходный источник из обработчика успеха.Поэтому я использовал логическое значение var, чтобы проверить, произошло ли событие успеха.В моем методе установки источника я проверяю его значение и использую рекурсивность (с setTimeout для предотвращения избыточного уничтожения) всякий раз, когда логическое значение переменной равно false.

//create the tag
var video = $("<video>",{id:"videoElement",width:640,height:360}).appendTo('body');//jquery

var mediaElementInitialized = true 

//create the mediaelement
var mediaElement = new MediaElementPlayer("#videoElement",{
            /**
             * YOU MUST SET THE TYPE WHEN NO SRC IS PROVIDED AT INITIALISATION 
             * (This one is not very well documented.. If one leaves the type out, the success     event will never fire!!)
             **/
            type: ["video/mp4"],
            features: ['playpause','progress','current','duration','tracks','volume'],

            //more options here..

            success: function(mediaElement, domObject){
                mediaElementInitialized = true;
            },
            error: function(e){alert(e);}
            }
        );

var setSource = function(src){

    if(mediaElementInitialized == true){

         if(mediaElement){
            mediaElement.setSrc(src);
            mediaElement.play();
        }

    } else {
        //recursive.. ie8/flashplayer fallback fix..
        var self = this;
        setTimeout(function(){
            self.setSource(src);
        },100);
    }
}
0 голосов
/ 30 июля 2013

Вам необходимо добавить «flashmediaelement.swf» в ваш код.

0 голосов
/ 16 мая 2014

Была такая же проблема.Решено путем добавления непустых атрибутов src и type="audio/mp3":

<audio id="player" controls src="#" type="audio/mp3" preload="none"></audio>

Здесь рекомендуется наличие preload="none", поскольку без него элемент будет отправлять дополнительный запрос на URL текущей страницы впопытка загрузить аудио.


Обновление: найден альтернативный способ, WAV-файл нулевой длины можно встроить в src, таким образом, вы можете использовать атрибут preloadобычно и не беспокойтесь о том, что ненужный запрос будет отправлен, если пользователь нажмет кнопку воспроизведения до того, как вы установите src.

<audio id="player" controls type="audio/mp3" src="data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=">

Не беспокойтесь о несовместимости type и srcпотому что, согласно спецификации аудиоэлемента , type вообще не является допустимым атрибутом тега audio (type является только атрибутом тега source), здесь он размещен только для исправленияПоведение MediaElement.js.

0 голосов
/ 21 октября 2011
var plugin = new MediaElementPlayer(#mplay_audio_p',
{
//...params...
});

var url="http://www.somesite.com/audiofile.mp3";

plugin.setSrc(url);
plugin.load();
plugin.play();
...