Hi,
ich habe ein AIR Programm geschrieben, dass mir eine Zeitraffer Aufnahme einer Webcam auf einer Baustelle generieren soll. Ich habe dafür eine Webcam angeschlossen und nehme je nach Ausgabe der XML/PHP in bestimmten Zeitintervallen ein Bild auf. Das Bild wird auf dem Rechner gespeichert und an eine andere PHP Datei als Bitarray gesendet, die daraus ein Bild auf dem Server ablegt. Das funktioniert alles soweit prima, nur wenn ich diese Anwendung einige Zeit laufen lassen (meist bis zu ca. 12 Stunden) scheint sie sich aufzuhängen. Kann das evtl. mit der länge des setInterval zu tun haben, das der vielleicht nicht zuverlässig läuft? Ich poste hier mal den Code der AIR Datei und der PHP, die die XML generiert. Hoffentlich könnt ihr mir helfen. Ich kann den Fehler leider nicht debuggen aber vielleicht könnt ihr mir Tips zur Optimierung der Anwendung geben oder mögliche Fehlerquellen erkennen (denn ich bin alles andere als ein Profi, wie man sieht)
Code:
stop();
import com.adobe.images.PNGEncoder;
import com.adobe.images.JPGEncoder;
import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;
var theserver="http://www.irgendwas.de/";
var authcode="";
var readoutShot_var="false";
var fileRef:FileReference = new FileReference();
var myURLLoader:URLLoader = new URLLoader();
//Camera initialisieren
var cam:Camera = Camera.getCamera();
cam.setMode(1920, 1080, 30);
var video:Video = new Video(1920, 1080);
video.attachCamera(cam);
this.addChild(video);
MovieClip(root).setChildIndex(ausgabe, 1);
var count:int = 0;
//Standbild aufnehmen
var myJPEGData:ByteArray;
function saveStill():void
{
var bmd:BitmapData = new BitmapData(1920, 1080);
bmd.draw(video);
var ba:ByteArray = PNGEncoder.encode(bmd);
var file:File=new File();
file.nativePath = "/Users/Bastii/Sites/"+authcode+".png";
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeBytes(ba);
fileStream.close();
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest (theserver+"jpg_encoder_download.php?name="+authcode+".png");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = ba;
var jpgURLLoader:URLLoader = new URLLoader();
jpgURLLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
jpgURLLoader.load( jpgURLRequest );
}
//Ergebnis XML auslesen
function checkShot(evt:Event){
XML.ignoreComments = true;
XML.ignoreWhitespace = true;
var checkShotResult:XML;
checkShotResult = new XML(evt.target.data);
var antwort=checkShotResult..action[0];
var intervaltime:int=checkShotResult..interval[0];
if(antwort=="shot"){
authcode=checkShotResult..name[0];
saveStill();
clearInterval(interval);
if(intervaltime > 30000){
ausgabe.text="Interval Time is set to: "+intervaltime.toString()+" Mil Sec";
interval=setInterval(readout, intervaltime);
}
else{
interval=setInterval(readout, 30000);
}
}
else{
clearInterval(interval);
interval=setInterval(readout, intervaltime);
ausgabe.text="Pause - look again in: "+intervaltime.toString()+" Mil Sec";
}
}
function readout(){
var getShot:URLLoader = new URLLoader();
getShot.addEventListener(Event.COMPLETE, checkShot);
var getShotURL = new URLRequest(theserver+"checkshot.php");
getShot.load(getShotURL);
}
var interval:Number=setInterval(readout, 30000); außerdem hier der PHP Code:
PHP-Code:
<?php
$name=time();
$wochentag=date(w);
if($wochentag > 0 && $wochentag < 6){
if(date(H) > 09 && date(H)<21){
$action="shot";
}
}
else{
$action="";
}
if($action=="shot"){
echo('
<?xml version="1.0" encoding="utf-8"?>
<mysqlresult>
<action>shot</action>
<name>'.$name.'</name>
<interval>3600000</interval>
</mysqlresult>
');
}
else{
echo('
<?xml version="1.0" encoding="utf-8"?>
<mysqlresult>
<action>0</action>
<interval>3600000</interval>
</mysqlresult>
');
}
?>