我如何从网络摄像机获取流,它使用 RTP,流是 MPEG4,我有多播地址和端口,我有网络摄像机的 IP 地址和端口号。
而且我无法通过 http 访问(例如 http://ip/jpeg)而且我也无法使用 VLC 播放器访问流。例如 (rtp://ipadressofcam:port) 和 ( rtp://multicastaddress:port )
那么 ffmpeg 命令是什么?
我有 Windows 操作系统,我现在只用 C# 编写代码。
但是制作人创建了他们自己的用于查看 cam 的 ocx,该插件可以在 .net 上运行,但我不想使用它,因为它没有太多功能,我的意思是您无法获取当前图片或 cam 快照,这就是为什么我必须自己做。
4 回答
您确定流不受密码保护吗?
尝试查看您的相机拒绝 VLC 请求的原因。这是如何做到的:安装Wireshark,启动它,并为相机地址设置一个过滤器,如:ip.addr == camera_ip (xxxx.xxxx.xxxx.xxxx)。然后,尝试连接 VLC,并查看那里交换的消息。如果您看到 DROP、UNAUTH 或告诉您使用密码的内容,请介绍它。(VLC 将首先尝试使用未经身份验证的过程进行连接,如果失败,将要求输入密码。)
如果失败原因不同,Wireshark 会为您提供线索。
请记住,如果 VLC 无法访问它,那么找到其他方法的机会几乎为零。除非你是视频大师。
希望能帮助到你!
所以你想从相机接收视频流并将单个帧转换为 JPEG 文件。这听起来不错,实际上听起来很自然:为什么不呢?有一个视频源正在网络上发送,我们不需要太多,只需选择单个帧。
原始流是 MPEG-4(第 2 部分),所需的目标编码是 JPEG。这将任务分解为获取 MPEG-4 视频源、将其解码为未压缩图像以及编码为 JPEG 的部分。让我们从最后一个倒退。
JPEG 是一种流行的编码,并且有各种不同接口的编解码器能够压缩成 JPEG。选项包括GDI+ API、IJG JPEG 库 libjpeg、JPEG 库和用于具有 DirectShow 和其他接口的视频的编解码器。
MPEG-4 解码器是一个复杂的组件,但幸运的是,它已经很好地标准化,并且可以在不同的接口和多个来源中使用。特别是MPEG-4 第 2 部分视频解码器与 Windows 7一起DMO
(也通过 )提供。解码器也可用作 ffdshow、英特尔媒体 SDK 中的 DirectShow 过滤器。
回到第一步,您需要从网络获取 MPEG-4 流。首先,您表示摄像机可用于多播 UDP 地址。这使您打开一个套接字并放入多播组以开始接收 RTP 数据。您将收到的数据还不是纯 MPEG-4,并且是根据MPEG-4 音频/视频流的 RTP 有效负载格式格式化的,当您收到 RTP 消息流时,您必须准备好接收乱序片段,数据包丢失等。您应该接收您可以接收的内容,检查 RTP 标头,并尽最大努力重建 MPEG-4 提要。
最终,您需要从您的应用程序中涵盖这些步骤(不一定直接,您宁愿使用第三方库,包括其他答案中提到的那些),并构建一个管道,将来自网络的接收和转码缝合在一起。
你可以用VLC来做这样的事情,它是ActiveX控件,也可以用于.NET,只需要安装VLC媒体播放器,你可以在VS工具箱上设置它的控件
http://forum.videolan.org/viewtopic.php?f=32&t=54969
更新
如果你准备好为这些东西买单,你可以使用http://www.mainconcept.com/products/sdks/video.html这个公司的产品来推进解码和编码,在那里你可以找到一个巨大的图书馆。
所以直到现在,我看到 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 图像。