将视频从库复制到 DocumentsDocument 目录
Copy Video from Library to DocumentsDocument directory
我正在 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];
但找不到任何解决方案。
Here可以看出是NSFileReadUnsupportedSchemeError = 262
对应的错误。看起来您无法从库中移动或复制文件,但是,如果您从库资产中获得 NSData
,则可以使用 writeTofile
到文档目录中的文件。
我终于解决了将最新数据写入我使用的目录路径的问题
ALAssetRepresentation *rep = [myAssest defaultRepresentation];
Byte *buffer = (Byte*)malloc((NSUInteger)rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil];
dty = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:NO];
[dty writeToFile:path atomically:YES];
并播放此文件
NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"AppVideo"];
path = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4",MyString]];
self.videoController = [[MPMoviePlayerController alloc] init];
[self.videoController setContentURL:self.videoURL];
[self.videoController.view setFrame:CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.videoController.view];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoPlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.videoController];
[self.videoController play];
真正的问题更深一点。你应该打电话给
[NSURL fileURLWithPath:<# string path #>]
而不是
[NSURL URLWithString:path]
如果您使用的是文件系统,则必须使用特定的 URL。
我正在 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];
但找不到任何解决方案。
Here可以看出是NSFileReadUnsupportedSchemeError = 262
对应的错误。看起来您无法从库中移动或复制文件,但是,如果您从库资产中获得 NSData
,则可以使用 writeTofile
到文档目录中的文件。
我终于解决了将最新数据写入我使用的目录路径的问题
ALAssetRepresentation *rep = [myAssest defaultRepresentation];
Byte *buffer = (Byte*)malloc((NSUInteger)rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil];
dty = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:NO];
[dty writeToFile:path atomically:YES];
并播放此文件
NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"AppVideo"];
path = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4",MyString]];
self.videoController = [[MPMoviePlayerController alloc] init];
[self.videoController setContentURL:self.videoURL];
[self.videoController.view setFrame:CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.videoController.view];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoPlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.videoController];
[self.videoController play];
真正的问题更深一点。你应该打电话给
[NSURL fileURLWithPath:<# string path #>]
而不是
[NSURL URLWithString:path]
如果您使用的是文件系统,则必须使用特定的 URL。