首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash更新12坏了我的录像机

Flash更新12坏了我的录像机
EN

Stack Overflow用户
提问于 2014-03-04 20:49:25
回答 1查看 154关注 0票数 1

当flash把12.0.0.70版本推到Chrome上时,它把我的录像机弄坏了。

根据补丁注意事项的说法,有一件事可能弄坏了我的闪存录音机。

3689061解决了在Flash 11.9.900.170中注入的一个问题,该问题导致在播放RTMP流时,如果缓冲区被清空,视频缓冲区将不再被填充。

当停止流并将视频保存到时,我的录音机坏了。

我试着用12.0.0.70闪存调试器调试它,但是当我使用调试器时它不会崩溃。只有在使用非调试器Chrome版本时才会崩溃。

我无法调试它,也无法从我的swf中获得任何有用的信息,除了对console.log进行大量外部调用以查看它在哪里失败之外。

如果有人也遇到了类似的问题,闪存,媒体服务器连接的网络摄像机,并能猜出什么可能解决我的问题,我将不胜感激。

我正在使用Flex 4.6.0构建这个swf

这是停止录像机的功能。

代码语言:javascript
复制
public function doStop():void{
            if(status=="paused"){
                doResume();
            }

            rectColor.color=0x000000;
            rectColor.alpha=1;

            var timer:Timer=new Timer(1 * 10);
            timer.addEventListener(TimerEvent.TIMER,function(e:TimerEvent):void{
                timer.stop();
                timer.reset();
                myns.close();
                myTimer.stop();
                if(!thumbBeginning){
                    if(status=="recording"){
                        takeScreenShot();
                    }
                }else{
                    if(status=="recording"){
                        recordingTime = formatTime(realTime);
                        recordingLength = myTimer.currentCount;
                        if(!redoFlag){
                            ExternalInterface.call("CTRecorder.stopOk");
                            myTime.text = formatTime(0);
                            VD1.attachCamera(myCam);
                            setState("ready");
                            status = "stopped, ready"
                            playbackTimer.reset();
                            msg(recordingTime);
                            recording=false;
                            pauseTime=0;
                        }else{
                            pauseTime=0;
                            myTime.text = formatTime(0);
                            VD1.attachCamera(myCam);
                            playbackTimer.reset();
                            msg(recordingTime);
                            recording=false;

                        }
                    }


                    if(shutterGroup.visible){
                        toggleShutter();
                    }

                    myTimer.stop();

                    myTimer.reset();

                    if(redoFlag){
                        doRecord();
                        redoFlag=false;
                        trace("redoFlag turned off");
                    }
                }
                rectColor.alpha=.5;
            });
            timer.start();
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 23:04:37

这并不是一个真正的答案,但它太长,不能发表评论。

“我不能调试它”--它只在发布版本中中断?发布版本是胡椒插件(即Chrome的Flash版本),而调试是NPAPI插件(即Adobe的版本)吗?

其中一个可能的选择是ExternalInterface.call("CTRecorder.stopOk");调用。您是在本地测试还是远程测试?如果在本地,那么您可能会遇到这个bug:https://code.google.com/p/chromium/issues/detail?id=137734,其中flash <-> JS通信由于PPAPI中的可信位置被忽略而中断。无论如何,尝试安装发行版NPAPI版本的Flash,看看它是否仍然崩溃(您可以通过访问chrome://plugins/来验证哪个版本正在运行)

为了帮助调试发布版本,您需要一个日志系统--而不是进行trace()调用,而是调用自定义的log()函数,该函数以及trace()ing还将消息存储在某个地方,比如数组中。然后,在SWF中,当您按下某个键时,在屏幕上显示一个TextField,并使用您的log()消息填充它。这样,您就可以在发布模式中看到trace()语句。

另外,不要忘记侦听任何相关的错误事件和抛出的异常-例如,ExternalInterface.call()会抛出一个ErrorSecurityError。还可以设置marshallExceptions属性,该属性将将ActionScript异常传递给浏览器,将JavaScript异常传递给player:US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#marshallExceptions

最后,在主类上为UncaughtErrorEvent.UNCAUGHT_ERROR事件添加一个侦听器,这将捕获任何未被抛出的错误(非常有趣),这至少意味着应用程序不会崩溃:

代码语言:javascript
复制
mainClass.loaderInfo.uncaughtErrorEvents.addEventListener( UncaughtErrorEvent.UNCAUGHT_ERROR, this._onUncaughtErrorEvent );
private function _onUncaughtErrorEvent( e:UncaughtErrorEvent ):void
{
    var message:String      = null;
    var stackTrace:String   = null;

    // get the message
    if ( e.error is Error )
    {
        message = ( e.error as Error ).message;
        try { stackTrace = ( e.error as Error ).getStackTrace(); }
        catch ( error:Error ) { stackTrace = "No stack trace"; }
    }
    else if ( e.error is ErrorEvent )
        message = ( e.error as ErrorEvent ).text;
    else
        message = e.error.toString();

    // show an alert
    trace( "An uncaught exception has occurred: " + e.errorID + ": " + e.type + ": " + message + ", stack:\n" + stackTrace );
    e.preventDefault();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22182738

复制
相关文章

相似问题

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