Как правильно сохранить QTMovie после редактирования с помощью QTKit?

Я вношу небольшие изменения в QTMovie в приложении с использованием архитектуры NSDocument (например, добавляю дорожку, как показано ниже). После редактирования я хочу сохранить в исходный файл. Тем не менее, я продолжаю получать сообщение об ошибке «файл занят». Я предполагаю, что это связано с некоторой оплошностью, которую я допустил при обработке файлов, или с ошибкой в ​​том, как я использую NSDocument. Любые советы будут полезны! Вот (некоторые) соответствующий код:

// open file that has the track I want to add to my movie
QTMovie* tempMovie = [QTMovie movieWithURL:outputFileURL error:nil];

// Use old API to add the track 
AddMovieSelection([movie quickTimeMovie], [tempMovie quickTimeMovie]);

// get the filename from the NSDocument
NSString *filename = [[self fileURL] path];
NSLog(@"writing to filename: %@", filename);

// FLATTEN the movie file so I don't get external references
NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:1];
[attributes setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFlatten];

// attempt to write
NSError *error;
//  this is where I get the "file is busy"
if (![movie writeToFile:filename withAttributes:attributes error:&error]) {
    NSLog(@"Error: %@", [error localizedDescription]);
    NSRunAlertPanel(@"Error", [error localizedDescription], nil, nil, nil);
}    

Должен ли я сначала выпустить фильм в моем NSDocument? Каков "правильный" способ сделать это? Имейте в виду, я не обязательно заканчиваю этот документ, я не закрываю его. Я только что закончил эту операцию и хочу, чтобы файл на диске отражал мои изменения. Я бы с удовольствием использовал [movie updateMovieFile], но этот вызов, похоже, не сглаживает фильм. Мне не нужны внешние ссылки в моем файле.


person pj4533    schedule 09.02.2011    source источник


Ответы (2)


Я не слишком хорошо знаком с API QuickTime C, поэтому, честно говоря, я ничего не могу вам сказать о том, что там происходит не так. Абсолютная догадка: может быть, отсутствует вызов EndMediaEdits?
Хотя это не должно требоваться AddMovieSelection, вы сказали "[...] например, добавление отслеживать [...]". Так что, может быть, происходит что-то еще, например AddMediaSample или что-то подобное?

Тем не менее, если вам не нужно ориентироваться на что-либо ниже 10,5, и все, что вам нужно сделать, это добавить какой-либо сегмент из другого фильма, вы можете добиться этого, не переходя к C API:

Посмотри на

Должен ли я сначала выпустить фильм в моем NSDocument?

Вы имеете в виду чтобы записать его на диск? Нет: Это должно даже привести к сбою.

Роль release заключается в управлении памятью. Это не имеет ничего общего с состоянием занятости файла.

person danyowdee    schedule 11.02.2011

Оказывается, я просто неправильно использовал архитектуру NSDocument. Когда я изменил его, чтобы правильно использовать Save/SaveAs, эта проблема исчезла.

person pj4533    schedule 15.03.2011