我正在尝试使用qtkit用我的应用程序录制和播放电影。我在一个视图中录制视频,然后将其显示到另一个视图。以下是我的操作方法
- (void)startRecording
{
NSString *applicationSupportDirectory = [[NSFileManager defaultManager] applicationSupportDirectory];
NSString *path = [applicationSupportDirectory stringByAppendingPathComponent:kVideoOutputName];
NSURL *url = [NSURL fileURLWithPath:path];
// Delete the previous file
[[NSFileManager defaultManager] removeItemAtURL:url error:nil];
mCaptureMovieFileOutput.delegate = self;
[mCaptureMovieFileOutput recordToOutputFileURL:url];
}
- (void)stopRecording
{
[mCaptureMovieFileOutput recordToOutputFileURL:nil];
}
- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error
{
// [[NSWorkspace sharedWorkspace] openURL:outputFileURL];
// removes the current view
[self cleanView];
MyViewController *controller = [[SharingViewController alloc] init];
controllerpath.path = outputFileURL;
[self.view addSubview:[controller view]];
[self stopCamera];
}
现在,在我的视图控制器中,我将电影分配给我的电影播放器。
- (void)awakeFromNib
{
NSError *error;
moviePlayer.movie = [QTMovie movieWithURL:path error:&error];
NSLog(@"%@", [error localizedDescription]);
}
现在,这段代码第一次工作,但我需要注册并显示多次。
这里已经有一个问题了。如果我想多次录制视频,我必须删除第一个,否则第一次之后它就不会录制任何内容(它抱怨已经存在一个文件)。
问题是,在第一次之后,它也根本不显示视频。当我执行[QTMovie movieWithURL:path error:&error]时;它抱怨文件或目录不存在,而实际上它确实存在(我还查看了[QTMovie canInitWithUrl:])。
我不知道这里发生了什么。苹果的示例代码可以记录多次,但由于某些原因,我不能不首先删除现有文件(不过它是第一次工作)。
如果需要,我很乐意提供更多细节。
编辑:如果我每次为视频使用不同的名称,一切都会正常。所以这真的是一个关于每次都用同一个名字录音的问题。
我最终为每个文件使用了不同的文件名。
我遇到了同样的问题,我发现在重用相同的文件名之前,将电影视图设置为nil解决了这个问题。
我在创建QTMovie时遇到了同样的奇怪问题。我刚把文件加载到这样的NSData对象中,它就工作了:
[self setMovieData:[NSData dataWithContentsOfURL:[self movieURL]]];
[self setMovie:[QTMovie movieWithData:[self movieData] error:&error]];