ラズベリーパイ(Raspivid/H.264)からネットワーク経由でラップトップ上で実行されるOpenCVアプリケーションにビデオをストリーミングするのが目的です。 (C++)は次のようNetcat H.264ビデオをRaspividからOpenCVに
オープンCVキャプチャは次のとおりです。
cv::VideoCapture cap;
cap.open("cam_1"); // cam_1 is a FIFO
cv::Mat frame;
while(1){
cap >> frame;
cv::imshow("", frame);
cv::waitKey(10);
}
次のようにFIFOストリームが作成されます。
mkfifo cam_1
OpenCVのプログラムが実行されると、netcatをリスナーが開始されます。
ncat --recv-only --keep-open --verbose --listen 5001 > cam_1
ラップトップでnetcatリスナーが実行されると、ストリームはth Eラズベリーパイ
raspivid --verbose --nopreview -b 2000000 --timeout 0 -o - | ncat 192.168.LAPTOP.IP 5001
又は、デバッグのために、ラップトップ上のローカルファイルのnetcatにストリーミングすることができる。
Unable to stop the stream: Inappropriate ioctl for device (ERROR)icvOpenAVI_XINE(): Unable to initialize video driver.
次のエラーを与える
cat video.h264 | nc 192.168.LAPTOP.IP 5001
どちらも興味深いのは、ラップトップでNetcatリスナーを起動し、CTRL + Cでビデオストリームを終了し、ビデオストリームを開始する前にもう一度起動すると、どちらの方法でも... ビデオp適切に寝る。。
なぜnetcatリスナーを起動してからそれを終了させたのか分かりませんが、再び起動すると影響が出ます。私はおそらく、ビデオの前にFIFOにEOFまたはBOFをエコーする必要があると考えました。その構文が何であるかはわかりません。
私はNetcatを、すべての味を試してみました。
https://stackoverflow.com/a/44972255/2836621でPythonスクリプトを実行してください。 –