Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Несколько вопросов по работе с камерой (http://www.flasher.ru/forum/showthread.php?t=172788)

chiffa 17.12.2011 04:14

Несколько вопросов по работе с камерой
 
Добрый день всем. В связи с необходимость пришлось осваивать AS лошадиными скачками. Пишу на PHP, Delphi, Java-Script, немного С#. Больше всего ActionScript по своей структуре напоминает Java-Script (со смесью С-подобных), ну это лирическое отступление. Задача стоит получить видео и аудио с веб-камеры и передать его на сервер, допустим на FMS. По сути рабочие пример в сети есть, но хочется разобрать самому. Нашел на сайте Адобе такое:


Код AS3:

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.*;
    import flash.media.Camera;
    import flash.media.Video;
    public class CameraExample extends Sprite {
        private var video:Video;
 
        public function CameraExample() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
 
            var camera:Camera = Camera.getCamera();
 
            if (camera != null) {
                camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                video = new Video(camera.width * 2, camera.height * 2);
                video.attachCamera(camera);
                addChild(video);
            } else {
                trace("You need a camera.");
            }
        }
 
        private function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }
    }
}



Все работает на ура и даже выводит картинку, но возникло несколько вопросов:
1. Как улучшить качество отображаемой картинки (в том же скайпе качество картинки лучше);
2. Могу ли я как то вывести изображение не на центральную рабочию область, а на какой то созданный объект (а-ля трансляция на Panel в Delphi)
3. В основной fla файл подключаю camera.as (в свойствах документа - class) с выше описанным кодом, при запуски мувика проигрывание начинается сразу же: а как сделать что бы изображение появлялось только после нажатия на кнопку?...

Не сочтите за наглость вышеописанные вопросы... Буду признателен за помощь!

kackbip 17.12.2011 09:57

AS от js отличается более строгой типизацией.
1) http://help.adobe.com/ru_RU/FlashPla...ia/Camera.html
я бы попробовал методы setMode и setQuality у камеры
2) объект Video это просто отображаемый объект. Вы можете его положить в любой DisplayObjectContainer - Sprite, MovieClip. Можете произвольно задавать его размеры width, height и координаты x, y
3) Посмотрите в сети пример кнопки. Вобщих чертах так: добавляете слушателя нажатия на кнопкуб в качестве обработчика указываете ссылку на метод или функцию, в обработчике выполняете код
Код AS3:

var camera:Camera = Camera.getCamera();
 
            if (camera != null) {
                camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                video = new Video(camera.width * 2, camera.height * 2);
                video.attachCamera(camera);
                addChild(video);
            } else {
                trace("You need a camera.");
            }


chiffa 18.12.2011 03:15

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

thirst 18.12.2011 08:20

что бы при старте? Наложить на него событие, при котором выполнялся бы твой код (например, нажать на сцену):
Код AS3:

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.*;
    import flash.media.Camera;
    import flash.media.Video;
    public class CameraExample extends Sprite {
        private var video:Video;
        private var camera:Camera;
 
        public function CameraExample() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
 
          camera = Camera.getCamera();
 
            if (camera != null) {
                stage.addEventListener(MouseEvent.CLICK, startScript);
            } else {
                trace("You need a camera.");
            }
        }
        private function startScript(e:MouseEvent):void{
            stage.removeEventListener(MouseEvent.CLICK, startScript);
            camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
            video = new Video(camera.width * 2, camera.height * 2);
            video.attachCamera(camera);
            addChild(video);
        }
        private function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }
    }
}


alatar 18.12.2011 13:20

Цитата:

Сообщение от chiffa (Сообщение 1052078)
Больше всего ActionScript по своей структуре напоминает Java-Script (со смесью С-подобных), ну это лирическое отступление.

Цитата:

Сообщение от kackbip (Сообщение 1052088)
AS от js отличается более строгой типизацией.

AS2 похож на JS. AS3 похож не более, чем на другие языки с GC.

chiffa 18.12.2011 14:52

thirst, пытаюсь при клике на кнопку... выдает: Packages cannot be nested.

thirst 18.12.2011 15:50

Цитата:

Сообщение от chiffa (Сообщение 1052265)
thirst, пытаюсь при клике на кнопку... выдает: Packages cannot be nested.

Дело в том, что я не тестировал этот код, т.к. у меня нет камеры.
Но может быть дело в структуре класса? Должно быть так:
Код AS3:

Package пакет{
 
        import какого-нибудь класса;
 
        class класс{
              function класс(){        //конструктор
                  //...
              }
              //...
        }
}

Ну или попробуй вместо stage.addEventListener(MouseEvent.CLICK, startScript); и stage.removeEventListener(MouseEvent.CLICK, startScript);, написать this.addEventListener(MouseEvent.CLICK, startScript); и this.removeEventListener(MouseEvent.CLICK, startScript);


Часовой пояс GMT +4, время: 04:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.