我遇到了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.}
该链接是视频的正确路径。我认为这个问题可能是因为它试图将原始视频网址保存到相机,这个文件太大了,尽管我并不乐观。任何帮助压缩它下载或其他任何东西,以使其工作将非常感激。非常感谢!
答案 0 :(得分:1)
UISaveVideoAtPathToSavedPhotosAlbum
仅用于将文件保存到库中。如果要从Web保存视频,则需要下载视频文件,将其保存到磁盘,在磁盘上获取该文件的文件URL,然后使用文件URL保存。
UIVideoAtPathIsCompatibleWithSavedPhotosAlbum
检查视频文件的有效性,基本上通过检查它可以播放视频文件。同样,这是通过文件URL。除了可用的磁盘空间之外,我认为没有大小限制。
答案 1 :(得分:0)
在我的情况下,它发生在使用从网络下载的其他视频撰写视频之后。虽然iPhone5上的测试一切都很好,但在iPhone4上它从未奏效,直到我意识到我创作的视频分辨率高于iPhone4播放器可以播放的分辨率,因此它拒绝将最终视频录制到Camera Roll。
因此,如果您想将下载的视频直接保存到相机胶卷,您可能需要检查分辨率是否适合设备支持的分辨率。当我使用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;
}
}];
希望它有所帮助! ;)