簡體   English   中英

使用FileReferenceList類加載多個flv視頻

[英]load multiple flv videos using FileReferenceList class

以下是我使用FileReference類加載一個視頻的代碼,它工作正常

[Event(name="complete",type="flash.events.Event")]  
[Event(name="status",type="flash.events.StatusEvent")]  
public class LocalFileLoader extends EventDispatcher  
{  
    public function LocalFileLoader()  
    {}      
    private var file:FileReference;// = FileReference(event.target);  
    private var list:FileReferenceList; 
    public var p2pSharedObject:P2PSharedObject = new P2PSharedObject();  
    public function browseFileSystem():void {  
        file = new FileReference();  
        list = new FileReferenceList();  
        list.addEventListener(Event.SELECT, selectHandler);  
        list.browse();  
    }  
    protected function selectHandler(event:Event):void {  
        for each ( file in list.fileList ){  
            file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);    
            file.addEventListener(ProgressEvent.PROGRESS, progressHandler);  
            file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);         
            file.addEventListener(Event.COMPLETE, completeHandler);  
            writeText(file.name+" | "+file.size);  
            file.load();      
        }   
    }   
    protected function securityErrorHandler(event:SecurityErrorEvent):void {  
        writeText("securityError: " + event);  
    }  
    protected function completeHandler(event:Event):void {  
        writeText("completeHandler");  
        p2pSharedObject = new P2PSharedObject();  
        p2pSharedObject.size = file.size;  
        p2pSharedObject.packetLength = Math.floor(file.size/32000)+1;  
        p2pSharedObject.data = file.data;  
        p2pSharedObject.chunks = new Object();  
        var desc:Object = new Object();  
        desc.totalChunks = p2pSharedObject.packetLength+1;  
        desc.name = file.name;  
        p2pSharedObject.chunks[0] = desc;  
        for(var i:int = 1;i<p2pSharedObject.packetLength;i++){  
            p2pSharedObject.chunks[i] = new ByteArray();  
            p2pSharedObject.data.readBytes(p2pSharedObject.chunks[i],0,32000);  
        }  
        // +1 last packet  
        p2pSharedObject.chunks[p2pSharedObject.packetLength] = new ByteArray();  
        p2pSharedObject.data.readBytes(p2pSharedObject.chunks[i],0,p2pSharedObject.data.bytesAvailable);  
        p2pSharedObject.packetLength+=1;  
        writeText("----- p2pSharedObject -----");  
        writeText("packetLenght: "+(p2pSharedObject.packetLength));  
        dispatchEvent(new Event(Event.COMPLETE));  
    }  
    protected function writeText(str:String):void{  
        var e:StatusEvent = new StatusEvent(StatusEvent.STATUS,false,false,"status",str);  
        dispatchEvent(e);  
    }  
}  

隨后是sender.mxml代碼,該代碼將在舞台上播放視頻

private function init() : void {  
    fileLoader = new LocalFileLoader();  
    fileLoader.addEventListener(Event.COMPLETE, fileLoaded);  
    fileShare = new P2PFileShare();  
    fileShare.addEventListener(StatusEvent.STATUS,
            function(event:StatusEvent):void {  
                writeText(event.level);  
            });    
    fileShare.connect();  
}    

private function fileLoaded ( event:Event ) : void {  
    writeText("fileLoaded");  
    if (fileShare.connected) {  
        fileShare.p2pSharedObject = fileLoader.p2pSharedObject;  
        fileShare.p2pSharedObject.lastIndexBegin = 0;  
        fileShare.p2pSharedObject.lastIndexEnd = fileShare.p2pSharedObject.packetLength-1;  
        fileShare.updateHaveObjects();  
    }  
    setupVideo();  
    // PLAY  
    ns.play(null);  

    ns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);               
    ns.appendBytes(fileLoader.p2pSharedObject.data);  
    video.attachNetStream(ns);  
}  

private function setupVideo():void{  
    var nc:NetConnection = new NetConnection();  
    nc.connect(null);  
    ns = new NetStream(nc);  
    ns.client = this;  
    ns.addEventListener(NetStatusEvent.NET_STATUS, 
            function(event:NetStatusEvent):void{  
                writeText("stream: "+event.info.code);  
            });  
    video = new Video();  
    videoComp = new UIComponent();  
    videoComp.addChild(video);  
    this.addElement(videoComp);  
}  

然后在這之后,file.name和file.size轉到mxml頁面,並且視頻以名稱和文件大小顯示在舞台上,但是我想對FileReferenceList類做同樣的事情,我從最近2周開始解決了這個問題,但是無法,,, plz指導我,,, i Google多次,但沒有具體答案
安瑪德·汗

您可以使用FileReferenceList類的fileList屬性來訪問選定的文件。 然后分別對列表中的每個FileReference進行load():

private var list:FileReferenceList;

public function browseFileSystem():void {

    list = new FileReferenceList();  
    list.addEventListener(Event.SELECT, selectHandler);  
    list.browse();  
} 

protected function selectHandler(event:Event):void {  

    for each ( var file:FileReference in list.fileList) {
        file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
        file.addEventListener(ProgressEvent.PROGRESS, progressHandler);  
        file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);  
        file.addEventListener(Event.COMPLETE, completeHandler);  
        writeText(file.name+" | "+file.size);           
        file.load(); 
    } 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM