ActionScript 3: постановка в очередь FLV с использованием netstatus и cuepoints - PullRequest
0 голосов
/ 16 сентября 2009

Я создаю флеш-сайт, который использует видеопереходы для перехода из раздела в раздел. Фон каждого раздела - это фото в кадре с более высоким разрешением, чем сами видео перехода, которые масштабируются во время перехода. Первый кадр каждого видеоперехода является текущим фоновым изображением, а последний кадр каждого видеоперехода является фоновым изображением пункта назначения. Грубо говоря, это намеченный поток навигации по сайту:

Состояние покоя:
высокое разрешение изображения на переднем плане, без видео элементов

Пользователь нажимает элемент на навигации:
Flash подготавливает FLV через объект netstream и буферизирует его, что достигается с помощью функции netstream.play (). После получения события «Netstatus.Buffer.Full» объект netstream приостанавливается и присоединяется к видеообъекту, который затем добавляется в список отображения позади изображения высокого разрешения на переднем плане. Как только видео объект был добавлен на сцену, изображение высокого разрешения на переднем плане альфа-канала (через анимацию движения), оставляя только фоновое видео. Когда на переднем плане заканчивается анимация, воспроизводится видео на заднем плане. Как только NetStream.Play.Stop получен, процесс происходит в обратном порядке; то есть новое изображение переднего плана с высоким разрешением переворачивается поверх слоя видео, и видео удаляется со сцены, как только это будет сделано.

Я не думаю, что что-то не так (по крайней мере, в принципе) с потоком, который я обрисовал выше, и не похоже, чтобы это было так сложно сделать. Однако у меня не было никаких проблем с первоначальной настройкой объекта FLV / video. Сначала казалось, что FLV не выстраивался в очередь должным образом, и я имею в виду, что изображение на переднем плане с высоким разрешением переворачивалось, показывая белый экран, и видео появлялось и начало воспроизводиться только через секунду или две. (Первый кадр FLV определенно не белый).

Я понятия не имел, что могло быть причиной такого поведения, но хакерски добавил таймер, который воспроизводит netstream в течение примерно 100 мс после получения «Buffer.Full», тем самым продвигая видео дальше того, что могло вызвать белый экран. Это работало хорошо локально, но как только я поместил сайт на хост разработки, он вернулся к белому экрану во время переходов. Раздражает то, что увеличение хакерской задержки примерно до 2 с избавило от проблемы белого экрана на удаленных серверах, но результаты оказались непредсказуемыми; в зависимости от скорости соединения вы можете видеть, что все работает отлично, или вы можете попасть в видео, которое уже воспроизводилось в течение секунды или двух.

Я также пробовал аналогичные подходы, используя bytesLoaded / bytesTotal вместо событий netStatus, но безрезультатно. Мой последний эксперимент был с использованием контрольных точек; во время кодирования FLV я добавлял ключевую точку 0,2 секунды в FLV и ждал ТО, прежде чем перевернуть передний план; еще раз, это работало локально, но я обращался к промежуточному белому, прежде чем видео сработало при тестировании на удаленном сервере.

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

Justin

1 Ответ

1 голос
/ 16 сентября 2009

FLV - иногда хитрые звери.

Я посмотрю, смогу ли я выкопать некоторый код, который я написал некоторое время назад, чтобы справиться со всем этим. А пока мне нравится твоя идея о контрольных точках, и я знаю, почему у тебя с ними проблемы. Контрольные точки на самом деле привязаны к ключевым кадрам - поэтому вам нужно убедиться, что ваша ключевая точка размещена ПОСЛЕ вашего второго ключевого кадра - это обеспечит отображение хотя бы первого ключевого кадра видео.

...