百摩网
当前位置: 首页 生活百科

屏幕共享软件的不同之处(屏幕共享的实现与应用)

时间:2023-08-22 作者: 小编 阅读量: 2 栏目名: 生活百科

本文的重点是anyRTC在屏幕共享上的调优以及实现步骤,开发者无需关注功能实现细节,只需要参透API调用顺序即可。下面以WindowsSDK平台为例,介绍anyRTC屏幕共享功能。目前WindowsSDK屏幕分享功能支持屏幕分享和窗口分享以及区域采集分享三种类型,其中屏幕分享和区域采集分享可以合二为一,区域采集分享为选定的屏幕中进行区域指定分享,如果想整个屏幕分享,需要指定整个屏幕区域位置即可。CMonitors类的具体实现参考示例项目。该ID对应唯一的Windows窗口。

屏幕共享软件的不同之处?随着音视频的迅速发展,无论是在商用还是娱乐方面都有很多场景的实际应用,玩法也是越来越多了,随之而来的就是对衍生功能要求的提高,今天小编就来说说关于屏幕共享软件的不同之处?下面更多详细答案一起来看看吧!

屏幕共享软件的不同之处

随着音视频的迅速发展,无论是在商用还是娱乐方面都有很多场景的实际应用,玩法也是越来越多了,随之而来的就是对衍生功能要求的提高。

屏幕共享就是对于商用和娱乐场景最重要的功能之一。

简介

屏幕共享包括屏幕采集和视频流推送这两部分功能。与音视频互动不同,屏幕共享讲究的是高清实时,对带宽以及设备性能要求很高。本文的重点是 anyRTC 在屏幕共享上的调优以及实现步骤,开发者无需关注功能实现细节,只需要参透 API 调用顺序即可。下面以 Windows SDK 平台为例,介绍 anyRTC 屏幕共享功能。

目前 Windows SDK 屏幕分享功能支持屏幕分享窗口分享以及区域采集分享三种类型,其中屏幕分享和区域采集分享可以合二为一,区域采集分享为选定的屏幕中进行区域指定分享,如果想整个屏幕分享,需要指定整个屏幕区域位置即可。这三种采集方式,都有自己特定的使用场景,开发者只需要根据自己的实际应用场景,选择对应的分享类型即可。

anyRTC SDK 暂不提供方法获取显示器屏幕信息和 window ID,你需要通过 Windows 原生方法,例如 EnumDisplayMonitors 和 EnumWindows 获取相应信息。

屏幕分享 & 区域采集分享

在 Windows 系统中,每个显示器的屏幕都位于同一个虚拟屏幕上,通过 Windows 原生方法,获取对应的屏幕信息和 window ID。

具体实现步骤如下:

  1. 获取显示器屏幕信息列表。

void CArScreenCapture::InitMonitorInfos(){// m_monitors 是 CMonitors 类的实例。CMonitors 类的具体实现参考示例项目。// m_monitors 调用 EnumMonitor 获取显示器屏幕信息列表。EnumMonitor 方法的具体实现参考示例项目。m_monitors.EnumMonitor();// 定义 infos 向量,用于存储显示器屏幕信息列表。std::vector<CMonitors::MonitorInformation>infos = m_monitors.GetMonitors();CString str = _T("");// 获取每个显示器屏幕在虚拟屏幕上的 Rectangle 坐标for (size_t i = 0; i < infos.size(); i) {RECT rcMonitor = infos[i].monitorInfo.rcMonitor;CString strInfo;strInfo.Format(_T("Screen%d: rect = {%d, %d, %d, %d} "), i1, rcMonitor.left, rcMonitor.top, rcMonitor.right, rcMonitor.bottom);}str= strInfo;m_cmbScreenRegion.InsertString(i, utf82cs(infos[i].monitorName));}m_cmbScreenRegion.InsertString(infos.size(), _T("Select Window Hwnd Rect Area"));m_staScreenInfo.SetWindowText(str);m_cmbScreenRegion.SetCurSel(0);}

  1. 通过待共享的显示器屏幕在虚拟屏幕上的 Rectangle 坐标以及待共享区域在显示器屏幕上的 Rectangle 坐标实现屏幕共享。

void CArScreenCapture::OnBnClickedButtonStartShareScreen(){m_screenShare = !m_screenShare;if (m_screenShare) {// 获取选择的显示器屏幕int sel = m_cmbScreenRegion.GetCurSel();agora::rtc::Rectangle regionRect = { 0,0,0,0 }, screenRegion = {0,0,0,0};// 获取指定的待共享区域在整个显示器屏幕中的 Rectangle 坐标。// GetMonitorRectangle 方法的具体实现详见示例项目。regionRect = m_monitors.GetMonitorRectangle(sel);// 获取显示器屏幕在虚拟屏幕中的 Rectangle 坐标。GetScreenRect 方法的实现详见示例项目。screenRegion = m_monitors.GetScreenRect();m_monitors.GetScreenRect();// 屏幕共享的编码参数配置ScreenCaptureParameters capParam;// 开始屏幕共享m_rtcEngine->startScreenCaptureByScreenRect(screenRegion, regionRect, capParam);m_btnShareScreen.SetWindowText(screenShareCtrlStopShare);m_btnStartCap.EnableWindow(FALSE);}else {// 停止屏幕共享m_rtcEngine->stopScreenCapture();m_btnShareScreen.SetWindowText(screenShareCtrlShareSCreen);m_btnStartCap.EnableWindow(TRUE);}}

窗口分享

Windows 系统为每个窗口分配一个 windowId,数据类型为 HWND。该 ID 对应唯一的 Windows 窗口。为了兼容 x86 和 x64 系统,使用 view_t 类型。

通过获取该 windowId,我们可以按如下步骤在 Windows 平台上实现窗口共享:

  1. 获取想要共享窗口的 Window ID

BOOL CALLBACK EnumProc(HWND hWnd, LPARAM IParam){// 仅获取可视窗口 ID,忽略弹出窗口及目录窗口LONG IStyle = ::GetWindowLong(hWnd, GWL_STYLE);if ((IStyle&WS_VISIBLE) != 0 && (IStyle&(WAS_POPUP | WA_SYSMENU)) != 0) {HWND window_id = hWnd;}return TRUE;}EnumWindows(&EnumProc, NULL);

  1. 通过 Window ID 共享窗口

// 指定共享的屏幕或窗口RECT rc;ar::rtc::Rectangle rcCap;ar::rtc::Rectangle screenRegion = { rc.left, rc.right, rc.right - rc.left, rc.bottom - rc.top };capParam.dimensions.width = rc.right - rc.left;capParam.dimensions.height = rc.bottom - rc.top;::GetWindowRect(hWnd, &rc);ScreenCaptureParameters capParam;capParam.dimensions.width = rc.right - rc.left;capParam.dimensions.height = rc.bottom - rc.top;VideoContentHint contentHint;ar::rtc::Rect rt;// 开始共享窗口ret = m_lpAREngine->startScreenCaptureByWindowId(hWnd, rcCap, capParam);// 更新屏幕共享编码参数m_lpAREngine->updateScreenCaptureParameters(capParam);// 更新屏幕共享区域m_lpAREngine->updateScreenCaptureRegion(screenRegion);// 设置屏幕共享内容类型m_lpAREngine->setScreenCaptureContentHint(contentHint);// 停止屏幕共享m_lpAREngine->stopScreenCapture();

以上是 Windows 平台屏幕共享介绍,想了解更多平台如 Android iOS 的小伙伴可以点击 anyRTC 文档中心进行查看。

应用场景

上文是对屏幕共享的功能介绍,下面为大家介绍一下屏幕共享的具体应用场景。

在线教育:

适用于大班课、小班课等多种教育场景,老师端可以通过屏幕共享将上课需要的课件,资料共享给学生,让教学变得更加高效,提高效率节省时间。

游戏直播:

游戏主播可以通过实时采集屏幕内容,以直播的方式共享给所有观众,让观众能够以主播同样的视角体验游戏。这样可以提高用户的观看体验,让用户可以有身临其境的感觉。使得用户观看的代入感更强,增加用户的粘性。

视频会议:

主持人可将电脑上的材料共享给远端的与会方,所有人观看屏幕的实时视频流,达到信息共享的目的。主持人不必再提起分发文档,因为参与者可以在演示者的屏幕上看到任何文档或文件,甚至可以要求会议者通过屏幕共享工具的传输功能发送这些文档和文件。

远程演示:

在进行远程协作或操作演示时,可以通过采集屏幕和窗口的内容,直观演示具体操作步骤,帮助他人快速理解。屏幕共享允许的在线演示是组织与客户和客户互动的完美方法。借助屏幕共享应用程序,不仅销售人员可以展示他们的产品,而且他们还可以通过提供PC键盘或鼠标的远程控制来邀请客户体验软件程序等项目。这是屏幕共享工具的最佳好处之一。

在线培训:

通过在线培训中使用屏幕共享工具,组织可以节省大量资金,因为他们不必设置整个投影仪设置并为外部讲座付费。相反,讲师的材料可以通过屏幕共享应用程序从他们的PC屏幕轻松共享,供所有与会者查看。

讲师甚至可以使用这样的屏幕共享功能作为白板或参与者指针来与学员互动,从而形成交互式和娱乐性的学习环境。

除了上述 Windows 的屏幕共享,anyRTC 已经实现了全平台的屏幕共享。Android 端支持屏幕共享采集H264格式的屏幕共享流,很大一定程度上优化了 Android 的性能;iOS 端无缝匹配 Replaykit ;Web 端除了区域采集分享,其他两种分析功能都有对应的 API 调用,更多产品细节,关注 anyRTC。

    推荐阅读
  • 迁安市供热管理中心收费大厅在哪里(迁安市供水服务大厅)

    答:迁安市钢城大街东段路南您可乘坐3路、5路公交车到技术监督局站下车。供热初期缴费用户较多,我中心停车位置有限,请您尽量选择公共交通工具,不要开车前往。依据疫情防控需要,请您到中心收费大厅办理业务的时候,佩戴口罩,配合工作人员进行扫码、测温登记。附:年迁安市取暖费收费标准居民用户17元/平方米;非居民用户30.6元/平方米。

  • 客户经理英文(客户经理的英文是什么)

    我们一起去了解并探讨一下这个问题吧!

  • 教师节的诗句古诗(关于教师节的诗句古诗)

    教师节的诗句古诗奉和令公绿野堂种花唐-白居易绿野堂开占物华,路人指道令公家。令公桃李满天下,何用堂前更种花。此诗运用借代的修辞,以桃李代学生,绿野堂指的是唐代裴度的房子名。这首诗通过写裴度房子不用种花就占尽了万物的精华。表现了对一个老师桃李满天下芳名远播的赞美。春蚕到死丝方尽,蜡炬成灰泪始干。晓镜但愁云鬓改,夜吟应觉月光寒。蓬山此去无多路,青鸟殷勤为探看。

  • 板桥水库面积(板桥水库面积介绍)

    以下内容希望对你有帮助!板桥水库面积板桥水库水域面积为22.62平方公里,周长为77.136公里。控制流域面积768平方公里,总库容6.75亿立方米,兴利库容2.56亿立方米,汛限水位110米,兴利水位111.5米,曾被列入国家“七·五”重点工程项目。

  • 垞怎么读(垞字具体怎么读)

    下面希望有你要的答案,我们一起来看看吧!垞怎么读垞怎么读:垞拼音:。[chá]垞基本释义:小土山:胜垞(在山东)。本意指小丘,又指垞城,在徐州北。部首:土,笔画:9,五行:土,繁体:垞,五笔:FPTA。仓颉:GJHP,郑码:BWMH,电码:0998,笔顺编号:121445315,四角号码:43114,UNICODE:579E。

  • 夸人的10个成语(20个夸人的成语灵活运用)

    我们平时生活中,常常与人交流。掌握一些夸人的成语,适当应用,夸人夸出水平来,既提升自己的口才,也能广交朋友。

  • 2020邯郸义务教育招生工作方案 2020邯郸义务教育招生工作方案解读

    审验备案县级教育行政部门审验资料,对有异议的学生进行复审和调剂,确定各学校录取名单。对有异议的学生,主管教育行政部门结合学生、学校实际调配。丛台区、邯山区、复兴区三区区属初中招生方案由市教育局审批后执行。随机派位招生由审批地教育行政部门统一组织,不得由学校自行组织,全程接受社会监督,随机派位结果即时向社会公开。报名本着学生及家长自愿原则,本地户籍适龄儿童、少年和依法取得居住证的随迁

  • brain corp 融资经历(女性生活时尚类的Buzzfeed)

    关心科技类新闻的直男们可能对Refinery29这个名字还很陌生,这家号称月访问数达3600万的生活时尚网站早在2005年成立,用户们现在平均每月会花360个小时的时间在上面寻觅最新的潮流动向。昨天公司对外宣布获得了5000万美金的D轮融资,由ScrippsNetworksInteractive和WPP领投。WPP是世界上最大的传播集团,总部位于英国伦敦。这也意味着Refinery29已成为新一个获得巨额融资的网络媒介平台。经过不断摸索,最后演变成为了如今全面集成的内容中心。

  • 太原新版卡式居住证中的公交功能是免费开的吗?

    太原市新版卡式居住证开通公交功能,需要本人持此卡到太原市内指定公交IC卡服务网点办理,目前有19个指定网点可办理开通业务,免费开通公交功能,可反复充值使用。开通公交功能后,本卡可在太原市区域互联互通线路及其他互联互通城市指定线路使用。公交集团公司IC卡中心咨询服务电话0351-7232632。

  • 史上最良心的游戏不氪金(推荐几款免费又耐玩的游戏)

    于是《战塔英雄》就出现到了玩家们的眼前。