相关疑难解决方法(0)

OpenCV与网络摄像头

我在Windows下使用openCV 1.1pre1.我有一个网络摄像头,我需要从openCV抓取帧.该摄像机可以通过RTSP或mjpeg通过http传输标准mpeg4流.我已经看到很多线程都在谈论将ffmpeg与openCV一起使用,但我无法使其工作.

如何使用openCV从IP摄像头抓取帧?

谢谢

安德里亚

c++ windows networking opencv ffmpeg

23
推荐指数
4
解决办法
10万
查看次数

将opencv处理添加到gstreamer应用程序

我正在尝试执行以下操作:使用gstreamer接收视频流并使用opencv进行处理.我找到了一些解决方案,其中一个是将视频写入(来自gstreamer)fifo,然后使用opencv读取它.(OPTION3这里是MJPEG流媒体和解码).问题是我无法打开管道.cvCreateFileCapture永远不会返回.这是我写的部分代码:

if(mkfifo("fifo.avi", S_IRUSR| S_IWUSR) == -1)
{
    cout<<"Cant create fifo"<<endl;
    cout<<errno<<endl;
}

loop = g_main_loop_new(NULL, false);

fsink = gst_element_factory_make("filesink", "fsink");
g_object_set(G_OBJECT(fsink), "location", "fifo.avi", NULL);

playbin = gst_element_factory_make("playbin2", "play");    
g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL);
g_object_set(G_OBJECT(playbin), "video-sink", fsink, NULL);

bus = gst_pipeline_get_bus(GST_PIPELINE(playbin));
gst_bus_add_signal_watch(bus);

g_signal_connect(bus, "message::buffering", G_CALLBACK(&set_playbin_state), playbin);
gst_object_unref(bus);

cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
capture = cvCreateFileCapture("fifo.avi");
Run Code Online (Sandbox Code Playgroud)

程序堆叠在最后一行.PS:我正在使用opencv 2.3.1.

c c++ opencv fifo gstreamer

15
推荐指数
2
解决办法
2万
查看次数

使用python-gstreamer播放RTSP

我使用gstreamer从IP摄像机(如Axis)播放RTSP流.我使用如下命令行:

gst-launch-0.10 rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp latency=0 ! decodebin ! autovideosink
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我想用pygtk中的gui控制它,所以我使用gstreamer python绑定.我写了这段代码:

[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
source.set_property("location", "rtsp://192.168.0.127/axis-media/media.amp")
decoder = gst.element_factory_make("decodebin", "decoder")
sink = gst.element_factory_make("autovideosink", "sink")

self.player.add(source, decoder, sink)
gst.element_link_many(source, decoder, sink)

bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("message", self.on_message)
bus.connect("sync-message::element", self.on_sync_message)
[...]
Run Code Online (Sandbox Code Playgroud)

但它不起作用并退出此消息:

gst.element_link_many(source, decoder,sink)
gst.LinkError: failed to link source with decoder
Run Code Online (Sandbox Code Playgroud)

我也尝试用这个来改进我的CLI,因为我只使用h264:

gst-launch-0.10 -v rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp ! rtph264depay !  ffdec_h264 ! xvimagesink
Run Code Online (Sandbox Code Playgroud)

并在我的python代码中实现它:

[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
depay = gst.element_factory_make("rtph264depay", "depay") …
Run Code Online (Sandbox Code Playgroud)

python rtsp gstreamer h.264 ip-camera

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

gstreamer ×2

opencv ×2

c ×1

ffmpeg ×1

fifo ×1

h.264 ×1

ip-camera ×1

networking ×1

python ×1

rtsp ×1

windows ×1