2012-01-02 66 views
1

我很好奇正確的方法是直接從文件系統加載圖像和視頻數據,而不使用HTTP。在沒有HTTP的情況下在AIR中加載圖像和視頻

我在寫一個AIR幻燈片應用程序,它工作的很好,但目前依靠本地MAMP服務器通過標準的,經過驗證的,真正的FLASH媒體加載方法遞送應用程序所有媒體。

我知道,由於FLASH是作爲一個Web插件開發的,它處理這種接收數據的最佳方法,但是我真的很想解除這個相當繁瑣和不必要的位,並將該應用程序作爲獨立播放器使用,我不清楚加載媒體的「正確」方式。

我已經準備好了File對象,並且我已經得到了讓用戶選擇從中拉出媒體的本地目錄,並且從列表中獲取文件列表(基於它們的擴展名) ...但現在呢?

回答

3

你首先必須把你的文件的內容在ByteArray(代碼FileStream documentation

var bytes:ByteArray = new ByteArray(); 
var myFileStream:FileStream = new FileStream(); 
var myFile:File = File.documentsDirectory.resolvePath("test.jpg"); 

myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
myFileStream.openAsync(myFile, FileMode.READ); 

function progressHandler(event:ProgressEvent):void 
{ 
    if (myFileStream.bytesAvailable) 
    { 
     myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable); 
    } 
    else 
    { 
     myFileStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler); 
     loadImage(); 
    } 
} 

然後你可以在Loader加載這些字節來顯示圖像(參見方法Loader.loadBytes

function loadImage():void 
{ 
    var loader:Loader = new Loader(); 
    loader.loadBytes(bytes);  
    addChild(loader); 
} 

乾杯

+0

可愛,非常感謝 – 2012-01-03 17:39:13

1

這段代碼的加載器將觸發Event.COMPLTE事件和你將能夠從中操縱位圖:

var bytes:ByteArray = new ByteArray(); 
var myFileStream:FileStream = new FileStream(); 
var myFile:File = File.documentsDirectory.resolvePath(YOUR_PATH); 

myFileStream.addEventListener(Event.COMPLETE, fileCompleteHandler) 
myFileStream.openAsync(myFile, FileMode.READ); 

function fileCompleteHandler(event:Event):void 
{ 
    myFileStream.readBytes(bytes); 

    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
    loader.loadBytes(bytes); 

    function imageLoaded(e:Event):void 
    { 
     addChild(Bitmap(loader.content)); 
     myFileStream.removeEventListener(Event.COMPLETE, fileCompleteHandler); 
     myFileStream.close(); 
    } 
} 

PS:謝謝科迪亞克,我根據你的代碼做了我的代碼。

相關問題