TAPI 服务提供商概述
TAPI 应用程序驻留在其自己的进程空间中。 TAPI 应用程序将Tapi32.dll或Tapi3.dll加载到其进程中,TAPI 通过专用 RPC 接口与 TAPISRV 通信。 TSP 在 TAPISRV 的上下文中运行。 给定的 TSP 可能驻留在用户计算机以外的计算机上,并使用远程 TSP 进行访问。 TAPISRV 在 SVCHOST 中作为服务进程实现。 MSP 位于应用程序的进程空间内,并且始终是本地的。
TSP/MSP 配对可以被视为具有虚拟专用通信路径。 可以使用 TAPISRV 或 TAPI DLL 不解释的不透明缓冲区在两者之间发送信息。
某些服务提供商实现特定于硬件的操作。 TAPI 2.x 通过 lineDevSpecific 或 phoneDevSpecific 函数提供对此类操作的访问。 TAPI 3.x 公开 特定于提供程序的接口。
下图演示了控件和信息流,其中显示了一个独立 TSP (Unimodem) 和一个 TSP/MSP 配对 (H.323) 。
下图演示了涉及 TSP 和 MSP 的传入调用的进度。
传入呼叫设置
- TSP 将 LINE_NEWCALL 消息发送到 TAPISRV。 调用状态LINECALLSTATE_OFFERING。
- TAPISRV 通知客户端呼叫。
- TAPI3 创建 TAPI 调用对象,然后调用 由 MSP 实现的 ITMSPAddress::CreateMSPCall。
- MSP 基于调用所需的 媒体类型 创建 MSP Call 对象和默认流。 它返回指向 MSP 调用对象的 IUnknown 指针。
- TAPI3 将 MSP Call 对象聚合到 TAPI 调用对象中,使 ITStreamControl 等接口可供应用程序使用。 然后,它会通知新调用的应用程序。
然后,应用程序可以使用 ITStream::SelectTerminal 等方法完成调用完成准备工作。
传入呼叫完成
- 应用程序调用 ITBasicCallControl::Answer。
- TAPI3 调用 lineAnswer。
- TAPISERV 调用 TSPI_lineAnswer。
- TSP 启动调用流式处理。 通常,TSP 将消息发送到相应的 MSP,MSP 启动流。 在某些 TSP/MSP 实现中,TSP 将启动流。
调用过程中的 TSP/MSP 通信
调用正在进行后,TSP 和 MSP 通过 TAPISRV 和 TAPI3 传递不透明缓冲区进行通信。
- TSP 通过将 LINE_SENDMSPDATA 消息发送到 TAPISRV,将信息发送到 MSP。
- MSP 通过 ITMSPAddress::ReceiveTSPData 方法从 TSP 接收信息。 如果数据与 MSP 调用对象相关,则会将指向 MSP 调用对象的接口指针作为该方法的参数提供。
- MSP 通过将MSP_TSP_DATA事件发送到 TAPI 3,将信息发送到 TSP。
- TSP 通过 TSPI_lineReceiveMSPData 函数从 MSP 接收信息。
服务提供商之间的通信确切过程和内容特定于给定的 TSP/MSP 集。
注意
对于传出呼叫,MSP 通常知道 TSP 之前的呼叫。 如果在通知 TSP 调用之前,MSP 尝试与 TSP 通信,则通信将失败。 当 MSP 和 TSP 需要交换有关特定调用的信息时,TSP 应启动通信。