windows虚拟摄像头开发

本文介绍了在Windows上利用OBS开发虚拟摄像头的方法,包括安装配置、代码实现和图像传输。通过ffmpeg和OBS-virtual-cam项目,创建一个虚拟摄像头源,将图像数据推送到虚拟摄像头供应用如Zoom或腾讯会议使用。核心机制是使用共享内存进行数据传输。
摘要由CSDN通过智能技术生成

在之前的文章中研究过mac上虚拟摄像头的开发,主体思想就是借用obs的驱动,然后我们只要负责给驱动喂正确的数据就行了,那么同样的想法我在windows上复刻了出来。

OBS 虚拟摄像头 windows版

  1. 首先,最新的git地址是https://github.com/Fenrirthviti/obs-virtual-cam
  2. 整个项目依赖于ffmpeg,所以自己编译的话,需要先编译ffmpeg,如果不想编译ffmpeg,那就使用vcpkg,如果连 obs-virtual-cam都懒得编译,那就直接下载release。
  3. 按照他的readme,安装插件,首先把插件放到c盘(其他盘没试过,只是怕放其他盘会被我误删),然后一定要注意,64位的dll不是那么重要,zoom必须在32位的dll注册以后才能找到驱动。
  4. 如果按照他的命令,你会发现,这个插件给你注册了4个虚拟摄像头,所以,按照我的命令:
regsvr32 /n /i:"1" "C:\OBS-Virtualcam-2.0.5-Windows\bin\32bit\obs-virtualsource.dll"
  1. 不想要的话卸载命令:
regsvr32 \u "C:\OBS-Virtualcam-2.0.5-Windows\bin\32bit\obs-virtualsource.dll"
  1. 打开zoom或者腾讯会议,你会发现,摄像头列表中多了一个

在这里插入图片描述

如何把图像传给虚拟摄像头

  1. 查看源码结构,virtual-source就是我们的虚拟摄像头,virtual-output的作用就是从Obs中获取数据后推送给虚拟摄像头的。
    在这里插入图片描述
  2. 阅读virutal-ouput可知,核心思想就是建立一个queue,然后往queue里面push数据,从原理上来说,其实核心在于文件映射共享内存(CreateFileMappingA),这里不用太关心。
  3. 看代码虚拟摄像头能支持多种格式,不过我们不必冒险,还是使用uyuv422,使用以下命令获取yuv数据。
ffmpeg -i video.mp4 -pix_fmt uyvy422  output.yuv

代码实现

#include <stdio.h>
#include "../queue/share_queue_write.h"

#define HEIGHT 480
#define WIDTH 640
#define BUFSIZE WIDTH*HEIGHT*2

int main(int argc, char* argv[]){
   
    bool start = false;
    share_queue video_queue;
    uint64_t interval = static_cast<int64_t>(1000000000 / 30);
    int nb = 0;

    uint8_t buffer[BUFSIZE];
    uint32_t linesize[3] = {
    WIDTH*2,0,0};
    uint8_t* data[3] = {
   nullptr,nullptr,nullptr};
    data[0] = buffer;
    start = shared_queue_create(&video_queue,ModeVideo, AV_PIX_FMT_UYVY422, WIDTH, HEIGHT,interval, 10);
    //shared_queue_set_delay(&video_queue,0);
    FILE * fp = fopen("d://output.yuv","rb+");
    int time = 0;
    while( (nb = fread(buffer, WIDTH * HEIGHT *2,1,fp))>0){
   
        shared_queue_push_video(&video_queue, linesize, WIDTH, HEIGHT, data, time);
        time += 33;
        Sleep(33);
    }
    fclose(fp);
    shared_queue_write_close(&video_queue);
    
}
  1. HEIGHT,WIDTH需要对应生成的YUV视频的长宽。
  2. 直接引用 “share_queue_write.h” 会报, “libavutil/pixfmt.h”, "libavutil/samplefmt.h"两个文件找不到,这两个文件是ffm
Windows虚拟摄像头源码是一段可以在Windows系统上创建虚拟摄像头的代码。它可以用于模拟一个摄像头设备,将虚拟图像传输给软件应用程序。 虚拟摄像头源码实现了与实际摄像头相同的功能,例如图像捕获和传输,但它是通过计算机程序生成的虚拟图像,而不是从实际设备中获取的。这对于开发摄像头相关的软件应用程序非常有用,因为它可以进行快速的测试和调试,而无需实际的硬件设备。 在Windows系统上,虚拟摄像头源码通常是通过DirectShow框架实现的。DirectShow是一种多媒体框架,允许开发者创建、处理和播放多媒体流。通过使用DirectShow框架,开发者可以创建一个虚拟视频源,将其注册为一个摄像头设备,并将图像数据传输给需要使用摄像头的应用程序。 虚拟摄像头源码通常包括以下关键功能: 1. 图像数据生成:通过计算机程序生成虚拟图像数据,可以是预定义的图像、视频文件或者动态生成的图像。 2. 图像捕获:通过DirectShow框架,将虚拟图像数据作为输入源,捕获并传输给应用程序。 3. 摄像头注册:将虚拟摄像头注册为一个摄像头设备,使得应用程序能够访问和使用虚拟摄像头。 4. 图像参数设置:可以设置虚拟摄像头的参数,如分辨率、帧率、白平衡等,以满足不同应用程序的需求。 虚拟摄像头源码可以作为一个基础框架,根据需要进行修改和扩展,以满足特定软件应用程序的需求。开发者可以根据自己的需求,自定义虚拟摄像头的图像生成算法、参数设置和图像处理功能,以实现更多高级特性。 总之,Windows虚拟摄像头源码是一段用于在Windows系统上创建虚拟摄像头的代码,它可以用来模拟摄像头设备并传输虚拟图像给应用程序。它通常使用DirectShow框架实现,具备图像数据生成、捕获、摄像头注册等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值