前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 实现 Linux 视频聊天、远程桌面(源码,支持信创国产化环境,银河麒麟,统信UOS)

C# 实现 Linux 视频聊天、远程桌面(源码,支持信创国产化环境,银河麒麟,统信UOS)

作者头像
郑子铭
发布2023-08-30 09:44:34
4161
发布2023-08-30 09:44:34
举报
文章被收录于专栏:DotNet NB && CloudNative

一.功能介绍

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

代码语言:javascript
复制
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)当发起视频聊天时,将显示视频聊天窗口
代码语言:javascript
复制
/// <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)连接自己的摄像头并发送视频通话请求
代码语言:javascript
复制
/// <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)发送回复视频聊天请求消息

代码语言:javascript
复制
/// <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. 收到对方视频请求的回复

代码语言:javascript
复制
/// <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();
  }
}

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

代码语言:javascript
复制
/// <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)当同意对方的控制请求时,对方就可以控制请求方的电脑了。

四.源码下载

源码下载:(若点击没有自动下载,可右键另存为)

服务端+PC端:http://www.oraycn.com/DownLoadFiles/OMCS/VideoChatMini.rar Android端:http://www.oraycn.com/DownLoadFiles/OMCS/VideoChatMini.Android.rar

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.功能介绍
    • 1. 视频聊天
      • 2. 远程桌面
      • 二.开发环境
        • 1.开发工具:
          • 2. 开发框架:
            • 3.开发语言:
              • 4.其它框架:
              • 三.具体实现
                • 1.自定义消息类型 InformationTypes
                  • 2. 发送视频请求
                    • (1)当发起视频聊天时,将显示视频聊天窗口
                    • (2)连接自己的摄像头并发送视频通话请求
                • 3. 回复对方视频请求
                  • (1)当收到对方的视频聊天邀请时,将显示视频邀请窗口
                    • (2)发送回复视频聊天请求消息
                    • 4. 收到对方视频请求的回复
                    • 5. 实现远程桌面
                      • (1)当收到对方的远程桌面控制请求时,将显示请求窗口。
                        • (2)当同意对方的控制请求时,对方就可以控制请求方的电脑了。
                        • 四.源码下载
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档