專利名稱:用于視頻服務器的硬件自適應多通道多模式視頻預監方法
技術領域:
本發明涉及視頻預監技術,具體涉及一種用于視頻服務器的硬件自適應 多通道多模式視頻預監方法。
背景技術:
目前的視頻服務器在采集狀態下的預監方式,多為如采用占用視頻10卡的
一路輸出單路視頻信號到監視器的方式,或使用軟件監視窗口進行單路視頻監 看的方式。在多路信號同時采集的狀態下,不能夠同期對所有輸入視頻進行監 控。使用板卡硬件通道,將受制于板卡的工作方式(如視頻采集卡不支持雙工
模式),并增加系統成本;而目前軟件化到PC監視器的視頻預監方式,如要實 現多路視頻的混合(Mixing Blender),則一般要求顯卡具有Video Overlay的 功能,同樣將制約視頻服務器軟件的可移植性。
發明內容
本發明的目的在于針對現有技術的缺陷,提供一種適用于視頻服務器的硬 件自適應的多通道多模式視頻預監方法,通過調整數據源或視頻排列方式,本 發明可用于如模擬電視墻,素材瀏覽器等多種應用。
本發明的技術方案如下 一種用于視頻服務器的硬件自適應多通道多模式 視頻預監方法,該方法接收輸入的多路視頻數據后,設置輸入視頻數據格式, 并進行視頻重采樣;然后將多路視頻數據進行視頻混合,并將混合后的結果數 據定位輸出,通過配置預監畫面位置,形成多通道一見頻預監窗口畫面。
進一步,如上所述的用于視頻服務器的硬件自適應多通道多模式視頻預監 方法,其中,當預監畫面輸出到PC顯示器時,在視頻數據輸入之前,首先判斷 PC機環境是否具有硬件加速功能,在不具有硬件加速功能的情況下,創建視頻 合成器、輸出定位器,定位輸出到windows窗口,然后創建數據源包裝器數組 和視頻預處理器數組,連接各處理模塊等待視頻數據輸入;在具有硬件加速功
4能的情況下,創建DirectShow兼容數據源包裝器數組和DirectShow兼容^L頻 預處理器數組,并創建DirectShow體系中的Video Mixing Render渲染器,連 接各處理模塊等待視頻數據輸入。
如上所述的用于視頻服務器的硬件自適應多通道多模式視頻預監方法,其 中,當預監畫面輸出到視頻監視器時,在視頻數據輸入之前,創建視頻合成器、 輸出定位器,定位輸出到視頻卡IO輸出端,然后創建數據源包裝器數組和視頻 預處理器數組,連接各處理模塊等待視頻數據輸入。
如上所述的用于視頻服務器的硬件自適應多通道多模式視頻預監方法,其 中,在PC機環境不具有硬件加速功能的情況下進行視頻混合時,創建一個數據 處理工作線程,用于對來自上游的不同輸入(即不同預處理端輸出)進行同步 操作,在視頻混合模塊中,對每個輸入端,實現一個先進先出(FIFO)隊列, 并設置監測隊列數據到達的最大超時時長,當超過時長時,混合模塊認為上游 對應端輸入未到達,以黑色填充數據幀,作為輸入的對應占位,當所有輸入數 據幀補齊時,工作線程進行幀拼接,并將結果數據進行輸出。
如上所述的用于視頻服務器的硬件自適應多通道多模式視頻預監方法,其 中,預監源位置配置和監控由預監源混合觀測器實施,預監源混合觀測器提供 標準模式模板供用戶配置時直接載入,并提供用戶自定義方式,使用戶自定義 預監源數量、視頻通道位置、當前活動主預監源標識方式;預監源混合觀測器 以標準COM接口方式實現,其接口函數包括更改視頻位置 ChangeFramePosUion,更改浮見頻大小ChangeFrameSize,同步更改到予貞處理才莫 塊NotifyPreprocessor,同步更改到混合才莫塊NotifyMixer。
如上所述的用于視頻服務器的硬件自適應多通道多模式視頻預監方法,其 中,在用戶動態配置視頻混合位置時,將在window窗體內由鼠標動作產生的矩 形區域更改映射到混合視頻幀上的矩形區域更改,設窗體離散坐標系的一個坐 標軸的區間為[fl。,…A],混合幀上一個坐標軸的區間為[6。,..A],則其取值范 圍為
= ^ _ a0 +1
6" = &i _ &o +1
從用戶GDI區域到視頻混合幀內存表面的坐標映射/>式為 6 = 2a + (6。 _0.5) — 2(a。 — 0.5)
公式中,坐標b是坐標a在混合幀上的映射。
5本發明適用于(但不限于)視頻服務器的多通道視頻數據采集模式下各個 通道的視頻數據同時監看的應用,通過該方法實現了視頻預監的硬件自適應功 能,以及多通道數據的視頻混合功能,并能以多種模板形式予以顯示,通過調 整數據源或視頻排列方式,本發明將可用于如模擬電視墻,素材瀏覽器等多種 應用。
圖1為視頻預監方法的數據輸入輸出模塊組成示意圖。
圖2為以UML類圖模型描述實現各模塊接口的最小實現類示意圖。 圖3為基于DShow結構的工作模式的數據輸入輸出模塊組成示意圖。 圖4為在軟件加速模式下系統工作狀態示意圖。 圖5為在通過單個硬件通道預監的工作模式下系統工作狀態示意圖。 圖6為本發明所應用的系統初始化流程圖。
圖7為在軟件加速模式和通過單個硬件通道預監的工作模式下連接處理模 塊流程圖。
圖8為連接成功后,在無混合更改操作激發的情況下視頻混合工作流程圖。 圖9為預監源混合觀測器以UML類圖模型描述實現各模塊接口的最小實現 類示意圖。
圖10為被混合視頻位置變更的系統工作流程圖。
圖11為預處理輸出視頻大小變更的系統工作流程圖。
具體實施例方式
下面結合附圖和具體實施例對本發明進行詳細的描述。 在描述本發明之前先對所用到的相關名詞縮略進行介紹 視頻預監窗口——VW;
孩£軟Direct Show ^t術體系結構——DShow;
DShow中的Video Mixing Render--VMR;
隱ow中的Filter組件--Filter;
DShow中的Filter連接集合-Graph;
6統一建模語言UML;
線程(指Win32系統中的狹義線程)Thread。
為達成硬件自適應預監目的,要求軟件模塊設計實現(a)自主監測硬件 配置(b)基于硬件環境配置最優工作狀態。
為達成多路預監目的,要求軟件在模塊中設計實現(a)隔離不同信號源 數據,(b)自動檢測信號源狀態,(c)提供預監信號輸出路徑選擇模式。
為達成多模式預監目的,要求軟件模塊設計實現(a)通過人機交互運行時 配置預監畫面主次,(b)運行時配置預監畫面位置,(c)用戶可定義預監方式模 板。
本發明所提供的用于視頻服務器的硬件自適應多通道多模式視頻預監方 法,是在接收輸入的多路視頻數據后,設置輸入視頻數據格式,并進行視頻重 采樣;然后將多路視頻數據進行視頻混合,并將混合后的結果數據定位輸出, 通過配置預監畫面位置,形成多通道纟見頻預監窗口畫面。
下面對該方法實現的具體結構設計進行介紹。視頻預監方法的數據輸入輸 出模塊組成如圖1所示。
定義輸入輸出模塊名稱如下;接口 (Interface)函數描述(英文為函數 名,中文為函數功能描述)如下
(1 )視頻輸入模塊(Source)
a. 接收輸入視頻數據(PushFrame)
PushFrame的輸入為非壓縮視頻數據,即一連續內存數據塊。收到數據 后,此函數檢查格式兼容性并立即把數據向下游模塊傳送。
b. i殳置輸入浮見頻it據才各式(SetlnputMediaType )
SetlnputMediaType的輸入參數的關4建字包括^L頻數據格式(標準顏 色空間Format,如RGB, YUY2 ),視頻幀的長寬,每象素比特數等。 一旦設 置完成,輸入數據將被默認為按此數據格式組織,并不能更改.
(2 )浮見頻預處理沖莫塊(Preprocessor) a.接收輸入視頻數據(PushFrame)
PushFrame被上游模塊調用,輸入為非壓縮視頻數據,即一連續內存數 據塊。收到數據后,此函數檢查格式兼容性并調用重采樣函數,將重采樣結果數據向下游輸出。
b. 設置輸入視頻數據格式(SetI叩utMediaType) SetlnputMediaType,正確調用才莫式下,此函數輸入與Source中的
SetlnputMediaType輸入參數兼容,若非,PushFrame在檢查兼容性時返回失 敗。
c. 設置重采樣格式(SetOutputMediaType )
SetOutputMediaType,設置輸出浮見頻才各式,當此格式與輸入凄t據不同時, 重釆樣功能被啟動。
d. 進行視頻重采樣(ResizeFrame )
ResizeFrame的輸入為一幀非壓縮數據,輸出為變換后的一幀非壓縮數 才居,進4亍浮見頻重采才羊,在Source和Preprocessor的函凄史中,只有ResizeFrame 對視頻數據進行變換(transform),其他數據相關才喿作僅完成內存數據的拷 貝,或內存指4十的傳遞,是傳遞(transmit)過禾呈。
從物理意義上講,ResizeFrame實現了對二維數據的重采樣濾波過程, 對重釆樣濾波器的選擇和實現(如基于線性空域不變系統的二維重采樣濾波 器),本文檔不做約束。
(3)視頻混合模塊(Mixer)
a. 查詢新視頻幀到達標志(CheckArrivalTimeOut) CheckArrivalTimeOut,在碎見頻混合才莫塊中,創建了一個數據處理工作線
程,用于對來自上游的不同輸入(即不同預處理端輸出)進行同步操作。Mixer 中,對每個輸入端,實現一個先進先出(FIFO)隊列,并設置監測隊列數據 到達的最大超時時長,當超過時長時,混合模塊認為上游對應端輸入未到達, 以黑色填充數據幀,作為輸入的對應占位。當所有輸入數據幀補齊時,工作 線程調用MixFrames進行幀拼接。MixFrames的結果送SendFrame輸出。
b. 設置^L頻表面覆蓋位置(SetOverlayPosition) SetOverlayPosition的輸入參數為輸入幀標識符(ID),輸入幀相對于
目標幀右上角位置的坐標,輸入幀透明度(alpha)預設值。輸入幀長寬由 SetlnputMediaType函數決定。本函lt不強制進行區域重合4企測,所以輸入 的兩幀或多幀視頻位置重合被視為合法操作。
8c. 設置輸入視頻數據格式(SetlnputMediaType )SetlnputMediaType輸入參數為輸入視頻標識符(id),輸入-見頻格式
結構體。設置輸入數據格式操作要求與對應預處理模塊視頻輸出格式設置兼容,否則返回失敗值。
d. 設置輸出一見頻凄t據格式(SetOutputMediaType )
Se 10utputMediaType輸出參數為輸出視頻格式結構體。
e. 接收輸入視頻數據(ReceiveFrame )
ReceiveFrame由視頻預處理器模塊調用,負責將預處理模塊的處理結果收入對應先進先出(FIFO)隊列。
f. 混合視頻數據(MixFrames)
MixFrames由工作線程調用,其輸入參數為攜帶視頻數據內容的內存指針數組(數組長度為通道數量)。MixFrames完成一見頻的混合操作
g. 豐#出混合后一見頻凄丈凈居(SendFrame )
SendFrame由工作線程調用,將混合后的結果數據送給視頻輸出才莫塊。
(4)視頻輸出模塊(Output)
a. 定位輸出UedirectOutput )
RedirectOutput輸入參數為標識輸出定位的枚舉型變量(在可能的情況里,會標識輸出到顯示器窗口,或通過板卡IO輸出到TV監視器)。輸出模塊根據定位標志不同,創建實體動作代理,根據所采用的第三方板卡不同,需要參考不同的板卡開發庫(SDK),本文檔不做進一步限制。
b. 設置輸入^L頻it據4各式(SetVideoMediaType)SetVideoMediaType,輸出模塊作為系統終端模塊,沒有輸出端口。輸
入視頻數據格式需要匹配Mixer模塊的輸出視頻數據模式,否則進入錯誤處理。
c. !敘出一見頻凄t凈居(RenderFrame )
RenderFrame由Mixer才莫塊的工作線程調用,完成到監^L端的一見頻輸出工作。
以上接口以標準C0M4妄口方式實現,以UML類圖沖莫型描述,上述接口最小
9實現類可表示如圖2。
在本系統實現中,當軟件系統所被布置的PC機環境具有硬件加速功能時,上述模塊在定位輸出到PC顯示器時將工作在基于DShow結構的工作模式。在基于DShow結構的工作模式中,圖1的輸入輸出模塊中的各子模塊可被替換為如圖3所示的Filter-Graph集,輸出級的末端兩個才莫塊#1 DShow中的VMR替代。預處理模塊的包裝Filter在此狀態下被設置為直通狀態,即視頻輸入輸出格式相同,視頻重采樣工作由VMR完成。
在基于DShow的工作才莫式下,系統中不再存在Mixer和Output 4莫塊,凄欠據源(Source)和預處理才莫塊(Preprocessor)除需要實現如圖2所示的4妻口函數外,需要按Microsoft⑧DirectShow⑧的開發協i義,分別支持標準源Filter (Source Filter)和傳輸Filter (Transform Filter)的協議接口函數。此部分內容,可參見由孩么軟公開的《Microsoft DirectX 9. 0聯機幫助》文檔的"DirectShow"章節部分。
在非基于DShow結構的工作模式下,以GPU為基礎的硬件加速模式,將仍然基于如圖1的框架,如圖4。各模塊接口定義不變。在此結構中,Preprocessor仍將工作在直通狀態,需要替換的部分包括Mixer中MixFrames函數和Output中RenderFrame函數的具體實現。若以Direct3D技術實現此部分內容,可參見由微軟公開的《Microsoft DirectX 9. 0聯機幫助》文檔的"DirectX Graphics"章節部分。
本發明在軟件加速模式下,系統工作狀態如圖4所示;在通過單個硬件通道預監的工作沖莫式下,系統工作狀態如圖5所示。系統初始化流程如圖6所示。當預監畫面輸出到PC顯示器時,在視頻數據輸入之前,首先判斷PC機環境是否具有硬件加速功能,在不具有硬件加速功能的情況下,創建視頻合成器、輸出定位器,定位輸出到windows窗口,然后創建數據源包裝器tt組和^L頻預處理器數組,連接各處理模塊等待視頻數據輸入;在具有硬件加速功能的情況下,創建DirectShow兼容數據源包裝器數組和DirectShow兼容視頻預處理器數組,并創建DirectShow體系中的Video Mixing Render渲染器,連接各處理才莫塊等待視頻數據輸入。當預監畫面輸出到視頻監視器時,在視頻數據輸入之前,創
10建視頻合成器、輸出定位器,定位輸出到視頻卡IO輸出端,然后創建數據源包裝器數組和視頻預處理器數組,連接各處理模塊等待視頻數據輸入。在上述工作狀態下,連接處理模塊流程如圖7所示,連接成功后,在無混合更改操作激發的情況下(參見視頻混合觀測器),視頻混合工作流程如圖8所示。
視頻預監窗口 vw提供了多種標準模式模板供用戶配置時直接載入,同時
提供用戶自定義方式,使用戶自定義預監源數量、視頻通道位置、當前活動主預監源標識方式等。
預監源位置配置和監控由預監源混合觀測器實施。預監源混合觀測器
(VideoMixingObersever )的動作(接口函數)定義如下
a. 更改視頻位置(ChangeFramePosition)
ChangeFramePosition的輸入包括,視頻通道標志符(id),新視頻在目標幀上相對左上角的坐標,新視頻覆蓋在目標幀上時的透明度(alpha),本函數首先檢查并確認相關參數存在更改情況,并更新更改參數到觀測器模塊類的成員數組中,設置更改臟標記。
b. 更改視頻大小(ChangeFrameSize )
ChangeFrameSize的輸入包括,^見頻通道標志符(id),新浮見頻重采樣后的大小。類似a,本函數首先檢查并確認相關參數存在更改情況,并更新更改參數到觀測器模塊類的成員數組中,設置更改臟標記。
c. 同步更改到預處理才莫塊(NotifyPreprocessor )
NotifyPreprocessor的專lr入包4舌, 一見步頁通道才示志才尋(id ),即確iUU口某特定視頻通道變更重采樣參數。為將更改情況同步到每一個輸出幀,即在一次混合處理循環中,若產生更改命令(即消息),此更改將延遲到下一幀視頻時,也就是本次所有通道處理處理完畢后,再被實施。本函數將在ChangeFrameSize中更新的參數通知相應的預處理模塊,并調用其SetOutputMediaType函數進行數據屬性變更。
d. 同步更改到混合才莫塊(NotifyMixer )
NotifyMixer的輸入包括,以浮見頻通道標志符(id)為id的位置坐標數
ii組。類似于NotifyPreprocessor,為將更改情況同步到每一個$#出幀,即在 一次混合處理循環中,若產生更改命令(即消息),此更改將延遲到下一幀 視頻時,也就是本次所有通道處理處理完畢后,再被實施。本函數將在Change FramePosUion中更新的參數通過并調用視頻混合模塊中的SetOverlay-Position函數進行數據屬性變更。
預監源混合觀測器以標準COM接口方式實現,以UML類圖模型描述,其最 小實現類可表示如圖9。被混合視頻位置變更的系統工作流程如圖IO所示,預 處理輸出視頻大小變更的系統工作流程如圖11所示。
在用戶動態配置視頻混合位置時,用戶將在系統給定區域內(即系統生成 的一個標準windows窗體)進行鼠標的拖放。此操作將對應到視頻混合觀測器 上,即,將在window窗體內由鼠標動作產生的矩形區域更改映射到混合視頻幀 上的矩形區域更改。抽象的,這是從一個離散坐標系到另一個離散坐標系的映射。
設窗體離散坐標系的一個坐標軸的區間為h,…d,混合幀上一個坐標軸
的區間為[6。,..a],則其取值范圍為
p = cj^ _ a0 +1 1a=&i - 60+1
設坐標b是坐標a在混合幀上的映射,則由平面幾何知識,有
6-60+0.5 = 2("-a。+0.5),其中,0. 5代表舍入進位。 最終有
6 = + (60 —0.5)-i(fl。 -0.5)
上式即本系統中采用的從用戶GDI區域到視頻混合幀內存表面的坐標映射 公式。
員根據本發明的技術方案得出其他的實施方式,同樣屬于本發明的技術創新范圍。
1權利要求
1. 一種用于視頻服務器的硬件自適應多通道多模式視頻預監方法,其特征在于該方法接收輸入的多路視頻數據后,設置輸入視頻數據格式,并進行視頻重采樣;然后將多路視頻數據進行視頻混合,并將混合后的結果數據定位輸出,通過配置預監畫面位置,形成多通道視頻預監窗口畫面。
2. 如權利要求1所述的用于視頻服務器的硬件自適應多通道多模式視頻預 監方法,其特征在于當預監畫面輸出到PC顯示器時,在視頻數據輸入之前, 首先判斷PC機環境是否具有硬件加速功能,在不具有硬件加速功能的情況下, 創建視頻合成器、輸出定位器,定位輸出到windows窗口,然后創建數據源包 裝器數組和視頻預處理器數組,連接各處理模塊等待視頻數據輸入。
3. 如權利要求1所述的用于視頻服務器的硬件自適應多通道多模式視頻預 監方法,其特征在于當預監畫面輸出到PC顯示器時,在視頻數據輸入之前, 首先判斷PC機環境是否具有硬件加速功能,在具有硬件加速功能的情況下,創 建DirectShow兼容數據源包裝器數組和DirectShow兼容視頻預處理器數組, 并創建DirectShow體系中的Video Mixing Render渲染器,連接各處理模塊等 待視頻數據輸入。
4. 如權利要求1所述的用于視頻服務器的硬件自適應多通道多模式視頻預 監方法,其特征在于當預監畫面輸出到視頻監視器時,在視頻數據輸入之前, 創建視頻合成器、輸出定位器,定位輸出到視頻卡IO輸出端,然后創建數據源 包裝器數組和視頻預處理器數組,連接各處理模塊等待視頻數據輸入。
5. 如權利要求2或4所述的用于視頻服務器的硬件自適應多通道多模式視 頻預監方法,其特征在于在進行視頻混合時,創建一個數據處理工作線程, 用于對來自上游的不同輸入(即不同預處理端輸出)進行同步操作,在視頻混 合模塊中,對每個輸入端,實現一個先進先出(FIFO)隊列,并設置監測隊列 數據到達的最大超時時長,當超過時長時,混合模塊認為上游對應端輸入未到 達,以黑色填充數據幀,作為輸入的對應占位,當所有輸入數據幀補齊時,工 作線程進行幀拼接,并將結果數據進行輸出。
6. 如權利要求1所述的用于視頻服務器的硬件自適應多通道多才莫式視頻預 監方法,其特征在于該方法的預監源位置配置和監控由預監源混合觀測器實 施,預監源混合觀測器提供標準模式模板供用戶配置時直接載入,并提供用戶自定義方式,使用戶自定義預監源數量、視頻通道位置、當前活動主預監源標識方式。
7. 如權利要求6所述的用于視頻服務器的硬件自適應多通道多模式視頻預 監方法,其特4正在于預監源混合7見測器以標準COM 4姿口方式實現,其4姿口函 數包括更改視頻位置ChangeF腦ePosition,更 文視頻大小ChangeFrameSize, 同步更改到預處理才莫塊NotifyPreprocessor ,同步更改到混合才莫塊 NotifyMixer。
8. 如權利要求7所述的用于視頻服務器的硬件自適應多通道多模式視頻預 監方法,其特征在于在用戶動態配置^L頻混合位置時,將在window窗體內由 鼠標動作產生的矩形區域更改映射到混合^L頻幀上的矩形區域更改,設窗體離 散坐標系的一個坐標軸的區間為["。,…fl丄混合幀上一個坐標軸的區間為 [&,…6j,則其取值范圍為
全文摘要
本發明涉及視頻預監技術,具體涉及一種用于視頻服務器的硬件自適應多通道多模式視頻預監方法。該方法接收輸入的多路視頻數據后,設置輸入視頻數據格式,并進行視頻重采樣;然后將多路視頻數據進行視頻混合,并將混合后的結果數據定位輸出,通過配置預監畫面位置,形成多通道視頻預監窗口畫面。本發明適用于(但不限于)視頻服務器的多通道視頻數據采集模式下各個通道的視頻數據同時監看的應用,通過該方法實現了視頻預監的硬件自適應功能,以及多通道數據的視頻混合功能,并能以多種模板形式予以顯示,通過調整數據源或視頻排列方式,本發明將可用于如模擬電視墻,素材瀏覽器等多種應用。
文檔編號H04N5/262GK101472090SQ20071030429
公開日2009年7月1日 申請日期2007年12月27日 優先權日2007年12月27日
發明者偉 朱, 王聞博 申請人:新奧特(北京)視頻技術有限公司