2013-02-27 53 views
0

我需要使用此参数运行ffmpeg命令:-i'url_of_input_here'。因此,使用NSTask与参数数组作为这样不起作用:如何在后台运行xcode中的系统命令

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具有系统()函数,让我执行系统命令,但是当我运行的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); 

如何运行的系统()命令背景,所以它不会拖延应用程序的其余部分?我宁愿不使用单独的线程,但启动ffmpeg并继续处理。

回答

0

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

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); 
相关问题