包 | flash.media |
类 | public final class Camera |
继承 | Camera EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
有关捕获音频的信息,请参阅 Microphone 类。
重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问摄像头。确保应用程序窗口大小至少为 215 x 138 个像素;这是显示该对话框所需的最小大小。
若要创建或引用 Camera 对象,请使用 getCamera()
方法。
另请参见
属性 | 定义方 | ||
---|---|---|---|
activityLevel : Number [只读 (read-only)] 摄像头正在检测的运动量。 | Camera | ||
bandwidth : int [只读 (read-only)] 当前输出视频输入信号可以使用的最大带宽,以字节为单位。 | Camera | ||
constructor : 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 | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
quality : int [只读 (read-only)] 所需的图片品质级别,该级别是由应用于每个视频帧的压缩量决定的。 | Camera | ||
width : int [只读 (read-only)] 当前捕获宽度,以像素为单位。 | Camera |
方法 | 定义方 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
将事件调度到事件流中。 | EventDispatcher | ||
[静态] 返回对用于捕获视频的 Camera 对象的引用。 | Camera | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
指定进行完整传输而不由视频压缩算法进行插值处理的视频帧(称为关键帧)。 | Camera | ||
指定在本地查看摄像头时是否使用压缩视频流。 | Camera | ||
将摄像头的捕获模式设置为最符合指定要求的本机模式。 | Camera | ||
指定调度 activity 事件所需的运动量。 | Camera | ||
设置循环操作动态属性的可用性。 | Object | ||
设置每秒的最大带宽或当前输出视频输入信号所需的画面质量。 | Camera | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 定义方 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
在摄像头开始或结束会话时调度。 | Camera | |||
[广播事件] 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 |
摄像头捕获数据的最大速率,以每秒帧数为单位。可能的最大速率取决于摄像头性能;有可能会达不到此帧速率。
setMode()
方法。
currentFPS
属性。
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()
之类的代码,则 firstCam
和 secondCam
会引用同一个摄像头,该摄像头为用户的默认摄像头。
通常不应为 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: — 在摄像头报告其状态时调度。如果 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 选择与所请求的值最匹配的模式后分配给这些属性的值,请使用 width
、height
和 fps
属性。
如果使用 Flash Media Server,您也可以捕获单个帧或创建延时拍摄。有关详细信息,请参阅 NetStream.attachCamera()
。
参数
width:int — 请求的捕获宽度,以像素为单位。默认值为 160。 | |
height:int — 请求的捕获高度,以像素为单位。默认值为 120。 | |
fps:Number — 摄像头捕获数据应使用的请求速率,以每秒帧数为单位。默认值为 15。 | |
favorArea:Boolean (default = true ) —
指定在摄像头不具有满足指定要求的本机模式的情况下是否控制宽度、高度和帧频。默认值为 true ,这意味着支持保持捕获大小;使用此参数选择与 width 和 height 值最匹配的模式,即使这样做会由于降低帧频而对性能造成不利影响。若要最大限度地提高帧频,而不考虑摄像头的高度和宽度,请将 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
事件。不过,这两种方法在对发布流的影响上具有显著的差异:
Microphone.setSilenceLevel()
设计用于优化带宽。在认为音频流被静音时,不发送任何音频数据。而改为发送一条指示静音已启动的消息。
Camera.setMotionLevel()
设计用于检测运动,并且不影响带宽用量。即使视频流未检测到运动,仍将发送视频。
参数
motionLevel:int —
指定调度 activity 事件所需的运动量。可接受值的范围为 0 到 100。默认值为 50。
| |
timeout:int (default = 2000 ) —
指定在没有活动的情况下经过多长时间(以毫秒为单位)后,Flash Player 才会认为活动已停止并调度 activity 事件。默认值为 2000 毫秒(2 秒)。
|
另请参见
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
并将 0 传递给 quality
。Flash Player 将在指定的带宽内以可能的最高品质传输视频。如有必要,Flash Player 将降低图片品质以避免超出指定的带宽。通常,随着运动的增加,质量将降低。
bandwidth
并将一个数值传递给 quality
。Flash Player 使用所需数量的带宽来保持指定的品质。如有必要,Flash Player 将降低帧速率以保持图片品质。通常,随着运动的增加,带宽的使用率也将增加。
参数
bandwidth:int —
指定当前输出视频输入信号可以使用的最大带宽,以每秒字节数为单位。若要指定 Flash Player 视频可以使用所需数量的带宽来保持 quality 的值,请为 bandwidth 传递 0。默认值为 16384。
| |
quality:int —
一个整数,指定所需的画面质量级别,该级别由应用于每一视频帧的压缩量确定。可接受的值的范围为 1(最低品质,最大压缩)到 100(最高品质,无压缩)。若要指定画面质量可以根据需要进行变化以避免超出带宽,请将 0 传递给 quality 。
|
另请参见
activity | 事件 |
flash.events.ActivityEvent
flash.events.ActivityEvent.ACTIVITY
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在摄像头开始或结束会话时调度。可以调用 Camera.setMotionLevel()
以指定触发 activating
值为 true
的 activity
事件所需的运动量,或者指定在没有活动的情况下经过多长时间才会触发 activating
值为 false
的 activity
事件。
ActivityEvent.ACTIVITY
常数定义 activity
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
activating
|
如果设备已激活则为 true ,如果被取消激活则为 false 。
|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 开始或结束会话的对象,如 Camera 或 Microphone 对象。 |
status | 事件 |
flash.events.StatusEvent
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
| 报告其状态的对象。 |
另请参见
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); } } }