毎晩 WordPress サーバーに接続し、すべてのコンテンツへのパスを含む JSON ファイルを取得し、そのコンテンツをダウンロードしてキオスクのハード ドライブに保存する AIR キオスク アプリを作成しています。
数百のファイル (jpg、png、f4v、xml) があり、それらのほとんどは問題なくダウンロード/保存されます。ただし、完全にはダウンロードされない f4v ファイルが 2 つあります。complete イベントはディスパッチされますが、bytesTotal (progress イベントから) と bytesAvailable (complete イベントから) を比較すると、一致しません。bytesTotal が大きくなります。bytesTotal (progress イベントから) は、サーバー上のバイトと一致します。
進行状況イベントの bytesLoaded は、bytesTotal と一致するポイントまで増加しないため、進行状況イベントにも依存できません。これは、毎回同じ 2 つのビデオで発生するようです。ビデオはそれほど大きくなく、1 つが 13MB で、もう 1 つが 46MB です。問題なくダウンロードできる大きなビデオがあります。
編集: コンピューターを再起動した後、2 つのビデオのダウンロードは完了しましたが、300kb の png ファイルで同じ問題が発生しています。
URL を Firefox に貼り付けると、正しくダウンロードされます。ファイルをダウンロードするための簡単な C# アプリも作成しましたが、問題なくダウンロードできるため、Flash/AIR に問題があるようです。
編集: これはコードのより単純なバージョンです。これはテスト プロジェクトからのもので、これが唯一のコードです (URL はローカル ネットワーク上にあるため、自分でファイルをダウンロードすることはできません)。
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.net.URLStream;
[SWF(backgroundColor="#000000", frameRate="24", width="640", height="480")]
public class Test extends Sprite {
private var fileSize:Number;
private var stream : URLStream;
private var url:String = "http://192.168.150.219/wordpress2/wp-content/uploads/2012/12/John-Butler-clip1.f4v";
public function Test() {
if (stage)
init();
else
this.addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event=null):void {
this.removeEventListener(Event.ADDED_TO_STAGE, init);
stream = new URLStream();
stream.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
stream.addEventListener(Event.COMPLETE, onLoadComplete);
stream.load(new URLRequest(url));
}
private function onLoadProgress(event:ProgressEvent):void {
fileSize = event.bytesTotal;
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
trace(percent + "%"); // this never gets to 100%
}
private function onLoadComplete(event:Event):void {
trace("loaded", stream.bytesAvailable, "of", fileSize);
// outputs "loaded 13182905 of 13184365"
// so why is it "complete" when it isn't fully downloaded?
}
}
}