• 用bitmapdata.draw画video时会出现安全沙箱错误解决方法


    在用BitMapData.draw()方法去取一个视频图片时会报安全沙箱错误,以下是解决方法:

    在创建NetStream时video先不要显示视频流(_video.attachNetStream(null)),等到播放视频时再显示视频(_video.attachNetStream(_netStream))

        

    protected function CreateNetStream():void
            {
                _netStream = new NetStream(_connection);
                _netStream.addEventListener(NetStatusEvent.NET_STATUS,NetStatusHandler, false, 0, true);
                _netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,AsyncErrorHandler, false, 0, true);
                _netStream.addEventListener(IOErrorEvent.IO_ERROR,IOErrorHandler,false, 0, true);
                _netStream.client={onMetaData:onMetaData,onPlayStatus:onPlayStatus};
              
                //_video.attachNetStream(_netStream);
                _video.attachNetStream(null);
    
            /******* 设置声音 *******/
                _netStream.soundTransform = _videoSound;
                _oldSound = _netStream.soundTransform;
                if(_controlBar != null)
                    _controlBar.VolumePane.slider.value = _netStream.soundTransform.volume *100;
            }
    /**
             *     播放方法
             * @param url_    播放地址
             */        
            public function PlayVideo(url_:String = ''):void
            {
            
                _controlBar.btnPlayorPause.status = ButtonStatus.ORIGINALSTATUS;
                if(url_== ""){
                    url_ = _mediaUrl;
                }
                else if(_mediaUrl != url_){
                    _mediaUrl = url_;
                }
                if(_mediaUrl == "" || _mediaUrl == null){
                    throw new Error("The url is null!");
                    return;
                }    
                if(_controlBar != null){
                    _controlBar.visible = true;
                    _controlBar.alpha = 0;
                }
                    
                _netStream.play(_mediaUrl);
                _video.attachNetStream(_netStream);
                HideItem(_btnPlay);
                _playStatus = PLAYING;        
                if(_TimeArea != null){
                    _TimeArea.visible = true;
                    _TimeArea.setTotalTime(_totalTime);
                    
                }
                if(_thumb != null && this.contains(_thumb)){
                    this.removeChild(_thumb);
                }
            }

     这样播放视频前和正在播放时都可以BitMapData.draw()方法去取一个视频图片而不会出现安全沙箱错误。。。不过如果想这样就算是解决了安全沙箱错误问题就大错特错了,不信,停止播放再draw()一下试试,又出现安全沙箱错误了吧。

        
            /**
             * 停止播放方法
             */
            public function Stopvideo():void
            {
                //停止播放并清除视频当前画面
                
                _netStream.close();
                _video.clear();
                ////////////////////////////////////////////////////////////////
                /**当用bitmapdata.draw画video时会出现安全沙箱错误,当video.attachNetStream已设置过netStream后再设置为null也会出错
                 * 下面是克隆一个新的video来解决出现安全沙箱错误的
                 * */
                _video.attachNetStream(null);
                var tv:Video=cloneVideo(_video);
                if(_video.hasEventListener(MouseEvent.CLICK)){
                    _video.removeEventListener(MouseEvent.CLICK, onVideoClick);
                    tv.addEventListener(MouseEvent.CLICK, onVideoClick);
                }
                if(this.contains(_video)){
                    
                    this.addChild(tv);
                    this.setChildIndex(tv,this.getChildIndex(_video));
                    this.removeChild(_video);
                }
                _video=tv;
                _video.attachNetStream(null);
                //////////////////////////////////////////////////////////////
                if(_thumb != null && !this.contains(_thumb)){
                    this.addChild(_thumb);
                    this.setChildIndex(_thumb, this.getChildIndex(_video) + 1);
                }
                ShowItem(_btnPlay);        
                _playStatus = STOP;
                _controlBar.btnPlayorPause.status = ButtonStatus.EXCHANGESTATUS;
                _playTimer.stop();
                if(_TimeArea != null){
                    _TimeArea.visible = false;
                    _TimeArea.setTotalTime(0);
                    _TimeArea.UpdateTime(0);
                }
                if(_controlBar != null){
                    _controlBar.visible = false;
    //                _controlBar.alpha = 0;
                }
            }


    private function cloneVideo(v:Video):Video{
            
                var tv:Video= new Video(_videoWidth, _videoHeight);
                tv.smoothing = v.smoothing;
                tv.x=v.x;
                tv.y=v.y;
                tv.width=v.width;
                tv.height=v.height;
                return tv;
                
            }

           

  • 相关阅读:
    RK3288 GMAC整理
    Linux电源管理-Linux regulator framework概述
    SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
    内核错误值
    module_param和module_param_array用法
    VGA
    如何获取显示器的EDID信息
    进程间通信--共享内存
    Java 中的 CAS 简述及原理解析
    volatile 关键字特性解析及单例模式下的使用
  • 原文地址:https://www.cnblogs.com/skybdemq/p/2777766.html
Copyright © 2020-2023  润新知