完成运行ffmpeg终端命令后,OSX / Cocoa应用程序崩溃

时间:2014-06-23 16:43:41

标签: objective-c macos cocoa ffmpeg

我在我的Mac应用程序中运行ffmpeg,它实际上是成功创建输出文件。问题是,一旦ffmpeg命令完成,应用程序就会崩溃。关于如何防止崩溃的任何想法?

以下是我在Mac应用中运行ffmpeg时使用的代码:

char ffm_cmd[512];
NSString *command = [NSString stringWithFormat:@"%@%@ \\\n-filter_complex '[0:0][1:0][2:0][3:0]concat=n=%d:v=0:a=1[out]' \\\n-map '[out]' %@/output.wav", escapedPath, concatFiles, count, self.outputFolderPath];
const char *cString = [command cStringUsingEncoding:NSASCIIStringEncoding];
sprintf(ffm_cmd,cString);
system(ffm_cmd);

3 个答案:

答案 0 :(得分:0)

想出来。我的命令长度超过512个字符,因此我只需要更改ffm_cmd字符属性的大小。

答案 1 :(得分:0)

这听起来像沙盒问题,你可以在运行应用程序时(不是通过Xcode)查看控制台,而是通过查找程序..

即。找到你的应用程序,并在控制台打开时双击它。

如果您从未使用过控制台:

1)按CMD + Space键,弹出聚光灯 2)输入:console [按回车] 3)左侧高亮显示All Messages,点击顶部的clear display 4)运行你的应用程序

那里出现了什么?

很多时候,libs可以访问一些“越界”的区域,而沙箱(taskgated)会抛出一个混乱的线程来杀死该线程。

干杯,

A

答案 2 :(得分:0)

根据以下顺序完全不需要ffm_cmd

char ffm_cmd[512];
…
const char *cString = [command cStringUsingEncoding:NSASCIIStringEncoding];
sprintf(ffm_cmd,cString);
system(ffm_cmd);

你从-[NSString cStringUsingEncoding:]回来的字符串已经非常好了:

const char *cmd = [command cStringUsingEncoding:NSASCIIStringEncoding];
system(cmd);

这可以解决导致您出现问题的缓冲区溢出问题,并且还可以使您的代码在包含%个字符的文件名中正常工作。