FMS Camera对象设置说明
目录:
1.setQuality(Camera.setQuality方法)
2.quality(Camera.quality属性)
3.setMode(Camera.setMode方法)
4.onActivity(Camera.onActivity处理函数)
5.onStatus(Camera.onStatus处理函数)
6.setMotionLevel(Camera.setMotionLevel方法)
一:setQuality(Camera.setQuality方法)
public setQuality([bandwidth:Number], [quality:Number]) : Void
设置每秒的最大带宽或当前输出视频输入信号所需的图片品质。此方法通常只在您使用 Flash Communication Server 传输视频时适用。
使用此方法可以指定输出视频输入信号的哪一方面对于您的应用程序更重要:是带宽使用率还是图片品质。
- 若要指示带宽使用率更为重要,请将一个值传递给 bandwidth 并将 0 传递给 frameQuality。Flash 将在指定的带宽内以可能的最高品质传输视频。如有必要,Flash 将降低图片品质以避免超出指定的带宽。通常,随着运动的增加,品质将降低。
- 若要指示品质更为重要,请将 0 传递给 bandwidth 并将一个数值传递给 frameQuality。Flash 将根据需要使用尽量多的带宽来保持指定的品质。如有必要,Flash 将降低帧速率以保持图片品质。通常,随着运动的增加,带宽的使用率也将增加。
- 若要指定带宽和品质同等重要,请为这两个参数都传递数值。Flash 将传输达到指定品质并且不超过指定带宽的视频。如有必要,Flash 将降低帧速率以在不超出指定的带宽的情况下保持图片品质。
可用性:ActionScript 1.0;Flash Player 6
参数
bandwidth:Number
[可选] - 整数,指定当前输出视频可以使用的最大带宽量,以每秒字节数为单位。若要指定 Flash 视频可以使用所需的任何数量的带宽来保持 frameQuality 的值,则将 0 传递给 bandwidth。默认值为 16384。
quality:Number
[可选] - 整数,指定所需的画面质量的级别,该整数由应用于每一视频帧的压缩量确定。可接受的值范围从 1(最低品质,最大压缩)到 100(最高品质,无压缩)。若要指定画面质量可以根据需要进行变化以避免超出带宽,请将 0 传递给 quality。默认值是 0。
示例
下面的示例举例说明如何使用此方法来控制带宽使用率和图片品质。
// Ensure that no more than 8192 (8K/second) is used to send video active_cam.setQuality(8192,0); // Ensure that no more than 8192 (8K/second) is used to send video // with a minimum quality of 50 active_cam.setQuality(8192,50); // Ensure a minimum quality of 50, no matter how much bandwidth it takes active_cam.setQuality(0,50);
另请参见
get(Camera.get 方法),quality(Camera.quality 属性),bandwidth(Camera.bandwidth 属性)
二:quality(Camera.quality属性)
public quality : Number [read-only]
整数,指定所需的画面质量级别,该级别由应用于每一视频帧的压缩量确定。可接受的品质值范围为从 1(最低品质,最大压缩)到 100(最高品质,无压缩)。默认值为 0,这意味着图片品质可以根据需要进行变化,以避免超出可用带宽。
可用性:ActionScript 1.0;Flash Player 6
示例
下面的示例使用 NumericStepper 实例指定应用于摄像头输入信号的压缩量。在"库"选项菜单中选择"新建视频",以创建新的视频实例。在舞台上添加实例,并为它指定实例名称 my_video
。添加一个实例名称为 quality_nstep 的 NumericStepper。然后将下面的 ActionScript 添加到时间轴的第 1 帧中:
var quality_nstep:mx.controls.NumericStepper; var my_cam:Camera = Camera.get(); var my_video:Video; my_video.attachVideo(my_cam); quality_nstep.minimum = 0; quality_nstep.maximum = 100; quality_nstep.stepSize = 5; quality_nstep.value = my_cam.quality; function changeQuality() { my_cam.setQuality(my_cam.bandwidth, quality_nstep.value); } quality_nstep.addEventListener("change", changeQuality);
三:setMode(Camera.setMode方法)
public setMode([width:Number], [height:Number], [fps:Number], [favorArea:Boolean]) : Void
将摄像头的捕获模式设置为最符合指定要求的本机模式。如果摄像头不具有与您传递的所有参数相匹配的本机模式,则 Flash 选择最接近于请求模式的合成的捕获模式。此操作可能涉及裁切图像和删除帧。
默认情况下,Flash 根据需要删除帧,以保持图像大小。若要将删除的帧的数目降至最低(即使这样做意味着减小图像的大小),请将 false
传递给 favorArea
参数。
在选择本机模式时,Flash 尝试尽可能保持请求的纵横比。例如,如果您发出 active_cam.setMode
(400, 400, 30
) 命令,并且摄像头上可用的最大 width 和 height 值分别为 320 和 288,则 Flash 将 width 和 height 都设置为 288;通过将这些属性设置为相同的值,Flash 可以保持所请求的 1:1 的高宽比。
若要确定 Flash 在选择与您请求的值最匹配的模式后分配给这些属性的值,请使用Camera.width
、Camera.height
和 Camera.fps
。
可用性:ActionScript 1.0;Flash Player 6
参数
width:Number
[可选] - 请求的捕获宽度,以像素为单位。默认值为 160。
height:Number
[可选] - 请求的捕获高度,以像素为单位。默认值为 120。
fps:Number
[可选] - 摄像头捕获数据应使用的请求速率,以每秒帧数为单位。默认值为 15。
favorArea:Boolean
[可选] - 布尔值,指定如果摄像头不具有满足指定要求的本机模式时如何控制宽度、高度和帧频。默认值为 true
,这意味着支持保持捕获大小;使用此参数选择与 width 和 height 值最匹配的模式,即使这样做会由于降低帧频而对性能有不利影响。若要最大限度地提高帧频,而不考虑摄像头的高度和宽度,请将false
传递给 favorArea
参数。
示例
下面的示例设置摄像头的捕获模式。可以将帧频键入到 TextInput 实例中,然后按 Enter 或 Return 以应用帧频。在"库"选项菜单中选择"新建视频",以创建新的视频实例。在舞台上添加实例,并为它指定实例名称my_video
。添加实例名称为 fps_ti 的 TextInput 组件实例。然后将下面的 ActionScript 添加到时间轴的第 1 帧中:
var my_cam:Camera = Camera.get(); var my_video:Video; my_video.attachVideo(my_cam); fps_ti.maxChars = 2; fps_ti.restrict = [0-9]; fps_lbl.text = "Current: "+my_cam.fps+" fps"; function changeFps():Void { my_cam.setMode(my_cam.width, my_cam.height, fps_ti.text); fps_lbl.text = "Current: "+my_cam.fps+" fps"; fps_ti.text = my_cam.fps; Selection.setSelection(0,2); } fps_ti.addEventListener("enter", changeFps);
另请参见
fps(Camera.fps 属性),height(Camera.height 属性),width(Camera.width 属性),currentFps(Camera.currentFps 属性)
四:onActivity(Camera.onActivity处理函数)
onActivity = function(active:Boolean) {}
在摄像头开始或停止检测运动时调用。如果要对此事件处理函数做出响应,则必须创建一个函数来处理其活动值。
若要指定调用 Camera.onActivity(true)
所需的移动量以及必须经过多少时间没有活动才能调用 Camera.onActivity(false)
,请使用 Camera.setMotionLevel()
。
可用性:ActionScript 1.0;Flash Player 6
参数
active:Boolean
- 布尔值,当摄像头开始检测运动时,设置为 true;当运动停止时设置为 false。
示例
下面的示例在摄像头开始或停止检测运动时在"输出"面板中显示 true 或 false。
// Assumes a Video object named "myVideoObject" is on the Stage active_cam = Camera.get(); myVideoObject.attachVideo(active_cam); active_cam.setMotionLevel(10, 500); active_cam.onActivity = function(mode) { trace(mode); }
五:onStatus(Camera.onStatus处理函数)
onStatus = function(infoObject:Object) {}
当用户允许或拒绝访问摄像头时调用。如果您要响应此事件处理函数,必须创建一个函数来处理摄像头生成的信息对象。
当一个 SWF 文件尝试访问摄像头时,Flash Player 显示"隐私"对话框,用户可以从中选择是允许还是拒绝访问。
- 如果用户允许访问,则
Camera.muted
属性设置为 false,并且用 code 属性为"Camera.Unmuted"且 level 属性为"Status"的一个信息对象调用此事件处理函数。 - 如果用户拒绝访问,则
Camera.muted
属性设置为 true,并且用 code 属性为"Camera.Muted"且 level 属性为"Status"的一个信息对象调用此事件处理函数。
若要不处理此事件处理函数就确定用户是拒绝还是允许对摄像头的访问,请使用 Camera.muted
属性。
注意:如果用户选择永久允许或拒绝对来自指定域的所有 SWF 文件的访问,则对于来自该域的 SWF 文件不调用此处理函数,除非用户以后更改该隐私设置。有关更多信息,请参阅 Camera.get()
。
可用性:ActionScript 1.0;Flash Player 6
参数
infoObject:Object
- 根据状态消息定义的参数。
示例
每当用户允许或拒绝对摄像头的访问时,下面的 ActionScript 都用于显示消息:
var my_cam:Camera = Camera.get(); var my_video:Video; my_video.attachVideo(my_cam); my_cam.onStatus = function(infoObj:Object) { switch (infoObj.code) { case 'Camera.Muted' : trace("Camera access is denied"); break; case 'Camera.Unmuted' : trace("Camera access granted"); break; } }
另请参见
get(Camera.get 方法),muted(Camera.muted 属性),showSettings(System.showSettings 方法),onStatus(System.onStatus 处理函数)
六:setMotionLevel(Camera.setMotionLevel方法)
public setMotionLevel([motionLevel:Number], [timeOut:Number]) : Void
指定调用 Camera.onActivity(true)
所需的移动量。或者,设置必须经过多少没有活动的时间(按毫秒数计算),Flash 才会认为动作已停止并调用 Camera.onActivity(false)
。
注意:不论 sensitivity
参数为何值都能显示视频。此参数只确定在何时以及哪些情况下调用Camera.onActivity
,而并不确定实际上是捕获视频还是显示视频。
- 若要完全禁止摄像头检测动作,则将值 100 传递到 sensitivity;永远不调用
Camera.onActivity
。(您可能只将此值用作测试目的,例如暂时禁用在调用Camera.onActivity
时发生的任何动作。) - 若要确定摄像头当前检测到的移动量,请使用
Camera.activityLevel
属性。
运动敏感度值直接对应于活动值。完全不运动时活动值为 0。持续运动时活动值为 100。当您不移动时,活动值小于运动敏感度值;当您移动时,活动值通常会超过运动敏感度值。此方法的用途与
Microphone.setSilenceLevel()
相同;这两种方法都用于指定应该在何时调用onActivity
事件处理函数。但是这些方法对发布流具有非常不同的影响: Microphone.setSilenceLevel()
设计用于优化带宽。在认为音频流被静音时,不发送任何音频数据。所发送的是一个指示静音已启动的消息。Camera.setMotionLevel()
设计用于检测动作,它不影响带宽用量。即使视频流未检测到运动,仍将发送视频。
可用性:ActionScript 1.0;Flash Player 6
参数
motionLevel:Number
[可选] - 数值,指定调用 Camera.onActivity(true)
所需的移动量。可接受值的范围为从 0 到 100。默认值为 50。
timeOut:Number
[可选] - 数字参数,指定必须经过多少没有活动的时间(按毫秒数计算),Flash 才会认为活动已停止并调用 Camera.onActivity(false)
事件处理函数。默认值为 2000(2 秒)。
示例
下面的示例在视频活动开始或结束时将消息发送到"输出"面板。将值为 30 的运动敏感度值更改为更高或更低的数值,看一下不同的值是如何影响运动检测的。
// Assumes a Video object named "myVideoObject" is on the Stage active_cam = Camera.get(); x = 0; function motion(mode) { trace(x + ": " + mode); x++; } active_cam.onActivity = function(mode) { motion(mode); } active_cam.setMotionLevel(30, 500); myVideoObject.attachVideo(active_cam);
另请参见
motionLevel(Camera.motionLevel 属性),motionTimeOut(Camera.motionTimeOut 属性),onActivity(Camera.onActivity 处理函数),activityLevel(Camera.activityLevel 属性)