2

我得到一个

SecurityError:错误 #2123:违反安全沙箱:BitmapData.draw:file:///Users/.../project/bin-debug/Project.swf 无法访问 rtmp://flash.project.com/project/。没有策略文件被授予访问权限。

这发生在这一行:

temporaryBitmap = new BitmapData(FlexGlobals.topLevelApplication.stage.width, FlexGlobals.topLevelApplication.stage.height, false);
temporaryBitmap.draw(DisplayObject(FlexGlobals.topLevelApplication.stage)); // this line

有没有办法解决这个错误?根据我所做的研究,它似乎与 RTMP 流权限有关。如果是这种情况,那么不显示流是可以的,因为我只是想找到容器的尺寸。因此,如果有一种方法可以获取应用程序的快照,并在视频流所在的位置显示一个黑框,那也很好。

我正在为开发人员创建一个通用工具,因此我不会提前知道哪些内容将可用或不可用。我必须处理这两种情况。我可以想象在从不同域加载图像时我将不得不处理这个问题。

4

1 回答 1

0

我找不到任何其他解决方案来判断它是否会出错,所以我将调用包装在一个 try catch 块中,如下所示:

try {
    drawBitmapData(temporaryBitmap, DisplayObject(FlexGlobals.topLevelApplication));
}
catch (e:Error) {
    // could not draw so don't draw
}

// continue 

我不得不把调用 draw 放到一个单独的调用中,这样它就不会抛出错误,而是跳到下一段代码:

public function drawBitmapData(bitmapData:BitmapData, displayObject:DisplayObject, matrix:Matrix = null):void {
    bitmapData.draw(displayObject, matrix);
}
于 2013-02-01T16:09:20.657 回答