FCS编程之Camera对象

这一节主要讲述camera对象的使用,包括camera的使用优化、设置合适的带宽和如果使得一个camera用于多个应用程序。
Camera对象允许你从摄影机捕捉视频并追加到任何一个MC中,当使用FlashMx Com server的时候,还可以在联机对象间传输、显示,甚至录制捕捉到的视频。应用这个特性,你可以开发例如视频会议、视频聊天等应用程序。当然你也可以不通过服务器来使用Camera对象,例如可以捕捉你的视频并附加到某个MC。
Camera常用的属性:
  1.  
  2. bandWidth 每秒种传送的最大字节数
     
  3. currentFps 当前传送的fps值
     
  4. fps setMode方法设定的fps值
     
  5. name 当前使用的摄像机名称
     
  6. names 可用视频捕捉设备的数组
     
  7. index 可以视频设备的索引值
     
  8. keyFrameInterval 关键帧间隔
     
  9. loopback 是否压缩影像
     
  10. motionLevel 灵敏度0~100 数值越高动作越迟钝
  11. width 影像的宽度
  12. height 影像的高度
  13. quality 传送的影像品质0~100
  14. muted 客户端是否允许Flash取用本地端的摄像机



需要创建Camera对象,使用下面代码:
1 : MyCamera = Camera.get();
2 : //如果有多个视频设备,请使用index(索引值)指定设备
3 : MyCamera = Camera.get(index);
4 :

如果在不同的网域访问,就会弹出窗口让用户确认使用或是拒绝使用:

当用户对弹出窗口响应后就会触发onStatus事件,请参考muted参数
当然也可以记住用户的选择,点击鼠标右键出现设置窗口

在该窗口选择允许,并选中记住,下次就不会弹出确认窗口了。
更高级的示例是弹出设备选择窗口让用户选择:
1 : camArray = Camera.names;
2 : if (camArray.length == 1){
3 : Camera.get();
4 : }
5 : else
6 : System.showSettings(3);//弹出视频设置窗口
7 : Camera.get();



Flashcomguru 的 arckid 提供了一个很好的检测Camera的方法,把它略作修改如下
01 : function checkforCam() {
02 : camArray = Camera.names;
03 : if (camArray.length >= 1){
04 : temp_cam = Camera.get();
05 : if(temp_cam == -1)
06 : trace('视频设备正忙');
07 : else
08 : trace('视频设备可用');
09 : delete temp_cam;
10 : } else if (camArray.length == 0) {
11 : trace('没有视频设备');
12 : }
13 : }
14 : //-----------------------------------------------------------------
15 : //或者下面的函数更精简:
16 : function checkForCam(){
17 : return Camera.names.length;
18 : }
19 : function isCamBusy(){
20 : if(arguments.length) return Camera.get(arguments[0]) == -1;
21 : return Camera.get() == -1;
22 : }
23 :


要设置Camera对象的模式,可以用setMode()方法,如下:
1 : MyCamera.setMode(width, height, fps [, favorSize])
2 : //width,height 是Camera对象宽高,默认值是160×120
3 : //fps 捕捉视频的速率 默认值是15
4 : //favorSize 是一个可选的布尔值,默认为true,表示采用最大匹配当前的窗口大小的速率,如果设为false,则会优先考虑影像的流畅度。

不同带宽的建议设置
默认的Camera设置对所有的带宽提供了一个相同的足够好的传输品质,如果需要手动设置以适应不同的带宽要求,设置Camera参数的方法如下:
  1. MyCamera.setQuality(bandwidthframeQuality)
    //bandwidth 频宽指每秒传送的最大字节数 默认为16384 如果设为0则维持frameQuality设定的影像品质,尽量使用最大频宽
  2.  
  3. //freamQuality 影像的压缩品质1~100,设为0表示在bandwidth设定范围内自动调整影像品质
  4.  


下面对不同的带宽给出了建议设置:
  1.  
  2. Modem  ]
     
    较低画质,较高动作流畅度 my_cam.setQuality(4000,0)
     
    较高画质,较低动作流畅度 my_cam.setQuality(0,65)
     
    DSL ]
     
    较低画质,较高动作流畅度 my_cam.setQuality(12000,0)
     
    较高画质,较低动作流畅度 my_cam.setQuality(0,90)
     
    LAN ]
     
    较低画质,较高动作流畅度 my_cam.setQuality(400000,0)
     
    较高画质,较低动作流畅度 my_cam.setQuality(0,100)
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  


打开和设置完Camera之后后要附加到一个视频实体才可以显示
  1. MyVideo.attachVideo(MyCamera);



正常关闭camera
如果你的应用程序使用camera对象和NetStream对象记录数据,camera仍然保持打开状态,为了确保关闭Camera对象,请在结束的时候使用
  1. NetStream.attachVideo(false)



在多个应用程序中使用同一个Camera
多个应用程序(swfs)可以在同时使用一个Camera。一般而言,多个浏览器窗口使用相同的进程,所以在浏览器环境中多个应用程序可以正常使用同一个Camera。但是,如果一个是在浏览器中运行,一个是独立应用程序,就不能共享使用同一个Camera,因为Camera不能被多个进程共享。

事件响应
在Camera有两个重要的事件响应
1. onStatus事件 muted属性变化会触发该事件
原参考手册中的一个示例可以说明onstatus的用法
01 : myCam = Camera . get ();
02 : myVideoObject.attachVideo(myCam);
03 : myCam.onStatus = function ( infoMsg ) {
04 : if ( infoMsg.code == 'Camera.Muted' )
05 : {
06 : trace ( 'User denies access to the camera' );
07 : }
08 : else
09 : trace ( 'User allows access to the camera' );
10 : }
11 : // Change the Allow or Deny value to invoke the function
12 : System .showSettings(0);


2. onActivity事件 视频是否活动的事件响应
请参考原手册的范例:
1 : // Assumes a Video object named 'myVideoObject' is on the Stage
2 : c = Camera.get();
3 : myVideoObject.attachVideo(c);
4 : c.setMotionLevel(10, 500);
5 : c.onActivity = function (mode)
6 : {
7 : trace(mode);
8 : };
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值