Iphone 上载或导出大型视频会占用内存并导致崩溃…如何将其分解?

Iphone 上载或导出大型视频会占用内存并导致崩溃…如何将其分解?,iphone,ios4,nsdata,avfoundation,Iphone,Ios4,Nsdata,Avfoundation,我已经实现了一种方法,可以使用multipart post将视频上传到youtube等,或者将视频保存到本地的摄像机上。然而,对于大型视频,由于内存占用过大,我会被监视,因为目前我必须将整个视频放入内存中才能发布或保存 我可以采取哪些步骤将大型视频分解为可管理的块?您可以将视频保存到一个文件中,然后使用nsstream读取视频块并发送它们,您必须保持一定的状态以记住您发送的内容和剩下的内容,但实施起来应该不会太糟糕 BOOL done=FALSE; NSInputStream *str

我已经实现了一种方法,可以使用multipart post将视频上传到youtube等,或者将视频保存到本地的摄像机上。然而,对于大型视频,由于内存占用过大,我会被监视,因为目前我必须将整个视频放入内存中才能发布或保存


我可以采取哪些步骤将大型视频分解为可管理的块?

您可以将视频保存到一个文件中,然后使用nsstream读取视频块并发送它们,您必须保持一定的状态以记住您发送的内容和剩下的内容,但实施起来应该不会太糟糕

  BOOL done=FALSE;
   NSInputStream *stream=nil;

   NSString *myFile=@"..."; //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      
   }
booldone=FALSE;
NSInputStream*stream=nil;
NSString*myFile=@“…”//您的文件路径
stream=[[NSInputStream alloc]initWithFileAtPath:myFile];
而(!完成)
{
int chunkSize=500000;//500 kb块
uint8_t buf[块大小];
//读入缓冲区并返回读取的大小
NSInteger size=[stream read:buf maxLength:chunkSize];
NSLog(@“读取%d字节)”,大小);
NSData*datum=[[NSData alloc]initWithBytes:buf length:size];
//当我们实际阅读的内容小于我们的块大小时,我们就完成了

如果(Sizear您是在使用HTTP库,如ASIHTTPRequest,还是在使用自己的库?我目前没有使用ASIHTTPRequest。我假设您自己正在使用。我唯一能想到的另一件事是使用内存映射文件。例如内存映射看起来很有趣。它是否可以将视频保存到相机卷?我不确定当然。我不熟悉将视频保存到相机卷。谢谢,我知道我可以流式传输视频,但是SDK如何将其保存到相机卷?如果您正在下载文件,您可以在文件出现时将数据附加到文件中(因此您不必将其全部保留在内存中)然后将其写入相机记录簿…我理解。但是,我的问题主要在于调用将本地文件保存到相机记录簿,或将该本地文件保存到web。这些调用中的任何一个都将导致内存崩溃。如何保存到相册?要保存到相册,您只需要视频URL,因此不确定为什么会这样只需使用标准的AlassetLibrary writeVideoAtPathToSavedPhotosAlbum api调用就可以解决问题。