【AS3】ActionScript3.0でFMS使ってライブカメラする

webcam.jpg
ライブカメラを使っている自社サイトをAS3で組み直すことに。
まずは基盤になるライブカメラのところをAS3化。

サクサクと作ってしまったので冗長な感じかも。。。
でも、ActoinScript2.0の情報ならネット上にわんさかありますが、ActionScript3.0はあまりお目にかかれないようでしたので参考程度になればと。
FMSへ送信用
camSend.as

package {
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.net.*;
    
    public class camSend extends Sprite {
        private var camera:Camera;
        private var video:Video;
        private var nc:NetConnection;
        private var stream:NetStream;
        
        public function camSend() {
            init();
        }
        
        private function init():void {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            camera = Camera.getCamera();
            if(camera != null){
                setupCamera();
            }else{
                trace("カメラがありません");
                return;
            }
            nc = new NetConnection();
            nc.objectEncoding = ObjectEncoding.AMF0;
            nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
            nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
            nc.connect("rtmp://myfms.com/webcam"); // ストリーミングサーバーアドレス
        }
        
        private function sendVideo():void {
            stream = new NetStream(nc);
            stream.attachCamera(camera);
            stream.publish("myvideo");
        }
        
        private function setupCamera():void {
            video = new Video(camera.width,camera.height);
            video.attachCamera(camera);
            addChild(video);
        }
        
        private function onNetStatus(evt:NetStatusEvent):void {
            switch(evt.info.code){
                case "NetConnection.Connect.Success":
                    trace("接続成功");
                    sendVideo();
                    break;
                case "NetConnection.Connect.Closed":
                    trace("接続解除");
                    break;
                case "NetConnection.Connect.Faild":
                    trace("接続失敗");
                    break;
                case "NetConnection.Connect.Rejected":
                    trace("接続拒否");
                    break;
                default:
                    trace("evt.info.code");
            }
        }
        
        private function onSecurityError(evt:SecurityErrorEvent):void {
            trace("セキュリティエラー");
        }
        
        private function onAsyncError(evt:AsyncErrorEvent):void {
            trace("同期エラー");
        }
        
    }
}

FMSから受信用(公開用)
camReceive.as

package {
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.net.*;
    
    public class camReceive extends Sprite {
        private var video:Video;
        private var nc:NetConnection;
        private var stream:NetStream;
        
        public function camReceive() {
            init();
        }
        
        private function init():void {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            nc = new NetConnection();
            nc.objectEncoding = ObjectEncoding.AMF0;
            nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
            nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
            nc.connect("rtmp://myfms.com/webcam");  //ストリーミングサーバーアドレス
        }
        
        private function receiveVideo():void {
            video = new Video(320,240);
            stream = new NetStream(nc);
            video.attachNetStream(stream);
            stream.play("myvideo");
            addChild(video);
        }
        
        private function onNetStatus(evt:NetStatusEvent):void {
            switch(evt.info.code){
                case "NetConnection.Connect.Success":
                    trace("接続成功");
                    receiveVideo();
                    break;
                case "NetConnection.Connect.Closed":
                    trace("接続解除");
                    break;
                case "NetConnection.Connect.Faild":
                    trace("接続失敗");
                    break;
                case "NetConnection.Connect.Rejected":
                    trace("接続拒否");
                    break;
                default:
                    trace("evt.info.code");
            }
        }
        
        private function onSecurityError(evt:SecurityErrorEvent):void {
            trace("セキュリティーエラー");
        }
        
        private function onAsyncError(evt:AsyncErrorEvent):void {
            trace("同期エラー");
        }
        
    }
}

Comments

2 Responses to “【AS3】ActionScript3.0でFMS使ってライブカメラする”

  1. Yaz Okulu on 2008/03/29 17:25:30

    hello everybody. my Japanese is not good but it seems like a very nice web site. thanks

  2. shota sawada design - ローカルでウェブカメラの写真を一時保存 on 2010/03/17 0:21:51

    [...] – PHP,MySQL,Flexな日々+イラストとか」 「【AS3】ActionScript3.0でFMS使ってライブカメラする|blog.hereticsintheworld」 「trick7.com blog: Flash 上で Bitmap を JPEG 画像に変換」 [...]