Как предварительно загрузить флэш-видео и изображения? - PullRequest
1 голос
/ 24 февраля 2012

Я работаю над веб-приложением, которое проходит через «страницы» через ajax.Содержимое каждой страницы находится в файле xml, приложение ajax создает этот файл XML и создает из этого страницу, а затем выплевывает ее в браузер.

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

Видеопроигрыватель всегда присутствует вДом, когда он не используется, я скрываю его за пределами экрана.

Я предполагал, что использовать новый Image () и дать ему источник кеширует это изображение тоже верно?

var l_image = new Image();
//other stuff happens here

switch(l_next.type) {
    case 'st_animation':
      if(l_next.video != undefined && l_next.video != '') {
        l_videoSrc = String(l_next.video);
        _videoPlayer.loadVideo(l_videoSrc);
        delete l_next;
      }
      //give 2secs for the video to load atleast the first frame
      setTimeout(p_callback, 2000);
      break;

    default:
      if(l_next.image != undefined && l_next.image != '') {
        l_imageSrc = 'files/'+ l_next.image;
        delete l_next;
        l_image.src = l_imageSrc;
        //replace the image or append it
        if(this.data.type == 'st_animation') {
          _$image.html('<img src="'+ l_imageSrc +'" alt="" />');
        }
        else {
          _$image.prepend('<img src="'+ l_imageSrc +'" alt="" />');
        }
        //trigger callback when loaded
        if(l_image.complete) {
          setTimeout(p_callback, 500);
        }
        else {
          l_image.onload = function() {
            setTimeout(p_callback, 500);
          }
        }
      }

и функция обратного вызова:

/*
 * Goes to the page with the specified id
 */
goTo : function(p_pageID) {
  //empty content & show loader
  _$content.empty();
  _currentPage = null; //empty the page data
  //_$loader.fadeIn(500);
  //get the page we're going to's data
  var l_data = this.getData(p_pageID);
  //instantiate this pages PageType sub-class
  eval('_currentPage = new '+ l_data.type +'(l_data)');
  l_data = null;
},


/**
 * Loads the xml of the page's id you pass it
 */
getData : function(p_pageID) {
  var l_cacheBuster = '?cacheBuster='+ _structure.course.settings.cache_buster,
      l_xmlPath = './data/'+ p_pageID +'.xml'+ l_cacheBuster,
      l_data = new Object();
  //ajax request
  $.ajax({
    type: 'GET',
    url: l_xmlPath,
    dataType: 'xml',
    async: false,
    success: function(p_data) {
      //convert the xml structure to json
      l_data = $.xml2json(p_data);
      //check for parsing error
      if(l_data.text != undefined) {
        var l_dataString = String(l_data);
        if(l_dataString.indexOf('XML Parsing Error') > -1) {
          trace(l_dataString);
        }
      }
    },
    error: function(p_response, p_status, p_error) {
      trace('Could not load "'+ l_xmlPath +"\"\r\n"+ p_status +': '+ p_error.name);
    }
  });
  return l_data;
}

Заранее спасибо ...

1 Ответ

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

Предварительная загрузка изображения - решенная проблема, поэтому нет необходимости заново изобретать - колесо - . Поскольку Flash контролирует видео, предварительная загрузка SWF должна быть выполнена с помощью ActionScript.

Ссылки

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