Как правильно сохранить QTMovie после редактирования с помощью QTKit? - PullRequest
1 голос
/ 09 февраля 2011

Я делаю небольшие изменения в 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], но этот вызов, похоже, не сглаживает фильм. Я не хочу никаких внешних ссылок в моем файле.

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

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

0 голосов
/ 12 февраля 2011

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

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

Посмотрите на

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

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

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

...