- 积分
- 136190
- 注册时间
- 2014-12-27
- 最后登录
- 2024-4-10
- 在线时间
- 603 小时
- 威望
- 562
- 贡献
- 29
- 金币
- 52693
- 钢镚
- 1422
- 交易凭证
- 1
- 分享
- 0
- 精华
- 33
- 帖子
- 2094
- 主题
- 1742
TA的每日心情 | 擦汗 2018-4-10 15:18 |
---|
签到天数: 447 天 [LV.9]以坛为家II
超级版主
- 威望
- 562
- 贡献
- 29
- 金币
- 52693
- 钢镚
- 1422
|
赵客点评:据我所知,在做虚拟现实/增强现实等需要用到摄像头的Flash应用时,大家大都还在用传统的Video来呈现摄像头采集到的实现视频流。而根据Adobe内部的测试发现:在最理想的情况下,使用StageVideo呈现上述视频流,可以让CPU使用率降低85%!甚至完全由GPU解码和合成视频流。CPU在整个流水线中不会使用到!!!这就是传说中最佳性能的“direct path”场景。
当然想体验这个美好的传说,首先要满足三个条件:
- 用户的电脑/显卡支持GPU加速编解码器(H.264);
- 用户安装了Flash Player 11.4/AIR 3.4或以上版本;
- StageVideo对象发挥着正常作用。
所以这里介绍Adobe全球技术专家(ACP)Joseph Labrecque写的一篇快速教程:
把Camera绑定到StageVideo
在过去,我们已经能够相对容易地把本地摄像头绑定到Flash Player中的视频显示对象。当然,flash.media.Video对象是传统的显示列表中的一部分,并没有被系统的图形处理器(GPU)加速。使用新的flash.media.StageVideo对象,我们可以在Flash显示列表的下方实现GPU加速的视频显示。但是在Flash Player 11.4以前,我们只能把摄像头绑定到Video,而不是StageVideo。值得庆幸的是,现在我们可以!
如果你有一个摄像头,无论你在用什么设备阅读这篇教程,请试试下面的演示。你需要确保让Flash Player可以使用摄像头和麦克风。相信我 - 我没有通过这个捕捉到任何数据。
赵客注:貌似新浪博客中的Flash文件无法正常显示。大家直接打开这个链接看吧。http://inflagrantedelicto.memoryspiral.com/wp-content/uploads/2012/11/StageVideoCamera.swf
需要Flash Player 11.4或以上版本
要让这个应用工作起来,只需要在您的ActionScript代码中完成几个步骤。我们需要处理的主要的类就是用flash.media.StageVideo实现GPU加速视频,用flash.media.Camera抓取本地摄像头对象提供图像给我们的视频。要让上述功能工作,你必须使用Flash Player的11.4或以上版本。
在ActionScript中,我们必须做一些必要的导入(只有几个!):
- import flash.media.StageVideo;
- import flash.media.StageVideoAvailability;
- import flash.media.Camera;
- import flash.events.StageVideoAvailabilityEvent;
- import flash.events.StageVideoEvent;
- import flash.geom.Rectangle;
复制代码 我们做的第一件事是创建我们的StageVideo实例。要做到这一点,最安全的方法是等我们的类已经添加到舞台上之后,再为flash.events.StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY添加一个事件监听器。
- stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, availabilityChanged);
复制代码
StageVideo的可用性一旦改变,我们就可以通过在ActionScript中把一个引用赋值给一个变量的方式,把StageVideo实例设为stage.stageVideos [0],。
- stageVideo = stage.stageVideos[0];
复制代码
现在,我们需要抓取flash.media.Camera对象,并把摄像头连接到我们的StageVideo。
- camera = Camera.getCamera();
- stageVideo.attachCamera(camera);
复制代码
最后的任务是侦听flash.events.StageVideoEvent.RENDER_STATE事件。在这时候,我们可以适当调整StageVideo的大小。这一点是我们绝对要做到的,因为的StageVideo最初的宽度和高度是0。
- stageVideo.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
复制代码
下面是完整的代码:请注意:FLA 文件的舞台上有一个文本字段的实例,ID为:statusField。
- package {
- import flash.display.MovieClip;
- import flash.text.TextField;
- import flash.media.StageVideo;
- import flash.media.StageVideoAvailability;
- import flash.media.Camera;
- import flash.events.Event;
- import flash.events.StageVideoAvailabilityEvent;
- import flash.events.StageVideoEvent;
- import flash.geom.Rectangle;
-
- public class Main extends MovieClip {
-
- public var statusField:TextField;
-
- private var camera:Camera;
- private var stageVideo:StageVideo;
-
- public function Main() {
- this.addEventListener(Event.ADDED_TO_STAGE, init);
- }
-
-
- protected function init(e:Event):void {
- stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, availabilityChanged);
- }
-
- protected function availabilityChanged(e:StageVideoAvailabilityEvent):void {
- statusField.appendText("StageVideo => " + e.availability + "\n");
- if(e.availability == StageVideoAvailability.AVAILABLE){
- stageVideo = stage.stageVideos[0];
- attachCamera();
- }
- }
-
- protected function attachCamera():void {
- statusField.appendText("Camera.isSupported => " + Camera.isSupported + "\n");
- if(Camera.isSupported){
- camera = Camera.getCamera();
- stageVideo.addEventListener(StageVideoEvent.RENDER_STATE, onRenderState);
- stageVideo.attachCamera(camera);
- }
- }
-
- protected function onRenderState(e:StageVideoEvent):void {
- stageVideo.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
- }
-
- }
-
- }
复制代码 想要完整的包吗?这里下载:打包的代码和Flash Professional CS6项目
原文地址:
http://inflagrantedelicto.memory ... mera-to-stagevideo/
本文来自:http://blog.sina.com.cn/s/blog_557bc4650101ck3j.html
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|