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
VCamSDK 4.1 qt 使用 (sip 客户端打开分享桌面测试)相关推荐
- 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试
[网络通信 -- SIP 电话]项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试 [1]SIP 服务器 OPENSIPS 搭建 1.1 安装环 ...
- 【个人作品】推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功
推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功 属于个人独创作品,欢迎使用测试,欢迎与作者联系,共同研究.如果大家喜欢将拿出源码. ...
- Ubuntu16.04LTS环境下搭建MQTT服务器以及QT实现MQTT客户端
MQTT服务器搭建 使用EMQX搭建MQTT服务器,EMQX 4.2.14 for Ubuntu 16.04下载 下载zip包,选择安装方式为zip,cpu架构选择x86_64 按照网页的指示进行下载 ...
- Qt下使用OpenCV3打开摄像头并把图像显示到QLabel上
前言 1.Qt5有自己摄像头的类QCamera,但是图像处理相关还是要使用OpenCV来做,这里我演示在Qt下使用OpenCV打开摄像头. 2.Qt的版本是5.9,Qt Creator 4.4.1,O ...
- 在Qt中用默认程序打开文件
用法: QProcess::execute("explorer 文件名"); 例: QProcess::execute("explorer c:\\1 ...
- qt客户端连接服务器不响应,qt判断tcp客户端是否连接服务器
qt判断tcp客户端是否连接服务器 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)集群实例.操作系统使用场景:弹性云服务器的操 ...
- qt 无法打开shell32_在Qt中用默认程序打开文件
用法: QProcess::execute("explorer 文件名"); 例: QProcess::execute("explorer c:\\1 ...
- python 请在微信客户端打开_完美解决 请在微信客户端打开链接
完美解决 请在微信客户端打开链接 背景描述 相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面.大概在1年前,专门安排了一个人去解决这个技术问题, ...
- H5请在微信客户端打开链接
H5判断必须在微信中打开 效果 代码 <!DOCTYPE html> <html><head><meta charset="utf-8"& ...
最新文章
- some more debugging screenshot about timeformat in DatePicker 15
- P2261 [CQOI2007]余数求和 整除分块
- P1828 香甜的黄油 Sweet Butter (spfa)
- 阿里巴巴的AI革命 | 4天云栖大会干货总结
- 十大PHP程序员必备工具
- activiti 文档_Activiti快速入门 kft-activiti-demo
- OpenBSD 清理 OpenSSL 代码 一周递交数百补丁
- 如何发现隐藏的Webshell后门
- 如何批量把照片设置统一尺寸?
- git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
- html中页面目录虚线怎么做,html中文本下面怎么有虚线
- unity二維碼生成(新)
- qduoj 分辣条1 (搜索+剪枝)
- 计算机专业的研究方向
- c语言设计课程期末上机考试海大,(海大试卷.docx
- 西部世界又一发现:ION—存储在IPFS上的去中心化身份服务
- hdmi接口线_HDMI接口如何区分?
- Ubuntu上使用微信
- 工作站和台式机有什么区别
- java遍历map获取key value
热门文章
- Layer already exists
- dlopen、dlsym和dlclose的使用和举例
- 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
- Bigdecimal运算及注意事项
- 自适应分辨率的大屏的工具推荐
- javascript 二维数组 json数据
- php webservice实例
- 搭建文件共享服务器 实验报告,SAMBA服务器配置实验报告
- android毕业论文谢辞,大学生毕业论文谢辞
- Android Cannot execute task: the task has already been executed (a task can be executed only once)