Записать видео в память и воспроизвести с помощью ActionScript?

Это может быть, а может и невозможно, но вот ситуация: я хочу использовать класс ActionScript 3 Camera для захвата видео с локальной камеры (веб-камера, встроенная камера и т. Д.), А затем воспроизвести это видео во флэш-памяти. применение.

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

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

Если кто-то знает, как это сделать, я приветствую любой вклад.


person Tristan Shelton    schedule 25.02.2012    source источник
comment
Я сам не использовал его, но думаю, что http streaming api FMS позволяет вам получать данные на клиенте как ByteArray ... а затем класс видео во флэш-памяти позволяет подтолкнуть этот поток данных ... Я думаю, это должно помочь   -  person catholicon    schedule 26.02.2012


Ответы (2)


Хорошо, вот обновление для всех, кто может столкнуться с тем же препятствием, что и я. Я смог выполнить то, что хотел - записать видео, позволить пользователю предварительно просмотреть его, а затем загрузить его из одного флеш-приложения - с помощью утилиты, написанной Ли Феларка (zeropointnine - http://www.zeropointnine.com/) называется flvEncoder.

Концепция такая:

  1. Записывать аудио и видео данные в необработанный формат (как предлагал Валентин Симонов)
  2. Передайте данные в flvEncoder для кодирования в формате Flash FLV и получите обратно ByteArray. Я знаю, что говорить «Flash FLV» кажется излишним, но я так говорю, потому что Flash и Adobe Media Player, похоже, единственные вещи, способные интерпретировать результат.
  3. Создайте экземпляр NetStream и переведите его в режим создания данных, используйте метод appendBytes () для передачи закодированных данных объекту Video, связанному с входным NetStream.
  4. Используйте FileReference.upload () для отправки данных на сервер в HTTP-запросе.

Это могло потенциально съесть много памяти, но мне все равно нужно было записывать только короткие видео. Я не буду публиковать здесь код, потому что он беспорядочный и привязан к проприетарному проекту, но я надеюсь, что эта информация будет кому-то полезна. Спасибо за ответы!

person Tristan Shelton    schedule 01.03.2012
comment
Хорошая находка. Хотя Adobe превращает Alchemy в отдельный продукт, поэтому это решение может выйти из строя в 11.2. - person Valentin Simonov; 02.03.2012
comment
Класс flvEncoder включает чистый кодировщик ActionScript, кодировщик алхимии является необязательным. Насколько я знаю, он должен работать и дальше ... - person Tristan Shelton; 05.03.2012

Самый простой способ - использовать медиа-серверы FMS, Wowza или Red5. Вы просто используете NetStream для отправки данных на свой сервер, сохранения на нем фильмов и потоковой передачи обратно.

Также я полагаю, что это единственный надежный способ сделать это. Объекты Camera, Video или NetStream не имеют доступа к фактическим байтам видео. Что вы можете сделать, так это добавить экземпляр Video к вашей камере и рисовать его в растровом изображении каждые 1/24 секунды. После этого вам все равно придется кодировать данные, иначе ваша память очень быстро закончится. Здесь я не уверен, есть ли в наличии какие-либо кодеки flv / h264, созданные с помощью as3. Но в любом случае я уверен, что это будет медленно.

person Valentin Simonov    schedule 26.02.2012
comment
Я хотел, чтобы пользователь мог предварительно просмотреть видео ПЕРЕД загрузкой в ​​FMS, но мне просто нужно будет поработать с загрузкой видео и его потоковой передачей обратно. Спасибо! - person Tristan Shelton; 27.02.2012