NetStream создает бесшовный динамический плейлист AS3

Мне нужно создать список воспроизведения динамически с почти бесшовными переходами в AS3.

Я попытался использовать команду play2 с.APPEND. Это работает в не динамической обстановке. Но то, что у меня есть, это при запуске приложения, я знаю, что такое первое видео, затем, до того, как это видео закончится, я буду знать, каким будет следующее видео для воспроизведения, и так далее, пока я не получу сообщение, что я проиграл последнее видео.

Итак, в начале я не знаю, сколько будет видео, и при этом я не знаю порядок файлов, которые будут воспроизводиться.

Если я пытаюсь добавить видео с помощью APPEND, когда поток уже воспроизводится, кажется, что он заменяет текущее воспроизводимое видео, а не начинает буферизовать и воспроизводить только в конце текущего видео.

Я также не могу использовать appendBytes, поскольку видеофайлы должны быть в формате h.264

Любая помощь будет принята с благодарностью, так как я не знаю, в каком направлении смотреть больше. Я могу дать более подробную информацию, если это необходимо.

Большое спасибо.

1 ответ

Это немного странный ответ, но логика логична и должна дать вам другое направление.

Во-первых, концепция: с Flash-видео у вас есть 2 совершенно отдельных процесса, происходящих одновременно:

  1. буферизация / загрузка

  2. видео играет

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

Итак, что касается реализации: будет иметь основного игрока и дополнительного (теневого) игрока / загрузчика. Основной игрок должен нести ответственность за загрузку исходного видео и его воспроизведение.

[и здесь приходит волшебство]

Как только буферизация в основном проигрывателе завершена, определяется NetStream.Buffer.Flush NetStatusEvent для объекта NetStream. Затем начните буферизацию следующего видео в теневом проигрывателе, инициализируя соединение и используя NetStream.Pause, чтобы начать буферизацию, но не воспроизведение, пока основной проигрыватель проигрывает.

Когда воспроизведение в основном проигрывателе завершено (определяется событием NetStream.Play.Stop), вы можете передать переменные (NetConnention, NetStream & Video) (всегда передаваемые по ссылке) из проигрывателя теней в основной проигрыватель, и он должен продолжаться практически без проблем. Затем удалите значения из теневого проигрывателя и повторите описанный выше процесс, ожидая завершения буферизации перед загрузкой следующего видео; до бесконечности.

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

Это будет довольно неудобно для сборки (отсюда и отсутствие примера, поскольку это сложно и, по сути, ваша работа;), так как вы будете иметь дело с 2 наборами NetConnections, NetStreams & Videos - которые сложно начать с, много событий, которые требуют обработки...

Но я не думаю, что play2() - это ваш ответ, который используется главным образом для пробуждения сломанных / закрытых NetConnections. Проблема, с которой вы здесь сталкиваетесь, заключается в бесшовной асинхронизации двух отдельных NetConnections & NetStreams.

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

Лучший, а.)

Другие вопросы по тегам