写点什么

屏幕共享接入指南

发布于: 2020 年 08 月 28 日
屏幕共享接入指南

屏幕共享的应用场景众多,如:


  • 在线课堂,老师分析桌面教学科技;

  • 在线会议,与会者全屏分享会议内容;

  • 在线医疗,议程分析患者电子病例;

  • 远程协助,远程帮助其他人解决问题;


为了有效解决用户的这些痛点,屏幕共享功能应运而生。新版本的屏幕共享不在应用插件的形式,大家都知道,在 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


用户头像

实时交互,万物互联! 2020.08.10 加入

实时交互,万物互联,全球实时互动云服务商领跑者!

评论 (2 条评论)

发布
用户头像
浏览器对于富媒体的支持未来会越来越好的
2020 年 08 月 31 日 17:42
回复
是的
2020 年 09 月 03 日 11:28
回复
没有更多了
屏幕共享接入指南