| Предыдущий | Следующий |
| NS_S_WMP_LOADED_JPG_IMAGE | NS_S_WMR_ALREADYRENDERED |
NS_S_WMG_FORCE_DROP_FRAME
Конвейер Windows Media требует отбросить текущий кадр
NS_S_WMG_FORCE_DROP_FRAME — это HRESULT 856143 (0x000D104F) Windows Media. В AllStat он описан как «отбросьте этот кадр». Бит severity указывает на неошибочный результат, однако значение передаёт конкретное состояние, которое нельзя сводить к обычному S_OK.
В устаревшем конвейере Windows Media или состоянии Player этот статус означает, что текущий кадр следует отбросить. Этот статус содержит значимую информацию об успешном ходе операции: результат нужно интерпретировать до перехода вызывающей стороны к следующему шагу.
Где встречается этот статус
- Этот статус может возвращаться в callbacks источника, reader, writer или renderer Windows Media; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
- Этот статус может возвращаться при автоматизации через Windows Media Player SDK; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
- Этот статус может возвращаться в состояниях media graph, playlist, image, rights или buffering; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
Поскольку этот статус является информационным статусом, языковая оболочка может показать его как успех и скрыть символическое различие. Сохраняйте исходный HRESULT, пока не отработана ветвь, специфичная для этого кода.
Данные и телеметрия
- Для этого статуса сохраните идентификаторы потока и кадра.
- Для этого статуса сохраните временную отметку показа и крайний срок.
- Для этого статуса сохраните текущую позицию рендеринга.
- Для этого статуса сохраните тип кадра.
- Для этого статуса сохраните накопленную долю принудительно отброшенных кадров.
Также зафиксируйте ns_s_wmg_force_drop_frame_operation, ns_s_wmg_force_drop_frame_state_before, ns_s_wmg_force_drop_frame_state_after, время UTC, идентификаторы процесса и потока, версию компонента и идентификатор корреляции. Диагностические данные для этого статуса по возможности должны использовать хэши или GUID вместо чувствительного содержимого.
Что должно быть истинно перед принятием результата
Для этого статуса убедитесь, что отбрасывание текущего кадра лучше сохраняет продвижение по шкале времени, чем его запоздалый вывод, а потеря отражается в телеметрии качества. Для этого статуса корректный возврат из API и завершённый пользовательский запрос не обязательно означают одно и то же.
Для этого статуса прежде чем выбирать восстановление, определите, изменились ли владение объектами, буферы, обратные вызовы или ресурсы.
Правильная обработка и восстановление
Отбросьте указанный кадр, правильно продвиньте временные отметки и измеряйте частоту пропусков. Если принудительные пропуски превышают допустимый порог, включите адаптацию.
Повторяйте операцию только после документированного изменения входных данных или состояния. Повторяйте операцию после этого статуса только если данные показывают изменение входа, ресурса или фазы обработки.
Последовательность диагностики
- Зафиксируйте исходное значение
0x000D104Fдо того, как оболочки, знаковое десятичное форматирование, исключения или общая обработка успеха заменят исходный статус. - Определите операцию, вернувшую этот статус, включая интерфейс или callback, сборку компонента, поток, процесс и фазу машины состояний.
- Для этого статуса подтвердите решающее условие: отбрасывание этого кадра лучше сохраняет продвижение по шкале времени, чем его поздний вывод, а потеря видна в телеметрии качества.
- Проверьте каждый выходной параметр, счётчик, массив статусов, буфер, callback, состояние задачи, временную метку медиа, голос транзакции или security token, остающийся частью контракта этого статуса.
- Сравните состояние непосредственно до и после этого статуса; success severity не гарантирует завершения необязательной работы или высокоуровневого действия, которого ожидал вызывающий код.
- Воспроизведите этот статус на минимальном входе, сохраняющем то же условие, затем измените только зафиксированную причину и повторите операцию.
Отличие от соседних результатов
Этот статус нужно отличать от обычного S_OK и от значений того же семейства API, у которых бит severity указывает на сбой; документированное состояние определяет следующее действие.
Соседний с этим статусом код может требовать другого действия, даже если оба имеют severity успешного результата.
Рекомендации разработчикам и администраторам
Код должен обработать этот статус отдельно до общей ветви SUCCEEDED(hr) , если отличаются выходные данные, продолжение, отмена или восстановление. В телеметрии следует сохранять NS_S_WMG_FORCE_DROP_FRAME, 0x000D104F, метод-источник результата и идентификатор корреляции.
Для этого статуса определите владельца повтора, отмены, очистки и сообщения пользователю. Полный сброс системы редко оправдан после этого статуса; предпочтительно минимальное исправление в конкретном компоненте.
Практический сценарий
Предпросмотр прямого эфира отстаёт от срока вывода. Граф отбрасывает один предсказанный кадр, сохраняет синхронизацию со звуком и фиксирует событие.
Регрессионный тест должен воспроизвести этот статус, проверить соответствующие выходные данные и состояние, затем изменить только решающее условие и убедиться в ожидаемом соседнем результате или обычном завершении.
Ссылки
- Microsoft: коды ошибок Windows Media Format SDK — официальный материал Microsoft для интерпретации этого статуса.
- Microsoft: Windows Media Player SDK — официальный материал Microsoft для интерпретации этого статуса.
- Microsoft: событие buffering в Windows Media Player — официальный материал Microsoft для интерпретации этого статуса.
- Microsoft: значения HRESULT — официальный материал Microsoft для интерпретации этого статуса.
Нужно найти другой код? Найти другой код состояния или ошибки.