首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不眨眼地在flex中更新照片

不眨眼地在flex中更新照片
EN

Stack Overflow用户
提问于 2011-10-27 15:16:22
回答 1查看 282关注 0票数 0

我试着用佳能相机模拟现场场景。

我使用CanonSDK与摄像头进行交互,每隔一段时间就会得到一幅图像,以便逐帧模拟视频。这很好,我使用java来做后端,并通过BlazeDS将图像发送到flex。

问题不是获取图像,而是当我使用像这样的东西加载一个新映像时,问题是:

image.source=my_new_image;

新图像被加载,但它产生一个短的白色眨眼,它破坏了视频.

因此,我想知道这是否是一种在flex上更新图像的方法,以避免闪烁问题,或者我是否可以从java中进行视频流并使用flex.来获取它

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-27 15:27:42

简单的方法是使用名为double buffering的技术,使用两个Loaders -一个用于可见的图像,另一个用于正在加载和不可见的图像。当图像完成加载时,它变得可见,另一个变得不可见,进程重复。

就效率而言,最好至少使用到服务器的套接字连接来传输图像字节,最好是AMF格式,因为它的开销很小。在BlazeDS中,这在一些脚本中是相当可能的。

为了提高效率,您可以尝试在服务器上使用实时帧或视频编码器,但是在客户机上解码视频将是一项挑战。为了获得最好的性能,最好使用内置的视频解码器和流媒体服务器(如)。

更新(示例脚本):

此示例通过HTTP加载图像。更有效的方法是使用AMF套接字(上面提到)来传输图像,然后使用Loader.loadBytes()来显示它。

代码语言:javascript
复制
private var loaderA:Loader;
private var loaderB:Loader;
private var foregroundLoader:Loader;
private var backgroundLoader:Loader;

public function Main()
{       
    loaderA = new Loader();
    loaderB = new Loader();
    foregroundLoader = loaderA;
    backgroundLoader = loaderB;

    loadNext();
}

private function loadNext():void
{
    trace("loading");
    backgroundLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);
    backgroundLoader.load(new URLRequest("http://www.phpjunkyard.com/randim/randim.php?type=1"));
}

private function loaderCompleteHandler(event:Event):void
{
    trace("loaded");

    var loaderInfo:LoaderInfo = event.target as LoaderInfo;
    var loader:Loader = loaderInfo.loader;
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderCompleteHandler);

    if (contains(foregroundLoader))
        removeChild(foregroundLoader);

    var temp:Loader = foregroundLoader;
    foregroundLoader = backgroundLoader;
    backgroundLoader = temp;

    addChild(foregroundLoader);

    loadNext();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7918166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档