Actionscript / flex中的简单相机如何?

时间:2013-06-04 18:45:41

标签: actionscript-3 flex

我试图在动作脚本中创建一个简单的相机没有运气。我不想要任何控件 - 只是一个要求权限的舞台,然后是我在窗口中的实时视频。没什么好看的

这是我到目前为止所做的:(最近的失败......)

     package {

        import flash.display.Sprite;
        import flash.media.*;

        public class FlashCamera extends Sprite
       {
       var cam:FlashCamera = Camera.getCamera(); 
       var vid:Video = new Video(); 
       vid.attachCamera(cam); 
       addChild(vid);


    }

    }

当我尝试编译时,它会抛出此错误: 通过静态类型Class

的引用调用可能未定义的方法getCamera

我正在使用Windows命令行中的flex进行编译,如下所示:

(path to SDK)/bin/mxmlc Camera.as

请注意,我是动作脚本/ flash开发的新手。

有人请解释我做错了什么?

2 个答案:

答案 0 :(得分:2)

首先,您在两个不同的命名空间中使用了名为Camera的类,而没有消除两者之间的歧义。您可能还需要导入其他软件包以支持相应和视频的API版本(flash.media.Camera和flash.media.Video),但我并不完全相信这不会隐式完成,尤其不会了解你正在使用的环境。

另外你需要注意的是,就实时错误而言,当浏览器需要几秒钟来实际获取相机时 - 只需继续尝试抓住它至少几秒钟直到它返回除了null之外的东西。

答案 1 :(得分:0)

找到实际可行的东西,并根据我的需要进行调整:

  package
        {
            import flash.display.Sprite;
            import flash.events.NetStatusEvent;
            import flash.net.NetConnection;
            import flash.net.NetStream;
            import flash.media.Camera;
            import flash.media.Microphone;
            import flash.media.Video;

        public class FlashVideo extends Sprite
        {
            private var nc:NetConnection;
            private var good:Boolean;
            private var rtmpNow:String;
            private var nsIn:NetStream;
            private var nsOut:NetStream;
            private var cam:Camera;
            private var mic:Microphone;
            private var vidLocal:Video;
            private var vidStream:Video;
            public function FlashVideo()
            {
                trace("Hello testing");
                rtmpNow = "rtmp://localhost/LiveStreams";
                nc=new NetConnection();
                nc.connect(rtmpNow);
                nc.addEventListener(NetStatusEvent.NET_STATUS,checkCon);
                setCam();
                setMic();
                setVideo();
            }
            private function checkCon(e:NetStatusEvent):void
            {
                good = e.info.code == "NetConnection.Connect.Success";
                if (good)
                {
                    nsOut = new NetStream(nc);
                    nsOut.attachAudio(mic);
                    nsOut.attachCamera(cam);
                    nsOut.publish("left","live");
                    nsIn = new NetStream(nc);
                    nsIn.play("right");
                    vidStream.attachNetStream(nsIn);
                }
            }
            private function setCam()
            {
                cam = Camera.getCamera();
                cam.setKeyFrameInterval(9);
                cam.setMode(640,400,30);
                cam.setQuality(0,95);
            }
            private function setMic()
            {
                mic = Microphone.getMicrophone();
                mic.gain = 85;
                mic.rate = 11;
                mic.setSilenceLevel(15,2000);
            }


            private function setVideo()
            {
                vidLocal = new Video(cam.width,cam.height);
                addChild(vidLocal);
                vidLocal.x = 15;
                vidLocal.y = 30;
                vidLocal.attachCamera(cam);
                vidStream = new Video(cam.width,cam.height);
                addChild(vidStream);
                vidStream.x=(vidLocal.x+ cam.width +10);
                vidStream.y = vidLocal.y;
            }
        }
    }