0

次のパラメータを使用して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を開始して、プロセスを続行します。

4

1 に答える 1

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);
于 2013-02-27T17:11:24.250 に答える