Что означает код HRESULT 0xC00D1B59 (NS_E_BAD_MARKOUT)?

 
Предыдущий Следующий
NS_E_BAD_MARKIN NS_E_NOMATCHING_MEDIASOURCE

NS_E_BAD_MARKOUT

Где Encoder формирует этот результат

0xC00D1B59 (NS_E_BAD_MARKOUT) обозначает проверку IWMEncSource.MarkOut относительно MarkIn и конца источника. Для NS_E_BAD_MARKOUT важной диагностической границей является объект Encoder, который проверяет это состояние; более позднее окно «не удалось начать кодирование» может скрыть точное происхождение ошибки.

До поступления образцов в кодек Windows Media Encoder строит временную шкалу каждого выбранного источника в сеансе, возвращающем NS_E_BAD_MARKOUT. До запуска кодировщика Encoder проверяет MarkOut вместе с MarkIn, Repeat и параметрами сжатия времени относительно фактической длительности источника.

Что уже завершилось успешно

Файл может успешно открываться и сообщать длительность, но всё равно завершиться здесь ошибкой, поскольку проверка временной шкалы выполняется после обнаружения источника, но до получения первого закодированного образца в сеансе, который возвращает NS_E_BAD_MARKOUT, поскольку временная шкала проверяется после обнаружения источника и до первого закодированного образца. Типичный случай: новый входной файл короче файла, использованного при создании сеанса .wme. Проверяйте NS_E_BAD_MARKOUT на объекте, который его вернул, а не как общий сбой кодека или операционной системы.

Снимок состояния, который нужно сохранить

ПолеЧто сохранить
Определяющие значенияИсходные значения MarkIn и MarkOut, обнаруженную длительность и сведения о том, изменилась ли длительность источника после повторной привязки
Объект-владелецИмя группы источников, URL источника или моникер устройства, MarkIn и MarkOut в миллисекундах, обнаруженную длительность, флаг Repeat, режим предварительной обработки и состояние Encoder
Связь с сеансомТо же поколение группы источников, индекс аудитории, идентичность объекта и последовательность обратных вызовов, при которых возник NS_E_BAD_MARKOUT
Данные нижнего уровняПервый HRESULT COM, драйвера, файловой системы или кодека, появившийся до сопоставления условия с NS_E_BAD_MARKOUT
Контролируемое сравнениеЗаведомо исправный сеанс, в котором изменён только параметр, названный границей недопустимого MarkOut

Как интерпретировать следующее наблюдение

НаблюдениеИнтерпретация
Наблюдение подтверждает этот результатОпределяющими данными являются исходные MarkIn и MarkOut, обнаруженная длительность и изменение длительности после повторной привязки. Они подтверждают проверку IWMEncSource.MarkOut относительно MarkIn и конца источника в том же поколении объекта.
Наблюдение указывает на более ранний сбойЗаписанные значения удовлетворяют правилу MarkOut, но источник, драйвер, активация COM или файловая операция раньше возвращают другой HRESULT.
После проверки выявлен более поздний сбойEncoder проходит эту границу, однако на следующем этапе завершается ошибкой кодек, архивный приёмник или приёмник трансляции.
Проверка после исправленияВнесите одно изменение: выберите MarkOut позже MarkIn и не позже фактической длительности источника. Затем повторите исходный вызов и убедитесь, что он проходит именно проверку MarkOut.

Влияние NS_E_BAD_MARKOUT ограничено переходом временной шкалы и обрезки источника, который выполняет проверку IWMEncSource.MarkOut относительно MarkIn и конца источника. Для NS_E_BAD_MARKOUT сам по себе код не доказывает повреждение всех входных файлов, отсутствие всех кодеков или непригодность всей установки Windows Media. В типичном случае, когда новый вход короче файла, использованного при создании сеанса .wme, сохраните первый неуспешный вызов и идентичность объекта, чтобы более поздняя обёртка не заменила эти данные.

Контролируемая последовательность диагностики

  1. Запишите 0xC00D1B59, NS_E_BAD_MARKOUT, версию Encoder и точный вызов API или обращение к свойству, вернувшее результат.
  2. Экспортируйте текущую конфигурацию .wme или .prx, затем сохраните исходные MarkIn и MarkOut, обнаруженную длительность и сведения об изменении длительности после повторной привязки.
  3. Для NS_E_BAD_MARKOUT проверяйте предварительное условие временной шкалы и обрезки, не меняя одновременно источник, профиль и выходной приёмник.
  4. Выполните одно контролируемое сравнение, изменив только это условие: установите MarkOut позже MarkIn и не позже фактической длительности источника.
  5. После изменения пересоздайте затронутый объект Encoder, не предполагая, что существующий граф отбросил прежнее состояние недопустимого MarkOut.

Близкие HRESULT с другим смыслом

РезультатПочему это другая граница
NS_E_BAD_MARKINпроверка IWMEncSource.MarkIn до фиксации временной шкалы источника
NS_E_SOURCE_CANNOT_LOOPRepeat включён для типа источника, который нельзя воспроизводить повторно
NS_E_MARKIN_UNSUPPORTEDобрезка по MarkIn или MarkOut запрошена для источника, не поддерживающего позиционирование по меткам

Исправление на правильном уровне

Целевое исправление для NS_E_BAD_MARKOUT — выбрать MarkOut позже MarkIn и не позже фактической длительности источника. Повторная попытка имеет смысл только после изменения зафиксированного предварительного условия.

Во время диагностики временной шкалы не перекодируйте и не обрезайте единственную копию входного файла; сохраните исходную длительность и временные метки, чтобы недопустимый интервал можно было воспроизвести в сеансе, возвращающем NS_E_BAD_MARKOUT.

Технические ссылки для NS_E_BAD_MARKOUT


Нужно найти другой код? Найти другой код состояния или ошибки.