当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
这是停止录像机的功能。
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();
}发布于 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()会抛出一个Error和SecurityError。还可以设置marshallExceptions属性,该属性将将ActionScript异常传递给浏览器,将JavaScript异常传递给player:US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#marshallExceptions
最后,在主类上为UncaughtErrorEvent.UNCAUGHT_ERROR事件添加一个侦听器,这将捕获任何未被抛出的错误(非常有趣),这至少意味着应用程序不会崩溃:
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();
}https://stackoverflow.com/questions/22182738
复制相似问题