目標是通過網絡將視頻從Raspberry Pi(Raspivid/H.264)流式傳輸到運行在筆記本電腦上的OpenCV應用程序中。將Raspivid的Netcat H.264視頻轉換爲OpenCV
開放CV捕獲如下(C++):
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監聽器在筆記本電腦上運行,流將從第È樹莓裨
raspivid --verbose --nopreview -b 2000000 --timeout 0 -o - | ncat 192.168.LAPTOP.IP 5001
,或者出於調試目的,在筆記本電腦上的本地文件可以被流式傳輸到netcat的:
cat video.h264 | nc 192.168.LAPTOP.IP 5001
二者均得到以下錯誤:
Unable to stop the stream: Inappropriate ioctl for device (ERROR)icvOpenAVI_XINE(): Unable to initialize video driver.
有趣的是,如果我啓動筆記本電腦上的Netcat偵聽器,然後用CTRL + C殺死它,然後在啓動視頻流之前再次啓動它,使用任一方法... 然後視頻p正確放置。
我不明白爲什麼啓動netcat偵聽器,然後殺死它,然後再次啓動有一個影響或影響是什麼。我認爲可能需要在視頻之前將EOF或BOF回顯到FIFO中,我不確定該語法是什麼。
我嘗試了所有Netcat的味道。
https://stackoverflow.com/a/44972255/2836621 –