ios - 将视频从库复制到 Documents 文档目录

标签 ios video nsdata alasset file-copying

我正在 ios 应用程序中构建任务,我想将视频从库复制到本地应用程序文档目录。 我已经成功地从数组中的库中获取了 ALAssest 列表。 现在,当我尝试将任何视频从 ALAssest url 复制到我们的文件时,我总是收到以下错误

" Error Domain=NSCocoaErrorDomain Code=262 "The operation couldn’t be completed. (Cocoa error 262.)" UserInfo=0x157d4a70 {NSURL=assets-library://asset/asset.m4v?id=B01C37C9-8C8C-4963-BAC8-EE0356C079DD&ext=m4v"

我在文档目录下做了一个文件夹用来存放视频

NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"AppVideo"];
NSError *error=nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath])    //Does directory already exist?
{
    if (![[NSFileManager defaultManager] createDirectoryAtPath:filePath
                                   withIntermediateDirectories:NO
                                                    attributes:nil
                                                         error:&error])
    {
        NSLog(@"Create directory error: %@", error);
    }
    NSLog(@"pathToPatientPhotoFolder filePath=%@",filePath);
}

下面是复制数据的代码

NSError *error=nil;

NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"AppVideo"];
path = [path stringByAppendingPathComponent:@"myvideo.mp4"];
NSURL * url=nil;
 url=[[[self.dataContainer objectAtIndex:selected] defaultRepresentation] url];
[[NSFileManager defaultManager] copyItemAtURL:url toURL:[NSURL URLWithString:path] error:&error];

if(error)
    NSLog(@"Writing Error=%@",error.description);
else
    NSLog(@"writing has done without error");
`

我也尝试将 ALAssest url 的 NSData 写入文件但是当我用 MPMoviePlayerViewController 播放它时它只显示黑屏

 ALAssetRepresentation *rep = [[self.dataContainer objectAtIndex:selected] defaultRepresentation];

Byte *buffer = (Byte*)malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
NSData *FileData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:NO];


[[NSFileManager defaultManager] createFileAtPath:path
                                        contents:FileData
                                      attributes:nil];

但没有找到任何解决方案。

最佳答案

真正的问题更深一点。你应该调用

[NSURL fileURLWithPath:<# string path #>]

代替

[NSURL URLWithString:path]

如果您使用的是文件系统,则必须使用特定的 URL。

关于ios - 将视频从库复制到 Documents 文档目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215851/

相关文章:

ios - 使用\u 作为 NSString 的一部分

ios - 生成特定尺寸的 View 图像?

ios - libc++abi.dylib : terminating with uncaught exception of type NSException 导致核心数据崩溃

android - 我们如何从 SDK 知道我们使用的是哪个图形 API 版本

ios - Xcode 将特殊字符(NSString)转换为 NSData

android - 对正在播放的视频应用效果

ios - 如何减少 iOS 上的视频处理时间?

ios - PJSIP 视频通话

integer - NSData 到 Swift 整数

iphone - 在模拟器上存储文件与实际 iOS 设备