| Предыдущий | Следующий |
| NS_E_AUTHORIZATION_FILE_NOT_FOUND | NS_E_BAD_MARKOUT |
NS_E_BAD_MARKIN
Как интерпретировать код в реальном сеансе кодирования
0xC00D1B58 имеет имя NS_E_BAD_MARKIN. Его практическая область — проверка IWMEncSource.MarkIn до фиксации временной шкалы источника; она относится к временной шкале и обрезке источника, а не ко всем компонентам воспроизведения Windows Media или Windows.
Механизм и точка сбоя
До поступления образцов в кодек Windows Media Encoder строит временную шкалу каждого выбранного источника в сеансе, возвращающем NS_E_BAD_MARKIN. Поэтому перед запуском кодирования Encoder сопоставляет MarkIn, MarkOut, Repeat и параметры сжатия времени с длительностью источника и между собой.
Файл может успешно открываться и сообщать длительность, но всё равно завершиться здесь ошибкой, поскольку проверка временной шкалы выполняется после обнаружения источника, но до получения первого закодированного образца в сеансе, который возвращает NS_E_BAD_MARKIN, поскольку временная шкала проверяется после обнаружения источника и до первого закодированного образца. Типичный сценарий: интерфейс сохраняет секунды, тогда как уровень автоматизации ожидает миллисекунды, из-за чего MarkIn оказывается за пределами клипа. Для NS_E_BAD_MARKIN первый результат Encoder поэтому важнее более позднего общего сообщения.
Матрица воспроизведения
| Поле | Что сохранить |
|---|---|
| Определяющие значения | MarkIn, MarkOut и обнаруженную длительность источника в миллисекундах, включая сведения о преобразовании отрицательного служебного значения в беззнаковое |
| Объект-владелец | Имя группы источников, URL источника или моникер устройства, MarkIn и MarkOut в миллисекундах, обнаруженную длительность, флаг Repeat, режим предварительной обработки и состояние Encoder |
| Связь с сеансом | То же поколение группы источников, индекс аудитории, идентичность объекта и последовательность обратных вызовов, при которых возник NS_E_BAD_MARKIN |
| Данные нижнего уровня | Первый HRESULT COM, драйвера, файловой системы или кодека, появившийся до сопоставления условия с NS_E_BAD_MARKIN |
| Контролируемое сравнение | Заведомо исправный сеанс, в котором изменён только параметр, названный границей недопустимого MarkIn |
Матрица доказательств
| Наблюдение | Интерпретация |
|---|---|
| Наблюдение подтверждает этот результат | Определяющими данными являются MarkIn, MarkOut и обнаруженная длительность источника в миллисекундах, включая возможное преобразование отрицательного служебного значения в беззнаковое. Они подтверждают проверку IWMEncSource.MarkIn до фиксации временной шкалы в том же поколении объекта. |
| Наблюдение указывает на более ранний сбой | Записанные значения удовлетворяют правилу MarkIn, но источник, драйвер, активация COM или файловая операция раньше возвращают другой HRESULT. |
| Наблюдение указывает на более поздний сбой | Encoder проходит эту границу, однако на следующем этапе завершается ошибкой кодек, архивный приёмник или приёмник трансляции. |
| Проверка после исправления | Внесите одно изменение: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности. Затем повторите исходный вызов и убедитесь, что он проходит проверку MarkIn. |
Влияние NS_E_BAD_MARKIN ограничено переходом временной шкалы и обрезки источника, который выполняет проверку IWMEncSource.MarkIn до фиксации временной шкалы. Для NS_E_BAD_MARKIN сам по себе код не доказывает повреждение всех входных файлов, отсутствие всех кодеков или непригодность всей установки Windows Media. В типичном случае, когда интерфейс сохраняет секунды вместо ожидаемых миллисекунд и MarkIn оказывается за пределами клипа, сохраните первый неуспешный вызов и идентичность объекта, чтобы более поздняя обёртка не заменила эти данные.
Минимальный эксперимент
- Запишите
0xC00D1B58,NS_E_BAD_MARKIN, версию Encoder и точный вызов API или обращение к свойству, вернувшее результат. - Экспортируйте текущую конфигурацию
.wmeили.prx, затем сохраните MarkIn, MarkOut и обнаруженную длительность источника в миллисекундах, включая сведения о преобразовании отрицательного служебного значения в беззнаковое. - Для
NS_E_BAD_MARKINпроверяйте предварительное условие временной шкалы и обрезки, не меняя одновременно источник, профиль и выходной приёмник. - Выполните одно контролируемое сравнение, изменив только это условие: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности.
- После изменения пересоздайте затронутый объект Encoder, не предполагая, что существующий граф отбросил прежнее состояние недопустимого MarkIn.
Не объединяйте эти результаты
| Результат | Почему это другая граница |
|---|---|
NS_E_BAD_MARKOUT | проверка IWMEncSource.MarkOut относительно MarkIn и конца источника |
NS_E_SOURCE_CANNOT_LOOP | Repeat включён для типа источника, который нельзя воспроизводить повторно |
NS_E_MARKIN_UNSUPPORTED | обрезка по MarkIn или MarkOut запрошена для источника, не поддерживающего позиционирование по меткам |
Что изменить, а что оставить неизменным
Измените минимальное ответственное предварительное условие: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности. При повторной проверке NS_E_BAD_MARKIN оставьте неизменными все несвязанные параметры источника, аудитории и выхода до повторения того же вызова.
Во время диагностики временной шкалы не перекодируйте и не обрезайте единственную копию входного файла; сохраните исходную длительность и временные метки, чтобы недопустимый интервал можно было воспроизвести в сеансе, возвращающем NS_E_BAD_MARKIN.
Официальная документация для NS_E_BAD_MARKIN
- IWMEncSource.MarkOut.
- IWMEncSource.Repeat.
- Подготовка группы источников к кодированию.
- Двухпроходное кодирование.
Нужно найти другой код? Найти другой код состояния или ошибки.