HTML5 видео, афиша img не отображается в IE - PullRequest
8 голосов
/ 09 декабря 2011

У меня небольшая проблема - у меня есть HTML5-видео с моего сайта, оно отлично работает в FF, Chrome, Safari. Тем не менее, он показывает видео только в IE, если я установил autoplay = "autoplay". Почему-то на плакате нет изображения img - Вы можете увидеть его здесь, http://test.jsworldmedia.com/ Просто нажмите «Смотреть видео». Кто-нибудь знает, что не так?

Код:

<video id="videoContainer" width="932" height="524" controls="controls" poster="/media/13037/big_buck_bunny_poster.jpg">
    <source src="http://test.jsworldmedia.com/media/13010/big_buck_bunny.mp4" type="video/mp4" />
    <source src="http://test.jsworldmedia.com/media/13555/big_buck_bunny.ogv" type="video/ogg" />
    <source src="http://test.jsworldmedia.com/media/13034/big_buck_bunny.webm" type="video/webm" />
    <object id="flash_fallback_1" class="vjs-flash-fallback" width="932" height="524" type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf">
        <param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
        <param name="allowfullscreen" value="true" />
        <param name="flashvars" value="config={'playlist':['http://test.jsworldmedia.com/media/13037/big_buck_bunny_poster.jpg', {'url': 'http://test.jsworldmedia.com/media/13010/big_buck_bunny.mp4','autoPlay':false,'autoBuffering':true}]}" />
            <img src="http://test.jsworldmedia.com/media/13037/big_buck_bunny_poster.jpg" width="932" height="542" alt="" title="No video playback capabilities." />
    </object>
</video>

Ответы [ 3 ]

11 голосов
/ 09 декабря 2011

IE9 перезаписывает изображение постера, если часть видео загружена, что является значением по умолчанию.Если вы добавите атрибут preload="none", изображение плаката будет работать в IE9.

Не идеально.

edit Я написал об этом и также подал отчет об ошибке в W3C, так как я думаю, что его нужно изменить.

2 голосов
/ 13 июля 2012

Я обнаружил, что атрибут poster слишком противоречив.Для меня preload="none" только исправил проблему IE 9.

Вам лучше отредактировать видео, чтобы изображение плаката было первым кадром вашего видео.

Я большой поклонник этого видео дляКаждый сайт, который описывает, как именно следует реализовать тег html5 <video> с запасными вариантами.Автор в частности говорит об атрибуте poster, упоминая непоследовательную поддержку и серьезную ошибку в iOS 3.x в качестве причин для кодирования изображения плаката в первый кадр вашего видео.

Вы также можете проверить VideoJs , который решит многие проблемы с несколькими браузерами.

EDIT (2012-11-04): VideoJ могут не подходить, о серьезных проблемах сообщили в IE9.

0 голосов
/ 04 марта 2014

У меня была такая же проблема.Я сделал следующее, чтобы плакат работал в IE8 и IE9.

В html-файл добавьте изображение под видеоэлементом с постером в виде src:

<img id="video-poster" width="460px" height="260px" src="img/video_poster.jpg">

В css-файле добавьте:

#video-poster {position: absolute; z-index: 600; display: none;}`

Обратите внимание, что родитель должен иметь в css position: relative

В файле JS добавить:

/**
 * fix the following issue: "video preview not showing properly on IE8 and IE9"
 */
(function ($) {
    var browserIEInfo = navigator.userAgent.match(/MSIE (([0-9]+)(\.[0-9]+)?)/);
    if (browserIEInfo === null || parseInt(browserIEInfo[2]) > 9){
        return;
    }

    if (parseInt(browserIEInfo[2]) < 9 && !isFlashSupported()) {
        return;
    }

    var video = $('video'); // use element id if there is more than 1 video
    var videoPoster = $('#video-poster');

    $( window ).resize(function() {
        fixVideoCoverPosition();
    });

    fixVideoCoverPosition();
    videoPoster.show();

    videoPoster.click(function() {
        video.get(0).play()
    });

    video.on('playing', function() {
        videoPoster.hide();
    });

    video.on('ended', function() {
        videoPoster.show();
    });

    function isFlashSupported() {
        var hasFlash = false;
        try {
            new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
        } catch (e) {
            var mimeTypes = navigator.mimeTypes;
            if (mimeTypes
                && mimeTypes['application/x-shockwave-flash'] !== undefined
                && mimeTypes['application/x-shockwave-flash']['enabledPlugin']
            ) {
                hasFlash = true;
            }
        }

        return hasFlash;
    }

    function fixVideoCoverPosition() {
        var videoPosition = video.position();
        video.width();
        $('#video-poster').css({
            top: videoPosition.top,
            left: videoPosition.left,
            width: video.width(),
            height: video.height()
        });
    }
}(jQuery));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...