Ошибка? Netstream не возобновится после начальной паузы - PullRequest
1 голос
/ 27 августа 2009

Я испытываю какое-то странное поведение, для которого я не могу найти ничего задокументированного знание.

Вот что происходит:

После вызова метода play () netstream приостанавливается, когда код NetStatus является "NetStream.Play.Start". Это отключает поведение по умолчанию автоматически играть. Прежде чем продолжить с либо togglePause () ИЛИ возобновить (), выполните поиск операция. Когда вы пытаетесь продолжить с помощью togglePause () или resume (), netstream больше не начнет играть.

Если вы просто сразу же приостановили (), а затем возобновили () без поиска (), возобновляет нормально.

Кроме того, если вы задержите начальную паузу примерно на 250 мс, вы можете затем искать () и впоследствии возобновить () без проблем.

Я разместил демо и источник здесь: http://drinkspiller.cannonballinteractive.com/temp/ResumeAfterPauseAndSeek/

Код является примером кода непосредственно из документов AS3 для NetStream с незначительными дополнения для обработки начальной паузы и обработки кнопок поиска и возобновления. Там не так много.

Обратите внимание, что я делаю паузу, вызывая stream.seek (0), а затем stream.pause (); это обеспечивает отображение первого кадра в экземпляре Video вместо ничего. Такой же поведение происходит без stream.seek (0) и только с помощью stream.pause () для остановки воспроизведение.

Я также пытался отложить вызов startPaused (); до полного заполнения буфера код, но поведение такое же.

Может ли кто-нибудь помочь мне найти разумный обходной путь или подтвердить для меня, что это ошибка? Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

Определенно есть ошибки в игре (и плохая документация). Но я думаю, что у вашего образца есть две потенциальные проблемы:

  1. Я не думаю, что это хорошая идея вызвать NetStream.seek до получения метаданных о FLV. (Учтите, что длительность извлекается из метаданных). Я не знаю, есть ли официальная документация по этому поводу, но по опыту я обнаружил, что это может быть проблематично. Вы можете попробовать поместить любые события паузы / поиска в обработчик события onMetaData.

    Мое ограниченное понимание заключается в том, что метаданные включены в линию вместе с данными FLV. Это может быть где угодно, но в идеале и обычно оно находится в начале файла. Поэтому при постепенной загрузке NetStream должен получать достаточно информации для получения метаданных, необходимых для более сложных действий с видео (например, поиска). Это может объяснить, почему это сработало для вас, если поставить паузу в 250 мс.

  2. Ваш образец FLV кодируется не так, как другие FLV, с которыми я работал. Я не совсем уверен, почему, но если я изменил ссылку на другой FLV, все работало замечательно (после того, как проблема № 1 была решена).

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

Относительно использования вызова seek (0), чтобы убедиться, что есть рамка с постером ... Мне не пришлось делать это самому. Это также может быть связано с тем, как кодируются FLV.

1 голос
/ 17 августа 2011

Если вы делаете netstream.seek (0); он снова вызывает ваш обработчик метаданных.

...