I don’t know how long I’ve been frustrated with the AVM1Movie Class — finally I’ve gotten around to trying to get around the class by modifying the byte header order … I have been able to successfully switch any Flash8 Movie that doesn’t have actionscript in it, just pure frame data … This might not be a huge help for too many of you, but it’s nice for people (like me) that still use uncompressed swfs.
How it works: Change byte 23 to a value of 8. That’s it. I didn’t have to change the 4th byte (which is the version 8 or 9 byte). I have no idea why, but hey, it works, and that’s all that matters. Code is below: (here’s an example swf as well (right click save as))
The output: [object MovieClip] lovely.
package {
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class ByteHeader extends Sprite {
public function ByteHeader():void {
var convertMovie:Boolean = true;
var request:URLRequest = new URLRequest(‘flash8_movie.swf’)
if (convertMovie) {
var urlloader:URLLoader = new URLLoader();
urlloader.dataFormat = URLLoaderDataFormat.BINARY;
urlloader.addEventListener(Event.COMPLETE, _convertF8Movie);
urlloader.load(request);
} else {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onLoaderComplete);
loader.load(request);
addChild(loader);
}
}
private function _convertF8Movie(event:Event):void {
var urlloader:URLLoader = event.currentTarget as URLLoader;
var f8bytes:ByteArray = urlloader.data;
// set version — not necessary
// f8bytes[3] = 9;
// no idea what this byte does, but it’s important
f8bytes[22] = 8;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onLoaderComplete);
loader.loadBytes(f8bytes);
addChild(loader);
}
private function _onLoaderComplete(event:Event):void {
var info:LoaderInfo = event.target as LoaderInfo;
trace(info.content);
}
}
}