Flex VideoDisplay прекратить буферизацию - PullRequest
3 голосов
/ 20 января 2009

Я пытаюсь создать приложение для видеоплеера, используя Adobe Flex и libh264streaming. В маленьком корпусе мой маленький плеер работает просто отлично.

Однако, если видео больше 200-300 МБ, я вижу кучу проблем:

  1. Браузер получает сбои.
  2. Он никогда не прекращает буферизацию, продолжает загружать, пока не получит полное видео (300M).
  3. Увеличивается загрузка ЦП и потребление памяти браузером.

Я думаю, 1. и 1. вызваны 2., так как игроку требуется все больше и больше памяти для хранения видео.

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

Есть идеи, как реализовать это во Flex?

Ответы [ 4 ]

1 голос
/ 29 января 2009

Мне удалось создать компонент на основе 2 объектов VideoDisplay, который загружает файлы mp4 порциями (скажем, с буфером в 1 минуту каждый). Вторичный VideoDisplay начинает загружать видео, как только основной дисплей достигает определенной точки (50% размера буфера в моем случае). Компонент переходит на дополнительный дисплей, как только заканчивается основное видео.

Этот подход довольно хорошо работает с использованием mod_h264_streaming. Ищите операции работают практически мгновенно.

1 голос
/ 22 января 2009

Что такое "libh264streaming"? Ищите его в Google, включите только эту тему с этим точным текстом. Из вашего описания это звучит так, как будто это вовсе не потоковое видео, а просто обеспечивает прогрессивную загрузку.

Прогрессивная загрузка иногда неправильно называется потоковой передачей. Это просто обычная HTTP-загрузка файла, и пока заголовки видео находятся в начале файла, Flash начнет воспроизводить файл, как только у него появятся заголовки плюс определенный минимальный объем видеоданных (4 ключевых кадра I верить). Прогрессивная загрузка традиционно не обеспечивает регулирование пропускной способности или другие преимущества потоковой передачи, но в последнее время некоторые предоставляют реализации, которые загружают медленно, что ближе к потоковой передаче, и могут начать прогрессивную загрузку в середине файла (динамически перезаписывая заголовки), чтобы позволить людям переходить к середина без загрузки всей вещи.

Flash Player поддерживает только RTMP для потоковой передачи. Это собственный протокол, поддерживаемый Flash Media Server и несколькими опциями с открытым исходным кодом, такими как Red5, rubyizumi. Adobe всего два дня назад объявила, что будет публиковать и предоставлять открытое лицензирование для RTMP, поэтому вы должны увидеть больше продуктов с поддержкой RTMP в ближайшем будущем. Потоковая передача обеспечивает двустороннюю связь с клиентом и сервером, поэтому сервер отправляет запрошенное количество кадров в качестве буфера, а клиент запрашивает кадры для заполнения буфера по мере необходимости. Сервер не отправляет больше, чем требуется, и сервер может выполнять поиск в различных точках только с обновлением буфера, а не всего видео.

Если вы хотите предоставить большие файлы, вам, вероятно, нужен настоящий потоковый сервер. Один из вариантов - разбивать файлы на куски, загружать их по мере необходимости и воспроизводить их один за другим. Это тоже было бы сложно, но выполнимо.

НТН,

Sam


Мы нанимаем! Разработчики и QA в Вашингтоне (округ Колумбия) (или желающие переехать) должны отправить резюме по адресу careers@blinemedical.com.


0 голосов
/ 22 января 2009

Трудно сказать наверняка, но похоже, что упомянутая вами библиотека предоставляет некоторый механизм управления, чтобы сообщить серверу, какой блок вы хотите воспроизвести (я понял это из заявления на их веб-странице: ... " У вас действительно длинные видеоклипы, и вы не хотите перекодировать их в более мелкие части? Мы также поддерживаем «виртуальные видеоклипы», поэтому вы можете указать, воспроизводить ли только часть видео или создавать ссылки для загрузки определенных частей видео. "

Мне кажется, вам просто нужно добавить управляющую структуру, которая позволяет вам (сообщать серверу) получать видео порциями.

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

Мне нужно знать, какие интерфейсы вы используете в flex для загрузки видео, но в целом вы бы добавили прослушиватель, который получает ProgressEvent, и проверили загруженные байты (для универсального объекта загрузчика)

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

Посмотрите на flash.net.Socket

(http://livedocs.adobe.com/flex/2/langref/flash/net/Socket.html)

0 голосов
/ 21 января 2009

Я предполагаю, что отчасти причина, по которой никто еще не ответил на этот вопрос, заключается в том, что нет отличного ответа на это. Я, конечно, не являюсь экспертом в тайне потоковой передачи Flash, но в интересах публикации хотя бы чего-нибудь для вас, я полагаю, прочитав документы и фактически попробовав несколько вещей сам, что вы пытаетесь это невозможно сделать с помощью объекта VideoDisplay и полностью в среде Flex; это, вероятно, что-то, что нужно обработать на сервере или, по крайней мере, между сервером и клиентом, чтобы поток был правильно доставлен и завершен, а объект VideoDisplay просто работал нормально.

Извините, я бы хотел получить лучший ответ для вас; если кто-то еще там, не стесняйтесь вмешиваться.

...