AS3: Можно ли захватить элементы сцены или данные растрового изображения в сетевой поток?

Я смотрю на документация по netstream., но не могу понять, действительно ли appendBytes () может принимать произвольные данные. Могу ли я просто взять произвольные данные растрового изображения (в виде массива байтов) и добавить кадр в поток (предположительно перед отправкой его в FMS для сохранения файла)? Думаю, я ошибаюсь: это полезно только для динамического стриминга. Я знаю, что можно захватить поток веб-камеры и напрямую кодировать видео через FMS. Но скажем, я хотел добавить несколько оверлеев перед кодированием, возможно ли это вообще во Flash? Т.е. Можете ли вы динамически создавать объекты netStream во Flash, или единственное, что вы можете сделать, это рисовать растровые данные из netStream, а не наоборот?

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

Я слышал, что FP11 имеет встроенную кодировку H264, поэтому вопрос в спецификации: может ли окончательный netStream быть закодирован в браузере и затем загружен на сервер через HTTP, или FMS все еще является требованием? Я смотрю эту демонстрацию кодировщика в реальном времени, но не уверен, Вы просто используете FMS как файл-дамп или, если это часть процесса.

Есть проект с открытым исходным кодом для кодирования FLV, он использует ByteArrayFlvEncoder, который позволяет вы должны кодировать необработанные байтовые массивы. Есть ли аналог для H264?


person FlavorScape    schedule 07.09.2012    source источник


Ответы (2)


Согласно документации, использование собственного кодировщика не представляется возможным, потому что вы не можете одновременно использовать NetStream.publish() и NetStream.appendBytes():

NetStream может либо публиковать поток, либо воспроизводить поток, но не может делать и то, и другое. Чтобы опубликовать поток и просмотреть воспроизведение с сервера, создайте два объекта NetStream.

Другими словами, похоже, что нет возможности отправить пользовательские данные в FMS через NetStream объект.

Итак, вы могли:

  1. Прикрепите камеру к Video объекту
  2. Примените к нему серию эффектов с манипуляциями с пикселями
  3. Отправьте пиксельные данные для последующего кодирования на сервер через сокет или используйте кодировщик AS3, о котором вы упомянули, для сохранения запеченного FLV в виде файла (на компьютере пользователя или на сервере)
person Antoine Lassauzay    schedule 12.09.2012
comment
в общем, даже если бы мы могли использовать Alchemy для записи непосредственно в H264, нам все равно пришлось бы присоединять его к потоку камеры, и вместо этого мы не можем записывать кадры в буфер? - person FlavorScape; 14.09.2012
comment
Как я уже сказал, вы сможете делать практически все, что захотите, кроме отправки пользовательских данных с помощью объекта NetStream (что означает, что вы хотите иметь возможность использовать кодировщик Flash Player H264, который предоставляет publish(). Я могу ошибаться, но смотрю документы, Заключение: ваши возможности этим не ограничиваются, на мой взгляд, эффективный протокол с сервером для отправки кадров, как это делает Movie Masher. - person Antoine Lassauzay; 16.09.2012
comment
Спасибо за вклад - я прочитал так много разных подходов, что они были переполнены. Принято, поскольку до окончания награды осталось 8 минут. Удача! - person FlavorScape; 17.09.2012

appendBytes в классе NetStream, используемом вместе с классом NetStreamAppendBytesAction.

Пример кода: Ссылка на демонстрацию: http://www.bytearray.org/?p=1689

// retrieve the FLV stream
var bytes:ByteArray = event.currentTarget.data;
// put the NetStream class into Data Generation mode
netstream.play(null);
// before appending new bytes, reset the position to the beginning
netstream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
// append the FLV video bytes
netstream.appendBytes(bytes);
person Alvin Pradeep    schedule 17.09.2012