0

我没有尝试在动作脚本中创建一个简单的相机。我不想要任何控制——只是一个请求权限的阶段,然后是我在窗口中的实时视频。没有什么花哨

这是我到目前为止所拥有的:(最新的失败......)

     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);


    }

    }

当我尝试编译它时抛出这个错误: call to a possible undefined method getCamera through a reference with static type Class

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

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

请注意,我是 actionscript/flash 开发的新手。

有人可以解释我做错了什么吗?

4

2 回答 2

2

一方面,您正在使用来自两个不同命名空间的名为 Camera 的类,而不会在两者之间产生歧义。您可能还必须导入其他包以支持相机和视频的 API 版本(flash.media.Camera 和 flash.media.Video),但我不完全相信这不会隐式完成,尤其是不会了解您正在使用的环境。

不过,就实时错误而言,您必须注意的另一件事是,当浏览器需要几秒钟才能真正获取相机时 - 只需继续尝试抓取它至少几秒钟,直到它返回除此之外的其他内容无效的。

于 2013-06-04T18:58:50.610 回答
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;
            }
        }
    }
于 2013-06-04T22:01:51.900 回答