xcode - 如何在后台在xcode中运行系统命令

标签 xcode macos shell ffmpeg system

我需要使用以下参数运行 ffmpeg 命令:-i 'url_of_input_here'。所以使用带有参数数组的 NSTask 是行不通的:

NSString * ffm_address = [NSString stringWithFormat:@"'udp://%d.%d.%d.%d:%d?fifo_size=1000000000&overrun_nonfatal=1'",addr_1,addr_2,addr_3,addr_4,portFFM];
[task setArguments:
[NSArray arrayWithObjects:@"-f", @"mpegts", @"-i", ffm_address, @"-re",@"-y",@"-strict",@"experimental",@"-vcodec", @"copy", @"-f", @"mp4", @"video.mp4", nil]];

因为引号的处理方式使得 ffmpeg 认为 udp://.... 地址是一个文件

XCode 具有 system() 函数,可以让我执行系统命令,但是当我运行 ffmpeg 命令时,它会停止进程(因为 ffmpeg 正在处理流):
char ffm_cmd[512];
sprintf(ffm_cmd,"ffmpeg -f mpegts -i 'udp://%d.%d.%d.%d:%d?fifo_size=1000000&overrun_nonfatal=1' -re -y -strict experimental -vcodec copy -f mp4 video.mp4",addr_1,addr_2,addr_3,addr_4,portFFM);
    system(ffm_cmd);

我怎样才能在后台运行 system() 命令,这样它就不会停止应用程序的其余部分?我宁愿不使用单独的线程,而是启动 ffmpeg 并继续该过程。

最佳答案

找到了一种方法!只需在命令末尾添加 & :

   char ffm_cmd[512];
    sprintf(ffm_cmd,"ffmpeg -f mpegts -i 'udp://%d.%d.%d.%d:%d?fifo_size=1000000&overrun_nonfatal=1' -re -y -strict experimental -vcodec copy -f mp4 video.mp4 &",addr_1,addr_2,addr_3,addr_4,portFFM);
    system(ffm_cmd);

关于xcode - 如何在后台在xcode中运行系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117913/

相关文章:

objective-c - UIImageView增加特定区域的亮度

ios - 从设备连接到本地 mac 服务器

Xcode9:Fix All In Scope 总是被禁用

linux - 如何让 shell 脚本同时在 Linux 和 OS X 上运行?

macos - 鼠标选择后如何从 tmux 输出复制到系统剪贴板?

c++ - CXX 编译器标识未知 : xcode

java - 将 Java 1.6 设置为 Mac OS X 10.5.8 上的默认设置

mac/eclipse 上的 c++ 在崩溃时不显示错误

c++ - 如何使用基于 IExecuteCommand 的 shell 扩展使某些上下文菜单选项变灰?

bash - 如何在 Bash 中将变量设置为命令的输出?