我试图在动作脚本中创建一个简单的相机没有运气。我不想要任何控件 - 只是一个要求权限的舞台,然后是我在窗口中的实时视频。没什么好看的
这是我到目前为止所做的:(最近的失败......)
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开发的新手。
有人请解释我做错了什么?
答案 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;
}
}
}