当 SWF 文件试图使用 Camera.get() 或 Microphone.get() 方法访问用户的摄像头或麦克风时,Flash Player 将显示一个“隐私”对话框,用户可以在该对话框中允许或拒绝对其摄像头或麦克风的访问。用户和管理用户还可以通过 mms.cfg 文件、“设置 UI”和“设置管理器”中的控制基于站点或全局禁用摄像头访问(请参阅管理员控制和用户控制)。用户加以限制后,Camera.get() 和 Microphone.get() 方法均返回 null 值。可以使用 Capabilities.avHardwareDisable 属性确定是已经通过管理方式禁止了 (true) 对摄像头和麦克风的访问,还是允许 (false) 对摄像头和麦克风的访问。
System.setClipboard() 方法允许 SWF 文件用纯文本字符串替换剪贴板内容。这不会带来任何安全性风险。为避免因剪切或复制到剪贴板的密码和其它敏感数据所带来的风险,并未提供相应的 getClipboard() 方法。
运行于 Flash Player 中的应用程序只能监视在其焦点以内发生的键盘和鼠标事件。运行于 Flash Player 中的内容不能检测其它应用程序中的键盘或鼠标事件。
//摄像头
flash.media.Camera
Camera.getCamera();
//麦克风
flash.media.Microphone;
Microphone.getMicrophone();
flash.system.Capabilities;
Capabilities.avHardwareDisable;
flash.system.System
System.setClipboard("");
flash.media.Camera
有关捕获音频的信息,请参阅 Microphone 类。
重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问摄像头。确保应用程序窗口大小至少为 215 x 138 个像素;这是显示该对话框所需的最小大小。
要创建或引用 Camera 对象,请使用 getCamera()
方法。
有关捕获视频的信息,请参阅 Camera 类。
重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问麦克风。请确保应用程序窗口大小至少为 215 x 138 像素,这是显示对话框所需的最小尺寸。
要创建或引用 Microphone 对象,请使用 Microphone.getMicrophone()
方法。
警告:对于应用程序安全沙箱以外的内容,会显示“隐私”对话框,用户可以从中选择是允许还是拒绝对麦克风的访问。此对话框要求应用程序窗口大小至少为 215 x 138 个像素。对于应用程序安全沙箱内的 Adobe AIR 内容,将允许访问麦克风,且不再显示该对话框。
但 Adobe AIR 的有些功能没有作为 Capabilities 类的属性列出。这些功能是其它类的属性:
NativeApplication.supportsDockIcon |
操作系统是否支持系统停靠图标。 |
NativeApplication.supportsMenu |
操作系统是否支持全局应用程序菜单栏。 |
NativeApplication.supportsSystemTrayIcon |
操作系统是否支持系统任务栏图标。 |
NativeWindow.supportsMenu |
操作系统是否支持窗口菜单。 |
NativeWindow.supportsTransparency |
操作系统是否支持透明窗口。 |
请勿 使用 Capabilities.os
或 Capabilities.manufacturer
来根据操作系统确定功能。以操作系统来决定功能是个不良习惯,因为如果应用程序没有考虑到所有潜在的目标操作系统,这会产生问题。建议使用与要测试的功能相对应的属性。
可使用 GET
或 POST
HTTP 方法发送功能信息,这些信息作为一个 URL 编码的字符串存储在 Capabilities.serverString
属性中。下例显示了支持 MP3、具有 1600 x 1200 像素分辨率、运行 Windows XP 并且安装有输入法编辑器 (IME) 的计算机的服务器字符串:
A=t&SA=t&SV=t&EV=t&MP3=t&AE=t&VE=t&ACC=f&PR=t&SP=t& SB=f&DEB=t&V=WIN%209%2C0%2C0%2C0&M=Adobe%20Windows& R=1600x1200&DP=72&COL=color&AR=1.0&OS=Windows%20XP& L=en&PT=External&AVD=f&LFD=f&WD=f&IME=t
下表列出了 Capabilities 类的属性和相应的服务器字符串:
avHardwareDisable |
AVD |
hasAccessibility |
ACC |
hasAudio |
A |
hasAudioEncoder |
AE |
hasEmbeddedVideo |
EV |
hasIME |
IME |
hasMP3 |
MP3 |
hasPrinting |
PR |
hasScreenBroadcast |
SB |
hasScreenPlayback |
SP |
hasStreamingAudio |
SA |
hasStreamingVideo |
SV |
hasTLS |
TLS |
hasVideoEncoder |
VE |
isDebugger |
DEB |
language |
L |
localFileReadDisable |
LFD |
manufacturer |
M |
maxLevelIDC |
ML |
os |
OS |
pixelAspectRatio |
AR |
playerType |
PT |
screenColor |
COL |
screenDPI |
DP |
screenResolutionX |
R |
screenResolutionY |
R |
version |
V |
还有一个 WD
服务器字符串,用于指定是否禁用无窗口模式。如果与 Web 浏览器不兼容或用户在 mms.cfg 文件中进行了相应设置,则可以在 Flash Player 中禁用无窗口模式。没有对应的 Capabilities 属性。
Capabilities 类的所有属性都是只读的。
其它属性和方法在 flash.system 包的其它类中:Capabilities 类、IME 类和 Security 类。
此类只包含静态方法和属性。无法创建 System 类的新实例。
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 即可找到摄像头。
names
属性返回的数组确定。对于大多数应用程序,可省略此参数来获取默认摄像头。要为此参数指定值,请使用 Camera.names 数组内从零开始的索引位置的字符串表示形式。例如,要在数组中指定第三个摄像头,请使用
Camera.getCamera("2")
。
name
参数,则此方法返回对默认摄像头的引用;或者,如果默认摄像头正由另一个应用程序使用,则此方法返回对第一个可用摄像头的引用。(如果安装了多个摄像头,则用户可以在 Flash Player 的“摄像头设置”面板中指定默认的摄像头。)如果没有可用摄像头或没有安装摄像头,则该方法返回
null
。
NetStream.attachAudio()
)。
对 Microphone.get()
的多次调用会引用同一个麦克风。因此,如果代码包含 mic1 = Microphone.get()
和 mic2 = Microphone.get()
行,则 mic1
和 mic2
将引用同一个(默认)麦克风。
如果要获取默认的麦克风,则需要使用 -1 调用 getMicrophone()
。如果调用此方法时不使用任何参数,则会返回列表中的第一个麦克风。
可以使用 index
属性来获取当前 Microphone 对象的索引值。然后,可以将该值传递给 Microphone 类的其它方法。
通常,不应传递 index
的值。只需使用 Microphone.getMicrophone()
方法即可返回对默认麦克风的引用。通过使用“麦克风设置”面板,用户可以指定应用程序应使用的默认麦克风。如果传递 index
的值,则可能会引用非用户选择的其它麦克风。在极少数情况下(例如,应用程序同时从两个麦克风捕获音频),您可能会使用 index
。
当 SWF 文件尝试访问 Microphone.getMicrophone()
返回的对象时(例如,在调用 NetStream.attachAudio()
时),Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问麦克风。(确保舞台大小至少为 215 x 138 个像素;这是 Flash Player 显示该对话框所需的最小大小。)
当用户对此对话框做出响应时,将分派 status
事件以指示用户的响应。还可以检查 Microphone.muted
属性以确定用户是允许还是拒绝访问麦克风。
如果 Microphone.getMicrophone()
返回 null
,则表明麦克风正由其它应用程序使用,或者系统上没有安装任何麦克风。要确定是否安装了任何麦克风,请使用 Microphones.names.length
。要显示 Flash Player 的“麦克风设置”面板(用户可从中选择 Microphone.getMicrophone
所引用的麦克风),请使用 Security.showSettings()
。
true
) 还是允许 (
false
)。服务器字符串为
AVD
。
对于 Adobe AIR™ 中的内容,此属性仅适用于应用程序安全沙箱以外的安全沙箱中的内容。应用程序安全沙箱中的内容始终可以访问用户的摄像头和麦克风。
此方法是为 Flash Player 9 中运行的 SWF 内容提供的。它只允许向剪贴板添加 String 内容。在 AIR 应用程序中,Flash Player 10 内容和应用程序安全沙箱中的内容可以调用 Clipboard.setData()
方法。