2013-05-13 101 views
1

我遇到了UISaveVideoAtPathToSavedPhotosAlbum的问题。我正在运行一个社交媒体网站,允许用户发布视频,其他用户可以通过点击按钮将视频保存到他们的照片相册。这里是我的代码:然而UISaveVideoAtPathToSavedPhotosAlbum不兼容?需要压缩?

if (buttonIndex == 0) 
{ 
    NSString *movieURL = self.postInfo.referenceText; 
    if (self.postInfo.type == SBPostTypeVideo) 
    { 
     if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(movieURL)){ 
     UISaveVideoAtPathToSavedPhotosAlbum(movieURL, nil, nil, nil); 
     } 
    } 
} 

此代码失败,与下面的输出:

Video http://VIDEOURL.COM/14.mov cannot be saved to the saved photos album: Error Domain=NSOSStatusErrorDomain Code=2 "This movie could not be played." UserInfo=0x9c2a400 {NSLocalizedDescription=This movie could not be played.} 

该链接到视频的正确路径。我相信这个问题可能是因为它试图将原始视频URL保存到相机,虽然我不积极,但它的文件太大。任何帮助要么压缩下载或其他任何事情来获得这个工作将非常感激。非常感谢!

+1

链接是文件URL还是网址? – Wain 2013-05-13 14:18:29

+0

用户将视频上传到我们的服务器,因此它是通过网络上传的.mov视频文件的URL。 – user2287517 2013-05-13 22:41:45

回答

1

UISaveVideoAtPathToSavedPhotosAlbum只能将文件保存到库中。如果要从网络保存视频,则需要下载视频文件,将其保存到磁盘,将该文件的文件URL存储在磁盘上,然后使用文件URL进行保存。

UIVideoAtPathIsCompatibleWithSavedPhotosAlbum检查视频文件的有效性,基本上通过检查它可以播放视频文件。再次,这是通过文件URL。我不认为除了可用磁盘空间外,还有其他大小限制。

+0

明白了,谢谢。 – user2287517 2013-05-14 01:15:56

0

就我而言,它是在使用从网上下载的其他视频制作视频后发生的。虽然在iPhone5上测试都很好,但在iPhone4上它从未奏效,直到我意识到我制作的视频具有比iPhone4播放器更高的分辨率,因此它拒绝将最终视频记录到相机胶卷。

因此,如果您想要将下载的视频直接保存到相机胶卷,则可能需要检查分辨率是否适合设备支持的分辨率。正如我使用AVAssetExportSession的出路是设置生成视频的质量如下:

self.exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetMediumQuality]; 
self.exportSession.outputURL = [NSURL fileURLWithPath:path]; 
self.exportSession.outputFileType = AVFileTypeQuickTimeMovie; 
[self.exportSession exportAsynchronouslyWithCompletionHandler:^{ 

    switch (self.exportSession.status) 
    { 
     case AVAssetExportSessionStatusCompleted: 
      NSLog(@"Export OK"); 
      if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path)) { 
       UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil); 
      } 
      break; 
     case AVAssetExportSessionStatusFailed: 
      NSLog (@"AVAssetExportSessionStatusFailed: %@", self.exportSession.error); 
      break; 
     case AVAssetExportSessionStatusCancelled: 
      NSLog(@"Export Cancelled"); 
      break; 
    } 
}]; 

希望它有帮助! ;)