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

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

  1. 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试

    [网络通信 -- SIP 电话]项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试 [1]SIP 服务器 OPENSIPS 搭建 1.1 安装环 ...

  2. 【个人作品】推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功

    推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功 属于个人独创作品,欢迎使用测试,欢迎与作者联系,共同研究.如果大家喜欢将拿出源码. ...

  3. Ubuntu16.04LTS环境下搭建MQTT服务器以及QT实现MQTT客户端

    MQTT服务器搭建 使用EMQX搭建MQTT服务器,EMQX 4.2.14 for Ubuntu 16.04下载 下载zip包,选择安装方式为zip,cpu架构选择x86_64 按照网页的指示进行下载 ...

  4. Qt下使用OpenCV3打开摄像头并把图像显示到QLabel上

    前言 1.Qt5有自己摄像头的类QCamera,但是图像处理相关还是要使用OpenCV来做,这里我演示在Qt下使用OpenCV打开摄像头. 2.Qt的版本是5.9,Qt Creator 4.4.1,O ...

  5. 在Qt中用默认程序打开文件

    用法:    QProcess::execute("explorer 文件名"); 例:        QProcess::execute("explorer c:\\1 ...

  6. qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器

    qt判断tcp客户端是否连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例.操作系统使用场景:弹性云服务器的操 ...

  7. qt 无法打开shell32_在Qt中用默认程序打开文件

    用法:    QProcess::execute("explorer 文件名"); 例:        QProcess::execute("explorer c:\\1 ...

  8. python 请在微信客户端打开_完美解决 请在微信客户端打开链接

    完美解决 请在微信客户端打开链接 背景描述 相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面.大概在1年前,专门安排了一个人去解决这个技术问题, ...

  9. H5请在微信客户端打开链接

    H5判断必须在微信中打开 效果 代码 <!DOCTYPE html> <html><head><meta charset="utf-8"& ...

最新文章

  1. some more debugging screenshot about timeformat in DatePicker 15
  2. P2261 [CQOI2007]余数求和 整除分块
  3. P1828 香甜的黄油 Sweet Butter (spfa)
  4. 阿里巴巴的AI革命 | 4天云栖大会干货总结
  5. 十大PHP程序员必备工具
  6. activiti 文档_Activiti快速入门 kft-activiti-demo
  7. OpenBSD 清理 OpenSSL 代码 一周递交数百补丁
  8. 如何发现隐藏的Webshell后门
  9. 如何批量把照片设置统一尺寸?
  10. git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
  11. html中页面目录虚线怎么做,html中文本下面怎么有虚线
  12. unity二維碼生成(新)
  13. qduoj 分辣条1 (搜索+剪枝)
  14. 计算机专业的研究方向
  15. c语言设计课程期末上机考试海大,(海大试卷.docx
  16. 西部世界又一发现:ION—存储在IPFS上的去中心化身份服务
  17. hdmi接口线_HDMI接口如何区分?
  18. Ubuntu上使用微信
  19. 工作站和台式机有什么区别
  20. java遍历map获取key value

热门文章

  1. Layer already exists
  2. dlopen、dlsym和dlclose的使用和举例
  3. 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
  4. Bigdecimal运算及注意事项
  5. 自适应分辨率的大屏的工具推荐
  6. javascript 二维数组 json数据
  7. php webservice实例
  8. 搭建文件共享服务器 实验报告,SAMBA服务器配置实验报告
  9. android毕业论文谢辞,大学生毕业论文谢辞
  10. Android Cannot execute task: the task has already been executed (a task can be executed only once)