通过


MSP 体系结构

在 TAPI 体系结构中,所有 TSP 都在 TAPISRV 的上下文中运行,后者在 SVCHOST 中作为服务进程实现。 TAPI 应用程序位于自己的进程中。 TAPI 应用程序将 Tapi3.dll 和任何所需的 MSP 加载到自己的进程中,TAPI DLL 通过专用 RPC 接口与 TAPISRV 通信。 下图说明了这些组件的交互。

tapisrv、tapi 应用程序和 msps 之间的交互

媒体服务提供商(MSP)使用终端、流和子流抽象提供媒体流。

终端是媒体流的接收器或源。 它可以是物理对象,例如扬声器或麦克风,也可能是设备的抽象,例如视频窗口。 终端对象 公开 ITTerminal 接口。 终端类由 终端类 GUID 描述。 MSP 可以定义自己的终端类。

流根据 媒体类型 或类型、流的 方向以及媒体的目标地址划分调用的媒体。 例如,来自调制解调器的传入音频流是流对象、传出视频流到 IP 地址和端口是流对象,来自 IP 多播组的视频流也被视为一个流对象。 Stream 对象由 ITStreamControl 接口表示。

子流允许更好地控制媒体。 例如,在 IP 多播情况下,传入的视频流对象可能代表多人。 应用程序最有可能希望每个参与者具有单独的呈现器。 传入的视频流可以分为多个子流,每个子流各有一个。 一个子流对应于一个人,可以单独配置和控制。 SubStream 对象由 ITSubStreamControl 接口表示。

当应用程序调用 ITAddress::CreateCall 来设置调用时,它必须指定所需的媒体类型。 在传出呼叫中,它只需在创建呼叫时告知 TAPI。 例如:

HRESULT hr = pAddress->CreateCall( 
       pszDestAddress, 
       lAddressType, 
       TAPIMEDIATYPE_AUDIO | TAPIMEDIATYPE_VIDEO, 
       &pCall 
       ); 
// If (hr != S_OK ) process the error here

在这种情况下,应用程序正在创建传出音频视频呼叫。

传入的媒体类型指示应用程序在调用生存期内感兴趣的媒体。 例如,应用程序可以在创建呼叫时指定音频和视频,但仅选择开头的音频终端。 MSP 将仅开始流式传输音频,但不会拒绝在通话生存期内稍后发出的本地或远程视频请求。

然后,当应用程序调用 ITBasicCallControl::Connect时,TAPI 3 会在 TSP 中调用 TSPI_lineMakeCall。 建立调用后,MSP 和 TSP 可以根据需要进行通信。

当呼叫断开连接时,由 MSP 和 TSP 来传达有关拆解呼叫的信息。 如果应用程序调用 Disconnect,Tapi3.dll 将调用 TSPI_lineDrop