Как показать изображение предварительного просмотра во время загрузки Flash SWF? - PullRequest
1 голос
/ 12 августа 2011

У меня на сайте есть сторонние Flash-файлы SWF размером до 100 КБ.например, Flash Video Player "JWPlayer" SWF имеет размер 98 КБ.

Это хорошо для людей с широкополосным доступом, но не так хорошо для посетителей с низкой пропускной способностью.например, при скорости 40 кбит / с, мы говорим о загрузке в течение 20 секунд.

Проблема в том, что на медленных соединениях все посетители видят статический белый экран, поэтому он может закрыть страницу, думая, что она мертва,Если я щелкну правой кнопкой мыши область, в которой должен находиться SWF, объект Adobe Flash Player займет это место, но сторонний SWF еще не завершил загрузку.

Я бы хотел, чтобы посетители веб-сайта увиделизагрузка GIF или чего-то подобного.

К сожалению, ни один из сторонних SWF-файлов не имеет элемента "preloader".И они не являются открытым исходным кодом, поэтому я не могу добавить к ним предварительный загрузчик.

Итак, мой вопрос ...

Есть ли способ отобразить загрузочное изображение, предпочтительно анимацию в формате GIF?, когда загружается SWF?

Например, есть ли способ заставить проигрыватель Adobe Flash отображать изображение во время загрузки в SWF?

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

Я использую swfobject 2.2 для встраивания SWF-файлов, поэтому решение, которое учитывает это или, по крайней мере, не ломается, поможет.

Большое спасибо за то, что нашли время прочитать моюопубликовать, даже если вы не можете помочь.

Дейв

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

В итоге мы решили пойти на смешанную настройку:

Для пользователей с низкой пропускной способностью мы устанавливаем параметр флэш-памяти wmode на «прозрачный» и устанавливаем gif как фоновое изображение (беззагружая счетчик, эти пользователи с низкой пропускной способностью думают, что страница ничего не делает).

Однако использование wmode = transparent имеет отрицательный побочный эффект в том смысле, что Flash не использует аппаратное ускорение.Но для наших пользователей с низкой пропускной способностью битрейты, например, нашего видео, достаточно низкие, поэтому в большинстве случаев им не требуется аппаратное ускорение.

Для пользователей с высокой пропускной способностью мы предоставляем, например, видео с более высокой скоростью передачи битов и т. Д.Ускорение становится более важным.Для этих пользователей мы используем wmode = direct и обходимся без загрузки GIF, так как SWF все равно загружается достаточно быстро.

С размером наших SWF-файлов и их XML-файлов, которые также должны быть загружены, мы перешлидля ограничения пропускной способности в 1 мегабит, где, если пользователи имеют более высокую пропускную способность, мы не используем графику загрузки, и наоборот.Другие люди могут найти другие уровни более подходящими.

Мы бы предпочли иметь возможность установить ограничение полосы пропускания намного ниже, если это возможно, как на старых компьютерах мы могли бы сделать с некоторым программным ускорением видео, которое составляет 384 кбит/ s, но удаление спиннера загрузки пользователя с низкой пропускной способностью, подобного этому, означало бы, что они слишком долго ожидают, и на экране ничего не происходит, и это выглядит хуже, чем потеря нескольких кадров во время воспроизведения видео.

Здесьэто ссылка на описание Adobe различных режимов и того, как их обрабатывают разные браузеры.

http://kb2.adobe.com/cps/127/tn_12701.html#main_BrowserSupportForWmodes

Надеюсь, это когда-нибудь поможет кому-то еще.

Дейв

0 голосов
/ 15 августа 2011

Не зная, какие сторонние swfs вы используете, это может быть сложно, но вот несколько вещей, о которых стоит подумать:

Один из подходов состоит в том, чтобы скрыть swf (или div, в котором находится swf) до его загрузки, а затем открыть его после завершения. Вы можете иметь вращающийся / загружающий образ, сидящий в его месте тем временем. Тем не менее, вам действительно нужна функция JavaScript, которая вызывается после завершения загрузки. Как только это произойдет, вы можете использовать jQuery для .show() или .hide() вашего блесна и SWF соответственно.

JWPlayer содержит несколько событий, которые вы можете использовать . Похоже, onReady поможет вам.

Что касается других сторонних swfs, я бы посмотрел их документацию на наличие похожих обратных вызовов javascript. Я знаю, что swfobject имеет функцию обратного вызова onLoad , как и некоторые другие решения встраивания, такие как Swiff , при условии, что вы можете их использовать.

Удачи!

РЕДАКТИРОВАТЬ: обратный вызов swfobject может быть вызван, когда swf был успешно внедрен не обязательно загружен . Лучше всего поиграть с этим и посмотреть, работает ли он - или использовать функции обратного вызова стороннего swf, когда это возможно.

РЕДАКТИРОВАТЬ 2: Вот пример флэш-загрузчика.

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;

function startLoad() {
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("url-to-your-swf.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.load(mRequest);
}

function onCompleteHandler(loadEvent:Event){
    addChild(loadEvent.currentTarget.content);
    //Here's where you specify your js function
    ExternalInterface.call("flashLoaded"); // <-- where 'flashloaded' is a js function

}

startLoad();
...