龙空技术网

C# 实现 Linux 视频聊天、远程桌面源码(支持信创国产化环境)

IT技术资源爱好者 227

前言:

现在兄弟们对“centos7安装dia”大约比较关心,你们都想要学习一些“centos7安装dia”的相关文章。那么小编同时在网摘上搜集了一些关于“centos7安装dia””的相关知识,希望兄弟们能喜欢,同学们一起来学习一下吧!

今天给大家分享一款利用C# 实现 Linux 视频聊天、远程桌面源码(支持信创国产化环境,银河麒麟,统信UOS)的系统源码,它可以在Windows和Linux(包括国产OS,如银河麒麟、统信UOS、深度Deepin等)上运行。

下图是在银河麒麟V10上运行的截图:

一.功能介绍1. 视频聊天

(1)每个登录的用户都可向其他任意在线用户发送视频聊天请求。

(2)当收到来自其他在线用户的视频聊天邀请时,可接受或拒绝对方的请求。

(3)当接受其他在线用户的视频聊天邀请时,即可开启视频聊天。

2. 远程桌面

(1)每个登录的用户都可向其他任意在线用户发送远程桌面请求;当对方未响应时,可主动取消远程桌面请求。

(2)当收到来自其他在线用户请求控制桌面时,可接受或拒绝对方的请求。

(3)当发送方收到其他在线用户同意控制其电脑时,即可开启远程桌面连接。

(4)被控端和主控端都可主动断开远程桌面连接。

二.开发环境

1.开发工具:

Visual Studio 2022

2. 开发框架:

.NET Core 3.1,.NET 6,.NET 7

3.开发语言:

C#

4.其它框架:

CPF.net UI 框架、OMCS 语音视频框架

三.具体实现

下面我们讲一下Demo中核心的代码实现,大家从文末下载源码并对照着源码看,会更清楚些。

1.自定义消息类型 InformationTypes

        public static class InformationTypes    {        /// <summary>                /// 视频请求 0        /// </summary>        public const int VideoRequest = 0;        /// <summary>                /// 回复视频请求的结果 1        /// </summary>        public const int VideoResult = 1;        /// <summary>                /// 通知对方 挂断 视频连接 2        /// </summary>        public const int CloseVideo = 2;        /// <summary>        /// 通知好友 网络原因,导致 视频中断 3        /// </summary>        public const int NetReasonCloseVideo = 3;        /// <summary>        /// 通知对方(忙线中) 挂断 视频连接 4        /// </summary>        public const int BusyLine = 4;        /// <summary>                /// 远程桌面请求 5        /// </summary>        public const int DesktopRequest = 5;        /// <summary>                /// 回复远程桌面请求的结果 6        /// </summary>        public const int DesktopResult = 6;        /// <summary>                ///  主动取消远程桌面请求 7        /// </summary>        public const int CancelDesktop = 7;        /// <summary>                ///  对方(主人端)主动断开远程桌面 8        /// </summary>        public const int OwnerCloseDesktop = 8;        /// <summary>                /// 客人端断开远程桌面连接 9        /// </summary>        public const int GuestCloseDesktop = 9;    } 
2. 发送视频请求

(1)当发起视频聊天时,将显示视频聊天窗口  

/// <summary>/// 显示视频聊天窗口/// </summary>/// <param name="wait">true表示自己为发送端</param>public void RequestVideo(bool wait){  if (videoChat == null)  {    videoChat = DoCreateVideoChatForm(wait);  }  videoChat.Show();  IMultimediaManager mgr = MultimediaManagerFactory.GetSingleton();  if (mgr == null)  {    CommonHelper.ShowToolTip("无法启动多媒体设备!");    ClearVideoChat();    return;  }  this.videoChat.Initialize(mgr);  this.videoChat.SendVideoRequest(wait);}

(2)连接自己的摄像头并发送视频通话请求

/// <summary>/// 发送视频通话请求/// </summary>/// <param name="isSend">是否为发送者</param>internal void SendVideoRequest(bool isSend){  this.StackPanel_Camera_myself.Visibility = Visibility.Visible;  this.dynamicCameraConnector_myself.ConnectEnded += DynamicCameraConnector_myself_ConnectEnded;  this.dynamicCameraConnector_myself.SetViewer(this.image_camera_myself);  this.dynamicCameraConnector_myself.BeginConnect(this.currentUserID);  if (isSend)  {    this.time_tip.Content = "正在等待对方回复";    App.multimediaManager.SendCustomizedMessage(this.friendID, InformationTypes.VideoRequest,null, null);  }}   
3. 回复对方视频请求

(1)当收到对方的视频聊天邀请时,将显示视频邀请窗口

(2)发送回复视频聊天请求消息

/// <summary>/// 是否同意视频聊天请求/// </summary>/// <param name="isReceive">true表示同意,false表示拒绝</param>private void ReplyVideoRequest(bool isReceive){  try  {    byte[] vs = BitConverter.GetBytes(isReceive);    App.multimediaManager.SendCustomizedMessage(this.friendId, InformationTypes.VideoResult, vs,null);    if (isReceive)    {      App.mainWindow.RequestVideo(false);      App.mainWindow.SetCurrentVideo(this.friendId);    }    else    {      CommonHelper.ShowToolTip("已拒绝对方视频通话邀请");    }    Close4BtnClick = true;    App.mainWindow.ClearVideoRequest();  }  catch(Exception e)  {    LoginWindow.FileAgileLogger.Log(e, "VideoRequestWindow.ReplyVideoRequest", ESBasic.Loggers.ErrorLevel.Standard);  }} 
4. 收到对方视频请求的回复
/// <summary>/// 视频请求,收到对方回复/// </summary>/// <param name="OtherIsAgree">true表示同意,false表示拒绝</param>internal void SendVideoRequestResult(bool OtherIsAgree){  if (OtherIsAgree)  {    this.OnAgree(this.friendID);    App.mainWindow.SetCurrentVideo(this.friendID);  }  else  {    CommonHelper.ShowToolTip("对方拒绝与您进行视频通话");    App.mainWindow.ClearVideoChat();  }}

当对方回复同意时,将连接到对方的麦克风和摄像头,开始视频聊天会话:

/// <summary>/// 对方同意视频会话/// </summary>public void OnAgree(string destLoginID){  try  {     startTime = DateTime.Now;    timer.Start();    this.friendLoginID = destLoginID != null? destLoginID: this.friendName;    this.lab_title.Content = string.Format("正在和{0}视频会话", this.friendName);    this.dynamicCameraConnector1.BeginConnect(this.friendLoginID);    this.microphoneConnector1.BeginConnect(this.friendLoginID);    this.microphoneConnector1.ConnectEnded += MicrophoneConnector1_ConnectEnded;    this.dynamicCameraConnector1.ConnectEnded += DynamicCameraConnector1_ConnectEnded;    this.dynamicCameraConnector1.Disconnected += DynamicCameraConnector1_Disconnected;    this.dynamicCameraConnector1.SetViewer(this.image_camera_other);  }  catch (Exception ee){}}

5. 实现远程桌面

远程桌面的请求/应答逻辑几乎与视频聊天请求/应答逻辑是一模一样的。这里就不再罗列响应的代码了。

(1)当收到对方的远程桌面控制请求时,将显示请求窗口。

(2)当同意对方的控制请求时,对方就可以控制请求方的电脑了。

四.源码下载及说明1. 源码项目说明

下载源码压缩包,解压后,可以用 VS2022 打开解决方案,其中主要包括了如下几个项目:

(1) Oraycn.Demos.VideoChatMini.ClientWPF:视频聊天Windows 客户端(WPF版本)

(2) Oraycn.Demos.VideoChatMini.Server:视频聊天 Windows 服务端

(3) Oraycn.Demos.VideoChatMini.LinuxClient:视频聊天 Linux 客户端

(4) Oraycn.Demos.VideoChatMini.LinuxServer:视频聊天 Linux 服务端

注: Linux客户端内置的是x86/x64非托管so库,若需要其它架构的so,请联系QQ:2027224508 获取。

2. 在Linux上部署运行说明

在部署之前,需要在linux服务端和客户端上分别安装 .Net core 3.1版本,命令行安装命令如下:

yum install dotnet-sdk-3.1

检查版本安装情况

 dotnet --version

运行:

(1)在CentOS上启动Oraycn.Demos.VideoChatMini.LinuxServer服务端:

  拷贝Oraycn.Demos.VideoChatMini.LinuxServer项目下的Debug文件夹,到CentOS操作系统上,打开Debug -> netcoreapp3.1目录 ,在目录下打开终端,执行以下命令启动服务端

dotnet Oraycn.Demos.VideoChatMini.LinuxServer.dll

(2)在麒麟或统信UOS、Ubuntu上运行Oraycn.Demos.VideoChatMini.LinuxClient客户端:

  拷贝Oraycn.Demos.VideoChatMini.LinuxClient项目下的Debug文件夹,到麒麟或统信UOS、Ubuntu操作系统上,打开Debug -> netcoreapp3.1目录 ,在目录下打开终端,执行以下命令启动客户端

dotnet Oraycn.Demos.VideoChatMini.LinuxClient.dll

命令执行成功后,就会出现之前截图的客户端主界面。

3. 源码获取

关注+转发+私信【VideoChatMini

标签: #centos7安装dia #ubuntudia使用