다음을 통해 공유


선택적 스트림

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

DMO는 일부 출력 스트림을 선택 사항으로 지정할 수 있습니다. 선택적 스트림은 애플리케이션이 완전히 또는 가끔 샘플에서 삭제할 수 있는 데이터를 생성합니다. 예를 들어 선택적 스트림에는 기본 스트림에 대한 추가 정보가 포함될 수 있습니다.

스트림이 선택 사항인지 여부를 쿼리하려면 IMediaObject::GetOutputStreamInfo 메서드를 호출하고 pdwFlags 매개 변수를 검사. 선택적 스트림은 DMO_OUTPUT_STREAMF_DISCARDABLE 플래그 또는 DMO_OUTPUT_STREAMF_OPTIONAL 플래그를 반환합니다. 이러한 플래그는 거의 동일한 것을 의미합니다. 둘 사이의 한 가지 사소한 차이점이 곧 설명될 것입니다.

스트림이 선택 사항인 경우 클라이언트는 출력을 처리할 때 해당 스트림에서 데이터를 삭제하도록 DMO에 지시할 수 있습니다. 이렇게 하려면 IMediaObject::P rocessOutput 메서드를 호출하고 삭제하려는 각 스트림에 대해 출력 버퍼를 NULL 로 설정합니다. 출력 버퍼는 DMO_OUTPUT_DATA_BUFFERpBuffer 멤버에 지정됩니다. 또한 dwFlags 매개 변수에서 DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER 플래그를 설정합니다.

pBuffer 포인터가 NULL인 각 스트림에 대해 DMO는 데이터를 삭제하려고 시도합니다. 스트림이 선택 사항인 경우 DMO는 데이터를 삭제하도록 보장됩니다. 스트림이 선택 사항이 아닌 경우 DMO는 가능하면 데이터를 삭제하지만 그렇게 보장되지는 않습니다. 데이터를 삭제할 수 없는 경우 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE 플래그를 설정합니다. pBuffer 포인터를 NULL로 설정했지만 DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER 플래그를 설정하지 않으면 DMO는 데이터를 삭제하지 않습니다. 이 경우 DMO는 출력을 내부적으로 버퍼링하거나 ProcessOutput 호출에 실패합니다.

DMO_OUTPUT_STREAMF_OPTIONAL 플래그와 DMO_OUTPUT_STREAMF_DISCARDABLE 플래그 간의 유일한 기능적 차이점은 다음과 같습니다.

  • DMO_OUTPUT_STREAMF_OPTIONAL 플래그는 클라이언트가 해당 스트림에 미디어 형식을 설정할 필요가 없음을 나타냅니다. 그러나 클라이언트가 해당 스트림에 대한 미디어 형식을 설정하지 않고 데이터 처리를 시작하는 경우 스트리밍의 전체 기간 동안 해당 스트림의 데이터를 삭제해야 합니다. 샘플을 선택적으로 삭제하려면 미디어 유형을 설정해야 합니다.
  • DMO_OUTPUT_STREAMF_DISCARDABLE 플래그는 스트림이 선택 사항이지만 항상 미디어 형식이 필요하다는 것을 나타냅니다.

DMO 직접 호스팅