gpt4 book ai didi

cocoa - 使用QTKit编辑后如何正确保存QTMovie?

转载 作者:行者123 更新时间:2023-12-03 17:25:54 26 4
gpt4 key购买 nike

我正在使用 NSDocument 架构的应用程序中对 QTMovie 进行少量编辑(例如添加轨道,如下所示)。编辑后,我想保存到原始文件。但是,我不断收到“文件正忙”错误。我认为这是由于我在处理文件时的一些疏忽,或者是我使用 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 中发布电影吗?这样做的“正确”方法是什么?请记住,我不一定完成此文档,我不会关闭它。我刚刚完成此操作,我希望磁盘上的文件反射(reflect)我的更改。我很想使用 [movie updateMovieFile],但该调用似乎并没有使电影变平。我不想在我的文件中包含任何外部引用。

最佳答案

我对 QuickTime C API 不太熟悉,所以老实说我无法告诉你那里出了什么问题。 绝对猜测:也许缺少对 EndMediaEdits 的调用?
尽管 AddMovieSelection 不应该要求这样做,但您说的是“[...]例如添加轨道[...]”。那么也许还有其他事情发生,比如 AddMediaSample 或类似的事情?

也就是说,如果您不需要以 10.5 以下的任何目标为目标,并且您所需要做的就是添加另一部电影中的一些片段,则无需使用 C API 即可实现这一目标:

看看

Do I have to first release the movie in my NSDocument?

您的意思是为了将其写入磁盘?不:这甚至会导致崩溃。

release的作用是处理内存管理。它与文件的繁忙状态没有太大关系。

关于cocoa - 使用QTKit编辑后如何正确保存QTMovie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com