2个月前,正式发布的 Avalonia 11 是一个重大更新的版本,它将核心框架、渲染和Skia渲染器都统一到了 .NET 6+ 上,并带来了大量的改进。而且Avalonia 11 内置了高质量的 Fluent 2 风格控件,视觉效果与现代的 Windows 11 应用完全看齐,开箱即用。所以目前来看,.NET 生态中跨平台UI开发,使用 Avalonia 是最有前景的。
之前我使用CPF.NET UI 框架开发了一套跨平台视频会议系统的Demo,能稳定地在Windows和信创系统(银河麒麟、统信UOS)上运行,随着Avalonia的势头越来越猛,现在看来有必要也出一个Avalonia的版本。
Avalonia版本在银河麒麟V10 SP1 上的运行效果如下图所示:
一.开发环境
1.开发工具:
Visual Studio 2022
2.开发框架:
.NET 8.0
3.开发语言:
C#
4.UI 框架:
Avalonia 11.3
二. 视频会议Demo主要功能
1.多人 视频/语音/文字 会话。
(1)视频编码质量根据网络状况动态调节。
(2)优先保证语音质量。
(3)支持回音消除(AEC)、噪音抑制(DENOISE)、自动增益(AGC)、静音检测(VAD) 等语音技术。
(4)支持两种视窗布局风格: 1x1,2x2,3x3 分屏显示。
2.屏幕分享
(1)桌面编码质量根据网络状况动态调节。
(2)房间内任何一个成员都可以共享自己的桌面,其他成员都可以观看该桌面。
(3)共享者可以授权给其他成员来操作自己的桌面。
3.多人协作 电子白板。
(1)支持常用的视图元素、可插入图片、截屏,可将整个白板保存为位图。
(2)提供观看模式和控制模式两种选择。
(3)断线自动重连,始终保持白板内容为最新。
三. 源码项目说明
整个解决方案如下图所示:
解决方案由三个项目组成:
(1)OVCS.Core :是公共类库,用于定义视频会议中服务端和客户端都需要使用到的信息,比如消息协议、公共Entity等。
请特别注意GroupExtension类,该类用于在记录当前会议的状态,如主持人是谁、谁开启了桌面共享、谁开启了电子白板 等。
public class GroupExtension { /// <summary> /// 主持人ID /// </summary> public string ModeratorID { get; set; } /// <summary> /// 正在共享远程桌面的用户ID /// </summary> public string DesktopSharedUserID { get; set; } /// <summary> /// 主持人是否开启白板 /// </summary> public bool IsModeratorWhiteBoardNow { get; set; } }
(2)OVCS.Server:视频会议的服务端,控制台程序,基于.NET 8。
服务端在 CustomizeInfoHandler 类中处理来自客户端的请求消息,特别是 MultimediaServer_CustomizedMessageReceived 事件处理函数中。
CustomizeInfoHandler 的初始化函数定义如下:
public void Initialize(IMultimediaServer server) { this.chatGroupManager = new ObjectManager<string, ChatGroup>(); this.multimediaServer = server; this.multimediaServer.CustomizedMessageReceived += MultimediaServer_CustomizedMessageReceived; this.multimediaServer.UserDisconnected += MultimediaServer_UserDisconnected; this.multimediaServer.SomeoneJoinChatGroup += MultimediaServer_SomeoneJoinChatGroup; }
(3)OVCS.ClientAvalonia:视频会议的客户端,Avalonia实现UI,基于.NET 8。
客户端的视频会议的主要业务在 MainWindow.axaml 中实现,并在 Multimedia_CustomizedMessageReceived 函数中来处理来自服务端的消息。
MainWindow 的初始化函数定义如下:
internal void Initialize(string _roomID) { App.Multimedia.OutputVideo = true; App.Multimedia.SpeakerVoiceNotified += Multimedia_SpeakerVoiceNotified; App.Multimedia.CustomizedMessageReceived += Multimedia_CustomizedMessageReceived; App.Multimedia.ConnectionInterrupted += Multimedia_ConnectionInterrupted; }
四. 源码下载与运行
源码下载:OVCS.Avalonia.rar
(如果需要本Demo的Winform端、WPF端、安卓端或iOS端源码,可以联系我获取)
(1)Windows 运行
先在目标电脑上安装.NET 8.0 Framework,无论是服务端还是客户端,直接将bin\Debug目录下的.net8.0文件夹拷贝到目标电脑上,双击.exe即可。
(2)Linux 或 信创国产OS运行
根据目标电脑的CPU架构类型(比如X64、arm、mips、loongarch),安装对应的.NET 8.0 Framework,无论是服务端还是客户端,直接将bin\Debug目录下的.net8.0文件夹拷贝到目标电脑上,进入.net8.0目录,打开终端,
使用dotnet命令运行。比如运行客户端:
dotnet OVCS.ClientAvalonia.dll
Avalonia构建跨平台视频会议

被折叠的 条评论
为什么被折叠?



