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

本文关键字:jpeg 图像 文件 保存 ffmpeg IP Camera 获取 使用 | 更新日期: 2023-09-27 18:10:58

我如何从Ip摄像机获取流,它使用RTP,流是MPEG4,我有多播地址和端口,我有Ip摄像机的Ip地址和端口号
我无法通过http访问示例(http://ip/jpeg)我也无法通过VLC播放器访问流媒体。外汇样本(rtp://ipadressofcam:port)和(rtp://multicastaddress:port(
那么,ffmpeg命令是什么呢
我有windows操作系统,我现在只使用C#编写代码
但制片人创建了他们自己的ocx,用于查看摄像头,这个插件可以在.net上工作,但我不想使用它,因为它没有太多功能,我的意思是你无法获得摄像头的当前图片或快照,这就是为什么我必须自己做的原因。

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

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

试着看看你的相机为什么拒绝VLC请求。这就是如何做到的:安装Wireshark,启动它,并为相机地址设置一个过滤器,比如:ip.addr==camera_ip(xxxx.xxxx.xxxx.xxxx(。然后,尝试连接VLC,并查看交换的消息。如果您看到DROP、UNAUTH或告诉您使用密码的东西,请引入它。(VLC将首先尝试使用未经验证的过程进行连接,如果失败,将要求提供密码。(

如果失败原因不同,Wireshark会为您提供线索。

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

希望它能有所帮助!

你可以使用VLC来做这样的事情,它是ActiveX控件,也可以用于.NET,只需要安装VLC媒体播放器,你就可以在VS工具箱上设置它的控件

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

更新

如果你准备好为这些东西付费,你可以使用http://www.mainconcept.com/products/sdks/video.html该公司的产品将与解码和编码一起前进,在那里你可以找到一个巨大的库。

因此,您希望从相机接收视频流,并将单个帧转换为JPEG文件。这听起来不错,实际上听起来很自然:为什么不呢?有一个视频馈送正在网络上发送,我们不需要太多,只是挑选单个帧。

原始流是MPEG-4(第2部分(,并且期望的目标编码是JPEG。这将任务分解为获取MPEG-4视频馈送、将其解码为未压缩图像和编码为JPEG的部分。让我们从最后一个开始倒过来看看。

JPEG是一种流行的编码方式,有各种不同接口的编解码器能够压缩成JPEG。选项包括GDI+neneneba API、IJG JPEG库libjpeg、用于带有DirectShow和其他接口的视频的JPEG库和编解码器。

MPEG-4解码器是一个复杂的组件,但幸运的是,它被很好地标准化了,并且可以在不同的接口和多个来源中使用。特别地,MPEG-4第2部分视频解码器作为DMO(也通过(随Windows 7一起提供。解码器也可用作英特尔媒体SDK ffdshow中的DirectShow过滤器。

回到第一步,您需要从网络访问MPEG-4流。首先,你指出相机可以在多播UDP地址上使用。这使您打开一个套接字并放入多播组中,以便开始接收RTP数据。您将收到的数据还不是纯MPEG-4,并且是根据MPEG-4音频/视频流的RTP有效负载格式进行格式化的,当您收到RTP消息流时,您必须准备好接收无序片段、数据包丢失等。您应该收到您可以接收的数据,检查RTP标头,并尽最大努力重建MPEG-4提要。

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

所以到目前为止,我看到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,我可以在.net.

中使用Libavcodec将Iframe转换为jpeg图像