Проблемы с контекстом холста HTML5 drawImage или getImageData в Safari / Lion? - PullRequest
1 голос
/ 02 августа 2011

У кого-нибудь еще есть проблемы с использованием видео с canvas в Safari на Lion?

У меня есть код, который отлично работает в Chrome 12 и Safari 5.1 на Snow Leopard.Я протестировал один и тот же код в Safari 5.1 на Lion (позднее build #) и Chrome 12 на Lion.Прекрасно работает в Chrome, не работает в Safari.

Вот код:

var video = document.getElementById("video");
var canvas1 = document.getElementById("c1");
var canvas2 = document.getElementById("c2");
var context1 = canvas1.getContext("2d");
var context2 = canvas2.getContext("2d");

context1.drawImage(video, 0, 0, canvas1.width, canvas1.height);
var frame = context1.getImageData(0, 0, canvas1.width, canvas1.height);
context2.putImageData(frame, 0, 0);

Я слышу звук в Safari, но не вижу видео.В Chrome я вижу видео и слышу аудио (тот же файл).

Ответы [ 2 ]

1 голос
/ 06 октября 2011

У меня возникают похожие проблемы с Safari 5.1 / Lion (10.7.1), когда я выполняю вызов canvasContext.drawImage (), ссылающийся на элементы видео. Также случается на Webkit по ночам. Вызов drawImage () с элементами изображения, похоже, не затронут.

Для сравнения, как в Chrome 14, так и в Firefox 7 я получаю стабильные 60FPS, в то время как Safari 5.1 действительно пытается преодолеть 10FPS, если даже это. Звук воспроизводится без проблем.

Здесь я получаю похожие результаты на двух разных машинах: 2010 MBP и iMac соответственно. Оба на льве.

Еще один MBP 2011 года, который у нас есть, на Safari 5.0.3 / Snow Leopard 10.6.6, не демонстрирует проблемы и воспроизводит видео со скоростью 60FPS.

http://dl.dropbox.com/u/15924676/sketch_67/index.html

<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
    body {
        background:  #000;
        margin: 0;
        padding: 0;
    }
</style>
</head>
<body>
<script src="js/libs/jquery-1.6.4.min.js"></script>
<script src="js/mylibs/Stats.js"></script>
<script>
    var canvas, canvasContext, stats, video;

    $(document).ready(function() {
        // create stats
        stats = new Stats();
        stats.domElement.style.position = 'absolute';
        stats.domElement.style.top = '0px';
        stats.domElement.style.zIndex = 100;
        document.body.appendChild(stats.domElement);

        // create canvas
        canvas = document.createElement( 'canvas' );
        canvas.width = 480;
        canvas.height = 204;
        canvasContext = canvas.getContext('2d');
        document.body.appendChild(canvas);

        // create video
        var video = document.createElement( 'video' );
        video.autoplay = true;
        video.src = 'video/sintel.mp4';

        setInterval( function () {
            if (video.readyState === video.HAVE_ENOUGH_DATA) {
                // draw video image to canvas context
                canvasContext.drawImage( video, 0, 0, 480, 204 );
            }

            // update stats display
            stats.update();
        }, 1000 / 60 );

    });
</script>
</body>
</html>

Другие примеры canvas + видео, которые я нашел в библиотеке разработчиков Safari, также выглядят необычно медленно. http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/HTML-canvas-guide/PuttingVideoonCanvas/PuttingVideoonCanvas.html

0 голосов
/ 04 мая 2012

Я вижу похожую проблему в разрабатываемом приложении.

Используя пример кода Робина Пиона, я получаю около 7FPS в Safari под Lion 10.7.3. Что еще хуже, фактическое изображение холста обновляется только каждые несколько секунд. Похоже, что холст захватывает только ближайший ключевой кадр в видео.

Однако, если вы удалите расширение из видеофайла и соответственно обновите код

video.src = 'video/sintel';

Захват кадров работает на скорости 60FPS. У меня даже был фильм с разрешением 720p и скоростью 60 кадров в секунду. Bizarre.

Я бы хотел исправить это. Удаление файла является хорошим решением, но имеет побочные эффекты, которые нежелательны. В частности, это влияет на вашу способность быстро искать в видео.

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