随笔 - 8  文章 - 55  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

朋友的Blog

最新评论

阅读排行榜

评论排行榜

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


ip地址已设置保密
2006-2-28 13:03:12
netfound
帅哥哟,离线,有人找我吗?
头衔:CMS服务者
等级:超级版主
文章:407
积分:4438
门派:无门无派
注册:2006年2月6日
2
 用支付宝给netfound付款或购买其商品,支付宝交易免手续费、安全、快捷!点击这里发送电子邮件给netfound

发贴心情
要设置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)
  2. //bandwidth 频宽指每秒传送的最大字节数 默认为16384 如果设为0则维持frameQuality设定的影像品质,尽量使用最大频宽
  3. //freamQuality 影像的压缩品质1~100,设为0表示在bandwidth设定范围内自动调整影像品质

     

  4. //bandwidth 频宽指每秒传送的最大字节数 默认为16384 如果设为0则维持frameQuality设定的影像品质,尽量使用最大频宽
  5. //freamQuality 影像的压缩品质1~100,设为0表示在bandwidth设定范围内自动调整影像品质

     

  6. //bandwidth 频宽指每秒传送的最大字节数 默认为16384 如果设为0则维持frameQuality设定的影像品质,尽量使用最大频宽
  7. //freamQuality 影像的压缩品质1~100,设为0表示在bandwidth设定范围内自动调整影像品质

     

  8. //freamQuality 影像的压缩品质1~100,设为0表示在bandwidth设定范围内自动调整影像品质

 

 
ip地址已设置保密
2006-2-28 13:04:57
netfound
帅哥哟,离线,有人找我吗?
头衔:CMS服务者
等级:超级版主
文章:407
积分:4438
门派:无门无派
注册:2006年2月6日
3
 用支付宝给netfound付款或购买其商品,支付宝交易免手续费、安全、快捷!点击这里发送电子邮件给netfound

发贴心情

 下面对不同的带宽给出了建议设置:
 
[ 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)


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

 

正常关闭camera
如果你的应用程序使用camera对象和NetStream对象记录数据,camera仍然保持打开状态,为了确保关闭Camera对象,请在结束的时候使用
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 : };

posted on 2006-06-04 20:08 blog搬家了--[www.ialway.com/blog] 阅读(488) 评论(0)  编辑  收藏 所属分类: FMS

只有注册用户登录后才能发表评论。


网站导航: