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