<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C# 實現 Linux 視頻聊天、遠程桌面(源碼,支持信創國產化環境,銀河麒麟,統信UOS)

             園子里的有朋友在下載并了解了《C# 實現 Linux 視頻會議(源碼,支持信創環境,銀河麒麟,統信UOS)》中提供的源碼后,留言給我說,這個視頻會議有點復雜了,代碼比較多,看得有些費勁。問我能不能整個簡單點的Demo,只要有視頻聊天和遠程桌面的功能就可以。于是,我就又寫了一個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 框架、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)當同意對方的控制請求時,對方就可以控制請求方的電腦了。

               

      四.源碼下載

           源碼下載:(若點擊沒有自動下載,可右鍵另存為) 

           服務端+PC端:VideoChatMini.rar  

               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

             命令執行成功后,就會出現之前截圖的客戶端主界面。

              安卓端的運行界面也差不多,這里就不截圖了,大家可以下載源碼自行運行測試。

              謝謝!

      posted @ 2023-06-26 10:16  Linux音視頻開發  閱讀(6714)  評論(20)    收藏  舉報
      主站蜘蛛池模板: 国产免费午夜福利在线播放| 国产欧美日韩综合精品一区二区 | 国产免费一区二区三区在线观看| 国产人妻精品无码av在线| 国产超碰无码最新上传| 狠狠噜天天噜日日噜无码| 国产精品性色一区二区三区| 真实国产老熟女无套中出| 四虎成人精品无码| 久久这里有精品国产电影网| 欧美做受视频播放| 亚洲精品国产自在现线最新| 四虎精品视频永久免费| 97精品伊人久久久大香线蕉| 国产中文字幕精品免费| 久久精品视频一二三四区| 一区二区亚洲人妻av| 亚洲日韩性欧美中文字幕| 最新亚洲人成网站在线观看| √天堂中文www官网在线| 日本亚洲一区二区精品久久| 亚洲精品中文字幕一二三| 欧美亚洲高清日韩成人| 无码av免费毛片一区二区| 这里只有精品免费视频| 国产成人精品无码专区| 偷拍专区一区二区三区| 亚洲av日韩av永久无码电影| av一区二区中文字幕| 日韩av无码一区二区三区| 成人午夜av在线播放| 国产97人人超碰CAO蜜芽PROM| 亚洲香蕉网久久综合影视| 无码内射成人免费喷射| 亚洲人成人网站色www| 欧美xxxxhd高清| 丰满少妇被猛烈进出69影院| 精品国产中文字幕av| 久久精品国产福利一区二区| 熟女在线视频一区二区三区| 九九热在线精品免费视频|