OMCS Demo -- 实现视频聊天、远程桌面(简化版,PC、安卓、Web、银河麒麟、统信UOS)

      (2023.10.16 新增 Avalonia 客户端,文末可下载)

      《视频聊天 Demo(Win、Linux、Android、Web,支持国产OS)》代码比较多,对于经验不多的开发者来说,了解起来会有些吃力。于是,我们又写了一个更简单地Demo来供大家参考,它可以在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 框架

三.具体实现

      下面我们讲一下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)当同意对方的控制请求时,对方就可以控制请求方的电脑了。

         

四.源码下载

     服务端+PC 端:VideoChatMini.rar  (WPF版、CPF版)、VideoChatMini.Avalonia.rar (Avalonia版)

         Android 端VideoChatMini.Android.rar

              Web 端VideoChatMini.Web.rar (需要安装 OMCS Web 插件 ) 

1. 源码项目说明

     下载【服务端+PC端】源码压缩包,解压后,可以用 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

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

 

下载免费版本的OMCS以及 demo源码

阅读 更多OMCS开发手册系列文章

Q Q:168757008

官网:www.oraycn.com

导航

首页

官方网站

联系我们

立即咨询 

站内搜索

OrayTalk 企业即时通讯系统

傲瑞通官网

详细说明

客户端下载

OrayMeeting 视频会议系统

详细说明

客户端下载

ESFramework 通信框架

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OVCS 视频会议Demo

详细说明

源码下载

傲瑞实用组件

SDK下载

H5Media 纯网页音视频交互

NPusher 推流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持信创国产化

SDK使用技巧

联系我们