开发者

load multiple flv videos using FileReferenceList class

following is my code for loading one video using FileReference class and it works fine

[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, selectHandl开发者_开发技巧er);  
        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);  
    }  
}  

the sender.mxml code is following which plays the video on the stage

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);  
}  

then after this, the file.name and file.size goes to mxml page and the video is displayed on stage with name and file size but the samething i want to do with FileReferenceList class, i am solving this problem from last 2 weeks but cant ,,, plz guide me ,,, i google so many times but no specific answer Regards

Ammad Khan


You can use the fileList property of the FileReferenceList class to access the files that where selected. Then load() each FileReference in the list separately:

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(); 
    } 
} 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜