电脑系统上录屏或者投屏时将获取的屏幕图像数据进行实时远程视频交互或投影演示时,演讲者操作电脑会感到投影显示的鼠标位置与自己使用的电脑显示鼠标位置有一段时间的滞后,主要原因是视频进行运动图像压缩(通常采用H.264等)的机制引起的,输出的图像帧与被采样的图像帧是有若干数目间隔帧,使用者顿挫明显体验感大受影响。相信用户和业内人员都有这样的感受。
笔者在开发某款产品时进行了优化,体验效果明显改善。解决的方法是电脑端采集屏幕图像时包含集鼠标的图像,而将当前的鼠标图像单独处理不与录屏视频混合。实时地将鼠标图像数据流传输到远程设备,远程设备显示投影时将接收的鼠标图像数据与要显示的图像进行叠加,也就是说投影端的鼠标轨迹与使用中的电脑显示的鼠标基本同步,没有了延迟感,效果良好。
这里举例Mac osx个人电脑系统上采集鼠标图像数据供大家参考,Windows系统也可类似的方法处理.
int getMouseBitmapData(char *buf){
int i = 0;
NSBitmapImageRep *bitmap=NULL;
NSCursor *sysCursor = [NSCursor currentSystemCursor]; //取当前鼠标对象
if (sysCursor == nil)
return -1;
NSPoint pt = [NSEvent mouseLocation]; //获取鼠标坐标
bitmap = [[sysCursor.image representations] objectAtIndex: 0]; //鼠标图像数据
if(bitmap == NULL)
return -1;
i = [bitmap pixelsWide]*[bitmap pixelsHigh]*[bitmap samplesPerPixel];
memcpy(buf , [bitmap bitmapData] , i);
return i;
}