rtmp ストリームから jpeg 画像をキャプチャするために ffmpeg を使用しています。これが私が使用するコマンドです:
/usr/local/bin/ffmpeg -threads 4 -i rtmp://..../chat/mp4:<variable>.mp4
-q:v 0.6 -r 15 -s 320x240 /frames/10021237_data/frame-%0999d.jpg
ffmpeg version N-55388-g9386f33 Copyright (c) 2000-2013 the FFmpeg developers
built on Aug 8 2013 14:07:38 with gcc 4.7 (Ubuntu/Linaro 4.7.2-2ubuntu1)
configuration:
libavutil 52. 41.100 / 52. 41.100
libavcodec 55. 24.100 / 55. 24.100
libavformat 55. 13.102 / 55. 13.102
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 82.100 / 3. 82.100
libswscale 2. 4.100 / 2. 4.100
libswresample 0. 17.103 / 0. 17.103
Input #0, flv, from 'rtmp://......./mp4:10021237.mp4':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1.92 tbr, 1k tbn, 40 tbc
Stream #0:1: Audio: nellymoser, 44100 Hz, mono, flt
[swscaler @ 0x1910000] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to '/frames/10021237_data/frame-%0999d.jpg':
Metadata:
encoder : Lavf55.13.102
Stream #0:0: Video: mjpeg, yuvj420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 15 tbc
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mjpeg)
Press [q] to stop, [?] for help
ただし、数分後、(プロセスが終了する前に) 次の行が表示されます。
video:5264kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.000408%
「多重化オーバーヘッド」とは正確には何ですか?なぜそれがクラッシュを引き起こしているのですか? これを解決するか、別の方法で取得できますか (終了時にプロセスを再起動することにより) ?
編集:
実際にはクラッシュではありません。ストリームの開始時に PHP CLI からこのコマンドを実行しています。
$command = "/usr/local/bin/ffmpeg -i ".$rtmp." -q:v 0.6 -r 12 -s 320x240 ".__DIR__."/".$dir."/".$naming." >/dev/null 2>/dev/null &";
shell_exec($command);
ただし、ストリーミングを停止すると、すべての ffmpeg プロセスが終了します。それらを独立させる方法はありますか?
2 つの端末を開いて、それぞれ (異なるストリームに対して) で (異なる rtmp s を使用して) コマンドを実行しても、それらの 1 つを強制終了すると、もう 1 つも閉じます。
結論は次のとおりです。2つのffmpegインスタンスを独立させて、一方を殺してももう一方を殺さないようにするにはどうすればよいですか。この動作は予期されたものですか?