亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#如何實現(xiàn)監(jiān)控手機(jī)屏幕(附源碼下載)

 更新時間:2020年10月13日 10:27:19   作者:C#開源即時通訊GGTalk  
這篇文章主要介紹了C#如何實現(xiàn)監(jiān)控手機(jī)屏幕(附源碼下載),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

  最近做了一個項目,里面有涉及到監(jiān)控PC桌面和監(jiān)視手機(jī)屏幕的功能,客戶需要在PC電腦上和安卓手機(jī)上都能夠觀看對方的屏幕,而對方的設(shè)備既可以是PC電腦,也可以是安卓手機(jī)。

為了便于以后復(fù)習(xí),我把這個屏幕監(jiān)控的功能單獨提出來做了個Demo名為ScreenMonitor來記錄備忘,順便也分享給大家。

該Demo一個包括3個項目:服務(wù)端、PC客戶端、安卓客戶端。

文末除了將ScreenMonitor整個項目的源碼提供下載,也專門給出了可以直接部署的版本,供大家直接部署測試。

接下來,我將給大家介紹整個功能的實現(xiàn)原理和代碼邏輯,大家可以從文末下載源碼后,對照源碼再來看下面的介紹就會更清晰些?! ?/p>

一.服務(wù)端實現(xiàn)

  服務(wù)端主要用來轉(zhuǎn)發(fā)數(shù)據(jù)(被監(jiān)控的屏幕圖像的編碼數(shù)據(jù)),并不涉及其它復(fù)雜的業(yè)務(wù)邏輯。

這個實現(xiàn)起來很簡單,只需要幾句代碼就OK,它主要做的就是將客戶端的消息的處理與數(shù)據(jù)的轉(zhuǎn)發(fā)。這里不做過多的介紹,其關(guān)鍵核心代碼只有一句,就是創(chuàng)建OMCS多媒體服務(wù)器實例。

復(fù)制代碼 代碼如下:
Program.MultimediaServer = MultimediaServerFactory.CreateMultimediaServer(9900, userVerifier, config, bool.Parse(ConfigurationManager.AppSettings["SecurityLogEnabled"]));

第一個參數(shù)是提供服務(wù)的TCP端口,第二個參數(shù)用于驗證登錄的用戶帳號密碼。服務(wù)端運行界面如下所示:

二.PC客戶端實現(xiàn)

  客戶端中我們也分為了2種身份:控制端、被控端

  我們在登錄時,我們需要初始化多媒體管理器 來連接服務(wù)端進(jìn)行通信,其實也很簡單,我們也只需要調(diào)用一句話就OK。

復(fù)制代碼 代碼如下:
multimediaManager.Initialize(loginForm.CurrentUserID, "", ConfigurationManager.AppSettings["ServerIP"], int.Parse(ConfigurationManager.AppSettings["ServerPort"])); 

1.PC控制端:主要包括遠(yuǎn)程觀看對方的桌面、監(jiān)聽對方的麥克風(fēng) 2個功能

  

  實現(xiàn)中主要是用到了DesktopConnector這個自定義控件,我們也只需簡單的調(diào)用一個BeginConnect 方法就可以直接連接到對方桌面。將控件還提供了2個事件 ConnectEnded、Disconnected 來知道當(dāng)前連接的結(jié)果和狀態(tài)

public DesktopForm(string friendID,bool audioEnabled)
    {
      InitializeComponent();
      
      this.ownerID = friendID;
      this.Text = string.Format("正在訪問{0}的桌面", this.ownerID);     
      this.desktopConnector1.ConnectEnded += new CbGeneric<ConnectResult>(desktopConnector1_ConnectEnded);
      this.desktopConnector1.Disconnected += DesktopConnector1_Disconnected;
      this.desktopConnector1.BeginConnect(this.ownerID);
      if (audioEnabled)
      {
        this.microphoneConnector1.BeginConnect(this.ownerID);
      }
    }

    private void DesktopConnector1_Disconnected(ConnectorDisconnectedType type)
    {
      if (this.InvokeRequired)
      {
        this.BeginInvoke(new CbGeneric<ConnectorDisconnectedType>(this.DesktopConnector1_Disconnected), type);
      }
      else
      {
        if (type == ConnectorDisconnectedType.OwnerActiveDisconnect || type == ConnectorDisconnectedType.GuestActiveDisconnect)
        {
          return;
        }
        MessageBox.Show("斷開連接!原因:" + type);
        this.Close();
      }
    }


    void desktopConnector1_ConnectEnded(ConnectResult result)
    {
      if (this.InvokeRequired)
      {
        this.BeginInvoke(new CbGeneric<ConnectResult>(this.desktopConnector1_ConnectEnded), result);
      }
      else
      {
        if (result != ConnectResult.Succeed)
        {
          MessageBox.Show("連接失敗!" + result.ToString());
        }  
      }
    }

  以下為在PC端遠(yuǎn)程觀看手機(jī)屏幕的截圖: 

2.PC被控端:顯示正在被哪些用戶觀看

三.安卓端實現(xiàn)

   安卓客戶端就與PC客戶端的實現(xiàn)原理差不多了,只是其中一些細(xì)節(jié)不一樣而已

   安卓端同樣也是分為2種身份:監(jiān)控端、被控端

  同PC客戶端一樣我們也要初始化多媒體管理器 來連接服務(wù)端進(jìn)行通信

復(fù)制代碼 代碼如下:
LogonResponse omcsResp = MultimediaManagerFactory.GetSingleton().initialize(id, password, ipaddStr, 9900, getApplication());//登錄OMCS服務(wù)器
1.安卓控制端:功能同PC一樣,可觀看目標(biāo)用戶的屏幕和監(jiān)聽麥克風(fēng)

  這里我們用到了一個自定義組件DesktopSurfaceView 用來顯示對方桌面的圖像 ,我們通過桌面連接器DesktopConnector 去連接對方的桌面將獲取的桌面圖像數(shù)據(jù)用于該組件來顯示

//顯示對方數(shù)據(jù)view  
     DesktopSurfaceView otherView = (DesktopSurfaceView) findViewById(R.id.Desk_surface_remote);
    desktopConnector.setOtherVideoPlayerSurfaceView(otherView);
    desktopConnector.setConnectorEventListener(new IConnectorEventListener() {
      @Override
      public void connectEnded(ConnectResult connectResult) {
        if( connectResult!= ConnectResult.Succeed){
          Message msg = Message.obtain(); // 實例化消息對象
          msg.what = 1; // 消息標(biāo)識
          msg.obj = "遠(yuǎn)程桌面連接失?。? + connectResult.toString(); // 消息內(nèi)容存放
          myHandler.sendMessage(msg);
        }
      }
      @Override
      public void disconnected(ConnectorDisconnectedType connectorDisconnectedType) {
        if(connectorDisconnectedType==ConnectorDisconnectedType.OwnerActiveDisconnect||connectorDisconnectedType==ConnectorDisconnectedType.GuestActiveDisconnect)
        {
          return;
        }
        Message msg = Message.obtain(); // 實例化消息對象
        msg.what = 2; // 消息標(biāo)識
        msg.obj = "遠(yuǎn)程桌面連接斷開:" + connectorDisconnectedType.toString();// 消息內(nèi)容存放
        myHandler.sendMessage(msg);
      }
    });

    desktopConnector.beginConnect(targetUid);

  下圖為手機(jī)監(jiān)控PC桌面 

2.安卓被控端:需要采集本手機(jī)的桌面圖像、麥克風(fēng)聲音發(fā)送給控制方

  核心點在采集本手機(jī)的整個桌面的圖像,這一點在OMCS框架中已經(jīng)為我們處理好了,我們只是需要設(shè)置一下相關(guān)權(quán)限來允許錄制屏幕即可,剩下的事情都可以交給omcs內(nèi)部去處理了。

MultimediaManagerFactory.GetSingleton().setDesktopRecordActivity(this);//this 為當(dāng)前Activity
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    MultimediaManagerFactory.GetSingleton().setDesktopRecordActivityResult(requestCode, resultCode, data);//設(shè)置授權(quán)結(jié)果給多媒體管理器

  }

  當(dāng)控制方請求觀看安卓的桌面時,被控端會彈出如下權(quán)限申請?zhí)崾?,點擊“立即開始”對方就可以開始采集屏幕并將數(shù)據(jù)發(fā)送給 控制方用于顯示。(若勾選了始終允許分享屏幕 的選項,之后控制端請求訪問該被控端時就不會再次彈出權(quán)限的對話框了,可直接看得到該屏幕)

四、ScreenMonitor 源碼下載

1. 項目源碼下載 網(wǎng)盤下載(提取碼:w3mi)

2. 可直接部署版本下載 網(wǎng)盤下載(提取碼:w493)

到此這篇關(guān)于C#如何實現(xiàn)監(jiān)控手機(jī)屏幕(附源碼下載)的文章就介紹到這了,更多相關(guān)C# 監(jiān)控手機(jī)屏幕內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論