【问题标题】:capture video from screen for stream从屏幕捕获视频以进行流式传输
【发布时间】:2011-10-31 07:24:49
【问题描述】:

我正在寻找不同的解决方案来从监视器屏幕捕获视频流并将其发送到视频流服务器以在网络上广播。它必须发生在“现场”中。

我不喜欢广泛使用“procaster”等外部服务。

操作系统:Windows。

很高兴知道人们必须具备哪些想法和经验才能实现这一目标。

谢谢大家。

【问题讨论】:

  • Windows,我刚刚添加了相关信息

标签: windows video-streaming screen-capture


【解决方案1】:

最近,我构建了一个名为 ScreenStreamer 的 GoLang 项目,它是一种将当前活动窗口或全屏(Linux 或 Windows)流式传输到其他设备(如手机或另一台 PC)的工具,如 MJPEG over http 或 FLV over rtmp,它非常实时(延迟

编译完成后,可以这样运行:

# enter the project root directory
cd ./src/ScreenStreamer
# run it
./mjpeg or .\mjpeg.exe
# use a web browser or other video player, open http://host:port/mjpeg

./rtmp or .\rtmp.exe
# use a video player, open rtmp://host:port/live/screen

截图:

【讨论】:

    【解决方案2】:

    Windows SDK 包含Push Source Filters Sample,而后者又包含CPushSourceDesktop 过滤器/类。

    CPushSourceDesktop:当前桌面图像的副本(仅限 GDI)

    它捕获桌面图像并将其推送到 DirectShow 管道中。从那里您可以使用视频压缩编解码器对其进行处理并将其流式传输到远程位置。 Windows Media 子系统包含一个不错的屏幕图像压缩编解码器,网络流必须是自定义或第三方组件。或者,可以将捕获类设置为虚拟相机并让 Windows Media Encoder 广播它(或者,它已经内置了一个 simila 功能)。

    或者,您可以检查 VNC(或其中一个克隆)源代码,看看它如何挂钩窗口并捕获图像更新,然后将它们压缩并使其可用于远程应用程序。

    请注意,您必须专门捕获非 GDI 图像(例如来自使用硬件加速和非 RGB 表面的视频/游戏应用程序)。

    【讨论】:

    • 在这两种情况下我都无法捕获视频游戏?
    • 视情况而定,在某些情况下捕获的图像只是黑色。我相信它取决于操作系统和硬件。无论如何,VNC 和 WME 都能够开箱即用地从屏幕捕获,因此您无需编写任何代码就可以将它们与游戏应用程序进行对比。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多