国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于視頻監(jiān)控繪圖的二次編解碼方法及其裝置的制作方法

      文檔序號:7854189閱讀:194來源:國知局
      專利名稱:基于視頻監(jiān)控繪圖的二次編解碼方法及其裝置的制作方法
      技術(shù)領(lǐng)域
      本申請涉及一種基于視頻監(jiān)控繪圖的二次編解碼方法及其裝置,尤其涉及視頻監(jiān)控領(lǐng)域中基于視頻監(jiān)控繪圖的二次編解碼方法及其裝置。
      背景技術(shù)
      當(dāng)前,當(dāng)在視頻監(jiān)控系統(tǒng)中進(jìn)行不同廠商的平臺(以下簡稱不同平臺,并且這里所謂的平臺包括硬件和運(yùn)行于該硬件之上的軟件)的互聯(lián)時(shí),圖像數(shù)據(jù)的接入方法通常是由一廠商提供SDK (軟件開發(fā)工具包)把該廠商的平臺的碼流回調(diào)給另一廠商的設(shè)備,其中,回調(diào)的碼流通常有三種形式1、解碼后的原始碼流,數(shù)據(jù)量太大,不利于網(wǎng)絡(luò)傳輸,必須要作轉(zhuǎn)換;2、解碼前的外廠商私有碼流,可以不轉(zhuǎn)換,但需要在用戶端調(diào)用外廠商提供的解碼器進(jìn)行解碼;3、解碼前的標(biāo)準(zhǔn)碼流,不用轉(zhuǎn)換,可以直接支持。
      圖I示例性示出了一種現(xiàn)有技術(shù)的視頻監(jiān)控系統(tǒng)中不同平臺互聯(lián)的示意圖。如圖I中所示,現(xiàn)有技術(shù)的視頻監(jiān)控系統(tǒng)例如包括A平臺1、A平臺SDK 3、B平臺接入網(wǎng)關(guān)(以下簡稱網(wǎng)關(guān))4和B平臺6。當(dāng)A平臺I與B平臺6進(jìn)行互聯(lián)時(shí),A平臺SDK 3把A平臺的碼流(以下簡稱A碼流)2回調(diào)給網(wǎng)關(guān)4,網(wǎng)關(guān)4將A碼流2進(jìn)行二次編解碼后轉(zhuǎn)換成B平臺的碼流(以下簡稱B碼流)5,從而能夠輸出到B平臺6。圖I所示的不同平臺互聯(lián)的方法是目前視頻監(jiān)控系統(tǒng)中不同平臺互聯(lián)的一種典型的常用方法。但是,由于視頻監(jiān)控設(shè)備無通用的行業(yè)標(biāo)準(zhǔn),某些廠商提供的SDK沒有碼流獲取接口,而是直接把其平臺輸出的圖像繪制到顯示設(shè)備的窗口(以下簡稱窗口,未示出,并且這里的窗口包括顯示器窗口和對應(yīng)于該顯示器窗口的軟件模塊)上,即直接在窗口上繪圖,從而導(dǎo)致其他平臺無法與其進(jìn)行互聯(lián)。例如,A平臺I不提供碼流回調(diào),B平臺6就無法接入A平臺I的碼流。

      發(fā)明內(nèi)容
      為了解決上述技術(shù)問題,本申請?zhí)峁┝艘环N基于視頻監(jiān)控繪圖的二次編解碼方法,包括截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口 ;通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致;確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。通過Detours,調(diào)用所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接□。通過所述接口替換庫,調(diào)用安排在一個(gè)動態(tài)鏈接庫中的所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。所述自定義繪圖函數(shù)被調(diào)用后,從去往所截獲的系統(tǒng)繪圖API或COM接口的參數(shù)中提取出所述第一平臺的碼流。在通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流的同時(shí)繪制對應(yīng)于所述第一平臺的碼流的圖像。在未確定所述目標(biāo)窗口的情況下,不提取所述第一平臺的碼流。本申請還提供了一種基于視頻監(jiān)控繪圖的二次編解碼裝置,包括截獲模塊,用于截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口 ;替換模塊,用于通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致;提取模塊,用于確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及發(fā)送模塊,用于將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。、
      所述替換模塊,用于通過Detours,調(diào)用所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。所述替換模塊,用于通過所述接口替換庫,調(diào)用安排在一個(gè)動態(tài)鏈接庫中的所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。所述提取模塊,用于所述自定義繪圖函數(shù)被調(diào)用后,從去往所截獲的系統(tǒng)繪圖API或COM接口的參數(shù)中提取出所述第一平臺的碼流。所述提取模塊,用于在通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流的同時(shí)繪制對應(yīng)于所述第一平臺的碼流的圖像。所述提取模塊,用于在未確定所述目標(biāo)窗口的情況下,不提取所述第一平臺的碼流。經(jīng)過驗(yàn)證,本申請的基于繪圖的二次編解碼方法及其裝置在進(jìn)行不同廠商的視頻監(jiān)控平臺的互聯(lián)時(shí),如果不提供碼流回調(diào)接口,同樣可以獲取到各廠商的視頻監(jiān)控平臺的碼流,從而實(shí)現(xiàn)不同廠商的視頻監(jiān)控平臺的互聯(lián)。


      下面將參照所附附圖來描述本申請的實(shí)施例,其中圖I示例性示出了一種現(xiàn)有技術(shù)的視頻監(jiān)控系統(tǒng)中不同平臺互聯(lián)的示意圖;圖2示例性示出了根據(jù)本申請的視頻監(jiān)控系統(tǒng)中不同平臺互聯(lián)的實(shí)施例的示意圖;以及圖3示例性示出了根據(jù)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法的實(shí)施例的流程圖。
      具體實(shí)施例方式下面將結(jié)合圖2和圖3詳細(xì)描述本申請的基于繪圖的二次編解碼方法及其裝置。圖2示例性示出了根據(jù)本申請的視頻監(jiān)控系統(tǒng)中不同平臺互聯(lián)的實(shí)施例的示意圖。如圖2中所示,根據(jù)本申請的視頻監(jiān)控系統(tǒng)例如除了包括圖I中所示的A平臺I、A平臺SDK 3、網(wǎng)關(guān)4和B平臺6之外,還包括截獲替換模塊7。其中,截獲替換模塊7包括接口替換庫8和用戶自定義的繪圖函數(shù)(以下簡稱自定義繪圖函數(shù))9,其中用戶自定義繪圖函數(shù)9可以包含在一個(gè)用戶自定義的自定義DLL (動態(tài)鏈接庫)10中,如圖2所示。接口替換庫8例如可以是Detours, Detours是微軟研究院提供的一套替換系統(tǒng)API (應(yīng)用程序編程接口)或COM (組件對象模型)接口的函數(shù)庫,可以把系統(tǒng)API或COM接口替換為用戶自己提供的接口函數(shù),例如本申請的自定義繪圖函數(shù)9。例如,當(dāng)把原有的系統(tǒng)繪圖API替換為自定義繪圖函數(shù)9后,則在調(diào)用該系統(tǒng)繪圖API時(shí),系統(tǒng)就會自動調(diào)用自定義的繪圖函數(shù)9,而不是調(diào)用該系統(tǒng)繪圖API。當(dāng)A平臺SDK 3要在一個(gè)或多個(gè)窗口(未示出)上顯示圖像時(shí),原本會調(diào)用用于圖像顯示的系統(tǒng)繪圖API或COM接口,然而,由于本申請的截獲替換模塊7被安排來截獲系統(tǒng)繪圖API或COM接口,因此,只要A平臺SDK 3進(jìn)行繪圖,就會被截獲替換模塊7安排為通
      過接口替換庫8調(diào)用自定義繪圖函數(shù)9,于是自定義繪圖函數(shù)9就可以根據(jù)原本打算去往相應(yīng)的系統(tǒng)繪圖API或COM接口的參數(shù)來提取A平臺I輸出的A碼流2。其中,系統(tǒng)繪圖API或COM接口的替換只對當(dāng)前進(jìn)程有效,也就是說,只在進(jìn)行系統(tǒng)繪圖API或COM接口替換的進(jìn)程內(nèi)有效,不會影響到系統(tǒng)其它進(jìn)程。如圖2中所示,例如A平臺SDK 3沒有碼流獲取接口,通常只能直接把A平臺I輸出的圖像繪制到窗口上,即A平臺I與B平臺6不能進(jìn)行互聯(lián)。然而,在本申請的安排中,為了使A平臺I與B平臺6能夠進(jìn)行互聯(lián),安排了截獲替換模塊7。在進(jìn)行繪圖時(shí),截獲替換模塊7中的接口替換庫8截獲A平臺SDK 3打算調(diào)用的系統(tǒng)繪圖API或COM接口,并將A平臺SDK 3打算調(diào)用的系統(tǒng)繪圖API或COM接口替換為自定義繪圖函數(shù)9。自定義繪圖函數(shù)9從A平臺SDK 3原本打算去往系統(tǒng)繪圖API或COM接口的參數(shù)中提取出A碼流2,并將A碼流2轉(zhuǎn)發(fā)給網(wǎng)關(guān)4以進(jìn)行二次編解碼,從而實(shí)現(xiàn)把A平臺I的A碼流2輸出到B平臺6,即實(shí)現(xiàn)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法。結(jié)合圖2,圖3示例性示出了根據(jù)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法的實(shí)施例的流程圖。具體地,根據(jù)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法包括如下步驟首先,在步驟S100,本發(fā)明的截獲替換模塊7截獲A平臺I的A平臺SDK 3打算調(diào)用的系統(tǒng)繪圖API或COM接口。然后,在步驟SI 10,本發(fā)明的截獲替換模塊7通過接口替換庫8,調(diào)用自定義DLL10中的自定義繪圖函數(shù)9來替換所截獲的系統(tǒng)繪圖API或COM接口,其中自定義繪圖函數(shù)9的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致。以系統(tǒng)API StretchDIBits為例,自定義繪圖函數(shù)9可以是函數(shù)簽名為intWINAPI Mine_StretchDIBits(HDC hdc, int XDest,int YDest,int nDestffidth, intnDestHeight, int XSrc, int YSrc, int nSrcffidth, int nSrcHeight, CONSTV0ID*lpBits, CONST BITMAPINFO*lpBitsInfo, UINT iUsage, DWORD dwRop)的函數(shù)。在隨后的步驟中,當(dāng)A平臺SDK 3打算繪圖時(shí)就會試圖調(diào)用系統(tǒng)API StretchDIBits,然而截獲替換模塊7調(diào)用用戶自己編寫的這個(gè)Mine_StretChDIBitS函數(shù)替換了系統(tǒng)API StretchDIBits,從而A平臺SDK 3實(shí)際上調(diào)用的是用戶自己編寫的這個(gè)Mine_StretchDIBits函數(shù),這樣就可以通過用戶自己編寫的這個(gè)Mine_StretchDIBits函數(shù)從A平臺SDK 3發(fā)來的數(shù)據(jù)中提取出A碼流2。也可以根據(jù)實(shí)際需要決定是否繼續(xù)同時(shí)調(diào)用系統(tǒng)API StretchDIBits以把對應(yīng)碼流的圖像同時(shí)繪制到窗口上。例如,作為自定義繪圖函數(shù)9的源程序可以具體包括
      int. WlNAPI Mine StretchDIBits(HDC hdc,int XDestJnt YDestjntn DestWidthjnl nDestHeightjnt XSrc, int YSrcjnt nSrcWidth,intnSrcHeiglU5CONST VOID siiIpBits5CONST BiTMAPiNFO ^ipBitsInfo,UlNTI Usage, DWO R D dwRop)
      {
      HWND hWnd = :: WindowFromDC(Iidc);BOOLbFind = FALSE; tHAPIHWndlnfo* ptlnfo = NULL;//根據(jù)此次繪圖窗口的句柄,在我們關(guān)心的窗口列表中查找是否存在此窗口的相關(guān)信息
      ::EnterCriticalSection(&e csHwnd):
      、. S_.'__J ■■
      if (! gmapHwndlnfo .emptyQ)
      {
      C MapH w ndI nfo:: i terator i t( g ma p H wild I nfo. finci(h Wnd)); if (it != g mapHwndInfo.end())
      I
      ptlnfo,it->second; bFind =TRLC;
      }
      I
      ::LeaveCri ticalSection(&g_csHwnd);
      //判斷是否用戶關(guān)心的窗口句柄,如果是,則提取圖像數(shù)據(jù)回調(diào)
      給上層
      if (FALSE != bFind && NULL != ptInfo->pfnVideoCB)
      {
      //DIB內(nèi)部的圖像必為RGB,
      BITMAPINFOHEADER*p Header=
      (BITM APIN FO H E ADE R *)&(IpBi tsI nfo->bm i H eader);
      DWORD dwType = cm HAPI Frame Unknown; switch(pHeader->biBitCount)
      I
      cas< 24
      dwType = em HAPI Video RGB24; break; case 32:
      dwType = em—HAPI—Video—RG B 3 2: break; default:

      _MyPrintf((" 不支持的格式
      BITM A PIN FOH EADER: :biBitCount=%d\nM, pHeader->bi BitCount));
      break;
      }
      long nHeight = (0 < pHeader->biHeight) pHeader->biHeight:(-pH eade r->bi Height);
      if (pHeader->biHeight > 0)
      {
      int riLi.rieL.en = p H ead er->bi W idth *pHeader->biBitCount / 8:
      int nOffSet = pHeader->biSizeImage - nLineLen;
      byte *pBuiTmp = ptinfo->pbyBufl6;
      for (int nLine = pHeader-^biHeight - I; nLine >=0 ;
      —nLine)
      {
      me mcpy (p B u fTinp, (char 5^lpBits 十 nOffSet,
      nLineLen);
      pBufTmp += nLineLen; nOffSet -= nLineLen;
      }
      }
      _MyPrintf( (" Stretch DIBits hWnd=%x 寬=%d 高=%d
      type=%d\n",
      hWnd, pHeader->biWidlh, nHeight, dwTvpe)); bDraw = ptInfo->pfnVideoCB(hWnd, ptInfo->pbyBufl6,dvvType, pH eader->biS izeI mage,
      pHeader->biWidth, .nHeight, ptInfo->dwUserDara);
      }
      //根據(jù)需要決定是否繼續(xù)調(diào)用系統(tǒng)繪圖函數(shù)以顯示圖像,如果不調(diào)用則圖像不會顯示

      int iiRet = 0;if (FALSE != bDraw)
      {
      iiRet = CInterceptSpyFun;:m_pFimStretchDlBits(hdc, XDest,YDest, nDestWidth, nDestHeight,
      XSrc, YSrc, nSrcWidth, nSrcHeight, IpBits, lpBitsInfo,
      iUsage, dwRop);
      } return nRet;
      } °截獲替換模塊7調(diào)用用戶自己編寫的自定義繪圖函數(shù)9來替換相應(yīng)的系統(tǒng)繪圖API或COM接口,也就是說,當(dāng)A平臺SDK 3打算繪圖時(shí),截獲替換模塊7中的接口替換庫8就會截獲A平臺SDK 3打算調(diào)用的系統(tǒng)繪圖API或COM接口(例如系統(tǒng)APIStretchDIBits),并將A平臺SDK3打算調(diào)用的系統(tǒng)繪圖API或COM接口替換為自定義DLL10中的自定義繪圖函數(shù)9 (例如這里的Mine_StretchDIBits函數(shù))。例如,實(shí)現(xiàn)截獲替換模塊7的攔截處理的源程序可以具體包括
      //Detour庫攔截處理DetourTransactioriBeginO;
      DetourUpdateThread(GetCurrentThreadO):
      DetourAltach( fe(PVOID&)CInterceptSpyFun::m_pFunStretchDIBits.
      M i ne—Stretch DI Bits);
      DetourTransactionCommi t(),,接下來,在步驟S120,本發(fā)明的截獲替換模塊7確定要捕獲碼流的目標(biāo)窗口,并通過自定義繪圖函數(shù)9來提取發(fā)往所確定的目標(biāo)窗口的A平臺I的A碼流2。這里,要捕獲碼流的目標(biāo)窗口是原本打算用于目標(biāo)平臺(這里例如是A平臺I)顯不輸出的窗口或多個(gè)窗口之一。指定要捕獲碼流的目標(biāo)窗口的一個(gè)手段是把該窗口的句柄添加到捕獲隊(duì)列中,這樣可以只捕獲指定窗口的碼流,而不會對系統(tǒng)所有窗口都進(jìn)行捕獲。作為另一個(gè)實(shí)施例,可以安排為,在不添加捕獲碼流的目標(biāo)窗口的情況下,即使系統(tǒng)調(diào)用到了自定義繪圖函數(shù)9,也不會做出碼流提取操作,而是只簡單地再次調(diào)用系統(tǒng)繪圖API或COM接口以完成圖像顯示。只有添加了捕獲碼流的目標(biāo)窗口,表明所關(guān)注的是這個(gè)窗口的繪圖操作,才會提取其圖像數(shù)據(jù)以回調(diào)給應(yīng)用層業(yè)務(wù)。例如,實(shí)現(xiàn)確定要捕獲碼流的目標(biāo)窗口的源程序可以具體包括//增加一個(gè)窗口句柄
      BOOL HAPI AddHWndInfo(HWND hWnd, DWORD dwUserData,pfiiHAPI FrameCallBack pfnVideoCB)
      {
      BOOL bWnd = :: Is W indow(hWnd); //判斷是否是窗口 if (FALSE != bWnd && NULL != pfnVideoCB)
      {
      ::EnterCritical Section(&g_csHwnd);
      //保存句柄數(shù)據(jù)同時(shí)清空數(shù)據(jù)記錄 IHAPI HWnd Info * pHwndlnfo = NULL; i f (gvec H wn d I n fo ■ emp ty ())
      {
      pHwndlnfo = new tHAPIHWndlnfo;
      .)
      else
      {
      pHwndlnfo = gvec Hvvnd Info
      ; g_vecHwndinfo.erase(g_vecHvvndlnfo.begin()); pHvvndinfo-> Reset();
      }
      pH wnd I n fo ->d w U ser Data = dwUserData;pHwndInfo->pfnV i deoCB = pfnVideoCB;g_mapH vvndi nfo[h W nd] = pHwndlnfo;
      _MyPrintf(("HAPI AddHWndInfo 添加句柄成功hwnd=0x%08x,cb=0x%08x\n", hWnd, pHwndInfo->pfnVideoCB));::LeaveCriticaISection(&g_csHwnd);
      }
      else {
      —MyPrintf((”HAPI—AddHWndinfo 添力丨i〈丨J柄失敗 hwnd=%xpfVideo=%p 參數(shù)巧、!! :確! \n”,hWnd, pfnVideoCB));
      }
      return bWnd;
      } °截獲替換模塊7通過自定義繪圖函數(shù)9捕獲A平臺SDK 3發(fā)往所確定的目標(biāo)窗口的數(shù)據(jù),進(jìn)行碼流提取,即,截獲替換模塊7中的自定義繪圖函數(shù)9被調(diào)用后,從去往所截獲的系統(tǒng)繪圖API或COM接口的參數(shù)中提取出A碼流2。接下來,在步驟S130,本發(fā)明的截獲替換模塊7將所捕獲的A平臺I的A碼流2發(fā)送給網(wǎng)關(guān)4,二次編解碼后成為B平臺6的B碼流5,并發(fā)送給B平臺6。通過本發(fā)明的上述步驟SlOO至步驟S130,即可實(shí)現(xiàn)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法。另外,當(dāng)上述操作完成之后,在不需要繼續(xù)捕獲碼流時(shí),截獲替換模塊7可以通過把捕獲碼流的目標(biāo)窗口的句柄從捕獲隊(duì)列中刪除來刪除該捕獲碼流的目標(biāo)窗口,以避免不必要的系統(tǒng)性能消耗。例如,實(shí)現(xiàn)刪除要捕獲碼流的目標(biāo)窗口的源程序可以具體包括
      //刪除某一個(gè)窗口句柄
      BOOL HAPI DeleteHWndInfofHWND IiWnd)
      {
      ::EnterCritica]Section(&g_csHwnd);
      CMapHwndI nfo:: iterator it(g mapH wnd Info. find(h Wnd));if (it != g mapH wndlnfo.end())
      {
      gvec H wndlnfo. push_back(it->second); gmap H wndln fo .erase(it);
      _MyPrintf(("HAPI_DeleteHWndInfo 刪「f 句柄成功hwnd=0x%08x\nM, IiWnd));
      }
      ::LeaveCnticalSection(&g_csHwnd); return TRUE;}o最后,截獲替換模塊7還可以恢復(fù)系統(tǒng)繪圖API或COM接口。例如,程序退出或不需要再捕獲碼流時(shí),可以調(diào)用Detours庫接口函數(shù)恢復(fù)對系統(tǒng)進(jìn)程的修改。例如,實(shí)現(xiàn)恢復(fù)系統(tǒng)繪圖API或COM接口的源程序可以具體包括
      //取消攔截
      DetourTransactionBegin();
      DetourUpdateThread(GetCuiTentThreadO);
      DetourDetach( &(PVOID &)CIntercep{SpyFun::ni_pFunStretchDIBits,MineStretchDI Bits);
      DetourTransactionCommitG。本申請的截獲替換模塊7中的接口替換庫8例如是Detours,Detours本身包括兩個(gè)DLL,本申請的截獲替換模塊7中的自定義繪圖函數(shù)9安排在另一個(gè)DLL 10中,這個(gè)DLL10提供接口,其它模塊可以通過調(diào)用這個(gè)DLL 10提供的接口來實(shí)現(xiàn)本申請的基于視頻監(jiān)控繪圖的二次編解碼方法。例如,實(shí)現(xiàn)截獲替換模塊7所提供的接口的源程序可以具體包括
      //碼流回調(diào)函數(shù)類型聲明
      typedef BOOL (WIN API* pfn H A PIFrameCal I Back)( H WN D h Play Wnd,const BYTE * pBuf, DWORD dwType, DWORD dwLength,
      DWORD dwWidtlL DWORD dwHeight, DWORD dwUserData);

      //替換系統(tǒng)繪圖API或COM接口
      extem”C” HOOKAPI API DWORD HAPI」nitHookApi():
      //恢復(fù)系統(tǒng)繪圖API或COM接P
      extem”C” HOOKAPI API DWORD HAPI_ReieaseHookApi():
      //添加要捕獲的窗口句柄,開始對這個(gè)窗口進(jìn)行捕獲extern"C" HOOKAPI API BOOL HAPl AddHVVndInfo(HWND hWnd,DWORD dwUserData, pfnHAPI FrameCallBack pfnVideoCB);
      //刪除要捕獲的窗口句柄,停止對這個(gè)窗口進(jìn)行捕獲extern"C" HOOKAPIAPI BOOL HAPi_DeleteHWndinfo(HWNDhWnd);) o
      本申請還提供了一種基于視頻監(jiān)控繪圖的二次編解碼裝置,包括截獲模塊,用于截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口 ;替換模塊,用于通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致;提取模塊,用于確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及發(fā)送模塊,用于將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。經(jīng)過驗(yàn)證,本申請的基于繪圖的二次編解碼方法及其裝置在進(jìn)行不同廠商的視頻監(jiān)控平臺的互聯(lián)時(shí),如果不提供碼流回調(diào)接口,同樣可以獲取到各廠商的視頻監(jiān)控平臺的碼流,從而實(shí)現(xiàn)不同廠商的視頻監(jiān)控平臺的互聯(lián)。根據(jù)本申請的基于繪圖的二次編解碼方法可以由具有運(yùn)算處理能力的單個(gè)或多個(gè)處理設(shè)備,如單個(gè)或多個(gè)計(jì)算機(jī),運(yùn)行計(jì)算機(jī)可執(zhí)行指令來實(shí)現(xiàn)。根據(jù)本申請的基于繪圖的二次編解碼裝置可以為單個(gè)或多個(gè)處理設(shè)備,如單個(gè)或多個(gè)計(jì)算機(jī),其中的各個(gè)模塊或單元可以為該處理設(shè)備運(yùn)行計(jì)算機(jī)可執(zhí)行指令時(shí)具有相應(yīng)功能的設(shè)備組件。根據(jù)本申請的一個(gè)實(shí)施例,可以使用C/C++等語言在Linux、Windows等系統(tǒng)下來實(shí)現(xiàn)上述用于實(shí)現(xiàn)在進(jìn)程間進(jìn)行數(shù)據(jù)交互訪問的方法及其裝置。雖然已參照典型實(shí)施例描述了本申請,但應(yīng)當(dāng)理解,所用的術(shù)語是說明和示例性、而非限制性的術(shù)語。由于本申請能夠以多種形式具體實(shí)施,所以應(yīng)當(dāng)理解,上述實(shí)施例不限于任何前述的細(xì)節(jié),而應(yīng)在隨附權(quán)利要求所限定的范圍內(nèi)廣泛地解釋,因此落入權(quán)利要求或其等同范圍內(nèi)的全部變化和改型都應(yīng)為隨附權(quán)利要求所涵蓋。
      權(quán)利要求
      1.一種基于視頻監(jiān)控繪圖的二次編解碼方法,包括 截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口; 通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致; 確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及 將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。
      2.根據(jù)權(quán)利要求I所述的方法,其中 通過Detours,調(diào)用所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。
      3.根據(jù)權(quán)利要求I所述的方法,其中 通過所述接口替換庫,調(diào)用安排在一個(gè)動態(tài)鏈接庫中的所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。
      4.根據(jù)權(quán)利要求I所述的方法,其中 所述自定義繪圖函數(shù)被調(diào)用后,從去往所截獲的系統(tǒng)繪圖API或COM接口的參數(shù)中提取出所述第一平臺的碼流。
      5.根據(jù)權(quán)利要求I所述的方法,其中 在通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流的同時(shí)繪制對應(yīng)于所述第一平臺的碼流的圖像。
      6.根據(jù)權(quán)利要求I所述的方法,其中 在未確定所述目標(biāo)窗口的情況下,不提取所述第一平臺的碼流。
      7.一種基于視頻監(jiān)控繪圖的二次編解碼裝置,包括 截獲模塊,用于截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口 ; 替換模塊,用于通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致; 提取模塊,用于確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及 發(fā)送模塊,用于將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。
      8.根據(jù)權(quán)利要求7所述的裝置,其中 所述替換模塊,用于通過Detours,調(diào)用所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API 或 COM 接口。
      9.根據(jù)權(quán)利要求7所述的裝置,其中 所述替換模塊,用于通過所述接口替換庫,調(diào)用安排在一個(gè)動態(tài)鏈接庫中的所述自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口。
      10.根據(jù)權(quán)利要求7所述的裝置,其中 所述提取模塊,用于所述自定義繪圖函數(shù)被調(diào)用后,從去往所截獲的系統(tǒng)繪圖API或COM接口的參數(shù)中提取出所述第一平臺的碼流。
      11.根據(jù)權(quán)利要求7所述的裝置,其中 所述提取模塊,用于在通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流的同時(shí)繪制對應(yīng)于所述第一平臺的碼流的圖像。
      12.根據(jù)權(quán)利要求7所述的裝置,其中 所述提取模塊,用于在未確定所述目標(biāo)窗口的情況下,不提取所述第一平臺的碼流。
      全文摘要
      一種基于視頻監(jiān)控繪圖的二次編解碼方法,包括截獲第一平臺的SDK打算調(diào)用的系統(tǒng)繪圖API或COM接口;通過接口替換庫,調(diào)用自定義繪圖函數(shù)來替換所截獲的系統(tǒng)繪圖API或COM接口,其中所述自定義繪圖函數(shù)的聲明格式應(yīng)當(dāng)與所截獲的系統(tǒng)繪圖API或COM接口的聲明格式一致;確定要捕獲碼流的目標(biāo)窗口,并通過所述自定義繪圖函數(shù)來提取發(fā)往所確定的目標(biāo)窗口的第一平臺的碼流;以及將所捕獲的第一平臺的碼流發(fā)送給網(wǎng)關(guān),二次編解碼后成為第二平臺的碼流,并發(fā)送給所述第二平臺。一種基于視頻監(jiān)控繪圖的二次編解碼裝置包括與所述基于視頻監(jiān)控繪圖的二次編解碼方法的步驟分別對應(yīng)的截獲模塊、替換模塊、提取模塊和發(fā)送模塊。
      文檔編號H04N7/26GK102722376SQ201210209788
      公開日2012年10月10日 申請日期2012年6月25日 優(yōu)先權(quán)日2012年6月25日
      發(fā)明者朱亞東, 王曉輝 申請人:蘇州科達(dá)科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1