VCamSDK 4.1 qt 使用 (sip 客户端打开分享桌面测试)

1.VCamSDK 提供了虚拟设系统的开发 下载地址

http://www.e2esoft.com/sdk/vcam-sdk/ 本文4.1版本

解压运行install.bat   安装 uninstall.bat卸载  运行后会在系统注册虚拟摄像头

运行目录下的VCamDemo.exe或者VCamDemoCS.exe就可以吧要虚拟的桌面发送给摄像头

这里点击screen capture   就可以把桌面发送给摄像头

可用CapTest.exe测试显示 打开摄像头

2.运行在qt 

解压VCamDemos.zip  本文主要测试在c的使用非c#    它默认提供的好像是win32句柄开发的demo 在qt 不好使用稍微改下

新建一个头文件将 VCamRenderer_i.c 内容拷过去(xx.h)

新一个类DSRender   将DSRender.cpp、h的文件内容拷过去

去掉头文件的#include <strmif.h> 

cpp的#include "stdafx.h"

3. qt 项目导入

#include "DSRender.h"
#include "xx.h"
#include <dshow.h>

先跑下项目运行后会在vs运行目录多个 vcamrenderer.tlh 

在导入#include "vcamrenderer.tlh"

好了现在可以开发了

 

在头文件添加

private:
    Ui::QtVCamClass ui;
    IBaseFilter*        m_vcam_renderer = nullptr;
    IVCamRenderer*        m_vcam = nullptr;
    CDSRender            m_player;
    //CDeviceEnumerator    m_input_devices;
    //CDeviceEnumerator::CDevice* m_current_vcam = nullptr;
    
    HANDLE                m_thread = nullptr;

    QTimer *m_timer;
    void closeEvent(QCloseEvent *event);

添加一个按钮事件

void QtVCam::start() {
    
    HRESULT hr = ::CoInitialize(nullptr);

    // Create VCam renderer filter
    if (FAILED(hr = CoCreateInstance(CLSID_VCamRenderer, NULL, CLSCTX_INPROC, IID_IBaseFilter,
        reinterpret_cast<void**>(&m_vcam_renderer)))) {
        //MessageBox(_T("VCamRenderer filter not registered!"), _T("Error"), MB_OK | MB_ICONERROR);
        qDebug() << "VCamRenderer filter not registered!";
        return ;
    }

    // get [IVCamRender] interface from VCam Renderer filter
    if (FAILED(hr = m_vcam_renderer->QueryInterface(&m_vcam))) {
        //MessageBox(_T("VCam Driver not installed!"), _T("Error"), MB_OK | MB_ICONERROR);
        qDebug() << "VCam Driver not installed!!";
        return ;
    }

    // pass it to player
    m_player.SetVCamRender(m_vcam);

    // list available video capture devices
    //m_input_devices.Enumerate();
      

    // list multiple VCam source Device 
    /**for (auto& it : m_input_devices.m_vcam) { 
        if (m_current_vcam == nullptr) {
            m_current_vcam = it.get();
            qDebug() <<"======="<< m_current_vcam->m_friendly_name.c_str();
        }
    }**/
    // create a thread to detect VCam usage.

    if (m_vcam) {
        m_vcam->SetOutputFormat(1920, 1080, 20, 0, 0);
        m_vcam->CaptureScreen(0, 0, 640, 480);
    
    }

    m_timer = new QTimer(this);
    //定时器触发信号槽
    connect(m_timer, &QTimer::timeout, this, &QtVCam::TimerTimeOut);
    m_timer->setInterval(100);//1000=1s
    
    m_timer->start();
}
 

这里启动了一个timer  设置100m发送一次桌面  还可以设置输出尺寸

void QtVCam::TimerTimeOut()
{
    if (m_vcam) {
        qDebug() << "11111";
        m_vcam->CaptureScreen(0, 0, 1920, 1080);
    }
}

好了  现在就可以用CapTest.exe打开看了   

 

在sip 客户端的摄像头选择设置为virtual camera 就可以发送桌面给对方了

for (int i = 0; i < 3; i++)//找到摄像头
    {
        QString x = QString(QLatin1String((video_devices[i])));
        if (x.contains("virtual camera", Qt::CaseSensitive)) {
            index = i; break;
        }
    }
    linphone_core_set_video_device(lc, video_devices[index]);

如果是通话视频 对方看到的是你的桌面了当然输出640*480 不是那么清楚 你可以调大 环境允许

 

sip 客户端各平台解决方案https://shop121230895.taobao.com/

交流群261074724

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值