我在我的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);
答案 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);
这可以解决导致您出现问题的缓冲区溢出问题,并且还可以使您的代码在包含%
个字符的文件名中正常工作。