flash.media
public final class Camera
继承Camera Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使用 Camera 类可从连接到运行 Flash Player 的计算机的摄像头中捕获视频。使用 Video 类可在本地监视视频。使用 NetConnection 和 NetStream 类可将视频传输到 Flash Media Server。Flash Media Server 可以将视频流发送到其它服务器,并向运行 Flash Player 的其它客户端广播此视频流。

有关捕获音频的信息,请参阅 Microphone 类。

重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问摄像头。确保应用程序窗口大小至少为 215 x 138 个像素;这是显示该对话框所需的最小大小。

若要创建或引用 Camera 对象,请使用 getCamera() 方法。

查看示例

另请参见

flash.media.Microphone
Basics of video


公共属性
 属性定义方
  activityLevel : Number
[只读 (read-only)] 摄像头正在检测的运动量。
Camera
  bandwidth : int
[只读 (read-only)] 当前输出视频输入信号可以使用的最大带宽,以字节为单位。
Camera
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  currentFPS : Number
[只读 (read-only)] 摄像头捕获数据的速率,以每秒帧数为单位。
Camera
  fps : Number
[只读 (read-only)] 摄像头捕获数据的最大速率,以每秒帧数为单位。
Camera
  height : int
[只读 (read-only)] 当前捕获高度,以像素为单位。
Camera
  index : int
[只读 (read-only)] 从零开始的整数,指定由 names 属性返回的数组中所反映的摄像头的索引。
Camera
  keyFrameInterval : int
[只读 (read-only)] 完整传输而没有使用视频压缩算法进行插值处理的视频帧(称为关键帧)数。
Camera
  loopback : Boolean
[只读 (read-only)] 指示在本地查看摄像头所捕获的图像时是进行压缩和解压缩 (true),就像使用 Flash Media Server 进行实时传输一样,还是不进行压缩 (false)。
Camera
  motionLevel : int
[只读 (read-only)] 调用 activity 事件所需的运动量。
Camera
  motionTimeout : int
[只读 (read-only)] 摄像头停止检测运动的时间与调用 activity 事件的时间之间相差的毫秒数。
Camera
  muted : Boolean
[只读 (read-only)] 布尔值,指示用户在 Flash Player 的“隐私”对话框中是拒绝访问摄像头 (true) 还是允许访问 (false)。
Camera
  name : String
[只读 (read-only)] 由摄像头硬件返回的当前摄像头的名称。
Camera
  names : Array
[静态] [只读 (read-only)] 字符串数组,指示所有可用的摄像头名称,而不显示 Flash Player 的“隐私”对话框。
Camera
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  quality : int
[只读 (read-only)] 所需的图片品质级别,该级别是由应用于每个视频帧的压缩量决定的。
Camera
  width : int
[只读 (read-only)] 当前捕获宽度,以像素为单位。
Camera
公共方法
 方法定义方
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
 Inherited
将事件调度到事件流中。
EventDispatcher
  
getCamera(name:String = null):Camera
[静态] 返回对用于捕获视频的 Camera 对象的引用。
Camera
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
  
setKeyFrameInterval(keyFrameInterval:int):void
指定进行完整传输而不由视频压缩算法进行插值处理的视频帧(称为关键帧)。
Camera
  
setLoopback(compress:Boolean = false):void
指定在本地查看摄像头时是否使用压缩视频流。
Camera
  
setMode(width:int, height:int, fps:Number, favorArea:Boolean = true):void
将摄像头的捕获模式设置为最符合指定要求的本机模式。
Camera
  
setMotionLevel(motionLevel:int, timeout:int = 2000):void
指定调度 activity 事件所需的运动量。
Camera
 Inherited
设置循环操作动态属性的可用性。
Object
  
setQuality(bandwidth:int, quality:int):void
设置每秒的最大带宽或当前输出视频输入信号所需的画面质量。
Camera
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
  在摄像头开始或结束会话时调度。Camera
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  在摄像头报告其状态时调度。Camera
属性详细信息
activityLevel属性
activityLevel:Number  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

摄像头正在检测的运动量。该数值的范围为 0(检测到没有运动)到 100(检测到大运动量)。该属性的值可帮助确定是否需要将设置传递到 setMotionLevel() 方法。

如果摄像头可用,但由于未调用 Video.attachCamera() 方法而尚未被使用,则将此属性设置为 -1。

如果只对未压缩的本地视频进行流式处理,则只有在为事件处理函数分配函数后才能设置此属性。否则,它为未定义。



实现
    public function get activityLevel():Number

另请参见

bandwidth属性 
bandwidth:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

当前输出视频输入信号可以使用的最大带宽,以字节为单位。值为 0 表示输入信号可以使用所需数量的带宽来保持所需的帧品质。

若要设置此属性,请使用 setQuality() 方法。



实现
    public function get bandwidth():int

另请参见

currentFPS属性 
currentFPS:Number  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

摄像头捕获数据的速率,以每秒帧数为单位。无法设置此属性;不过,可以使用 setMode() 方法来设置相关属性 fps,该属性指定摄像头捕获数据时希望使用的最大帧频。



实现
    public function get currentFPS():Number

另请参见

fps属性 
fps:Number  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

摄像头捕获数据的最大速率,以每秒帧数为单位。可能的最大速率取决于摄像头性能;有可能会达不到此帧速率。



实现
    public function get fps():Number

另请参见

height属性 
height:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

当前捕获高度,以像素为单位。若要设置此属性的值,请使用 setMode() 方法。



实现
    public function get height():int

另请参见

index属性 
index:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从零开始的整数,指定由 names 属性返回的数组中所反映的摄像头的索引。



实现
    public function get index():int

另请参见

keyFrameInterval属性 
keyFrameInterval:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

完整传输而没有使用视频压缩算法进行插值处理的视频帧(称为关键帧)数。默认值为 15,指每隔 14 个帧后的那一帧为关键帧。值为 1 表示每个帧都是关键帧。允许的值为 1 至 48。



实现
    public function get keyFrameInterval():int

另请参见

loopback属性 
loopback:Boolean  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指示在本地查看摄像头所捕获的图像时是进行压缩和解压缩 (true),就像使用 Flash Media Server 进行实时传输一样,还是不进行压缩 (false)。默认值为 false

虽然压缩流在进行测试方面(如预览视频品质设置)非常有用,但会产生大量的处理开销。就像通过实时连接进行传输一样,将对本地查看的内容进行压缩和编辑以进行传输,然后再对其进行解压缩处理以便在本地进行查看。

若要设置此值,请使用 Camera.setLoopback()。若要设置此属性为 True 时使用的压缩量,请使用 Camera.setQuality()



实现
    public function get loopback():Boolean

另请参见

motionLevel属性 
motionLevel:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

调用 activity 事件所需的运动量。可接受值的范围为 0 到 100。默认值为 50。

不论 motionLevel 属性为何值都能显示视频。有关详细信息,请参阅 setMotionLevel()



实现
    public function get motionLevel():int

另请参见

motionTimeout属性 
motionTimeout:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

摄像头停止检测运动的时刻和调用 activity 事件的时刻之间相差的毫秒数。默认值为 2000(2 秒)。

若要设置此值,请使用 setMotionLevel()



实现
    public function get motionTimeout():int

另请参见

muted属性 
muted:Boolean  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

布尔值,指示用户在 Flash Player 的“隐私”对话框中是拒绝访问摄像头 (true) 还是允许访问 (false)。当此值变化时,将调度 status 事件。



实现
    public function get muted():Boolean

另请参见

name属性 
name:String  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

由摄像头硬件返回的当前摄像头的名称。



实现
    public function get name():String

另请参见

names属性 
names:Array  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

字符串数组,指示所有可用的摄像头名称,而不显示 Flash Player 的“隐私”对话框。此数组的行为方式与其它任何 ActionScript 数组的行为方式相同,隐式提供每一摄像头从零开始的索引以及系统上摄像头的数目(通过 names.length)。有关详细信息,请参阅 names Array 类条目。

调用 names 属性要求全面检查硬件,并可能需要几秒钟时间才能生成数组。在大多数情况下,您只能使用默认的摄像头。



实现
    public static function get names():Array

另请参见

quality属性 
quality:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

所需的图片品质级别,该级别是由应用于每个视频帧的压缩量决定的。可接受的品质值范围为 1(最低品质,最大压缩)到 100(最高品质,无压缩)。默认值为 0,这意味着画面质量可以根据需要进行变化,以避免超出可用带宽。

若要设置此属性,请使用 setQuality() 方法。



实现
    public function get quality():int

另请参见

width属性 
width:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

当前捕获宽度,以像素为单位。若要为该属性设置所需值,请使用 setMode() 方法。



实现
    public function get width():int

另请参见

方法详细信息
getCamera()方法
public static function getCamera(name:String = null):Camera

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

返回对用于捕获视频的 Camera 对象的引用。若要开始捕获视频,必须将 Camera 对象附加到 Video 对象(请参阅 Video.attachCamera() )。若要将视频传输到 Flash Media Server,请调用 NetStream.attachCamera() 以将 Camera 对象附加到 NetStream 对象。

getCamera() 方法的多次调用会引用相同的摄像头驱动程序。因此,如果代码包含诸如 firstCam:Camera = getCamera()secondCam:Camera = getCamera() 之类的代码,则 firstCamsecondCam 会引用同一个摄像头,该摄像头为用户的默认摄像头。

通常不应为 name 参数传递值,而只是使用 getCamera() 来返回对默认摄像头的引用。通过“摄像头设置”面板(将在本节的后面进行讨论),用户可以指定 Flash Player 应使用的默认摄像头。

您不能使用 ActionScript 来设置用户用于访问摄像头的 Allow 或 Deny 权限设置,但可以显示“Adobe Flash Player 设置”摄像头设置对话框,用户可以在其中设置摄像头权限。当使用 attachCamera() 方法的 SWF 文件尝试将 getCamera() 方法返回的摄像头附加到 Video 或 NetStream 对象时,Flash Player 将显示一个对话框,用户可从中选择是允许还是拒绝访问摄像头。(确保应用程序窗口大小至少为 215 x 138 个像素;这是 Flash Player 显示该对话框所需的最小大小。)当用户对摄像头设置对话框做出响应时,Flash Player 将在指示用户响应的 status 事件中返回信息对象:Camera.muted 指示用户拒绝访问摄像头;Camera.Unmuted 指示用户允许访问摄像头。若要在不处理 status 事件的情况下确定用户是拒绝还是允许访问摄像头,请使用 muted 属性。

用户可以为特定的域指定永久保密性设置,方法是在 SWF 文件播放时右键单击 (Windows 和 Linux) 或按住 Control 的同时单击 (Macintosh),选择“设置”,打开“保密性”对话框,然后选择“记住”。如果用户选择“记住”,Flash Player 将不再询问用户是允许还是拒绝此域的 SWF 文件访问摄像头。

注意:如果用户已通过选择“Flash Player 设置”对话框中的“记住”来拒绝访问摄像头,则 attachCamera() 方法将不会调用该对话框来允许或拒绝对摄像头的访问。在这种情况下,您可以通过使用 Security.showSettings(SecurityPanel.PRIVACY) 为用户显示“Flash Player 隐私”面板,提示用户更改 Allow 或 Deny 设置。

如果 getCamera() 返回 null,则表明摄像头正由另一个应用程序使用,或者系统上没有安装摄像头。若要确定是否安装了任何摄像头,请使用 names.length 属性。若要显示 Flash Player 的“摄像头设置”面板(让用户选择将由 getCamera() 引用的摄像头),请使用 Security.showSettings(SecurityPanel.CAMERA)

扫描硬件以找到摄像头需要花一些时间。当 Flash Player 找到至少一个摄像头后,在该播放器实例的生存期内将不再扫描硬件。不过,如果 Flash Player 没有找到任何摄像头,则在每次调用 getCamera 时都进行扫描。这在用户忘记连接摄像头时非常有用;如果 SWF 文件提供了调用 getCamera 的“重试”按钮,则用户不必重新启动该 SWF 文件,Flash Player 即可找到摄像头。

参数

name:String (default = null) — 指定要获取哪一个摄像头,这由 names 属性返回的数组确定。对于大多数应用程序,可省略此参数来获取默认摄像头。若要为此参数指定值,请使用 Camera.names 数组内从零开始的索引位置的字符串表示形式。例如,若要在数组中指定第三个摄像头,请使用 Camera.getCamera("2")

返回
Camera — 如果未指定 name 参数,则此方法返回对默认摄像头的引用;或者,如果默认摄像头正由另一个应用程序使用,则此方法返回对第一个可用摄像头的引用。(如果安装了多个摄像头,则用户可以在 Flash Player 的“摄像头设置”面板中指定默认的摄像头。)如果没有可用摄像头或没有安装摄像头,则该方法返回 null

事件
status:StatusEvent — 在摄像头报告其状态时调度。如果 code 属性的值为 "Camera.muted",则表示用户拒绝 SWF 文件访问他的摄像头。如果 code 属性的值为“Camera.Unmuted”,则表示用户允许 SWF 文件访问其摄像头。

另请参见


示例

在下面的示例中,在用户允许访问摄像头后,使用连接的摄像头捕获视频图像。还会显示有关视频流的信息,如当前每秒帧数。

Camera.getCamera() 方法将返回对 camera 对象的引用,如果没有可用的摄像头或未安装摄像头,则返回 null。if 语句检查是否找到摄像头,以及用户是否允许访问该摄像头。如果用户拒绝访问,则 muted 属性设置为 true

通常,在调用 attachCamera() 方法时,将出现一个对话框,提示用户允许或拒绝 Flash Player 访问该摄像头。但是,如果用户拒绝访问并选择了“记住”选项,则不会出现该对话框并且不会显示任何信息。为确保向用户提供允许访问摄像头的选项,myTextField 文本字段将指示用户单击该文本字段以调用“Flash Player 设置”对话框。

clickHandler() 方法调用 Security.showSettings() 方法,后者会显示“设置”对话框的“隐私”面板。如果用户允许访问,则调度 StatusEvent.STATUS 事件,并将该事件的 code 属性值设置为 Camera.Unmuted。(摄像头对象的 mute 属性值也设置为 false。)

如果用户允许访问,则为侦听用户设置状态更改而添加的 statusHandler() 方法将调用 connectCamera() 方法。connectCamera() 方法使用捕获的流的宽度和高度实例化视频对象。若要显示摄像头捕获的视频,请将对视频流的引用附加到该视频对象,并将该视频对象添加到显示列表中。

还将启动一个 Timer 对象。每秒都会调度 Timer 对象的 timer 事件并调用 timerHandler() 方法。将显示 timerHandler() 方法并更新 Camera 对象的许多属性。

注意:对于本示例,唯一发生更改的属性是 currentFPS 属性。

package {
    import flash.display.Sprite;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.StatusEvent;
    import flash.events.MouseEvent;
    import flash.system.SecurityPanel;
    import flash.system.Security;

    public class Camera_getCameraExample extends Sprite {
        private var myTextField:TextField;
        private var cam:Camera;
        private var t:Timer = new Timer(1000);
        
        public function Camera_getCameraExample() {
            myTextField = new TextField();
            myTextField.x = 10;
            myTextField.y = 10;
            myTextField.background = true;
            myTextField.selectable = false;
            myTextField.autoSize = TextFieldAutoSize.LEFT;    
        
            cam = Camera.getCamera();
            
            if (!cam) {
                myTextField.text = "No camera is installed.";
                
            } else if (cam.muted) {
                myTextField.text = "To enable the use of the camera,\n"
                                 + "please click on this text field.\n" 
                                 + "When the Flash Player Settings dialog appears,\n"
                                 + "make sure to select the Allow radio button\n" 
                                 + "to grant access to your camera.";

                myTextField.addEventListener(MouseEvent.CLICK, clickHandler);

            }else {
                myTextField.text = "Connecting";
                connectCamera(); 
            }
   
            addChild(myTextField);

            t.addEventListener(TimerEvent.TIMER, timerHandler);
        }

        private function clickHandler(e:MouseEvent):void {
            Security.showSettings(SecurityPanel.PRIVACY);

            cam.addEventListener(StatusEvent.STATUS, statusHandler);

            myTextField.removeEventListener(MouseEvent.CLICK, clickHandler);
        }

        private function statusHandler(event:StatusEvent):void {

            if (event.code == "Camera.Unmuted") {
                connectCamera(); 
                cam.removeEventListener(StatusEvent.STATUS, statusHandler);
            }
        }

        private function connectCamera():void {
                var vid:Video = new Video(cam.width, cam.height);
                vid.x = 10;
                vid.y = 10;
                vid.attachCamera(cam);
                addChild(vid);    

                t.start();
        }

        private function timerHandler(event:TimerEvent):void {
            myTextField.y = cam.height + 20;
            myTextField.text = "";
            myTextField.appendText("bandwidth: " + cam.bandwidth + "\n");
            myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n");
            myTextField.appendText("fps: " + cam.fps + "\n");
            myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n");
        }
    }
}
setKeyFrameInterval()方法 
public function setKeyFrameInterval(keyFrameInterval:int):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定进行完整传输而不由视频压缩算法进行插值处理的视频帧(称为关键帧)。此方法仅在使用 Flash Media Server 传输视频时适用。

Flash 视频压缩算法通过只传输自视频的上一帧以来的更改内容来压缩视频;这些部分被视为插补帧。可以根据前一帧的内容插补视频帧。但是,关键帧是完整的视频帧;它并不是根据前面的帧插补的。

若要确定如何设置 keyFrameInterval 参数的值,请考虑带宽使用率和视频回放辅助功能。例如,为 keyFrameInterval 指定较高的值(以较低的频率发送关键帧)可降低带宽使用率。但是,这可能会增加在视频某一特定点上定位播放头所需的时间量;可能需要插补更多以前的视频帧才能继续播放视频。

反之,为 keyFrameInterval 指定较低的值(以较高的频率发送关键帧)会提高带宽使用率(因为会更频繁地传输所有的视频帧),但可能会减少在已录制视频内搜索特定视频帧所需的时间量。

参数

keyFrameInterval:int — 一个值,用于指定将哪些视频帧(作为关键帧)进行完整传输而不由视频压缩算法进行插补处理。值 1 表示每一帧都是关键帧,值 3 表示每隔两个帧后的那一帧为关键帧,依此类推。可接受值为 1 至 48。

另请参见

setLoopback()方法 
public function setLoopback(compress:Boolean = false):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定在本地查看摄像头时是否使用压缩视频流。此方法仅在使用 Flash Media Server 传输视频时适用;如果将 compress 设置为 true,则可以更精确地看到在用户实时查看视频时向用户呈现视频的方式。

虽然压缩流在用于测试(如预览视频品质设置)时很有用,但对它进行处理要花很大的代价,因为对本地视图并不只是进行压缩处理;就像通过实时连接进行传输那样,需要对视频进行压缩和编辑以进行传输,然后要对其进行解压缩处理以供本地查看。

若要在 compress 设置为 true 的情况下设置使用的压缩量,请使用 Camera.setQuality()

参数

compress:Boolean (default = false) — 针对本地查看摄像头所接收内容指定是使用压缩视频流 (true) 还是使用未压缩的流 (false)。

另请参见

setMode()方法 
public function setMode(width:int, height:int, fps:Number, favorArea:Boolean = true):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

将摄像头的捕获模式设置为最符合指定要求的本机模式。如果摄像头没有与您传递的所有参数相匹配的本机模式,Flash Player 将选择与所请求的模式最接近的合成捕获模式。此操作可能涉及裁切图像和删除帧。

默认情况下,Flash Player 根据需要删除一些帧以保持图像大小。若要将删除的帧数降至最低(即使这意味着减小图像大小),请为 favorArea 参数传递 false

在选择本机模式时,Flash Player 将设法尽量保持所请求的高宽比。例如,如果发出 myCam.setMode(400, 400, 30) 命令,并且摄像头上可用的最大宽度和高度值分别为 320 和 288,则 Flash Player 将宽度和高度都设置为 288;通过将这些属性设置为相同的值,Flash Player 可以保持所请求的 1:1 高宽比。

若要确定在 Flash Player 选择与所请求的值最匹配的模式后分配给这些属性的值,请使用 widthheightfps 属性。

如果使用 Flash Media Server,您也可以捕获单个帧或创建延时拍摄。有关详细信息,请参阅 NetStream.attachCamera()

参数

width:int — 请求的捕获宽度,以像素为单位。默认值为 160。
 
height:int — 请求的捕获高度,以像素为单位。默认值为 120。
 
fps:Number — 摄像头捕获数据应使用的请求速率,以每秒帧数为单位。默认值为 15。
 
favorArea:Boolean (default = true) — 指定在摄像头不具有满足指定要求的本机模式的情况下是否控制宽度、高度和帧频。默认值为 true,这意味着支持保持捕获大小;使用此参数选择与 widthheight 值最匹配的模式,即使这样做会由于降低帧频而对性能造成不利影响。若要最大限度地提高帧频,而不考虑摄像头的高度和宽度,请将 false 传递给 favorArea 参数。

另请参见


示例

在下面的示例中,当用户单击舞台时,将调整视频大小并将每秒帧数捕获率设置为新值。

舞台的设置使其不会缩放。Camera.getCamera() 方法将返回对 camera 对象的引用,如果没有可用的摄像头或未安装摄像头,则返回 null。如果存在摄像头,则调用 connectCamera() 方法。connectCamera() 方法实例化一个视频对象。若要显示摄像头捕获的视频,请将对视频流的引用附加到该视频对象,并将该视频对象添加到显示列表中。还为 MouseEvent.CLICK 事件设置了一个事件侦听器。当用户单击舞台之后,将调用 clickHandler() 方法。该方法检查捕获视频的宽度并设置摄像头捕获模式的宽度、高度和每秒帧数请求速率。为了使这些设置生效,必须删除并重新创建该视频对象。还必须将该视频的宽度和高度设置为 camera 对象的宽度和高度。

package {
    import flash.display.Sprite;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.events.MouseEvent;
    import flash.display.StageScaleMode;

    public class Camera_setModeExample extends Sprite {
        private var cam:Camera;
        private var vid:Video;

        public function Camera_setModeExample() {
            stage.scaleMode = StageScaleMode.NO_SCALE;

            cam = Camera.getCamera();
            
            if (!cam) {
                trace("No camera is installed.");
            }else {
                connectCamera();
            }
        }

        private function connectCamera():void {
            vid = new Video();
            vid.width = cam.width;
            vid.height = cam.height; 
            vid.attachCamera(cam);
            addChild(vid);    

            stage.addEventListener(MouseEvent.CLICK, clickHandler);
        }
    
        private function clickHandler(e:MouseEvent):void {

            switch (cam.width) {
                case 160:
                cam.setMode(320, 240, 10); 
                break;
                case 320:
                cam.setMode(640, 480, 5); 
                break;
                default:
                cam.setMode(160, 120, 15); 
                break;
            } 

            removeChild(vid);           
            connectCamera();
        }
    }
}
setMotionLevel()方法 
public function setMotionLevel(motionLevel:int, timeout:int = 2000):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定调度 activity 事件所需的运动量。可以选择设置在没有活动的情况下经过多长时间(以毫秒为单位)后,Flash Player 才会认为动作已停止并调度该事件。

注意:不管 motionLevel 参数值是什么,都可以显示视频。此参数只确定在何时以及哪些情况下调度事件,并不确定实际上是在捕获视频还是显示视频。

若要完全阻止摄像头检测动作,则将值 100 传递到 motionLevel 参数;从不调度 activity 事件。(您可能只将此值用于测试目的 -- 例如,暂时禁用在调度事件时通常会触发的任何处理函数。)

若要确定摄像头当前检测到的运动量,请使用 activityLevel 属性。运动敏感度值直接对应于活动值。完全不运动对应于活动值 0。持续运动对应于活动值 100。您不移动时,活动值小于运动敏感度值;当您移动时,活动值通常会超过运动敏感度值。

此方法和 Microphone.setSilenceLevel() 方法在目的上类似;这两种方法都用于指定应该在何时调度 activity 事件。不过,这两种方法在对发布流的影响上具有显著的差异:

参数

motionLevel:int — 指定调度 activity 事件所需的运动量。可接受值的范围为 0 到 100。默认值为 50。
 
timeout:int (default = 2000) — 指定在没有活动的情况下经过多长时间(以毫秒为单位)后,Flash Player 才会认为活动已停止并调度 activity 事件。默认值为 2000 毫秒(2 秒)。

另请参见


示例

在下面的示例中,将用户的摄像头用作监视器或监视摄像头。摄像头检测运动,文本字段显示活动级别。(可以扩展此示例,以使其发出警报声音或将通过 Web 服务向其他应用程序发送消息。)

Camera.getCamera() 方法将返回对 camera 对象的引用,如果没有可用的摄像头或未安装摄像头,则返回 null。if 语句检查摄像头是否可用,并在摄像头可用时调用 connectCamera() 方法。connectCamera() 方法使用捕获的流的宽度和高度实例化视频对象。若要显示摄像头捕获的视频,请将对视频流的引用附加到该视频对象,并将该视频对象添加到显示列表中。(通常,在调用 attachCamera() 方法时,将出现一个对话框,提示用户允许或拒绝 Flash Player 访问该摄像头。但是,如果用户拒绝访问并选择了“记住”选项,则不会出现该对话框并且不会显示任何信息。若要确保用户可以使用允许访问摄像头的选项,请使用 system.Security.showSettings() 方法来调用“Flash Player 设置”对话框。)

setMotionLevel() 方法在调用 activity 事件前将最动作的活动级别(运动量)设置为 5。摄像头停止检测运动时与调用 activity 事件时之间的时间设置为 1 秒(1000 毫秒)。在经过 1 秒没有活动的时间或活动级别达到 5 后,将调度 ActivityEvent.ACTIVITY 事件并调用 activityHandler() 方法。如果该事件由活动级别触发,则将 activating 属性设置为 true 并且启动 Timer 对象。每秒都会调度 Timer 对象的 timer 事件并调用 timerHandler() 方法,该方法会显示当前的活动级别。(尽管 5 级或更大的级别会触发计时器,但显示的当前活动级别可能是一个较小的数字。)

package {
    import flash.display.Sprite;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.ActivityEvent;

    public class Camera_setMotionLevelExample extends Sprite {
        private var myTextField:TextField;
        private var cam:Camera;
        private var t:Timer = new Timer(1000);

        public function Camera_setMotionLevelExample() {
            myTextField = new TextField();
            myTextField.background = true;
            myTextField.selectable = false;
            myTextField.autoSize = TextFieldAutoSize.LEFT;    
        
            cam = Camera.getCamera();
            
            if (!cam) {
                myTextField.text = "No camera is installed.";

            }else {
                myTextField.text = "Waiting to connect.";
                connectCamera(); 
            }

            addChild(myTextField);

            t.addEventListener(TimerEvent.TIMER, timerHandler);
        }

        private function connectCamera():void {
                var vid:Video = new Video(cam.width, cam.height);
                vid.x = 10;
                vid.y = 10;
                vid.attachCamera(cam);
                addChild(vid);    

                cam.setMotionLevel(5, 1000);
                cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
        }

        private function activityHandler(e:ActivityEvent):void {
            if (e.activating == true) {
                t.start();    
            } else {
                myTextField.text = "Everything is quiet.";
                t.stop();
            }    
        }

        private function timerHandler(event:TimerEvent):void {
             myTextField.x = 10;
             myTextField.y = cam.height + 20;
             myTextField.text = "There is some activity. Level: " + cam.activityLevel;
        }
    }
}
setQuality()方法 
public function setQuality(bandwidth:int, quality:int):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

设置每秒的最大带宽或当前输出视频输入信号所需的画面质量。此方法通常只在使用 Flash Media Server 传输视频时适用。

使用此方法可以指定输出视频输入信号的哪一方面对于您的应用程序更重要:是带宽使用率还是图片品质。

参数

bandwidth:int — 指定当前输出视频输入信号可以使用的最大带宽,以每秒字节数为单位。若要指定 Flash Player 视频可以使用所需数量的带宽来保持 quality 的值,请为 bandwidth 传递 0。默认值为 16384。
 
quality:int — 一个整数,指定所需的画面质量级别,该级别由应用于每一视频帧的压缩量确定。可接受的值的范围为 1(最低品质,最大压缩)到 100(最高品质,无压缩)。若要指定画面质量可以根据需要进行变化以避免超出带宽,请将 0 传递给 quality

另请参见

事件详细信息
activity 事件
事件对象类型: flash.events.ActivityEvent
属性 ActivityEvent.type = flash.events.ActivityEvent.ACTIVITY

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在摄像头开始或结束会话时调度。可以调用 Camera.setMotionLevel() 以指定触发 activating 值为 trueactivity 事件所需的运动量,或者指定在没有活动的情况下经过多长时间才会触发 activating 值为 falseactivity 事件。

ActivityEvent.ACTIVITY 常数定义 activity 事件对象的 type 属性值。

此事件具有以下属性:

属性
activating 如果设备已激活则为 true,如果被取消激活则为 false
bubbles false
cancelable false;没有要取消的默认行为。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
target 开始或结束会话的对象,如 Camera 或 Microphone 对象。
status 事件  
事件对象类型: flash.events.StatusEvent
属性 StatusEvent.type = flash.events.StatusEvent.STATUS

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在摄像头报告其状态时调度。若 code 属性的值为 "Camera.Muted",则表示用户已拒绝 SWF 文件访问其摄像头。如果 code 属性的值为“Camera.Unmuted”,则表示用户允许 SWF 文件访问其摄像头。

定义 status 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
code 对象状态的描述。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
level 消息类别,例如 "status""warning""error"
target 报告其状态的对象。

另请参见

示例 如何使用示例
CameraExample.as

以下示例显示了在确认安全警告之后来自摄像头的图像。舞台被设置为无法进行缩放,并与播放器窗口左上角对齐。activity 事件在会话开始和结束(如果有)时被调度,并由 activityHandler() 方法捕获,该方法会输出有关这一事件的信息。

注意:必须将摄像头与计算机连接,此示例才能正常运行。

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.*;
    import flash.media.Camera;
    import flash.media.Video;

    public class CameraExample extends Sprite {
        private var video:Video;
        
        public function CameraExample() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            var camera:Camera = Camera.getCamera();
            
            if (camera != null) {
                camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                video = new Video(camera.width * 2, camera.height * 2);
                video.attachCamera(camera);
                addChild(video);
            } else {
                trace("You need a camera.");
            }
        }
        
        private function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }
    }
}