【问题标题】:Get Stream and save as jpeg (image) file from IP Camera using ffmpeg使用 ffmpeg 从 IP 摄像机获取 Stream 并保存为 jpeg(图像)文件
【发布时间】:2011-12-06 02:49:19
【问题描述】:

我如何从网络摄像机获取流,它使用 RTP,流是 MPEG4,我有多播地址和端口,我有网络摄像机的 IP 地址和端口号。
例如,我无法通过 http (http://ip/jpeg) 访问,而且我也无法使用 VLC Player 访问流。例如 (rtp://ipadressofcam:port) 和 (rtp://multicastaddress:port)
那么什么是 ffmpeg 命令呢?
我有 Windows 操作系统,我现在只用 C# 编写代码。
但是制作人创建了他们自己的用于查看 cam 的 ocx,该插件可以在 .net 上运行,但我不想使用它,因为它没有太多功能,我的意思是您无法获取当前图片或 cam 快照,这就是为什么我必须自己做。

【问题讨论】:

  • 你可以下载代码看看。
  • are you sure about @ ? can you show me reference你试过了吗?我对证明它不感兴趣。自行搜索。
  • 这是另一个来源forums.whirlpool.net.au/archive/911984。只需搜索rtp://@。因此,您不必尝试键盘中的所有字符。
  • 相机的品牌和型号是什么?一些 IP 摄像机可以选择以 m-jpeg 流式传输或定期转储 jpg 文件。

标签: c# ffmpeg rtp mpeg-4


【解决方案1】:

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

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

JPEG 是一种流行的编码方式,有各种不同接口的编解码器可以压缩成 JPEG。选项包括GDI+ APIIJG JPEG library libjpeg、JPEG 库和用于具有 DirectShow 和其他接口的视频的编解码器。

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

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

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

【讨论】:

    【解决方案2】:

    所以直到现在,我看到 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 图像。

    【讨论】:

      【解决方案3】:

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

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

      更新

      如果你准备好为这些东西买单,你可以使用http://www.mainconcept.com/products/sdks/video.html这个公司的产品来推进解码和编码,在那里你可以找到一个巨大的图书馆。

      【讨论】:

      • 嗯,我不知道它一定是压缩问题、容器或编解码器,因为我很确定 VLC 可以,我测试了它..很多!!
      • @mekici 为什么您认为 VLC 无法打开它,协议问题,容器问题或编解码器问题,如果您可以给我们发送样本,我可以为您提供一些您可以使用的工具!
      • @mekici 如果您可以录制该视频的一部分,我可以为您分析!
      • 我该怎么做?您的意思是将视图记录为 .avi 还是?
      • @mekici 我们可以继续聊天吗?
      【解决方案4】:

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

      尝试查看您的相机拒绝 VLC 请求的原因。这是如何做到的:安装 Wireshark,启动它,然后为摄像头地址添加一个过滤器,例如:ip.addr == camera_ip (xxxx.xxxx.xxxx.xxxx)。然后,尝试连接 VLC,并查看那里交换的消息。如果您看到 DROP、UNAUTH 或告诉您使用密码的内容,请介绍它。 (VLC 将首先尝试使用未经身份验证的过程进行连接,如果失败,将要求输入密码。)

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

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

      希望对你有帮助!

      【讨论】:

      • 感谢您的回答,我不在乎 vlc 是否打开它,我只需要使用 c# 来控制该流即可。但再次感谢您提供信息
      猜你喜欢
      • 2016-12-17
      • 2018-08-01
      • 2018-01-23
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多