2011-07-07 53 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