Рендеринг цепочки изображений, таких как видео в JavaScript - PullRequest
12 голосов
/ 15 декабря 2010

Я пытаюсь синтезировать видео, используя поток изображений в JavaScript. Проблема в том, что «видео» либо прерывистое, что было решено с помощью своего рода буфера. Однако теперь проблема в том, что изображения на самом деле загружаются намного быстрее, чем они отображаются.

Если у вас есть источник изображений, который изменяется, например, IP-камера, вы можете попробовать пример ниже. Что я заметил, так это то, что «видео» все еще обновляется довольно медленно, однако, просматривая анализатор пакетов, я вижу, что изображение на самом деле полностью восстанавливается гораздо быстрее, чем оно отображается.

Вот пример:

<HTML>
  <HEAD>
    <SCRIPT SRC="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js">
    </SCRIPT>
    <SCRIPT>
      function startVideo()
      {
        //when the buffer image is loaded, put it in the display
        $('#image-buffer').load(function()
        {
          var loadedImage = $(this).attr('src');

          $('#image-displayed').attr('src', loadedImage);

          $(this).attr('src',
            'http://path.to/image.jpg?nocache=' + Math.random());
        });

        $('#image-buffer').attr('src',
          'http://path.to/image.jpg?nocache=' + Math.random());
      }

      function stopVideo()
      {
        $('#image-buffer').unbind('load');
        $('#image-buffer').attr('src', '');
        $('#image-displayed').attr('src', '');
      }
    </SCRIPT>
  </HEAD>
  <BODY>
    <BUTTON ONCLICK="startVideo();">Start Video</BUTTON><BR/>
    <BUTTON ONCLICK="stopVideo();">Stop Video</BUTTON><BR/>
    <IMG ID="image-displayed"/>
    <IMG ID="image-buffer" STYLE="visibility: hidden;"/>
  </BODY>
</HTML>

Ответы [ 4 ]

4 голосов
/ 15 декабря 2010

Ваше видео почти наверняка будет отрывистым, если только размер изображений не будет гарантированно согласован. И даже тогда загрузка изображений будет зависеть от условий сети. Что касается вашей проблемы скрипта, загружающего изображения быстрее, чем они отображаются, то определить источник этого невозможно, если только мы не получим фактический доступ к вашему источнику.

Переписав код с использованием Stack Exchange API в качестве источника изображения, и отслеживая активность с помощью Firebug, мы видим, что сетевая активность примерно соответствует тому, что мы видим на экране.

alt text

Используемый код:

$('#buffer').load(function(){
    $('#video').attr('src', this.src);
    this.src = sites[Math.floor(Math.random() * sites.length)].logo_url + '?cache=' + new Date().getTime();
}).trigger('load');

Смотрите этот код, работающий вживую здесь: http://www.jsfiddle.net/yijiang/r957s/

3 голосов
/ 24 ноября 2014

Сам ищу решение.Вот хорошая небольшая статья о создании чего-то удивительно удобного для случая IP-камеры.

http://techslides.com/convert-images-to-video-with-javascript

Также попробуйте загрузить все изображения в полосе изображений (CSS-Stuf) (при условии, что изображений не будет много) и скрыть все, кроме первого, с переполнением: скрыто,Затем измените положение полосы изображения для ширины изображения с помощью setInterval (в основном очень быстрый слайдер без анимации перехода).В этом случае все изображения будут уже загружены и визуализированы, и вы можете контролировать время между каждым «кадром».

3 голосов
/ 31 марта 2012

У меня была похожая проблема (в Firefox - не проблема в других браузерах.) В конце я буквально загрузил свой фильм в виде киноленты, поместил его в скрытый div переполнения и сместил изображение на высоту кадра,Экономит несколько килобайт на общий размер файла для загрузки!Я сделал свою киноленту с помощью gdlib

1 голос
/ 15 декабря 2010

Вместо того, чтобы загружать изображения как можно чаще, вы можете использовать метод window.setInterval для запуска функции с заданным интервалом, например, десять раз в секунду.как только вы отобразили изображение, но вместо того, чтобы отображать его с помощью события загрузки, вы можете позволить функции, выполняющейся с интервалом, делать это.

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