다음을 통해 공유


플러그형 터미널 구현

플러그형 터미널 구현에 대한 일반적인 요구 사항은 다음과 같습니다.

  • 플러그형 터미널의 기본 스트리밍 코드는 원하는 MSP의 기능과 일치해야 합니다.
  • 터미널은 DirectShow 필터를 사용하여 대부분의 MSP를 사용해야 합니다(여기서 가정).
  • 오디오 터미널은 대부분의 MSP에 대해 8kHz 16비트 모노 선형 PCM을 지원해야 합니다.
  • 터미널은 IMarshal을 구현하여 자유 스레드 마샬링을 사용하도록 설정해야 합니다. 터미널은 COM API CoCreateFreeThreadedMarshaler 를 호출하고 IMarshal 을 반환된 포인터로 집계하여 이 작업을 수행할 수 있습니다. 터미널 개체의 소멸자에서 IMarshal-Release>를 호출해야 합니다.
  • 터미널은 적절한 추가 터미널 관련 인터페이스를 구현하거나 집계해야 합니다.
  • 터미널 구현은 스레드로부터 안전해야 합니다.
  • 터미널 구현은 ITTerminalControl의 정의에 Termmgr.h를 #include 합니다. 이는 Windows 2000 SP1에서 TAPI 3 또는 TAPI 3 애플리케이션에 필요한 일반적인 포함 및 라이브러리에 추가됩니다.

인터페이스 및 메서드 구현 정보:

터미널은 ITTerminal (이중 인터페이스-vtable + IDispatch)을 구현해야 합니다.

ITTerminal::get_TerminalClass

터미널은 선택한 GUID의 BSTR 표현을 반환하여 터미널 유형을 식별해야 합니다. SysAllocString을 통해 BSTR을 할당합니다. GUID에서 BSTR로 변환하려면 StringFromCLSID, SysAllocStringCoTaskMemFree를 호출합니다.

ITTerminal::get_TerminalType

애플리케이션이 터미널을 구현하는 경우 터미널은 일반적으로 TT_DYNAMIC 반환해야 합니다. TT_STATIC 반환도 작동하며 터미널이 하드웨어 디바이스에 해당하는 경우 이 값을 반환하는 것이 적절할 수 있습니다. 그러나 이 작업을 수행하면 MSP의 정적 터미널 열거형에 정적 터미널이 없기 때문에 사용자에게 혼동을 줄 수 있습니다.

ITTerminal::get_State

터미널 구현에서 터미널을 동시에 연결할 수 있는 스트림 수를 임의로 제한하지 않는 경우 터미널은 항상 TS_NOTINUSE 반환해야 합니다.

그렇지 않으면 터미널 구현은 터미널을 한 번에 연결할 수 있는 스트림 수를 임의로 제한합니다. 이 경우 터미널은 연결된 스트림 수를 유지해야 합니다. 터미널은 성공적인 ITTerminalControl::ConnectTerminal 호출에서 이 내부 수를 증가시키고 성공적인 ITTerminalControl::D isconnectTerminal 호출에서 이를 감소시켜야 합니다. ITTerminal::get_State 이 개수가 한 번에 터미널을 선택할 수 있는 최대 스트림 수와 같으면 TS_INUSE 반환해야 합니다. 그렇지 않으면 TS_NOTINUSE 반환해야 합니다. 제한이 1인 경우 개수는 단순히 부울 또는 TERMINAL_STATE 값일 수 있습니다.

ITTerminal::get_Name

터미널은 SysAllocString을 통해 할당된 선택한 BSTR 이름을 반환해야 합니다. 이 이름은 사용자에게 의미가 있어야 하며 지역화되어야 합니다.

ITTerminal::get_MediaType

터미널은 TAPIMEDIATYPE_AUDIO 또는 TAPIMEDIATYPE_VIDEO 미디어 형식을 반환해야 합니다.

ITTerminal::get_Direction

터미널은 터미널의 방향을 나타내는 TERMINAL_DIRECTION 열거형 값을 반환합니다. 터미널이 양방향(예: 브리지)인 경우 TD_BIDIRECTIONAL 반환해야 합니다.

터미널은 ITTerminalControl(vtable 에만 해당)을 구현해야 합니다.

ITTerminalControl::get_AddressHandle

애플리케이션 제공 터미널은 항상 NULL 을 주소 핸들로 반환해야 합니다. 이는 이 터미널이 특정 MSP 주소 개체에 만들어지지 않았다는 것을 MSP에 나타냅니다.

ITTerminalControl::ConnectTerminal

이 호출에서 터미널은 지정된 그래프에 필터를 추가하고 해당하는 경우 서로 연결합니다. 그런 다음 터미널은 지정된 스트림 방향에 대해 터미널에서 노출하는 핀을 반환해야 합니다.

여러 스트림에 대한 동시 연결을 지원하지 않는 터미널은 이 메서드를 성공적으로 완료할 때 내부 변수를 TS_INUSE 설정합니다.

터미널은 이 호출에서 dwTerminalDirection 매개 변수를 사용하여 연결되는 스트림의 방향을 결정할 수 있습니다. 양방향 터미널에 필요합니다.

참고

일반적으로(MSP 기본 클래스 및 알려진 모든 MSP에서) 터미널이 단일 ConnectTerminal 호출에서 둘 이상의 핀을 반환하는 경우 MSP 스트림 코드가 연결에 실패합니다. 연결 중에 둘 이상의 핀을 반환하는 터미널은 추가 핀을 효과적으로 사용하려면 MSP가 터미널에 대한 특별한 지식을 갖추어야 하기 때문에 괜찮습니다.

 

ITTerminalControl::CompleteConnectTerminal

터미널은 S_OK 반환해야 합니다. 필요한 경우 터미널에서 연결 후 초기화를 수행할 수도 있습니다.

ITTerminalControl::D isconnectTerminal

터미널은 나머지 그래프에서 터미널 연결을 끊는 데 필요한 모든 작업을 수행해야 합니다. 일반적으로 그래프에서 터미널의 필터를 모두 제거하고 터미널 상태를 TS_NOTINUSE 설정해야 합니다.

ITTerminalControl::RunRenderFilter

터미널은 E_NOTIMPL 반환해야 합니다.

ITTerminalControl::StopRenderFilter

터미널은 E_NOTIMPL 반환해야 합니다.