Avalonia 实现视频会议(支持信创),可与Android、iOS互通

Avalonia 在跨平台上的表现非常出色,对信创国产操作系统(像银河麒麟、统信UOS、Deepin等)也很不错。特别是刚发布的Avalonia 11,其内置了高质量的 Fluent 2​ 风格控件,视觉效果与现代的 Windows 11 应用完全看齐,开箱即用。所以目前来看,.NET 生态中跨平台UI开发,使用 Avalonia 是最有前景的。

之前我使用CPF.NET UI 框架开发了一套跨平台视频会议系统的Demo,能稳定地在Windows和信创系统(银河麒麟、统信UOS)上运行,随着Avalonia的势头越来越猛,现在看来有必要也出一个Avalonia的版本。该Avalonia版本视频会议Demo仍然可以与之前的Android端、iOS端互通的。

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类,该类用于在记录当前会议的状态,如主持人是谁、谁开启了桌面共享、谁开启了电子白板 等。

cs 复制代码
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 的初始化函数定义如下:

cs 复制代码
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 的初始化函数定义如下:

cs 复制代码
internal void Initialize(string _roomID)
{
    App.Multimedia.OutputVideo = true;
    App.Multimedia.SpeakerVoiceNotified += Multimedia_SpeakerVoiceNotified;
    App.Multimedia.CustomizedMessageReceived += Multimedia_CustomizedMessageReceived;
    App.Multimedia.ConnectionInterrupted += Multimedia_ConnectionInterrupted;
}

四. 源码下载与运行

服务端 + Avalonia 客户端源码:OVCS.Avalonia.rar

安卓端源码:OVCS_Android.rar (开发环境为 Android Studio 4.0+ )

iOS 端源码:OVCS-iOS.zip (开发环境为 XCode 11+ )

(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命令运行。比如运行客户端:

bash 复制代码
dotnet OVCS.ClientAvalonia.dll
相关推荐
西部秋虫20 天前
迷你视频会议系统(FlashMeeting)
opencv·ffmpeg·视频会议·回声抑制
飞鸟真人2 个月前
livekit搭建与使用浏览器测试
直播·视频会议·视频聊天·livekit
Linux音视频开发3 个月前
Avalonia 实现跨平台的视频会议(Windows、Linux、信创)
信创·avalonia·视频会议·国产os
zhuweisky1 年前
视频会议是如何实现屏幕标注功能的?
视频会议·信创国产·信创视频会议·屏幕标注·屏幕标绘
zhuweisky1 年前
如何实现在服务端录制视频会议?
视频会议·录制会议·信创视频会议
zhuweisky2 年前
实现信创Linux麦克风摄像头录制(源码,银河麒麟、统信UOS)
视频录制·音频录制·信创国产·linux音视频
fangji9992 年前
视频行业(监控,直播,会议,视频通话)痛点,随时接入,异构融合,以OvMeet视频会议为中心解决企业视频应用完美解决方案
音视频·视频汇聚·视频会议·视频融合·视频行业痛点·视频接入
fangji9992 年前
视频汇聚,GB28181,rtsp,rtmp,sip,webrtc,视频点播等多元异构视频融合,视频通话,视频会议交互方案
视频汇聚·视频会议·视频融合·异构视频融合
zhuweisky2 年前
开发视频会议系统:使用GPU解码渲染视频
gpu·视频会议·硬件加速·硬解码渲染