Поделиться через


Метод IMFMediaStream::RequestSample (mfidl.h)

Запрашивает пример из источника мультимедиа.

Синтаксис

HRESULT RequestSample(
  [in] IUnknown *pToken
);

Параметры

[in] pToken

Указатель на интерфейс IUnknown на объект, который используется в качестве маркера для запроса. Вызывающий объект должен реализовать этот объект. Этот параметр может принимать значение NULL. См. заметки.

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
MF_E_END_OF_STREAM
Достигнут конец потока.
MF_E_MEDIA_SOURCE_WRONGSTATE
Источник мультимедиа остановлен.
MF_E_SHUTDOWN
Был вызван метод Shutdown источника.

Комментарии

Если значение pToken не равно NULL, поток мультимедиа вызывает AddRef для pToken и помещает маркер в очередь первого входа.

Когда будет доступен следующий пример, поток мультимедиа выполняет следующие действия:

  1. Извлекает первый маркер из очереди.
  2. Задает атрибут MFSampleExtension_Token для примера мультимедиа. Данные атрибута являются указателем на объект токена.
  3. Отправляет событие MEMediaSample . Данные события являются указателем на интерфейс IMFSample примера мультимедиа.
  4. Вызывает release для маркера.
Если поток мультимедиа не может выполнить запрос вызывающего объекта для примера, он просто освобождает объект токена и пропускает шаги 2 и 3.

Вызывающий объект должен отслеживать количество ссылок в маркере запроса. Если поток мультимедиа отправляет событие MEMediaSample , получите атрибут MFSampleExtension_Token из примера и сопоставьте значение атрибута с токеном. Если количество ссылок маркера падает до нуля и вы не получили событие MEMediaSample, это означает, что запрос был удален.

Так как конвейер Media Foundation является многопотоком, метод RequestSample источника может вызываться после остановки источника. Если источник мультимедиа остановлен, метод должен вернуть MF_E_MEDIA_SOURCE_WRONGSTATE. Конвейер не рассматривает этот код возврата как условие ошибки. Если источник возвращает любой другой код ошибки, конвейер обрабатывает ее как неустранимую ошибку и останавливает сеанс.

Примечание В более ранних версиях документации указан неправильный код ошибки для этого случая.

 

Если источник мультимедиа приостановлен, метод выполняется успешно, но поток не доставляет выборку, пока источник не будет запущен снова.

Если источник мультимедиа обнаруживает ошибку асинхронно при обработке данных, он должен сигнализировать об ошибке одним из следующих способов (но не обоими):

  • Возвращает код ошибки из следующего вызова RequestSample .
  • Отправка события MEError .

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mfidl.h
Библиотека Mfuuid.lib

См. также раздел

IMFMediaStream

Источники мультимедиа