用于 Adobe® Flash® Platform 的 ActionScript® 3.0 参考
主页  |  隐藏包列表和类列表 |   |   |  新增内容  |  索引  |  附录  |  为什么显示为英语?
过滤条件: 正在从服务器检索数据...
正在从服务器检索数据...
flash.media 

Camera  - AS3

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

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

使用 Camera 类通过客户端系统或设备摄像头捕获视频。使用 Video 类可在本地监视视频。使用 NetConnection 和 NetStream 类可将视频传输到 Flash Media Server。Flash Media Server 可以将视频流发送到其他服务器,并向运行 Flash Player 或 AIR 的其他客户端广播此视频流。

Camera 实例以横向长宽比捕获视频。在可以更改屏幕方向的设备(例如移动电话)上,与摄像头关联的 Video 对象仅以横向长宽比显示垂直视频。因此,移动应用程序在显示视频时应使用横向并且不应自动旋转。

在 iOS 上,镜像来自前置摄像头的视频。在 Android 上,不会镜像该视频。

在具有自动对焦摄像头的移动设备上,自动启用自动对焦。如果摄像头不支持持续自动聚焦,许多移动设备摄像头都不支持,则当 Camera 对象附加到视频流且只要调用 setMode() 方法时,摄像头就会聚焦。 在台式机上,自动对焦行为取决于摄像头驱动程序和设置。

在 Android 和 iOS 上的 AIR 应用程序中,当 AIR 应用程序(前台应用程序)不活动时,摄像头不捕获视频。此外,当应用程序处于后台时,会丢失流连接。在 iOS 上,当应用程序使用 GPU 呈现模式时,无法显示摄像头视频。摄像头视频仍然可以流向服务器。

AIR 配置文件支持:AIR for TV 设备不支持此功能。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。请注意,对于 AIR for TV 设备,Camera.isSupportedtrue,但是 Camera.getCamera() 始终返回 null。移动浏览器不支持访问摄像头。

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

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

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

查看示例

了解详细信息

相关 API 元素



公共属性
 属性由以下参数定义
  activityLevel : Number
[只读] 摄像头正在检测的运动量。
Camera
  bandwidth : int
[只读] 当前输出视频输入信号可以使用的最大带宽,以字节为单位。
Camera
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  currentFPS : Number
[只读] 摄像头捕获数据的速率,以每秒帧数为单位。
Camera
  fps : Number
[只读] 摄像头捕获数据的最大速率,以每秒帧数为单位。
Camera
  height : int
[只读] 当前捕获高度,以像素为单位。
Camera
  index : int
[只读] 从 0 开始的索引,指定摄像头在 Camera.names 数组中的位置,该数组列出了所有可用摄像头。
Camera
  isSupported : Boolean
[静态] [只读] 如果当前平台支持 Camera 类,则 isSupported 属性设置为 true,否则设置为 false。
Camera
  keyFrameInterval : int
[只读] 完整传输而没有使用视频压缩算法进行插值处理的视频帧(称为关键帧)数。
Camera
  loopback : Boolean
[只读] 表示在本地查看摄像头所捕获的图像时是进行压缩和解压缩 (true),就像使用 Flash Media Server 进行实时传输一样,还是不进行压缩 (false)。
Camera
  motionLevel : int
[只读] 调用 activity 事件所需的运动量。
Camera
  motionTimeout : int
[只读] 摄像头停止检测运动的时间与调用 activity 事件的时间之间相差的毫秒数。
Camera
  muted : Boolean
[只读] 布尔值,表示用户在 Flash Player 的“隐私”对话框中是拒绝访问摄像头 (true) 还是允许访问 (false)。
Camera
  name : String
[只读] 由摄像头硬件返回的当前摄像头的名称。
Camera
  names : Array
[静态] [只读] 包含所有可用摄像头名称的字符串数组。
Camera
      permissionStatus : String
[静态] [只读] 确定应用程序是否已被授予摄像头使用权限。
Camera
      position : String
[只读] 指定摄像头所在的设备的一面。
Camera
  quality : int
[只读] 所需的图片品质级别,该级别是由应用于每个视频帧的压缩量决定的。
Camera
  width : int
[只读] 当前捕获宽度,以像素为单位。
Camera
公共方法
 方法由以下参数定义
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
  
根据像素数据的矩形区域填充一个字节数组。将每个像素的无符号整数(32 位未经过相乘的像素值)写入字节数组。
Camera
  
copyToVector(rect:Rectangle, destination:Vector.<uint>):void
根据像素数据的矩形区域填充一个矢量。
Camera
 Inherited
将事件调度到事件流中。
EventDispatcher
  
将最后一帧复制到位图。
Camera
  
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
  
为应用程序申请摄像头权限。
Camera
  
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
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 由以下参数定义
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
  在摄像头开始或结束会话时调度。Camera
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  当应用程序申请设备摄像头使用权限时调度。Camera
  在摄像头报告其状态时调度。Camera
  在新的摄像头帧经过运行时处理且可供复制后调度。Camera
属性详细信息

activityLevel

属性
activityLevel:Number  [只读]

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

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

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

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



实现
    public function get activityLevel():Number

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

bandwidth

属性 
bandwidth:int  [只读]

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

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

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



实现
    public function get bandwidth():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

currentFPS

属性 
currentFPS:Number  [只读]

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

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



实现
    public function get currentFPS():Number

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

fps

属性 
fps:Number  [只读]

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

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

  • 要为该属性设置所需值,请使用 setMode() 方法。
  • 要确定摄像头当前捕获数据的速率,请使用 currentFPS 属性。



实现
    public function get fps():Number

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

height

属性 
height:int  [只读]

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

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



实现
    public function get height():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

index

属性 
index:int  [只读]

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

从 0 开始的索引,指定摄像头在 Camera.names 数组中的位置,该数组列出了所有可用摄像头。



实现
    public function get index():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

isSupported

属性 
isSupported:Boolean  [只读]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10.1, AIR 2

如果当前平台支持 Camera 类,则 isSupported 属性设置为 true,否则设置为 false



实现
    public static function get isSupported():Boolean

keyFrameInterval

属性 
keyFrameInterval:int  [只读]

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

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



实现
    public function get keyFrameInterval():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

loopback

属性 
loopback:Boolean  [只读]

语言版本: 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

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

motionLevel

属性 
motionLevel:int  [只读]

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

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

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



实现
    public function get motionLevel():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

motionTimeout

属性 
motionTimeout:int  [只读]

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

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

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



实现
    public function get motionTimeout():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

muted

属性 
muted:Boolean  [只读]

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

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



实现
    public function get muted():Boolean

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

name

属性 
name:String  [只读]

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

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



实现
    public function get name():String

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

names

属性 
names:Array  [只读]

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

包含所有可用摄像头名称的字符串数组。访问此数组不会显示 Flash Player 的“隐私”对话框。此数组提供每个摄像头的索引(从 0 开始)以及系统中的摄像头数量(通过 names.length)。

调用 names 属性要求全面检查硬件。在大多数情况下,您只能使用默认的摄像头。



实现
    public static function get names():Array

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

    

permissionStatus

属性 
permissionStatus:String  [只读]

语言版本: ActionScript 3.0
运行时版本: AIR 24.0

确定应用程序是否已被授予摄像头使用权限。



实现
    public static function get permissionStatus():String

相关 API 元素

    

position

属性 
position:String  [只读]

语言版本: ActionScript 3.0
运行时版本: AIR 3.0

指定摄像头所在的设备的一面。

使用 position 属性确定移动设备上的摄像头位于设备的前面还是背面。下面的函数将检查每一个可用摄像头,直到其找到位于所需位置的摄像头。如果没有位于所需位置的摄像头,则返回默认摄像头。

     function getCamera( position:String ):Camera
     {
       var camera:Camera;
       var cameraCount:uint = Camera.names.length;
      for ( var i:uint = 0; i < cameraCount; ++i )
      {
        camera = Camera.getCamera( String(i) );
        if ( camera.position == position ) return camera;
      }
      return Camera.getCamera();
     
     

在移动设备上,摄像头位置通常为 CameraPosition.FRONTCameraPosition.BACK。如果无法确定摄像头的位置,则将位置报告为 CameraPosition.UNKNOWN在桌面平台上,位置始终为 CameraPosition.UNKNOWN

用作此属性的有效值的常量在 CameraPosition 类中定义



实现
    public function get position():String

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

quality

属性 
quality:int  [只读]

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

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

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



实现
    public function get quality():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

width

属性 
width:int  [只读]

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

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



实现
    public function get width():int

引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

方法详细信息

copyToByteArray

()方法
public function copyToByteArray(rect:Rectangle, destination:ByteArray):void

语言版本: ActionScript 3.0
运行时版本: Flash Player 11.4, AIR 3.4

根据像素数据的矩形区域填充一个字节数组

为每个像素将一个无符号整数(32 位未经相乘的像素值)写入字节数组。将数组大小调整为必要的字节数以容纳所有像素。

参数

rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。
 
destination:ByteArray — 表示给定矩形中的像素的 ByteArray。


引发
PermissionError — 应用程序不具备摄像头使用权限。
 
TypeError — 矩形是空的。
 
TypeError — 目标为空

相关 API 元素

copyToVector

()方法 
public function copyToVector(rect:Rectangle, destination:Vector.<uint>):void

语言版本: ActionScript 3.0
运行时版本: Flash Player 11.4, AIR 3.4

根据像素数据的矩形区域填充一个矢量。

为每个像素将一个无符号整数(32 位未经相乘的像素值)写入矢量。将矢量大小调整为必要的条目数以容纳所有像素。

参数

rect:Rectangle — 当前 BitmapData 对象中的一个矩形区域。
 
destination:Vector.<uint> — 一个矢量。<uint> 表示给定矩形中的像素。


引发
PermissionError — 应用程序不具备摄像头使用权限。
 
TypeError — 矩形是空的。
 
TypeError — 目标为空

相关 API 元素

drawToBitmapData

()方法 
public function drawToBitmapData(destination:BitmapData):void

语言版本: ActionScript 3.0
运行时版本: Flash Player 11.4, AIR 3.4

将最后一帧复制到位图。

此方法将把最后一帧的内容复制到 BitmapData 实例。

参数

destination:BitmapData — 包含最后一帧的 BitmapData 实例对象。


引发
ArgumentError — 如果 destination 太小,则会引发 kInvalidBitmapDataError

相关 API 元素

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() 来返回对默认摄像头的引用。通过“摄像头设置面板”(此章节的稍后部分将进行讨论),用户可以指定要使用的默认摄像头。

您不能使用 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 属性。

在 Flash Player 中,用户可以为特定域指定永久隐私设置,方法是在播放 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)

扫描硬件以找到摄像头需要花一些时间。当运行时找到至少一个摄像头后,在播放器实例的生存期内将不再扫描硬件。但是,如果运行时没有找到任何摄像头,则每次调用 getCamera 时它都将进行扫描。这对虽然有摄像头但摄像头被禁用的情况非常适用;如果 SWF 文件提供了调用 getCamera 的“重试”按钮,则用户不必重新启动 SWF 文件,Flash Player 就可以找到摄像头。

参数

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

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

事件
status:StatusEvent — 在摄像头报告其状态时调度。在访问摄像头之前,Flash Player 将显示一个“隐私”对话框,用户可以在该对话框中允许或拒绝对其摄像头的访问。若 code 属性的值为 "Camera.Muted",则表示用户已拒绝 SWF 文件访问其摄像头。如果 code 属性的值为“Camera.Unmuted”,则表示用户允许 SWF 文件访问其摄像头。

相关 API 元素


示例  ( 如何使用本示例 )

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

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;    
        
            if (Camera.isSupported)
            {
                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);
            }else {
                myTextField.text = "The Camera class is not supported on this device.";
            }
        }

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

    requestPermission

()方法 
public function requestPermission():void

语言版本: ActionScript 3.0
运行时版本: AIR 24.0

为应用程序申请摄像头权限。


事件
PermissionStatus:PermissionEvent — 当用户授予/拒绝所申请权限时调度。

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。


引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

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


引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

setMode

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

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

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

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

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

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

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

参数

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


引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素


示例  ( 如何使用本示例 )

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

舞台的设置使其不会缩放。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 事件所需的运动量。可以选择设置在没有活动的情况下经过多长时间(以毫秒为单位)后,运行时才会认为动作已停止并调度该事件。

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

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

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

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

  • Microphone.setSilenceLevel() 设计用于优化带宽。在认为音频流被静音时,不发送任何音频数据。而改为发送一条表示静音已启动的消息。
  • Camera.setMotionLevel() 设计用于检测运动,并且不影响带宽用量。即使视频流未检测到运动,仍将发送视频。

参数

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


引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素


示例  ( 如何使用本示例 )

在下面的示例中,将用户的摄像头用作监视器或监视摄像头。摄像头检测运动,文本字段显示活动级别。(可以扩展此示例,以使其发出警报声音或将通过 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 并将 0 传递给 quality。运行时将在指定的带宽内以可能的最高质量传输视频。如有必要,运行时将降低画面质量以避免超出指定的带宽。通常,随着运动的增加,质量将降低。
  • 要表示品质更为重要,请将 0 传递给 bandwidth 并将一个数值传递给 quality。运行时使用所需数量的带宽来保持指定的质量。如有必要,运行时将降低帧速率以保持画面质量。通常,随着运动的增加,带宽的使用率也将增加。
  • 要指定带宽和品质同等重要,请为这两个参数都传递数值。运行时将传输达到指定质量并且不超过指定带宽的视频。如有必要,运行时将降低帧速率以保持画面质量,而不会超出指定的带宽。

参数

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


引发
PermissionError — 应用程序不具备摄像头使用权限。

相关 API 元素

事件详细信息

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
bubblesfalse
cancelablefalse;没有要取消的默认行为。
currentTarget当前正在使用某个事件侦听器处理 Event 对象的对象。
target开始或结束会话的对象,如 Camera 或 Microphone 对象。
    

permissionStatus

事件  
事件对象类型: flash.events.PermissionEvent
属性 PermissionEvent.type = flash.events.PermissionEvent.PERMISSION_STATUS

语言版本: ActionScript 3.0
运行时版本: AIR 24.0

当应用程序申请设备摄像头使用权限时调度。检查 status 属性的值,以确定是授予此权限还是拒绝此权限。

相关 API 元素

status

事件  
事件对象类型: flash.events.StatusEvent
属性 StatusEvent.type = flash.events.StatusEvent.STATUS

语言版本: ActionScript 3.0
运行时版本: Flash Player 9, AIR (unsupported)

在摄像头报告其状态时调度。在访问摄像头之前,运行时将显示一个“隐私”对话框,用户可以在该对话框中允许或拒绝对其摄像头的访问。若 code 属性的值为 "Camera.Muted",则表示用户已拒绝 SWF 文件访问其摄像头。如果 code 属性的值为“Camera.Unmuted”,则表示用户允许 SWF 文件访问其摄像头。

注意:在 AIR 平台上不调度此事件。它仅用于 Flash Player 中。

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

此事件具有以下属性:

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

相关 API 元素

videoFrame

事件  
事件对象类型: flash.events.Event
属性 Event.type = flash.events.Event.VIDEO_FRAME

语言版本: ActionScript 3.0
运行时版本: Flash Player 11.4, AIR 3.4

在新的摄像头帧经过运行时处理且可供复制后调度。

Event.VIDEO_FRAME 常量定义 videoFrame 事件对象的 type 属性的值。

此事件具有以下属性:

属性
bubblesfalse
cancelablefalse;没有要取消的默认行为。
target调度了此事件的 Camera 对象。

相关 API 元素

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




[ X ]为什么显示为英语?
《ActionScript 3.0 参考》中的内容以英语显示

《ActionScript 3.0 参考》中的部分内容未翻译成所有语言。当某个语言元素未翻译时,将显示为英语。例如,ga.controls.HelpBox 类未翻译成任何语言。因此在简体中文版的参考中,ga.controls.HelpBox 类显示为英语。