It is as risky to believe everything, as it is to believe nothing. - Denis Diderot

— 【AS3】FMSに送るWebカメラ送信機はAIRで作ってみた

Posted: Feb 6, 2008, 6:57 pm | Author: cyberryo | Category: Dialy | Tags:

airde.jpg
次期自社のサイトでも、相変わらずライブカメラに活躍してもらう予定だけど、今回は映像の送信はAIRでやってみることにした。ただの気まぐれっす。FMSに送信、ずきゅん!

とりあえず、asファイルだけで作ったswfものだったら簡単にAIRに移植できることがわかった。(当たり前だよね)
これでわざわざブラウザを立ち上げなくても、ライブカメラを配信できるようになったぜー。(自己満)
ササッと書いたのでかなり中途ハンパだけど晒してしまう。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="660" height="600" borderColor="#DBDBDB">
    <mx:Script>
        <![CDATA[
        //
        //        Webカメラ送信
        //        ver 0.1
        //        2008/02/06
        //

        import flash.display.*;
        import flash.events.*;
        import flash.media.*;
        import flash.net.*;

        import mx.controls.VideoDisplay;

        private var camera:Camera;
        private var video:Video;
        private var nc:NetConnection;
        private var stream:NetStream;

        public function camSend():void {
            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://myserver.com/video");
        }

        private function setupCamera():void {

            camera.setMode(640,480,30);
            Cameraname.text = camera.name;
            VideoDisplay.attachCamera(camera);
        }

        private function sendVideo():void {
            stream = new NetStream(nc);
            stream.attachCamera(camera);
            stream.publish("myvideo");
        }

        private function onNetStatus(evt:NetStatusEvent):void {
            switch(evt.info.code){
                case "NetConnection.Connect.Success":
                    trace("接続開始");
                    CameraActive.text = "サイトに映像配信中";
                    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("同期エラー");
        }
        ]]>
    </mx:Script>

    <mx:VideoDisplay id="VideoDisplay" width="640" height="480" autoPlay="true" horizontalCenter="0" y="25"/>
    <mx:Button x="10" y="513" label="送信開始" click="camSend()" width="80" height="30" fontFamily="MSゴシック" fontSize="12" id="SendButton"/>
    <mx:Text x="134" y="520" text="カメラ名" id="Cameraname"/>
    <mx:Text y="520" text="接続状況" textAlign="right" id="CameraActive" right="10"/>

</mx:WindowedApplication>


Facebook Comments