【问题标题】:Solution for VB6 to broadcast WebcamVB6广播网络摄像头的解决方案
【发布时间】:2014-08-23 13:00:54
【问题描述】:

对不起,我知道 VB6 是几十年前的事了,但我不得不使用 VB6 在服务器 - 客户端模型程序中提供 2 台 PC 之间的实时网络摄像头流。 VB6 代码保持连接,然后我别无选择,只能通过该连接传输所有数据。

我已经为此尝试了数周,无数种方法,但无济于事。 我的努力集中在 3 种主要方法上:

1/ 使用ffmpeg将实时网络摄像头录制为“.avi”文件在硬盘上,将部分文件传输到另一端并播放。但我一直坚持使用可以播放“正在编写”的 avi 文件的媒体播放器。

Windows Media Player 控件告诉我“文件已在使用中...”& VLC 插件甚至无法添加到 VB6 (axvlc.dll)。

2/使用ffmpeg将live webcam保存为avi文件,将该文件的每一位传输到另一端,然后在另一端,从avi中提取24张/秒的图像连续显示在一个图片框。 这种方法是可以的,只是我的硬盘在眨眼的时候就装满了图像,而且我的程序在挂起之前变得很慢。

3/ 使用 ffmpeg 将实时网络摄像头流式传输到 rtp 端口,如下所示:

ffmpeg -f dshow -i video="Lenovo EasyCamera" -vcodec mpeg2video -pix_fmt yuv422p -f rtp -an rtp://224.1.2.3:8191

我已经在 VLC 中成功观看了流,但是 VLC(axvlc.dll) 拒绝集成到古老的 VB6 中。更重要的是,我不知道如何使用 VB6 将 rtp 流重定向/重新路由到其他 PC。

有人请给我点灯吗? (欢迎任何第 3 方组件)

【问题讨论】:

  • 如果您所做的只是将工作卸载到 ffmpeg 或 VLC,为什么它必须是 VB6? A) 周围没有很多现成的网络摄像头应用程序吗? B) 你考虑过 DirectShow 吗?还有其他旧技术选项(但我曾经使用的一些链接现在与 VB6 一样死了)很难根据您尝试的内容准确判断您在追求什么。最后,如果 #2 有效,为什么不改进它以删除已显示的图像?
  • @Plutonix:这是一个复杂的情况,我必须使用 VB6。但主要原因是我必须使用 VB6 代码创建的 TCP/UDP 连接在两台 PC 之间传输所有数据。而且我从来没有听说过任何可以在两个独立的程序之间共享连接的技术,所以我坚持使用 VB6 和一小组与 VB6 兼容的组件/技术。 #2 不可行的原因是每秒创建/显示/删除 24 个大小约为 100kb 的图像不是一个稳定的解决方案,它对资源的贪婪和 HDD 很快就会碎片化。
  • @Plutonix:我必须通过 VB6 的预安装连接传输所有数据这一事实消除了几乎所有与 VB6 不兼容的即用型解决方案

标签: vb6 ffmpeg streaming webcam


【解决方案1】:

经过一些研究,微软似乎使用了 rtsp,它是 rtp 协议的一种变体。幸运的是,ffmpeg 支持该格式的复用和解复用。 https://www.ffmpeg.org/ffmpeg-protocols.html#rtsp 。您可能需要调整概述的参数。
如果服务器必须是 vb6 前端,您可以从命令行启动 ffmpeg 作为后端。这是一种常用方法,我在这里找到了一个示例:https://www.ehow.com/how_6038708_use-ffmpeg-visual-basic-6.html 供参考。

下一阶段是在 Visual Basic 6 中播放这些流的能力。您可以添加一个 Windows Media Player 控件并将其属性 WindowsMediaPlayer1.URL 设置为{将您的 url 作为字符串添加到其中的列表} .
一个版本的控件的 ID 为 {6BF52A50-394A-11D3-B153-00C04F79FAA6},dll 为 wmp.dll。确保控件的 autoStart 和 invokeURLs 设置为 true。

其他一些值得一提的事情是尝试使用 WMP 兼容的编解码器并包含诸如 windows 媒体视频。

【讨论】:

  • 感谢您花时间研究这些东西。除了 VB6 保持连接之外,您的解决方案将是完美的。当 FFMPEG 广播实时信号时,它只能在 本地 广播 RTSP,但 VB6 是通过 Internet 将信号传输到另一端的。那么,您有什么技巧可以让 VB6 通过 Internet 将本地 rtsp 协议重定向到另一台 PC?
  • 您的情况似乎很受限制,我很难从您的陈述中理解您的限制程度。也许一个回显服务器会工作,它会接收本地广播,你可以修改数据包,包括它们的地址,然后将它们发送给你想要的任意数量的客户端。这是一个例子:planetsourcecode.com/vb/scripts/…
  • 我认为这并不难理解。如果你用ffmpeg广播:"ffmpeg .... rtsp:1.2.3.4:1234",ffmpeg会做自己的端口监听,当有人连接到那个端口时,ffmpeg会建立自己的连接。那是失败的,因为我只能使用VB6来监听某个端口并在有人连接时建立VB6自己的连接。因此,解决方案是让 ffmpeg 广播到 localhost,然后 VB6 必须以某种方式假装/模仿它是另一台 PC 的真正 ffmpeg。但我不会假装/模仿!
最近更新 更多