2012-06-05 4 views
1

Я пытаюсь записать видео, и я получаю сообщение об ошибке, какНевозможно записать фильм с помощью AVCaptureMovieFileoutput

Невозможно записать URL < #FILE URL>, потому что это не файл URL.

Я определяю URL назначения следующим образом:

NSString *Path = [[NSString alloc] init]; 
Path = @"/Users/me/Documents/My fols/recording_try/newMovie.mov"; 
NSURL *dest = [[NSURL alloc] initWithString:[Path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

Затем после создания сеанса, ввода и вывода объектов. Я пробовал записывать вот так.

mMovieFileOutput = [[AVCaptureMovieFileOutput alloc] init] ; 
[mSession addOutput:mMovieFileOutput]; 
[mMovieFileOutput startRecordingToOutputFileURL:dest recordingDelegate:self]; 

Я начал работать сессию, попытался с помощью начать и comitconfiguration и т.д. Но каждый раз, когда я бегу, я получаю сообщение об ошибке, как:

[AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] - Cannot record to URL /Users/me/Documents/My%20fols/recording_try/newMovie.mov because it is not a file URL. 

Я не знаю, куда я иду неправильно ... Может ли кто-то помочь?

Спасибо заранее ...

ответ

1

Попробуйте что-то вроде этого:

// variable names should start with lower case letters 

// also, let's do as much as we can with auto-released objects 
// so we don't have to worry about leaking (if we're not using ARC) 
NSString *path = [NSString stringWithString: @"/Users/me/Documents/My fols/recording_try"]; 
NSURL *dest = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
if(dest == nil) 
{ 
    NSLog(@"does not appear to be a valid NSURL object"); 
    return; 
} 

NSError * error = nil; 
if([[NSFileManager defaultManager] createDirectoryAtURL: dest withIntermediateDirectories: YES attributes: nil error: &error] == YES) 
{ 
    dest = [dest URLByAppendingPathComponent: @"newMovie.mov"]; 

    // now you can create the session plus input and output objects 
    // within this block 

} else { 
    NSLog(@"was not able to create the directory which contains path %@ - error is %@", path, [error localizedDescription]); 
} 
+0

Замечание для 'NSString' просто неверно. Конечно, вы можете установить указатель на новую строку. Он не пытался мутировать объект, он просто переустанавливал указатель (хотя первый вызов init был бессмысленным). – Alladinian

+0

Хорошо @Алладинян; Я куплю это. Я вполне уверен, что способность устанавливать (предположительно автоматически выпущенную) строку через «' path = @ »...' »была добавлена ​​как метод удобства за последние несколько лет. Оригинальный плакат по-прежнему не создает действительный хотя и потому, что я дал ему метод '' createDirectoryAtURL: '" плюс (всегда полезная) проверка ошибок. –

+0

Я согласен. Я также считаю, что ваш ответ действительно хорош (редко встречаются кодеры [ особенно в ответах SO), которые готовы пойти на лишнюю милю, касаясь проверки ошибок/обработки). Итак, +1 для этого. – Alladinian

1

Просто изменить конфигурацию NSURL, чтобы соответствовать типу файл URL

Что-то вроде этого:

NSURL * dest = [[NSURL alloc] initFileURLWithPath: < # (NSString *) #>]

Смежные вопросы