Показать сообщение отдельно
Старый 07.05.2010, 23:56
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 1  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
По умолчанию Как правильно установить начальное заполнения буфера у NetStream?

Воспроизвожу flv-видео в баннере. Столкнулся с проблемой.
Хотел установить условие, по которому воспроизводиться оно начнет только после заполнения буфера первыми 15-ю секундами ролика.
Для этого задаю потоку свойство setBufferTime(15):

Однако в некоторых случаях, которые я так и не смог отследить, происходит неприятная вещь:
Пока заполняется буфер (время зависит от скорости канала), картинка стоит на первом кадре (это вроде как правильно), после первоначального заполнения буфера 15 секундами происходит очень быстрое проигрывание практически до середины ролика (сам ролик 25 сек).
С чем это может быть связано? Что я делаю не так?
В некоторых случаях все происходит по задуманному - ожидание заполнения буфера на 15 сек. видеоматериала и после этого стартует плавное воспроизведение с начального кадра и с ровным fps видео.

Вот сам баннер с видео:
http://www.21rest.ru/test/aurum/aurum.html
Проблема проявляется, когда банер стартует первй раз, потом, когда видео берется уже из кэша, все нормально.

Думал, с чем это может быть связано, но не уверен, что ищу ошибку в нужном направлении.
Может ли это быть связано с тем, что поток и его свойства я создаю с самого начала, но присоединяю его к видео-объекту и запускаю само проигрывание спустя некоторое время:

Код AS1/AS2:
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.setBufferTime(15);
Спустя некоторое время вызывается функция, в которой:
Код AS1/AS2:
vid.attachVideo(ns);
ns.play(videoUrl);

В примерах хелпа приведены разные последовательности действий:
1. Из примера по созданию видеобанера:
Код AS1/AS2:
var my_nc:NetConnection = new NetConnection();
my_nc.connect(null);
var my_ns:NetStream = new NetStream(my_nc);
my_video.attachVideo(my_ns);
my_ns.setBufferTime(5);
my_ns.play("http://www.helpexamples.com/flash/video/vbanner.flv");
2. Из примера по свойсту NetStream.bufferLength :
Код AS1/AS2:
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
stream_ns.setBufferTime(3);
my_video.attachVideo(stream_ns);
stream_ns.play("video1.flv");
То есть в одном случае сперва устанавливается размер буфера, потом поток присоединяется к видеобъекту, в другом случае наоборот.

Принципиально ли это? И связано ли с моей трудностью или я не туда копаю?
Сам прямо сейчас проверить не могу.
Может быть корни проблемы в другом?


Последний раз редактировалось mooncar; 08.05.2010 в 18:18.