2016-05-11 5 views
0

express(express 4)を使用してnodejsサーバを実行しています。私は、要求に応じて、数台のIPカメラからビデオをラボに保存したいと考えています。すべてが機能しますが、動画が長すぎると保存されません(上限は11Mと思われます)。10M以降ffmpegがnodejsのビデオの保存を停止します

ffmpeg -i rtsp://192.168.1.189:554/ch01_sub.264 -strict -2 -vcodec 
copy -vcodec copy test.mp4 

とこの作品:

は、私が唯一のコマンドラインを使用してみました。しかし、私はすぐに私は(これはノードパーサ、急​​行でいないコードであることに注意してサーバーを実行しているとき、私は同じエラーを取得します)ノードを使用してトラブルに巻き込ま:

var child_process = require('child_process'); 
tmpProcess = child_process.spawn('ffmpeg',['-i','rtsp://192.168.1.189:554/ch01_sub.264','-strict','-2','-vcodec','copy','-vcodec','copy',"test.mp4"],{maxBuffer: 10000}); 

これはtest.mp4まで走ります約11Mです。 tmpProcessは強制終了されず、実行され続けます。しかし、test.mp4が一定の大きさの後、私はそれを再生できません。 「このファイルには再生可能なストリームが含まれていません」というエラーが表示されます。 (これはTotemからのものですが、VLCはどちらも動作しません)。

maxBufferを変更しても効果がありません。どのバッファがオーバーフローしているのか理解しようとしていますが、ノードのAPIのマニュアルから多くの情報を得ることはできません。あなたはオプション{ stdio : 'ignore' }child_process.spawn()を呼び出す

+1

コマンドのスタンドアロン版は、多くの(デバッグ?)出力を生成しますか?もしそうなら、 'tmpProcess。{stdout、stderr}'(両方に 'data'イベントリスナを追加すること)を読まなければならないか、' stdio: 'ignore''をオプションとして使う必要があります。 'maxBuffer'は' .spawn() 'に使われていないようです。 – robertklep

+0

あなたは正しかった!なぜあなたは答えとしてそれを書かないのですか?あなたはその質問に答えました。 – cauchy

答えて

1

ffmpegは標準出力/標準エラー出力に(デバッグ)大量の出力を生成した場合、あなたはそれが読まされることを確認する必要があり、または

そうしないと、ノードはデータの収集を継続し、すべてのデータが読み込まれるまで、生成されたプロセスをブロックします(少なくとも私は考えます)。

データを読み取るには、dataイベントリスナーをtmpProcess.stdouttmpProcess.stderrの両方に添付します。または前述のignoreを使用して、ノードがすべての出力を無視するようにしてください(おそらくコンソール出力に興味がないのでおそらく最良の解決策です)。

関連する問題