如何在NetStream.appendBytes中使用BitmapData.draw?

Aar*_*ron 8 air flash adobe actionscript-3 flash-video

我正在使用NetStream.appendBytes()在Adobe AIR中播放本地视频(不涉及服务器).我想BitmapData.draw()用来拍摄视频输出,但是我收到了这个错误:

错误#2123:安全沙箱冲突:BitmapData.draw:无法访问null.没有授予访问权限的策略文

以下是一些示例代码:

package
{
    import flash.display.Sprite;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.net.NetStreamAppendBytesAction;
    import flash.utils.ByteArray;
    import flash.display.BitmapData;

    class ByteArrayPlayer extends Sprite
    {
        private var _ns:NetStream;
        private var _nc:NetConnection;
        private var _video:Video;

        public function playVideo(path:String):void
        {
            _nc = new NetConnection();
            _nc.connect(null);
            _ns = new NetStream(_nc);

            _video = new Video();
            addChild(_video);
            _video.attachNetStream(_ns);

            _ns.play(null);
            _ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);

            var file:File = new File(path);
            var fileStream:FileStream = new FileStream();
            fileStream.open(file, FileMode.READ);

            var bytes:ByteArray = new ByteArray();

            fileStream.readBytes(bytes);

            _ns.appendBytes(bytes);
        }


        public function getImage(video:Video):BitmapData
        {
            var bit:BitmapData = new BitmapData(_video.width, _video.height);
            bit.draw(_video);            //This will cause the error
            return bit;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是用于解释的示例代码.在视频播放时调用getImage方法时会发生错误.该错误提到未找到的策略文件.由于文件是在本地加载的,因此实际上没有放置策略文件的位置.是否有需要设置的策略设置或BitmapData.draw使用时功能不可用appendBytes

Tjo*_*ras 0

NetStream.checkPolicyFile = true在调用该函数之前尝试设置play()

像这样:

_ns.checkPolicyFile = true;
_ns.play(null);
Run Code Online (Sandbox Code Playgroud)

checkPolicyFile标志的作用是告诉主机 swf 从已加载的 swf 服务器加载策略文件。如果您在加载时未指定该标志,则SecurityError当您尝试通过BitmapData.draw().

Adobe 资源链接:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#checkPolicyFile