Actionscript 3 NetStream немедленно останавливается, не получает метаданные - PullRequest
1 голос
/ 29 сентября 2010

Я пишу базовый видеопроигрыватель во Flash CS5 и Actionscript 3. Для этого базового проигрывателя я присоединяю свой NetStream к своему NetConnection, а затем вызываю метод потока .play () для начала загрузки. Хотя я хочу, чтобы метаданные и поток начали буферизоваться, я не хочу начинать воспроизведение сразу, поэтому я немедленно вызываю метод потока .pause (). К сожалению, когда я немедленно делаю паузу, событие onMetaData клиента моего потока не всегда вызывается, поэтому я не обязательно получаю общее время воспроизведения загруженного видео.

В качестве обходного пути я поместил вызов метода «пауза» в слушателе onMetaData, но иногда мое видео проигрывалось немного до получения его метаданных и поэтому продолжало проигрываться до тех пор, пока не произойдет.

Есть ли хороший способ остановить воспроизведение моего потока и по-прежнему получать метаданные видео?

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Хорошо, вот немного изящный способ думать об этом по-другому ... Не прикрепляйте видеообъект к объекту потока прямо сейчас.Начните воспроизведение в потоковом режиме, одновременно показывая визуальный элемент «Пожалуйста, подождите» БЕЗ отображаемого видеообъекта.В вашем прослушивателе onMetaData посмотрите, сохраняли ли вы ранее продолжительность.Если нет, предположим, что это первый вызов onMetaData, сохраните длительность, приостановите воспроизведение, найдите поток в 0, ТО присоедините видеообъект.

Пользователь увидит «пожалуйста, подождите» всего секунду, затем видео появится, приостановлено и готово к воспроизведению с ожидаемой продолжительностью.Пользователь будет совершенно не осведомлен о том, что поток немного переместился в ожидании.

1 голос
/ 30 сентября 2010

Вы должны вызывать паузу при возникновении события NetStatusEvent.STATUS NetStream.Play.Start.

Обновление:

Для очень коротких потоков (например, buffer> duration) NetStream.Play.Start может сработать непосредственно перед обратным вызовом onMetaData.

Перед приостановкой на NetStream.Play.Start проверьте, предоставлены ли метаданные, если нет, не делайте паузу прямо, а ждите onMetaData чтобы сделать паузу (просто установите флаг, например pauseOnMetaData = true).

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