多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 桌面共享 AnyChat提供桌面共享功能:[桌面共享](http://bbs.anychat.cn/forum.php?mod=viewthread&tid=550) 功能的实现原理如下: 1. 内置一个“Native Screen Camera”的摄像头设备 2. 当切换到该设备时便可以实现桌面共享,将本地的桌面图像进行采集传输 3. 其它用户看到的视频便是桌面图像,而不是摄像头的视频 4. 本地桌面数据采集时,会在鼠标周围显示一个绿色的边框,表示桌面共享的区域大小 5. 通过调节本地采集分辩率、码率等参数,可以调节桌面共享的区域大小、视频质量 ## 调用示例 ### 初始化桌面共享 ``` BRAC_SetSDKOption(BRAC_SO_CORESDK_SCREENCAMERACTRL, 1); ``` ### 打开桌面共享--切换摄像头方式 ``` // 枚举摄像头设备(包括桌面共享虚拟摄像头) var videoDevices = BRAC_EnumVideoDevices(BRAC_DEVICE_VIDEOCAPTURE); // 把摄像头切换成桌面共享虚拟摄像头 var screenDevice = videoDevices[videoDevices.length-1]; // 桌面共享摄像头一般为摄像头数组的最后一个 BRAC_SelectVideoCapture(BRAC_DEVICE_VIDEOCAPTURE, screenDevice); // deviceName传桌面共享摄像头的设备名 // 打开本地摄像头 BRAC_UserCameraControl(-1, 1); // 第二个参数表示打开或关闭:1 打开,0 关闭 // 设置视频显示位置 BRAC_SetVideoPos(mSelfUserId, div, 'objectId'); //div为用作显示区域的Div DOM对象,'objectId'为生成的视频插件object的标签id ``` ### 打开桌面共享--打开多路流方式 ``` // 枚举摄像头设备(包括桌面共享虚拟摄像头) var videoDevices = BRAC_EnumVideoDevices(BRAC_DEVICE_VIDEOCAPTURE); // 绑定流号,这里以把桌面共享摄像头绑定为5号流为例 var screenDevice = videoDevices[videoDevices.length-1]; // 桌面共享摄像头一般为摄像头数组的最后一个 BRAC_SetUserStreamInfo(mSelfUserId, 5, BRAC_SO_LOCALVIDEO_DEVICENAME, screenDevice); // 打开5号流(第三个参数传入视频流号) BRAC_UserCameraControlEx(mSelfUserId, 1, 5, 0, ""); // 第二个参数表示打开或关闭:1 打开,0 关闭 // 设置5号流显示位置(最后一个参数传入视频流号) BRAC_SetVideoPos(mSelfUserId, div, 'objectId', 5); //div为用作显示区域的Div DOM对象,'objectId'为生成的视频插件object的标签id ``` *以上两种打开桌面共享方式,按照实际需求和场景选择其中一种即可,本节结尾会扩展介绍切换摄像头与多路音视频输入的区别* ### 桌面共享参数控制 AnyChat开放桌面共享参数控制接口:[桌面共享参数控制](http://bbs.anychat.cn/forum.php?mod=viewthread&tid=2865) #### 接口定义及控制参数定义 ``` // 桌面共享参数控制接口参数 var BRAC_SO_LOCALVIDEO_SCREENFLAGS = 109; // 屏幕采集标志(参数为int型) // 桌面共享控制参数定义 var ANYCHAT_SCREENSOURCE_FLAGS_DISABLECURSOR = 0x01; // 禁止采集鼠标光标 var ANYCHAT_SCREENSOURCE_FLAGS_DISABLEBORDER = 0x02; // 禁止边框显示 var ANYCHAT_SCREENSOURCE_FLAGS_DISABLETRACE = 0x04; // 禁止鼠标追踪 ``` #### 桌面共享控制参数说明 1. 禁止采集鼠标光标:默认采集桌面视频时,会采集鼠标光标,如果不需要在视频上显示鼠标光标(如远程协助场景),则需要迭加该标志位 2. 禁止边框显示:默认情况下,当采集分辨率小于屏幕分辨率时,会在采集区域周围显示一个绿色的边框,如果不需要显示该边框,则可以迭加该标志位去掉边框显示 3. 禁止鼠标追踪:默认情况下,当采集分辨率小于屏幕分辨率时,采集区域会跟随鼠标的移动而移动,如果需要固定采集区域,则可以迭加该标志位 #### 使用示例 ``` // 设置某项控制参数 var flag1 = ANYCHAT_SCREENSOURCE_FLAGS_DISABLECURSOR; // 禁止采集光标 BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_SCREENFLAGS, flag1); // 设置多项控制参数(加起来即可) var flag2 = ANYCHAT_SCREENSOURCE_FLAGS_DISABLECURSOR + ANYCHAT_SCREENSOURCE_FLAGS_DISABLEBORDER; // 禁止采集光标+禁止边框显示 BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_SCREENFLAGS, flag2); ``` *注意:需要在打开摄像头前调用该接口* ### 扩展介绍:切换摄像头与多路音视频输入的区别 1. 首先,需要认清一件事:**AnyChat所有视频流都是带有流号的,默认使用0号流** 2. 切换摄像头接口(BRAC_SelectVideoCapture)指的是切换0号流的摄像头设备,用户摄像头控制接口(BRAC_UserCameraControl)所操作也是指0号流的摄像头设备 3. 切换摄像头接口比较死板、简单,适用于一次只展示一个视频的场景;多路音视频输入接口比较复杂,灵活,适用于一次需要展示多个视频的场景 多路音视频输入接口的使用及多路视频流情况下的录像可参考:[AnyChat多路音视频显示与录制开发指南](http://bbs.anychat.cn/forum.php?mod=viewthread&tid=3950)