我想从IP摄像头(通过RTSP)接收JPEG图像 . 为此,我在OpenCV中尝试了 cvCreateFileCapture_FFMPEG
. 但是ffmpeg似乎对流媒体的MJPEG格式有一些问题(因为它会自动尝试检测流媒体信息)并且我最终得到以下错误
mjpeg: unsupported coding type
然后,我决定使用live555进行流媒体播放 . 到目前为止,我可以通过openRTSP成功 Build 流媒体和捕获(非解码)图像 .
问题是如何在我的应用程序中执行此操作,例如在OpenCV中 . 如何在OpenCV中使用openRTSP获取图像并以JPEG格式保存?
我听说openRTSP中的数据可以发送到缓冲区(或命名管道),然后在OpenCV的 IplImage
中读取 . 但我不知道该怎么做 .
我将非常感谢有关此问题的任何帮助/建议 . 我需要以下任一问题的答案:
-
如何禁用ffmpeg的自动流信息检测并指定我自己的格式(mjpeg),或者
-
如何在OpenCV中使用openRTSP?
问候,
1 回答
这是Axis IP摄像头吗?无论哪种方式,大多数提供 MPEG4 RTSP流的IP摄像机都可以使用 cvCreateFileCapture_FFMPEG 使用OpenCV进行解码 . 但是,ffmpeg decoder的 MJPEG 编解码器有一个众所周知的未解决的问题 . 我相信你会收到类似的 error
Option1 : Using opencv, libcurl and libjpeg
要在opencv中查看mjpeg流,请查看以下实现
http://www.eecs.ucf.edu/~rpatrick/code/onelinksys.c或http://cse.unl.edu/~rpatrick/code/onelinksys.c
Option2: Using gstreamer (no opencv)
如果您的目标是查看或保存jpeg图像,我建议您查看gstreamer
对于 view MJPEG流,可以如下执行媒体管道串
对于RTSP
要使用C API,请参阅
http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Multimedia_Components/Camera_API_Usage
有关一个简单示例,请查看我在rtsp上的其他帖子,以构建gstreamer C API媒体管道(这与gst-launch字符串相同,但实现为C API)
Playing RTSP with python-gstreamer
要 save MJPEG流作为管道的多个图像(让我们放一个垂直翻转 BIN 并将 PADS 连接到前一个和下一个 BINS 以使其更加漂亮)
也许值得一看 gst-opencv
UPDATE:
Option3: Using gstreamer, Named Pipe and opencv
在Linux上,可以获取mjpeg流并将其转换为mpeg4并将其提供给命名管道 . 然后在opencv中读取命名管道中的数据
步骤1.创建命名管道
步骤2.创建opencvvideo_test.c
步骤3.准备使用gstreamer从MJPEG转换为MPEG4(传入帧的速率至关重要)
步骤4.在OpenCV中显示流