Auswählen eines Terminals

Im folgenden Codebeispiel wird veranschaulicht, wie Terminals für Datenströme ausgewählt werden, die einem Aufruf zugeordnet sind.

Bevor Sie dieses Codebeispiel verwenden, müssen Sie die Vorgänge in Initialize TAPI und Select an Address ausführen.

Außerdem erfordert dieses Beispiel, dass die Anwendung bereits über einen Zeiger auf die ITBasicCallControl-Schnittstelle eines eingehenden oder ausgehenden Anrufs verfügt. Codebeispiele zum Abrufen dieses Zeigers finden Sie unter Tätigenoder Empfangen eines Anrufs .

Hinweis

Dieses Beispiel verfügt nicht über die Fehlerüberprüfung und -releases, die für Produktionscode geeignet sind.

 

// pAddress is an ITAddress interface pointer.
// pBasicCall is an ITBasicCallControl interface pointer.

// Get the ITStreamControl interface.
ITStreamControl * pStreamControl;
HRESULT hr = pBasicCall->QueryInterface(
        IID_ITStreamControl,
        (void **) &pStreamControl
        );
// If ( hr != S_OK ) process the error here. 

// Enumerate the streams and select 
// terminals onto them.
IEnumStream * pEnumStreams;
ITStream    * pStream;
hr = pStreamControl->EnumerateStreams(&pEnumStreams);
// If ( hr != S_OK ) process the error here. 

while ( S_OK == pEnumStreams->Next(1, &pStream, NULL) )
{
    // Get the media type and direction of this stream.
    long                lMediaType;
    TERMINAL_DIRECTION  dir;
    hr = pStream->get_MediaType( &lMediaType );
    // If ( hr != S_OK ) process the error here. 
    hr = pStream->get_Direction( &dir );
    // If ( hr != S_OK ) process the error here. 

    // Create the default terminal for this media type and direction.
    //   If lMediaType == TAPIMEDIATYPE_VIDEO and
    //   dir == TD_RENDER, a dynamic video render terminal
    //   is required. Please see Incoming.cpp in 
    //   the samples section of the SDK. 
    // For all other terminals, get the default static terminal.
    ITTerminal * pTerminal;
    ITTerminalSupport * pTerminalSupport;
    hr = pAddress->QueryInterface( 
            IID_ITTerminalSupport, 
            (void **)&pTerminalSupport
         );
    // If ( hr != S_OK ) process the error here. 
    hr = pTerminalSupport->GetDefaultStaticTerminal(
            lMediaType,
            dir,
            pTerminal
         );
    // If ( hr != S_OK ) process the error here. 
    // Select the terminal on the stream.
    hr = pStream->SelectTerminal(pTerminal);
    // If ( hr != S_OK ) process the error here. 
}

ITAddress

ITBasicCallControl

ITStreamControl

ITStream

IEnumStream

ITTerminal

ITTerminalSupport