在webrtc对外接口中,没有直接实现屏幕共享和抓屏接口;
但是可以webrtc中实现了windows上的抓屏模块;
DesktopCapturer
src\modules\desktop_capture\desktop_capturer.h
具体可以参考示例;
这里特别说明一下几点注意的地方:
1:如果只有一个屏幕,默认就抓取一个屏幕的图像,如果有两个屏幕,默认就抓取两个屏幕的图像,合成一个图像;
如果想要指定屏幕抓取,需要枚举屏幕ID,然后设置相关ID;
2:在window上,如果想要应用抓屏,那么需要保护一下几个lib文件:
#pragma comment (lib,"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\Lib\\d3d11.lib")
#pragma comment (lib,"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\Lib\\dxgi.lib")
#pragma comment (lib,"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\Lib\\winmm.lib")
#pragma comment(lib,"out/debug32h264/obj/modules/desktop_capture/desktop_capture_generic.lib")
#pragma comment(lib,"out/debug32h264/obj/modules/desktop_capture/desktop_capture_differ_sse2.lib")
#pragma comment(lib,"out\\debug32h264\\obj\\modules\\desktop_capture\\primitives.lib")
3:抓屏有两个方式;
(1): 自己调用CaptureFrame获取屏幕图像;
(2):通过共享内存设置,可以定时抓屏;
4:关于自己用GDI转图,当然可以,而且网上代码很多,但是webrtc封装的更好一些,同时实现了directx抓图;
5:模块中说明:注释中:DesktopFrame objects always hold RGBA data.
但是实际中看到的是:用libyuv需要用argb处理;
而自己的处理,看到的是BGRA;
还是直接libyuv处理吧;
6:该模块可以实现桌面图像,和指定窗口图像;
桌面图像:webrtc::DesktopCapturer::CreateScreenCapturer
窗口图像:webrtc::DesktopCapturer::CreateWindowCapturer
其它的函数用法都一样,枚举函数也一样,但是创建Screen的时候,枚举的是显示器窗口;
创建window的时候,枚举的是进程窗口;