1

我遇到了 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 保存到相机中,但文件大小太大,尽管我并不肯定。任何帮助压缩它以供下载或其他任何使它工作的帮助都将不胜感激。非常感谢!

4

2 回答 2

1

UISaveVideoAtPathToSavedPhotosAlbum仅适用于将文件保存到库中。如果要从网络上保存视频,则需要下载视频文件,将其保存到磁盘,获取磁盘上该文件的文件 URL,然后使用文件 URL 保存。

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

于 2013-05-13T22:49:52.820 回答
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;
    }
}];

希望能帮助到你!;)

于 2013-08-31T03:14:31.603 回答