目标是通过网络将视频从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 –