You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python将摄像头、麦克风注册为虚拟设备以实现多应用复用?

用Python实现物理摄像头/麦克风转为虚拟设备以复用

虚拟摄像头实现

  • 先安装系统级虚拟摄像头驱动:Windows用OBS Virtual Camera,Linux用v4l2loopback,macOS用OBS Virtual Camera
  • 用Python读取物理摄像头帧并转发到虚拟设备,依赖opencv-python和pyvirtualcam库
import cv2
import pyvirtualcam

# 打开物理摄像头(设备编号通常为0)
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

# 初始化虚拟摄像头
with pyvirtualcam.Camera(width=1280, height=720, fps=30) as cam:
    print("虚拟摄像头已启动")
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        # 转换OpenCV的BGR格式为RGB,适配虚拟摄像头要求
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        cam.send(frame_rgb)
        cam.sleep_until_next_frame()

cap.release()
  • 启动后,其他应用可直接选择对应的虚拟摄像头设备使用

虚拟麦克风实现

  • 先安装系统级虚拟音频驱动:Windows用VB-Cable,Linux用pulseudio虚拟sink,macOS用BlackHole
  • 用Python读取物理麦克风音频并转发到虚拟设备,依赖sounddevice库
import sounddevice as sd

# 获取物理麦克风和虚拟音频设备ID(可通过sd.query_devices()查看)
input_device_id = 0
output_device_id = 2  # 替换为你的虚拟设备ID

# 音频参数配置
sample_rate = 44100
channels = 2

def audio_callback(indata, outdata, frames, time, status):
    if status:
        print(status)
    # 直接将物理麦克风输入转发到虚拟音频设备
    outdata[:] = indata

# 启动音频流
with sd.Stream(device=(input_device_id, output_device_id),
               samplerate=sample_rate, channels=channels,
               callback=audio_callback):
    print("虚拟麦克风已启动,按Enter退出")
    input()
  • 注意:sounddevice依赖PortAudio,Linux需提前安装portaudio19-dev,macOS用brew安装portaudio

核心注意事项

  • 系统驱动是基础:必须先安装对应平台的虚拟设备驱动,Python仅负责媒体流的转发处理
  • 权限配置:确保Python进程拥有访问物理摄像头、麦克风的系统权限
  • 性能优化:高分辨率/高帧率场景下,可通过多线程处理避免卡顿

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:00:02