Выбор терминала
В следующем примере кода показано, как выбрать терминалы для потоков, связанных с вызовом.
Перед использованием этого примера кода необходимо выполнить операции, указанные в пунктах Инициализация TAPI и Выбор адреса.
Кроме того, в этом примере требуется, чтобы у приложения уже был указатель на интерфейс ITBasicCallControl входящего или исходящего вызова. Примеры кода о том, как получить этот указатель, см. в разделе Вызов или получение звонка.
Примечание
В этом примере нет проверок ошибок и выпусков, подходящих для рабочего кода.
// 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.
}
Связанные темы