使用ffmpeg从IP Camera获取Stream并保存为jpeg(图像)文件

时间:2011-10-12 12:45:15

标签: c# ffmpeg rtp mpeg-4

我如何从Ip Camera获取流,它使用RTP,流是MPEG4,我有多播地址和端口,我有ip camera的IP地址和端口号。
我无法通过http forexample(http:// ip / jpeg)到达而且我也无法通过VLC播放器到达流。例如(rtp:// ipadressofcam:port)和( rtp:// multicastaddress:port
那ffmpeg命令是什么?
我有Windows操作系统,我现在只用C#编写代码 但是制作人创建了他们自己的ocx用于观看凸轮,该插件可以在.net工作,但我不想使用它因为它没有太多的功能,我的意思是你不能得到当前的图片或凸轮的快照,这就是为什么我必须自己做。

4 个答案:

答案 0 :(得分:2)

您可以使用VLC进行此类操作,它也可用于.NET的ActiveX控件,只需要安装VLC Media Player,您就可以在VS工具箱上设置它的控件

http://forum.videolan.org/viewtopic.php?f=32&t=54969

<强>更新

如果您愿意为这些内容付费,可以使用http://www.mainconcept.com/products/sdks/video.html此公司产品推进解码和编码,在那里您可以找到一个巨大的图书馆。

答案 1 :(得分:2)

您确定该流没有受密码保护吗?

尝试了解相机拒绝VLC请求的原因。这是如何做到的:安装Wireshark,启动它,并为相机地址设置一个过滤器,如:ip.addr == camera_ip(xxxx.xxxx.xxxx.xxxx)。然后,尝试连接VLC,并查看交换的消息。如果你看到DROP,UNAUTH或者告诉你使用passwd的东西,请介绍它。 (VLC将首先尝试使用未经身份验证的过程进行连接,如果失败,则会要求使用passwd。)

如果失败原因有所不同,Wireshark会给你提供线索。

请记住,如果VLC无法访问它,那么找到其他方法的机会几乎为零。除非你是视频专家。

希望它有所帮助!

答案 2 :(得分:2)

因此,您希望从相机接收视频流并将单个帧转换为JPEG文件。听起来不错,听起来很自然:为什么不呢?在网络上发送了一个视频输入,我们不需要太多,只需选择单独的帧。

原始流是MPEG-4(第2部分),所需的目标编码是JPEG。这将任务分为获取MPEG-4视频输入,将其解码为未压缩图像以及编码为JPEG的部分。让我们从最后一个向后看这些。

JPEG是一种流行的编码,并且有各种具有不同接口的编解码器能够压缩成JPEG。选项包括GDI+ APIIJG JPEG library libjpeg,用于DirectShow和其他界面的视频的JPEG库和编解码器。

MPEG-4解码器是一个复杂的组件,但幸运的是标准化,并且可以在不同的接口和多个来源中使用。特别是MPEG-4 Part 2 Video Decoder DMO(以及通过)与Windows 7一起提供。解码器也可用作ffdshow,Intel Media SDK中的DirectShow过滤器。

回到第一步,您需要从网络到达MPEG-4流。首先,您表示相机在多播UDP地址上可用。这使您打开一个套接字并放入多播组,以便开始接收RTP数据。您将收到的数据不是纯MPEG-4,并且根据RTP Payload Format for MPEG-4 Audio/Visual Streams格式化,当您收到RTP消息流时,您必须准备接收乱序碎片,数据包丢失等。您是应该接收你可以收到的内容,检查RTP标题,并尽力重建MPEG-4 feed。

最终,您需要从您的应用程序中涵盖这些步骤(不一定是直接使用第三方库,包括其他答案中提到的那些),并构建一个管道,将网络接收和转码拼接在一起。

答案 3 :(得分:0)

所以直到现在,我看到VLC无法打开它但是如果我们创建.sdp文件并使用ffplay播放它只会出现黑屏。

vlc -vvv dshow:// --sout-keep --sout-all --sout=#rtp{dst=multicastaddress,port=portNo,sdp=file:///C:/test/my.sdp}

当然这不是纯粹的解决方案,但没有一点希望。

但绝对解决方案可能就是这样;
没有办法只使用c#来实现我想要的东西。我可以使用很少的c ++库组件,但我可以将它与托管c ++一起使用来编写互操作服务并在我的c#代码中使用这些dll。这就是我需要的:

1 - 我需要一个RTP库,http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib或live555但live555有一定的局限性 2-RTP库是我从编码器中提取的MPEG4流的传输。但我需要控制流的方法,那些是生产者的WSDL 3 - 之后我需要一个解码器; Libavcodec,我可以使用libavcodec将iframe转换为.net中的jpeg图像。