| Предыдущий | Следующий |
| NS_E_EXCEED_MAX_DRM_PROFILE_LIMIT | NS_E_INVALID_PIXEL_ASPECT_RATIO |
NS_E_DEVICECONTROL_UNSTABLE
Граница сбоя в объектной модели Encoder
Практический смысл NS_E_DEVICECONTROL_UNSTABLE (0xC00D1BE1) состоит не только в стандартном сообщении, приведённом выше. Код локализует условие подключаемый модуль управления сообщает, что ленточное устройство больше не находится в надёжном состоянии для выполнения команд в подсистеме управления ленточным устройством и списками монтажных решений.
Управление устройством Windows Media Encoder согласует источник захвата с подключаемым модулем управления, транспортом ленты, отметками входа и выхода и списком монтажных решений в сеансе, возвращающем NS_E_DEVICECONTROL_UNSTABLE. На контрольной точке нестабильного управления устройство захвата и устройство управления должны относиться к одному пригодному аппаратному пути.
Данные, отличающие этот код от ошибки оболочки
Захват видео может оставаться доступным, когда отдельный подключаемый модуль теряет управление транспортом, поэтому ошибка управления устройством в сеансе, возвращающем NS_E_DEVICECONTROL_UNSTABLE, не обязательно означает сбой формата захвата. Например, после неудачного позиционирования быстро повторяются команды, пока дека не перестаёт отвечать предсказуемо. Сохраните различие, задаваемое NS_E_DEVICECONTROL_UNSTABLE до того, как уровень интерфейса преобразует результат в общую ошибку запуска, захвата или профиля.
| Поле | Что сохранить |
|---|---|
| Решающие значения | первая ошибка транспорта, текущее состояние, наличие ленты и результаты повторных команд |
| Объект-источник | CLSID подключаемого модуля управления, идентификатор управляемого устройства, состояние транспорта, наличие ленты, число записей EDL, отметки входа и выхода, результат позиционирования, привязка исходной группы и событие отключения |
| Связь с сеансом | то же поколение исходной группы, индекс аудитории, идентификатор объекта и последовательность обратных вызовов, которые привели к NS_E_DEVICECONTROL_UNSTABLE |
| Данные нижнего уровня | первый HRESULT COM, драйвера, файловой системы или кодека, наблюдавшийся до того, как Encoder сопоставил условие с NS_E_DEVICECONTROL_UNSTABLE |
| Контролируемое сравнение | заведомо исправный сеанс, в котором изменяется только параметр границы нестабильного управления |
Интерпретация следующего измерения
| Наблюдение | Как его интерпретировать |
|---|---|
| Наблюдение, подтверждающее результат | Решающими данными являются первая ошибка транспорта, текущее состояние, наличие ленты и результаты повторных команд. Они подтверждают, что в том же поколении объекта устройство больше не находится в надёжном состоянии для выполнения команд. |
| Наблюдение, указывающее на более ранний сбой | Записанные значения соответствуют условию нестабильного управления, однако источник, драйвер, активация COM или файловая операция раньше возвращает другой HRESULT. |
| Наблюдение, указывающее на последующий сбой | После стабилизации транспорта Encoder может пройти управление устройством, но отдельно завершиться ошибкой кодека, архива или приёмника трансляции. |
| Проверка после исправления | Внесите одно изолированное изменение: прекратите отправку команд, повторно инициализируйте устройство и перед продолжением проверьте транспорт ленты. После повторной инициализации исходная команда должна завершиться без признака нестабильного транспорта. |
Практическое влияние NS_E_DEVICECONTROL_UNSTABLE ограничено переходом управления ленточным устройством и списками монтажных решений, которому принадлежит это условие. Для NS_E_DEVICECONTROL_UNSTABLE, этот код сам по себе не доказывает, что повреждены все входные данные, отсутствуют все кодеки или полностью неработоспособна установка Windows Media. Если после неудачного позиционирования быстро повторяются команды и дека перестаёт отвечать предсказуемо, сохраните первый сбойный вызов и идентификатор его объекта, чтобы последующая оболочка не заменила исходные данные.
Проверка условия без перестройки сеанса
- Запишите
0xC00D1BE1,NS_E_DEVICECONTROL_UNSTABLE, версию Encoder и точный вызов API или обращение к свойству, которое вернуло этот код. - Экспортируйте текущую
.wmeили.prx, затем сохраните первую ошибку транспорта, текущее состояние, наличие ленты и результаты повторных команд. - Для
NS_E_DEVICECONTROL_UNSTABLEпроверьте предварительное условие управления ленточным устройством и списка монтажных решений, не меняя одновременно источник, профиль и выходной приёмник. - Выполните одно контролируемое сравнение, изменив только это условие: прекратите отправку команд, повторно инициализируйте устройство и перед продолжением проверьте транспорт ленты.
- После изменения пересоздайте затронутый объект Encoder, не предполагая, что существующий граф отбросил прежнее состояние нестабильного управления.
Внимательно интерпретируйте соседние результаты
| Результат | Почему это другая граница |
|---|---|
NS_E_INVALID_SOURCE_WITH_DEVICE_CONTROL | управление устройством подключено к источнику, который не является устройством захвата |
NS_E_EDL_REQUIRED_FOR_DEVICE_MULTIPASS | для двухпроходного кодирования с устройством отсутствует обязательный непустой список монтажных решений |
NS_E_END_OF_TAPE | транспорт достигает конца записанного участка либо пригодная лента отсутствует |
Исправление и проверка
Непосредственное исправление этого случая — прекратить отправку команд, повторно инициализировать устройство и перед продолжением проверить транспорт ленты. Пересоздайте затронутую исходную группу, профиль или выходной объект, повторите ту же операцию и убедитесь, что первый сбойный HRESULT больше не поступает с контрольной точки нестабильного управления.
Не перематывайте, не извлекайте и не перезаписывайте ленту до сохранения сбойной записи EDL и текущего временного кода: это изменит данные, используемые для воспроизведения условия позиционирования или конца ленты в сеансе, возвращающем NS_E_DEVICECONTROL_UNSTABLE.
Ссылки для границы NS_E_DEVICECONTROL_UNSTABLE
- WMEncEditDecisionList.Item.
- Структура управления устройством WMTIMECODE.
- IWMEncSource.MarkOut.
- Подготовка исходной группы к кодированию.
Нужно найти другой код? Найти другой код состояния или ошибки.
