Capturing a Multicast UDP Video stream using OpenC

2019-02-19 14:54发布

问题:

I have a multi-cast UDP Video stream that I need my OPenCV (Emgu ) 2.4.x app to capture and process ("client").

On the client, I can capture the stream using VLC (udp://xx.yy.zz.aaa:1234, However the my app fails to capture this udp stream. My code is quite simple (

Capture cap = new Capture ("udp://@212.1.1.1:1234");

p.s. I have tried with and 2/o the @ also tried rtp on that address. No luck :-/

Does OpenCV directly allow "capture" of UDP streams? or do I need to run VLC on the client to re-stream the video as rtp or http or some other....?

Thanks.

回答1:

I finally figured this out and sharing in the hope that might help others,

Capture cap = new Capture ("udp://@212.1.1.1:1234");

don't forget the @ symbol!

the capture is successfully created on the UDP Stream, however accessing the capture properties causes it to exception out and causes the error.

Long story short, the UDP stream does not appear to stream the device properties so you might need to obtain that elsewhere or code it in.

On other thing of note, that since the FPS (frames per sec) is unreliable, if not outright incorrect, you might need to make the FPS adjustable, especially if you are polling the stream in a loop.

HTH



回答2:

IplImage* frame;
CvCapture* pCapture;
pCapture = cvCaptureFromFile("udp://ip:port/path");
frame = cvQueryFrame(pCapture);

This will also do the job in case you don't have videoInput libraries