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
相关推荐
Linux音视频开发5 天前
Avalonia 实现跨平台的视频会议(Windows、Linux、信创)
信创·avalonia·视频会议·国产os
zhuweisky1 年前
视频会议是如何实现屏幕标注功能的?
视频会议·信创国产·信创视频会议·屏幕标注·屏幕标绘
zhuweisky1 年前
如何实现在服务端录制视频会议?
视频会议·录制会议·信创视频会议
zhuweisky1 年前
实现信创Linux麦克风摄像头录制(源码,银河麒麟、统信UOS)
视频录制·音频录制·信创国产·linux音视频
fangji9991 年前
视频行业(监控,直播,会议,视频通话)痛点,随时接入,异构融合,以OvMeet视频会议为中心解决企业视频应用完美解决方案
音视频·视频汇聚·视频会议·视频融合·视频行业痛点·视频接入
fangji9991 年前
视频汇聚,GB28181,rtsp,rtmp,sip,webrtc,视频点播等多元异构视频融合,视频通话,视频会议交互方案
视频汇聚·视频会议·视频融合·异构视频融合
zhuweisky2 年前
开发视频会议系统:使用GPU解码渲染视频
gpu·视频会议·硬件加速·硬解码渲染
fangji9992 年前
Web端Webrtc,SIP,RTSP/RTMP,硬件端,MCU/SFU融合视频会议系统方案分析
监控·视频会议·融合会议系统·sip终端·web端
fangji9992 年前
MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。
远程协助·视频会议·mcu+sfu·媒体中心·调度中心·视频交互