随着信息化时代的到来,同屏技术在教学、会议、大型活动中的应用越来越广泛。同屏结束简单说来,就是将手机、平板等一些移动设备上面的音视频资料通过无线或有线网络同步到显示设备上。换言之,就是将移动设备中的音视频资料景象到显示频幕上面。就像照镜子一样,移动设备上显示什么,显示屏上就会显示什么。
LibEasyScreenLive如何实现屏幕鼠标采集
LibEasyScreenLive在通过GDI方式采集的同时,我们可以通过GDI绘图的方式把鼠标光标绘制到采集的桌面屏幕上去,从而实现鼠标的采集,如下代码所示:
ICONINFO iconinfo ; BOOL ret; ret = GetIconInfo( hcur, &iconinfo ); if (ret) { xPoint.x -= iconinfo.xHotspot; xPoint.y -= iconinfo.yHotspot; //need to delete the hbmMask and hbmColor bitmaps //otherwise the program will crash after a while after running out of resource if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask); if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor); } // 修正鼠标信息 [7/19/2018 SwordTwelve] ::DrawIcon( hMemDC, xPoint.x*m_fScreenxScale, xPoint.y*m_fScreenyScale, hcur);
这里需要注意的是windows系统可能设置了图标放大,所以我们再绘制鼠标位置的时候需要乘以一个放大系数m_fScreenxScale,这个系数可以通过获取系统参数计算出来,如下代码所示:
HDC hScreenDC=::GetDC(::GetDesktopWindow()); m_nMaxxScreen = GetDeviceCaps(hScreenDC, DESKTOPHORZRES); m_nMaxyScreen = GetDeviceCaps(hScreenDC,DESKTOPVERTRES);//VERTSIZE VERTRES m_nActxScreen = GetDeviceCaps(hScreenDC,HORZRES); m_nActyScreen = GetDeviceCaps(hScreenDC,VERTRES); m_fScreenxScale = (float)m_nMaxxScreen/m_nActxScreen; m_fScreenyScale = (float) m_nMaxyScreen/m_nActyScreen;
EasyScreenLive功能介绍
青犀团队根据市场需求研发的EasyScreenLive,就是一款简单、高效、稳定的集采集,编码,组播,推流和流媒体RTSP服务于一身的同屏功能组件,具低延时,高效能,低丢包等特点。目前支持Windows,Android平台,通过EasyScreenLive我们就可以避免接触到稍显复杂的音视频源采集,编码和流媒体推送以及RTSP/RTP/RTCP/RTMP服务流程,只需要调用EasyScreenLive的几个API接口,就能轻松、稳定地把流媒体音视频数据RTMP推送给EasyDSS服务器以及发布RTSPServer服务, RTSP同屏服务支持组播和单播两种模式。
(演示对比)
(硬件解码)