qt+gxdi+ffmpeg远程控制(一)

日常废话

todesk在实验室被墙了,raylink开始收费了,免费版最多支持30fps。用惯了60帧的远控,突然30帧太不适应了,刚好最近在搞ffmpeg,自己搞一个

桌面应用

ui方面用qt简简单单做一个,这一块学的不太好,能看就行。没有用qml是因为与c++之间的交互太麻烦,后续可能考虑用dx11渲染部分组件。

Tarui

之前考虑过使用Tarui做前端,但rust学的也不太好,gxdi截图+ffmpeg编解码回头还要做FIFE让rust调用,太麻烦放弃。

Flutter

考虑过使用flutter做前端,最终也是需要调用c++放弃。

截图

截图目前只给出gxdi的支持,在老笔记本上试过不知道为什么老笔记本win10的系统居然gxdi没有图像,后续会给出其他方式。

gxdi

gxdi是windows给出的高性能截图方案,选择的原因在于对多屏幕支持更好。具体代码百度有好多具体流程,要注意的是在截图后需要释放Frame。

this->m_duplication->AcquireNextFrame(0, &info, &desktop);

// do something

this->m_duplication->ReleaseFrame();

 ffmpeg编码

gxdi截图后图像是RGB格式,目前好像没有编码器支持该格式,需要用ffmpeg的sws_scale对格式进行转换,之后再用编码器进行编码。  

目前版本参数设置为veryfast,zerolatency,性能测试为每秒40帧左右。  

编码流程为截图后获取图片,拷贝出来后放入编码器。若每秒智能编码40帧,假如视频帧率设置为60帧则会导致实际时间15秒,视频时间只有8秒左右。  

后续考虑如何提高编解码性能,目前暂时只能稳定30帧。

绘制鼠标

gxdi截图中没有鼠标,需要自己绘制出来。目前采用的是将截图获得的纹理转为Qimage并读取为QPixMap,将鼠标icon绘制在QPixMap中,最后将QPixMap放入QLabel进行实时图像渲染。  

性能问题就出现在渲染部分,无法稳定60帧,大约有50多帧左右。

示例图

源码

gitee源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值