web-dev-qa-db-ja.com

処理のためのパイプウェブカメラビデオストリームデータ

Linuxでは、video4linux2とffmpegを使用して/ dev/video0からデータを読み取り、Webカメラからビデオを取得できることがわかりました。 ffmpegは、制限された長さのビデオファイルにデータを出力します。私の質問は:

ビデオストリームをリモートビューアとローカルプログラムの両方にパイプして、ストリームデータをリアルタイムで処理し続けることができますか?

ありがとう。

3
vivienlwt

これは tee muxer で可能です。ドキュメントからの変更された例:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a \
"archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"

ストリームを明示的にマッピングする必要があることに注意してください。そのため、 -map が必要です。

参照:

2
llogan

私は このリンク から答えを見つけました(ライブラリを使用して)ビデオの入力としてウェブカメラを取得します。関数avformat_open_input()でパラメーターを定義する必要があります。

まず、デバイス登録はインポートです。

avdevice_register_all();

次に、入力形式を定義します。

AVInputFormat *inputFormat =av_find_input_format("v4l2");

他のオプションを設定することが可能:

_AVDictionary *options = NULL;_

av_dict_set(&options, "framerate", "25", 0);

最後に:

avformat_open_input(&pFormatCtx, "/dev/video0", inputFormat, &options);

その後、入力ソースから読み取られてデコードされたフレームごとに、ディスプレイまたはその他のカスタマイズされた関数に渡すことができます。

これが他の人に役立つことを願っています。

0
vivienlwt