視頻會議是如何實現屏幕標注功能的?

現在主流的視頻會議軟件都有屏幕標注功能,屏幕標注功能給屏幕分享者講解分享內容時提供了極大的方便。那我們以傲瑞視頻會議(OrayMeeting)為例,來講解屏幕標注是如何實現的。

傲瑞會議的PC端(Windows、信創Linux、銀河麒麟、統信UOS)在分享自己的屏幕時,可在屏幕上進行標注、繪制功能。如下圖,是傲瑞會議在銀河麒麟V10SP1上演示的屏幕標注功能:

屏幕標注的工具有:自由曲線(涂鴉)、箭頭、矩形、圓和橢圓、文本。并且可設置它們的顏色、線條粗細、字體大小。

那么,這樣的屏幕標注功能是怎么實現的了?

細想一下,這個屏幕標注實際上就像是一個可以在上面繪制涂鴉的電子白板,只要將電子白板的背景設置為透明,然后,重新定義其工具欄就可以了。而我們的OMCS實時音視頻框架內置了電子白板的功能,所以,可以直接使用OMCS來實現標注功能。

為了方便講解其代碼層面是如何實現的,我們在OMCS入門demo的白板功能(使用WhiteBoardConnector
)演示的窗口上,增加一個動態桌面連接器(DynamicDesktopConnector),并預定動態桌面連接器相關事件。

           public WhiteBoardForm(string _ownerID){InitializeComponent();this.whiteBoardConnector1.WatchingOnly = false;this.ownerID = _ownerID;this.Text = string.Format("正在訪問{0}的電子白板", this.ownerID);// 需要在設計界面將電子白板連接器的背景改為透明(屬性已修改)this.whiteBoardConnector1.ConnectEnded += new CbGeneric<ConnectResult>(whiteBoardConnector1_ConnectEnded);this.whiteBoardConnector1.BeginConnect(this.ownerID);        this.dynamicDesktopConnector1.ConnectEnded += new CbGeneric<ConnectResult>(DynamicDesktopConnector1_ConnectEnded);        // 將動態桌面連接器控件設置在當前窗口this.dynamicDesktopConnector1.SetViewer(this);this.dynamicDesktopConnector1.BeginConnect(this.ownerID);        }private void DynamicDesktopConnector1_ConnectEnded(ConnectResult obj){if (this.InvokeRequired){this.BeginInvoke(new CbGeneric<ConnectResult>(this.DynamicDesktopConnector1_ConnectEnded), obj);}else{if (obj != ConnectResult.Succeed){MessageBox.Show("連接失敗!" + obj.ToString());}          }}

在Demo的UI上點擊開始“遠程桌面(標繪)”按鈕時,我們開始初始化電子白板連接器及動態桌面連接器,連接到目標會議室的房間ID。

這里有幾點要注意一下:

(1)電子白板連接器控件的背景色 BackgroundColor 要設置成透明。

(2)必須要使用DynamicDesktopConnector組件,而不能使用DesktopConnector控件。

(3)DynamicDesktopConnector組件所使用的顯示屏幕圖像的Viewer必須是Form,而不能是Control,否則,電子白板連接器控件的背景透明就無法實現(可能是WinForm的限制)。

(4)所以,UI的整體結構層次是:底層是Form(DynamicDesktopConnector使用該Form的表面來繪制屏幕圖像),上層是WhiteBoardConnector控件,背景透明,用于實現標注。

上面的這個Demo已經比較具體的說明了屏幕標注功能的代碼實現,傲瑞視頻會議的屏幕標繪功能也正是基于同樣的思路實現的,只不過其不僅僅支持Windows,同時也適配了信創操作系統,包括銀河麒麟、統信UOS等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64250.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Framework開發入門(一)之源碼下載

一、使用Linux操作系統的小伙伴可以跳轉到官網鏈接按提示操作 官網源碼地址&#xff1a;下載源代碼 | Android Open Source Project 1.創建一個空目錄來存放您的工作文件。為其指定一個您喜歡的任意名稱&#xff1a; mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …

改進爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一種局部搜索算法,它結合了隨機性和貪婪搜索的特點,是對爬山算法(Hill Climbing Algorithm)的一種變體或擴展。與傳統的爬山法不同,PHC不是總是選擇最優的鄰居作為下一步的移動,而是以一定的概率選擇最優鄰居,同時以一…

Unity中實現人物殘影效果

今天火柴人聯盟3公測了&#xff0c;看到一個殘影的效果&#xff0c;很有意思&#xff0c;上網查詢了一下實現方式&#xff0c; 實現思路&#xff1a; 將角色的網格復制出來&#xff0c;然后放置到新建的物體的MeshFilter組件上&#xff0c;每隔幾十毫秒在玩家的位置生成一個&a…

C#實現調用DLL 套殼讀卡程序(桌面程序開發)

背景 正常業務已經支持 讀三代卡了&#xff0c;前端調用醫保封裝好的服務就可以了&#xff0c;但是長護要讀卡&#xff0c;就需要去訪問萬達&#xff0c;他們又搞了一套讀卡的動態庫&#xff0c;為了能夠掉萬達的接口&#xff0c;就需要去想辦法調用它們提供的動態庫方法&…

自動擋有什么優勢

自動擋汽車相比手動擋汽車具有多方面的優勢&#xff0c;以下是對這些優勢的詳細闡述&#xff1a; 一、操作簡便性 無需手動換擋&#xff1a;自動擋汽車不需要駕駛員手動操作離合器和換擋桿&#xff0c;只需通過油門和剎車踏板來控制車速&#xff0c;大大降低了駕駛難度。這使…

菜鳥帶新鳥——基于EPlan2022的部件庫制作(3D)

設備邏輯的概念&#xff1a; 可在布局空間 中和其它對象上放置對象。可將其它對象放置在 3D 對象上。已放置的對象分到組件的邏輯結構中。 將此屬性的整體標識為設備邏輯。可使用不同的功能創建和編輯設備邏輯。 設備的邏輯定義 定義 / 旋轉 / 移動 / 翻轉&#xff1a;組…

小程序基礎 —— 07 創建小程序項目

創建小程序項目 打開微信開發者工具&#xff0c;左側選擇小程序&#xff0c;點擊 號即可新建項目&#xff1a; 在彈出的新頁面&#xff0c;填寫項目信息&#xff08;后端服務選擇不使用云服務&#xff0c;開發模式為小程序&#xff0c;模板選擇為不使用模板&#xff09;&…

Android Java 版本的 MSAA OpenGL ES 多重采樣

最近多次被小伙伴問到 OpenGL 多重采樣&#xff0c;其實前面文章里多次講過了&#xff0c;就是構建2個緩沖區&#xff0c;多重采樣緩沖區和目標解析緩沖區。 代碼流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…

Markdown語法字體字號講解

學習目錄 語法詳解改變字體樣式[電腦要自帶該樣式字體]改變局部字號全局字體字號的設置使用場景及應用實例 > 快來試試吧&#x1f603; &#x1f447; &#x1f447; &#x1f448;點擊該圖片即可跳轉至Markdown學習網站進行 Markdown語法字體字號講解&#x1f448;點擊這里…

Spring boot處理跨域問題

Spring boot處理跨域問題 方案一方案二推薦解決方案注意 方案一 實現WebMvcConfigurer的addCorsMappings方法 Configuration public class InterceptorConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMappin…

TOTP雙因素認證(2FA)php簡單實現

TOTP身份驗證的工作原理基于時間戳和密鑰。用戶需要在設置階段將密鑰與相應的身份驗證器進行綁定。通常&#xff0c;用戶會在需要使用TOTP動態驗證碼的APP或網站上獲得一個密鑰&#xff0c;然后將該密鑰添加到TOTP驗證器工具上。驗證器會根據當前的時間戳和密鑰生成一個一次性密…

day21——web自動化測試(3)Unittest+Selenium實戰小案例

【沒有所謂的運氣&#x1f36c;&#xff0c;只有絕對的努力?】 目錄 今日目標&#xff1a; 1、UnitTest框架 2、UnitTest 核心用例 2.1 TestCase 2.2 TestSuite 2.3 TestRunner 2.4 TestLoader 2.5 TestLoader 與 TestSuite的區別 2.6 Fixture 3、斷言 3.1 1230…

【Flink運行時架構】系統構架

SMP架構 數據處理系統的架構最簡單的實現方式就是單節點&#xff0c;但是隨著數據量的增大&#xff0c;為了使單節點的機器性能更加強大&#xff0c;需要增加CPU數量和加大內存來提高吞吐量。這就是所謂的SMP(Symmetrical Multi Processing,對稱多處理)架構。 但是這種架構帶來…

CountDownLatch應用舉例

定義 CountDownLatch是juc下的一個多線程鎖&#xff0c;下面是jdk對它的定義 A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. 翻譯如下 一種同步輔助工具&#xff0c;允許一個或多個…

ADC(二):外部觸發

有關ADC的基礎知識請參考標準庫入門教程 ADC&#xff08;二&#xff09;&#xff1a;外部觸發 1、TIM1的CC1事件觸發ADC1DMA重裝載2、TIM3的TRGO事件(的更新事件)觸發ADC1DMA重裝載3、TIM3的TRGO事件(的捕獲事件)觸發ADC1DMA重裝載4、優化TIM3的TRGO事件(的捕獲事件)觸發ADC1D…

磁盤分區格式

MBR和GPT ?磁盤分區形式主要有兩種&#xff1a;MBR和GPT。?? MBR&#xff08;Master Boot Record&#xff09; MBR是一種較舊的分區形式&#xff0c;首次引入于1983年的IBM PC DOS 2.0。它位于驅動器的第一個扇區&#xff0c;包含460字節的引導代碼、64字節的磁盤分區表和…

幾個支持用戶名密碼的代理鏈工具: glider, gost, proxychains+microsocks

幾個支持用戶名密碼的代理鏈工具: glider, gost, proxychainsmicrosocks gost -L:7777 -Fsocks5://192.168.2.20:7575 -Fsocks5://user:passwd1.1.1.1:10086 -Dgost&#xff1a;(https://github.com/ginuerzh/gost) 參考 https://www.quakemachinex.com/blog/279.html

量子退火與機器學習(1):少量數據求解未知QUBO矩陣,以少見多

文章目錄 前言ー、復習QUBO&#xff1a;中藥配伍的復雜性1.QUBO 的介入&#xff1a;尋找最佳藥材組合 二、難題&#xff1a;QUBO矩陣未知的問題1.為什么這么難&#xff1f; 三、稀疏建模(Sparse Modeling)1. 欠定系統中的稀疏解2. L1和L2的選擇&#xff1a; 三、壓縮感知算法(C…

【連續學習之SSL算法】2018年論文Selfless sequential learning

1 介紹 年份&#xff1a;2018 期刊&#xff1a; arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一種名為SLNID&#xff08;Sparse coding through Local Neural Inhibition and…

關于SNAT、DNAT及浮動地址

SNAT、DNAT SNAT、DNAT就是實現代理的功能。 SNAT 類似于客戶端代理&#xff1a;內網主機通過共享公網 IP 地址訪問外部服務。DNAT 類似于服務端代理&#xff1a;外部請求通過公網 IP 轉發到內網主機上的服務。 沒有大網地址的內部主機想要作為客戶端訪問外部網絡&#xff08;主…