Странное Сафари Видео "Загрузить" Поведение - PullRequest
4 голосов
/ 04 января 2012

Я написал простой видеопроигрыватель для одной страницы моего сайта, который работает, нажимая кнопки, чтобы изменить атрибут src тегов источника, а затем вызывая нагрузку на элемент проигрывателя.Элемент видео выглядит следующим образом:

<video id="player" title="Video 1" controls  width="600" height="480" preload="metadata">
    <source src="videos/english.mp4" type="video/mp4" />
    <source src="videos/english.webm" type="video/webm" />
    <source src="videos/english.ogv" type="video/ogg" />
    <object type="application/x-shockwave-flash" data="plugins/flash/player.swf" width="600" height="480">
        <param name="movie" value="plugins/flash/player.swf" />
        <param name="allowfullscreen" value="true" />
        <param name="allowscriptaccess" value="always" />
        <param name="flashvars" value="file=../../videos/english.mp4" />
        <p>Your browser can't play HTML5 video. <a href="videos/english.webm">Download it</a> instead.</p>
    </object>
</video>

А скрипт, относящийся к событию click, выглядит следующим образом:

$(".playerControl").live("click tap",function(){

    // If the player isn't playing this divs video

    if($("#player").data('currentVideo') != $(this).data('videoID')){

        // Swap active button states

        $(".playerControl.active").removeClass('active');
        $(this).addClass('active');

        // Pause the current video and swap the content, then load the player

        $("#player")[0].pause();
        $("#player").html($(this).data('innerHTML'));
        $("#player").data({
            innerHTML: $(this).data('innerHTML'),
            currentVideo: $(this).data('videoID')
        });
        $("#player")[0].load();
        updateBackup();

    }       
});

Это прекрасно работает на Chrome и, вероятно, Firefox, но самый странныйпроблема возникает, когда я использую это в Safari.Первое видео будет отображаться, но каждое второе видео, которое я пытаюсь воспроизвести, даже не пытается загрузить.Вызов load на проигрывателе из консоли также не дает результатов, но проверка проигрывателя показывает, что его источники верны, и видео будет воспроизводиться, если мне удастся щелкнуть его после того, как видео не работает.

Надеюсь, это звучит не слишком запутанно, в основном Safari не загружает все остальные видео, которые я пытаюсь воспроизвести, но без проблем воспроизводит какие-либо файлы самостоятельно.У меня есть ощущение, что есть какая-то дополнительная функция, которую я должен вызвать, чтобы заставить ее работать, но я не уверен.

Обновление: я переписал событие click для выполнения независимо от того, какая кнопка нажата, и онапроблема с загрузкой видео при каждом следующем нажатии, а не с самим видео.

Обновление 2: я попытался добавить пару строк, которые очищали HTML-видео и загружали перед вставкой нового HTML-кода, чтобы инициализировать его, иэто привело к тому, что он начал загружаться примерно две трети времени.

1 Ответ

2 голосов
/ 07 октября 2012

Вы можете попробовать обернуть тег <video> в блок и переписать его innerHTML.

Примерно так:

<div id="player-holder">
    <video id="player">...</video>
</div>

// rebuild player data and reload HTML.
$("#player").html($(this).data('innerHTML'));
$('#player-holder').html($('#player-holder').html())

Это перестроит элемент <video> и может помочь спроблема в Safari.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...