乐趣区

关于c++:屏幕共享接入指南

屏幕共享的利用场景泛滥,如:

  • 在线课堂,老师剖析桌面教学科技;
  • 在线会议,与会者全屏分享会议内容;
  • 在线医疗,议程剖析患者电子病例;
  • 近程帮助,近程帮忙其他人解决问题;

为了无效解决用户的这些痛点,屏幕共享性能应运而生。新版本的屏幕共享不在利用插件的模式,大家都晓得,在 Chrome72 版本以前,集成屏幕共享性能必须要集成插件,这无异减少了开发者的难度;国内的网络无法访问谷歌商店,也无奈下载插件,从而导致了该性能处处受限,不被大家所采纳。新版本无需插件,只需简略调用几句代码即可领有屏幕共享性能,屏幕共享还能抉择关上敞开屏幕声音,如果屏幕共享了带声音的多媒体,该性能正合适哦,还有 anyRTC 的屏幕共享默认不采集音频的,如果想屏幕共享的时候输入音频,记得关上该性能。

上述讲了 web 端的屏幕共享,上面也介绍下 Native 端的屏幕共享吧,Windows 跟 MacOS 这里就不多介绍了,调用接口即可,简略不便;Android 和 iOS 应用屏幕共享,必须要关上自定义音视频采集模块,内部采集好音视频,往 SDK 塞音频、视频流即可。具体可返回查看接口文档。

Web 端屏幕共享工作原理

Web 端屏幕共享,实际上是通过创立一个屏幕共享的视频轨道对象来实现的。你能够调用 createScreenVideoTrack 办法来创立一个用于屏幕共享的本地视频轨道对象。采集屏幕共享的过程中浏览器会询问须要共享哪些屏幕,依据用户的抉择去获取屏幕信息

在 anyrtc Web SDK 中,一个 ArRTCClient 对象同一时间只能公布一个视频轨道。因而如果你想要在公布屏幕共享的同时,还公布本地摄像头视频轨道,则须要创立两个 ArRTCClient 对象,退出同一频道,一路发送屏幕共享轨道,一路发送摄像头视频轨道。

Chrome 屏幕共享

咱们以 Chrome 浏览器为例在 Chrome 上屏幕共享,你可间接调用 createScreenVideoTrack。

该性能要求 Chrome 72 或以上版本。如果你应用的软件版本不满足此要求,请应用屏幕共享插件实现在 Chrome 上共享屏幕。

ArRTC.createScreenVideoTrack({
  // 能够在这里配置编码参数,具体参考 API 文档
  encoderConfig: "1080p_1",
}).then(localScreenTrack => {/** ... **/});

分享音频

anyrtc Web SDK 反对在 Windows 平台的 Chrome 浏览器 74 及以上版本同时共享屏幕和本地播放的背景音。你须要在调用 createScreenVideoTrack 办法的withAudio 参数设为 enable

这样设置后,该办法会返回一个列表,蕴含屏幕共享的视频轨道对象和本地播放背景音的音频轨道对象。

ArRTC.createScreenVideoTrack({encoderConfig: "1080p_1",}, "auto").then([screenVideoTrack, screenAudioTrack] => {/** ... **/});

留神:

  • 应用这个办法后,还须要终端用户在屏幕共享的弹出框上勾选 分享音频 能力真正失效。
  • 如果抉择共享单个利用窗口,无奈分享音频。

同时共享屏幕和开启视频

因为一个 ArRTCClient 对象只能发送一路视频轨道,所以如果要在一个发送端同时分享屏幕和开启摄像头视频采集,须要创立两个 ArRTCClient,一路发送屏幕共享轨道,一路发送摄像头轨道。

async function startScreenCall() {const screenClient = ArRTC.createClient({ mode: "rtc", codec: "vp8"});
  await screenClient.join("<TOKEN>", "<CHANNEL>");

  const screenTrack = await ArRTC.createScreenVideoTrack();
  await screenClient.publish(screenTrack);

  return screenClient;
}

async function startVideoCall() {const videoClient = ArRTC.createClient({ mode: "rtc", codec: "vp8"});
  await videoClient.join("<TOKEN>", "<CHANNEL>");

  const videoTrack = await ArRTC.createCameraVideoTrack();
  await videoClient.publish(videoTrack);

  return videoClient;
}

Promise.all([startScreenCall(), startVideoCall()]).then(() => { /** ... **/});

本人订阅本人,会产生额定的计费,如图:

开发注意事项

  • 一个 ArRTCClient 对象只能发送一路视频轨道
  • 负责公布屏幕共享的用户的 UID 不要固定在同一个值,否则某些场景下同 UID 的共享流可能会引起互踢。
  • 在屏幕共享的时候,本地流的 Client 不要订阅本地的屏幕共享流,否则会减少计费。
  • 在 Windows 平台上进行屏幕共享时,如果共享的是 QQ 聊天窗口会导致黑屏。

更多好玩的用法

  • 视频大小流,一个客户端公布两路视频流,一个大流,一个小流,其余客户端可依据本身网络状况拉去大小流。
  • 流回退,客户端关上流回退性能后,SDK 自动检测以后网络的上下行,依据丢包率以及网络提早等一些因素,主动把拉去的流变为小流,如果小流还不能满足以后的网络情况,会主动切换音频拉流,保障音频通信优先。
  • 自定义音视频流,当本地摄像头不能满足以后需要的时候,能够把采集的音视频流往 SDK 外面塞,SDK 负责自定义音视频流的传输。
  • 平滑高低麦,上麦工夫维持在 200ms, 点击上麦即刻能进行音视频通信,广泛应用于直播连麦、语音开黑等场景。
  • 混音,播放在线或者本地音乐,跟谁本地声音一起发到远端。
  • 人脸识别,向本地用户报告检测出的一系列后果,包含人脸距设施屏幕的间隔。该性能可用于揭示用户留神用眼卫生,和屏幕放弃肯定间隔。

还有未开掘的玩法,期待你们的需要哦,只有需要正当,咱们就能为您实现~

anyRTC 守业搀扶打算

  • 30 万收费分钟数,助力初创企业疾速倒退。

anyRTC 初创企业搀扶打算,只有通过企业审核,分割客服退出 anyRTC 守业搀扶打算,即可享受 30 万收费分钟数。取得分钟数可升高在实时音视频技术服务所产生的成本费用,零老本疾速启动我的项目。

  • 专属技术领导反对

anyRTC 为初创企业提供一对一专属客服,为客户提供业余、认真的服务,及时解答您的纳闷。并为客户提供专属技术领导,更快上手,轻松上线!

分割咱们

联系电话:021-65650071

QQ 征询群:580477436

ARCall 技术交换群:597181019

征询邮箱:hi@dync.cc

技术问题:开发者论坛

获取更多帮忙返回:www.anyrtc.io

退出移动版