Architettura MSP
Nell'architettura TAPI vengono eseguiti tutti i provider di servizi nel contesto di TAPISRV, che viene implementato come processo di servizio all'interno di SVCHOST. Le applicazioni TAPI vivono nel proprio processo. Le applicazioni TAPI caricano Tapi3.dll e tutti gli MSP necessari nel proprio processo e la DLL TAPI comunica con TAPISRV tramite un'interfaccia RPC privata. Il diagramma seguente illustra l'interazione di questi componenti.
Un provider di servizi multimediali (MSP) fornisce lo streaming multimediale usando le astrazioni di Terminal, Flussi e SubStream.
Un terminale è un sink o un'origine per un flusso multimediale. Può essere un oggetto fisico, ad esempio un altoparlante o un microfono, oppure può essere un'astrazione di un dispositivo, ad esempio una finestra video. L'oggetto Terminale espone l'interfaccia ITTerminal. La classe del terminale è descritta dal GUID della classe terminale . Un MSP può definire le proprie classi di terminale.
I flussi dividono i supporti di una chiamata in base al tipo di supporto o al tipo, alla direzione del flusso e all'indirizzo di destinazione del supporto. Ad esempio, un flusso audio in ingresso da un modem è un oggetto di flusso, un flusso video in uscita a un indirizzo IP e una porta è un oggetto di flusso, i flussi video provenienti da un gruppo multicast IP vengono considerati anche come un oggetto stream. L'oggetto Stream è rappresentato dall'interfaccia ITStreamControl .
SubStreams consente un controllo più corretto sui supporti. Ad esempio, nel caso multicast IP l'oggetto flusso video in ingresso potrebbe rappresentare diverse persone. L'applicazione vuole che ogni partecipante abbia un renderer separato. Il flusso video in ingresso può essere diviso in diversi sottostream, uno per ogni persona. Un sottostream corrisponde a una persona e può essere configurato e controllato separatamente. L'oggetto SubStream è rappresentato dall'interfaccia ITSubStreamControl .
Quando un'applicazione chiama ITAddress::CreateCall per configurare una chiamata, deve specificare il tipo di supporto necessario. In una chiamata in uscita, indica semplicemente TAPI quando viene creata la chiamata. Ad esempio:
HRESULT hr = pAddress->CreateCall(
pszDestAddress,
lAddressType,
TAPIMEDIATYPE_AUDIO | TAPIMEDIATYPE_VIDEO,
&pCall
);
// If (hr != S_OK ) process the error here
In questo caso, l'applicazione sta creando una chiamata audio-video in uscita.
I tipi di supporto passati indicano ai supporti che l'applicazione è interessata nel corso della durata della chiamata. Ad esempio, l'applicazione può specificare audio e video durante la creazione della chiamata, ma selezionare solo i terminali audio all'inizio. L'MSP inizierà lo streaming solo audio, ma non rifiuterà una richiesta video locale o remota effettuata più avanti nella durata della chiamata.
Quando l'applicazione chiama quindi ITBasicCallControl::Connect, TAPI 3 chiama TSPI_lineMakeCall nel TSP. Dopo aver stabilito una chiamata, l'MSP e il TSP possono comunicare in base alle esigenze.
Quando una chiamata è disconnessa, è fino al provider di servizi di distribuzione e TSP per comunicare sulla riduzione della chiamata. Tapi3.dll chiamerà TSPI_lineDrop se l'applicazione chiama Disconnetti.