Udostępnij przez


Opcjonalne strumienie

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

DmO może wyznaczyć niektóre strumienie wyjściowe jako opcjonalne. Opcjonalny strumień generuje dane, które aplikacja może odrzucić — całkowicie lub w okazjonalnych próbkach. Na przykład opcjonalny strumień może zawierać dodatkowe informacje o strumieniu podstawowym.

Aby wykonać zapytanie o to, czy strumień jest opcjonalny, wywołaj metodę IMediaObject::GetOutputStreamInfo i sprawdź parametr pdwFlags. Opcjonalne strumienie zwracają flagę DMO_OUTPUT_STREAMF_DISCARDABLE lub flagę DMO_OUTPUT_STREAMF_OPTIONAL. Te flagi oznaczają prawie to samo; wkrótce wyjaśni się jedną drobną różnicę między nimi.

Jeśli strumień jest opcjonalny, klient może poinstruować DMO, aby odrzucić dane z tego strumienia podczas przetwarzania danych wyjściowych. W tym celu wywołaj metodę IMediaObject::P rocessOutput i ustaw bufor wyjściowy na null dla każdego strumienia, który chcesz odrzucić. (Bufor wyjściowy jest określony w pBuffer elementu członkowskiego DMO_OUTPUT_DATA_BUFFER). Ustaw również flagę DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER w parametrze dwFlags.

Dla każdego strumienia, w którym wskaźnik pBuffer jest null, DMO podejmie próbę odrzucenia danych. Jeśli strumień jest opcjonalny, dmo ma gwarancję odrzucenia danych. Jeśli strumień nie jest opcjonalny, funkcja DMO odrzuca dane, gdy jest to możliwe, ale nie ma gwarancji, że to zrobi. Jeśli nie można odrzucić danych, ustawia flagę DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE. Jeśli ustawisz wskaźnik pBuffer na null, ale nie ustawisz flagi DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, dmO nie odrzuca danych. W takim przypadku funkcja DMO buforuje dane wyjściowe wewnętrznie lub po prostu kończy się niepowodzeniem wywołania ProcessOutput.

Jedyną różnicą funkcjonalną między flagą DMO_OUTPUT_STREAMF_OPTIONAL a flagą DMO_OUTPUT_STREAMF_DISCARDABLE jest następująca:

  • Flaga DMO_OUTPUT_STREAMF_OPTIONAL wskazuje, że klient nie musi ustawiać typu nośnika w tym strumieniu. Jeśli jednak klient rozpocznie przetwarzanie danych bez ustawiania typu nośnika dla tego strumienia, musi odrzucić dane z tego strumienia przez cały czas przesyłania strumieniowego. Jeśli chcesz selektywnie odrzucić próbki, musisz ustawić typ nośnika.
  • Flaga DMO_OUTPUT_STREAMF_DISCARDABLE wskazuje, że mimo że strumień jest opcjonalny, zawsze wymaga typu nośnika.

bezpośrednio hostowanie DMO