架構概念

使用 MediaPipe 架構前,請先熟悉以下概念。

基本概念

封包

基本資料流程單位。封包是由數字時間戳記和「不可變更」酬載的共用指標組成。酬載可以是任何 C++ 類型,而酬載的類型也稱為封包的類型。封包是值類別,可以低成本複製。每個副本都會共用酬載的擁有權,以及參考計數語意。每個副本都有專屬的時間戳記。另請參閱包裝

圖表

MediaPipe 處理作業會在圖表中進行,後者定義了節點之間的封包流路徑。圖表中可以有任意數量的輸入和輸出,資料流程也可以分支及合併。一般來說,資料會往前流動,但也有可能會回溯迴圈。詳情請參閱「圖表」。

節點

節點會產生及/或使用封包,且封包是圖形處理大量工作的地方。基於歷史因素,這兩項指標也稱為「計算機」。 每個節點的介面會定義多個輸入和輸出「通訊埠」ports,您可以透過標記和/或索引加以識別。詳情請參閱計算機一文。

串流

串流是兩個節點之間的連線,含有一系列封包,其時間戳記必須採用單調遞增。

側封包

節點之間的側邊封包連線會承載單一封包 (具有未指定的時間戳記)。這可以用來提供一些保持不變的資料,而串流代表的資料流會隨時間而變化。

封包通訊埠

通訊埠具有相關聯的類型,透過通訊埠傳輸的封包必須是該類型。輸出串流通訊埠可連線至任意數量的相同輸入串流通訊埠。每個取用端都會收到獨立的輸出封包副本,且擁有自己的佇列,以便按照自己的步調使用這些項目。同樣地,側邊封包輸出通訊埠可視需要連線至任意數量的側邊封包輸入通訊埠。

可以指定通訊埠,這表示必須建立連線才能讓圖表生效,或者是選用通訊埠,這代表圖表可能維持未連線狀態。

輸入與輸出

資料流程的來源可以是「來源節點」,當中沒有輸入串流並自行產生封包 (例如從檔案讀取),或是來自圖表輸入串流 (可讓應用程式將封包饋送至圖表)。

同樣地,有些「接收器節點」會接收資料,並將資料寫入不同的目的地 (例如檔案、記憶體緩衝區等),而應用程式也可以使用回呼接收圖表的輸出內容。

執行階段行為

圖表生命週期

圖表初始化後,就可以「開始」開始處理資料,並能處理封包串流,直到每個串流關閉或圖表取消為止。接著,您可以再次刪除或開始圖表。

節點生命週期

架構在節點上呼叫的主要生命週期有三種:

  • 開啟:在其他方法之前呼叫一次。呼叫此方法後,您就可以使用節點所需的所有輸入端封包。
  • 處理程序:在有新的輸入組合可用時,多次呼叫此程序,以根據節點的輸入政策。
  • 關閉:在結尾呼叫一次。

此外,每個計算機都可以定義建構函式和解構函式,對於建立及取消分配與處理資料無關的資源,都很實用。

輸入政策

預設的輸入政策是依時間戳記對封包定序。節點會同時叫用其程序方法,同時接收相同時間戳記的所有輸入內容;後續的輸入集則會按照時間戳記順序接收。這會需要將部分封包的處理延遲到所有輸入串流都收到時間戳記相同的封包,或是直到系統保證具有該時間戳記的封包不會抵達未接收此時間戳記的封包為止。

您也可以使用其他類元件 (稱為 InputStreamHandler) 實作其他政策。

詳情請參閱同步處理

即時串流

MediaPipe 計算機圖表通常用於處理互動式應用程式的影片或音訊影格串流。通常,每個計算機會在指定時間戳記的所有輸入封包可供使用時,立刻執行一次。用於即時圖的計算機必須根據輸入時間戳記範圍定義輸出時間戳記範圍,才能允許下游計算機按照提示排程。詳情請參閱「即時串流」一文。