共用方式為


實作插入式終端機

插入式終端實作的一般需求如下:

  • 插入式終端機的基礎串流程式代碼應該符合所需 MSP 的功能。
  • 終端機必須使用 DirectShow 篩選器來處理大部分 MSP(這是從此處假設的)。
  • 音訊終端機必須支援大多數 MSP 的 8 kHz 16 位單軌 PCM。
  • 終端機應藉由實作 IMarshal,來啟用自由執行緒封送處理。 終端機可以透過呼叫 COM API CoCreateFreeThreadedMarshaler,並將 IMarshal 聚合至返回的指標 來達成此目的。 終端機物件的解構函式應該呼叫 IMarshal->Release
  • 終端機應該實作或匯總任何適合的其他終端機特定介面。
  • 終端機的實作必須是執行緒安全的。
  • 終端機實作必須 #include Termmgr.h,才能定義 ITTerminalControl。 另有一般所需的包含檔和函式庫,用於 Windows 2000 SP1 下的 TAPI 3 或 TAPI 3 應用程式。

介面和方法實作注意事項:

終端機必須實作 ITTerminal (雙重介面 - vtable + IDispatch)。

ITTerminal::get_TerminalClass

終端機必須傳回您挑選的 GUID BSTR 表示法,以識別您的終端機類型。 透過 SysAllocString配置 BSTR。 若要從 GUID 轉換成 BSTR,請呼叫 StringFromCLSIDSysAllocString,以及 CoTaskMemFree

ITTerminal::get_TerminalType

如果應用程式實作終端機,終端機通常會傳回TT_DYNAMIC。 傳回TT_STATIC也會正常運作,如果終端機對應至硬體裝置,則傳回此值可能適用;不過,這樣做可能會讓使用者感到困惑,因為 MSP 的靜態終端列舉中不會有靜態終端機。

ITTerminal::get_State

如果終端機實作不會任意限制終端機可以同時連線的數據流數目,則終端機應該一律會傳回TS_NOTINUSE。

否則,終端實作會任意限制一次可連接終端機的數據流數目。 在此情況下,終端機應保留其所連接的數據流數目計數。 終端機應該會在成功的 ITTerminalControl::ConnectTerminal 呼叫時遞增此內部計數,並於成功的 ITTerminalControl::DisconnectTerminal 呼叫時遞減。 在 ITTerminal::get_State中,如果此計數等於一次可選取終端機的最大數據流數目,則應該傳回TS_INUSE;否則,它應該會傳回TS_NOTINUSE。 請注意,如果限制為一,則該計數可能只是布爾值或 TERMINAL_STATE 值。

ITTerminal::get_Name

終端機應該會傳回自選的 BSTR 名稱,並透過 SysAllocString分配。 此名稱應該對使用者有意義,而且應該當地語系化。

ITTerminal::get_MediaType

終端機應該會傳回其媒體類型,TAPIMEDIATYPE_AUDIO或TAPIMEDIATYPE_VIDEO。

ITTerminal::get_Direction

終端會傳回TERMINAL_DIRECTION列舉值,指出終端機的方向。 如果終端機是雙向的(例如網橋),則必須傳回TD_BIDIRECTIONAL。

終端機必須實作 ITTerminalControl(僅限 vtable)。

ITTerminalControl::get_AddressHandle

應用程式提供的終端機應該一律傳回 NULL 做為位址句柄。 這表示 MSP 未在特定 MSP 位址物件上建立此終端機。

ITTerminalControl::ConnectTerminal

在此呼叫中,終端機將會把其篩選器新增至指定的圖形,如果適用,將它們相互連接。 然後,終端機應該會傳回針對指定數據流方向所公開的終端機接腳。

不支援並行連線至多個數據流的終端機,會在此方法成功完成時,將內部變數設定為TS_INUSE。

終端機可以使用 dwTerminalDirection 參數從這個呼叫中來判斷其所連接的資料流的方向。 這是雙向終端機的必要要求。

注意

一般而言(在 MSP 基類和所有已知的 MSP 中),如果終端機從單一 ConnectTerminal 呼叫返回多個針腳,MSP 資料流代碼將導致連線失敗。 沒問題,因為一個在連接期間會傳回多於一個針腳的終端機,需要 MSP 具備有關終端機的特定知識,才能有效利用額外的針腳。

 

ITTerminalControl::CompleteConnectTerminal

終端機應該只會傳回S_OK。 如果需要,終端機也可以進行連線后初始化。

ITTerminalControl::DisconnectTerminal

終端機應該執行任何必要動作,以中斷終端機與圖形其餘部分的連線。 這通常牽涉到從圖形中移除所有終端機的篩選條件,並將終端機狀態設定為TS_NOTINUSE。

ITTerminalControl::RunRenderFilter

終端機應該只會傳回E_NOTIMPL。

ITTerminalControl::StopRenderFilter

終端機應該只會傳回E_NOTIMPL。