2011-07-07 58 views
6

我已經實現了使用多部分文章將視頻上傳到youtube等方式,或將視頻保存到本地的相機卷。但是,對於大型視頻,由於內存佔用太大,我會受到監視,因爲目前我必須將整個視頻存儲在內存中才能發佈或保存。上傳或導出大視頻會導致內存不足並導致崩潰......我該如何分解它?

什麼是我可以採取一個大的視頻分解成可管理的塊的步驟是什麼?

+0

您是否使用HTTP庫,如ASIHTTPRequest,或者你在自己動手? –

+0

我目前沒有使用ASIHTTPRequest。 – akaru

+0

我假設你自己在做這個。我唯一能想到的其他事情就是使用內存映射文件。如[此](http://stackoverflow.com/questions/6172919/ios-memory-mapped-files-and-low-memory-scenarios) –

回答

1

您可以將視頻保存到一個文件,並使用nsstream讀取視頻數據塊,並送他們,你就必須保持一定的狀態要記住什麼ü發送,還剩下些什麼,但它不應該是太糟糕執行,例如

BOOL done=FALSE; 
    NSInputStream *stream=nil; 

    NSString *[email protected]"..."; //your file path 
    stream=[[NSInputStream alloc] initWithFileAtPath:myFile ]; 
    while(!done) 
    { 


    int chunkSize=500000; //500 kb chunks 
    uint8_t buf[chunkSize]; 
     //reads into the buffer and returns size read 
    NSInteger size=[stream read:buf maxLength:chunkSize]; 

    NSLog(@"read %d bytes)", size); 

    NSData * datum=[[NSData alloc] initWithBytes:buf length:size]; 
     //when we actually read something thats less than our chunk size we are done 
    if(size<chunkSize) 
    done=TRUE; 
    //send data  
    } 
+0

謝謝,我知道我可以流式傳輸視頻,但是如何與SDK一起工作將其保存到相機膠捲? – akaru

+0

好吧,如果你正在下載一個文件,你可以將數據追加到一個文件,因爲它涉及(所以你不要讓這一切在內存中),然後將其寫入相機膠捲... – Daniel

+0

我明白了。但是,我的問題主要在於將本地文件保存到相機膠捲,或將本地文件保存到網絡。這些調用都會導致內存崩潰。 – akaru