You need to enable JavaScript to run this app. 如何将Electron中getUserMedia生成的MediaStream接入OBS、VLC及直播平台
优惠活动
大模型
产品
解决方案
定价
更多

如何将Electron中getUserMedia生成的MediaStream接入OBS、VLC及直播平台

实现方案

你已经获取到了捕获窗口的MediaStream,可根据你的使用场景选择以下方案接入目标平台:

方案1:创建虚拟摄像头(最通用,适配OBS、VLC等本地程序)

这个方案是将MediaStream的音视频帧推送到系统级的虚拟摄像头/虚拟声卡设备,所有支持调用本地音视频设备的程序都可以直接识别使用:

  • 安装对应平台的虚拟设备驱动:Windows可使用VB-Cable(虚拟音频)+ 虚拟摄像头驱动,Mac可使用OBS Virtual Camera附带的驱动,Linux可使用v4l2loopback
  • Electron端修改handleStream逻辑:将MediaStream绑定到一个隐藏的<video>标签,定时通过canvas.drawImage()捕获视频帧,转成YUV/RGB原始帧数据后通过Node.js原生模块推送到虚拟摄像头设备;音频流可同理转成PCM数据推送到虚拟声卡
  • 后续OBS、VLC等程序直接在音视频输入源列表中选择你创建的虚拟设备即可使用

方案2:RTMP推流(适配直播平台、VLC、OBS)

这个方案无需额外安装驱动,适合推流到公网直播平台,也可本地分发:

  • 执行npm install fluent-ffmpeg安装依赖,将MediaStream的视频帧、音频帧实时喂给FFmpeg进程
  • 本地测试时可推流到本地RTMP端口(如rtmp://localhost:1935/live/mystream),OBS添加「媒体源」输入该地址即可拉流,VLC直接打开该网络地址即可播放
  • 推流到YouTube、Facebook直播时,直接将FFmpeg的输出地址替换为平台提供的RTMP推流地址+你的专属流密钥即可,无需中转

方案3:Browser源对接(仅适配OBS,开发成本最低)

如果只需要接入OBS使用,可以用最低成本实现:

  • 在Electron应用内启动一个轻量本地HTTP服务,端口自定义,提供一个仅渲染捕获流的静态页面,页面内将MediaStream绑定到<video>标签设为全屏播放
  • OBS添加「浏览器源」,输入本地服务地址(如http://localhost:8888/stream),设置分辨率和你的捕获流参数匹配即可直接使用,不需要额外编码处理流数据

注意事项

  • 低延迟场景优先选虚拟摄像头方案,端到端延迟可控制在200ms以内;直播场景优先选RTMP推流方案,兼容性最好
  • 高分辨率高帧率场景下,可使用WebAssembly编码库处理帧数据,避免主进程卡顿
  • 推流到公网平台时,可根据平台要求调整FFmpeg的编码参数(码率、关键帧间隔等)提升直播画质

内容的提问来源于stack exchange,提问作者Alok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 22:54:04