Обрезать камеру перед потоковой передачей в NetStream во Flash - PullRequest
1 голос
/ 23 марта 2011

Я создаю очень простой издатель для веб-камеры во Flash. Я хочу выбрать камеру и отправить поток на URL RTMP, в основном:

Camera camera = Camera.getCamera();
NetStream ns = new NetStream(connection);
ns.attachCamera(camera);
ns.publish("stream name");

Теперь я знаю, что могу установить режим на камеру, например:

camera.setMode(320, 240, 25);

Но то, что я действительно хотел бы сделать, это установить такой режим, как 360 x 480 (не такое же соотношение сторон, как у камеры при записи), и заставить Flash обрезать изображение для меня. Есть ли способ сделать это?

Редактировать: Я знаю Flash Media Live Encoder может сделать это, но я хотел бы сделать это в браузере.

В соответствии с документами ActionScript для Camera.setMode существует необязательный четвертый параметр, который звучит интересно, favorArea. Из документов:

favourArea : Boolean (по умолчанию = true) - указывает, следует ли манипулировать шириной, высотой и частотой кадров, если у камеры нет собственного режима, соответствующего указанным требованиям. Значение по умолчанию true, что означает, что поддержание размера захвата является предпочтительным; При использовании этого параметра выбирается режим, который наиболее точно соответствует значениям width и height, даже если это отрицательно влияет на производительность за счет снижения частоты кадров. Чтобы увеличить частоту кадров за счет высоты и ширины камеры, передайте false для параметра favorArea.

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

1 Ответ

1 голос
/ 06 марта 2012

Из того, что я вижу, вы не можете.

Чтобы обрезать или иным образом трансформировать, вам нужно получить необработанное видео.Наличие Camera.setKeyInterval , Camera.setQuality с параметром пропускной способности и доступным только для чтения NetStream.videoSetting , равным нулю, пока камера не подключена, предполагает, что всесжатие обрабатывается объектом Camera внутренне, в то время как NetStream передает его как есть.Точно так же Adobe Flash Platform - Работа с видео не содержит ни слова ни о преобразованиях, ни о сжатии / распаковке видеопотоков в виде данных ( flash.media.VideoCodec - это просто перечисление).

В отличие от этого, Media Live Encoder делает именно это: декодирует поток с камеры (который должен быть в одном из поддерживаемых форматов), дополнительно преобразовывает и затем перекодирует его.

И, наконец, я вижуБраузер как-то неуместен для полнофункционального потокового сервера!Это работа для демона!

...