| Предыдущий | Следующий |
| NS_E_INVALID_AUDIO_PEAKRATE_2 | NS_E_MULTIPLE_VIDEO_CODECS |
NS_E_INVALID_AUDIO_BUFFERMAX
Диагностический смысл помимо стандартного текста
Для NS_E_INVALID_AUDIO_BUFFERMAX (0xC00D1BBC) диагностически значимое событие — максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах. Сохраняйте границу, вернувшую этот результат, вместе с исходным callback Encoder или вызовом COM.
Почему сеанс может дойти до этой точки
Аудиочасть профиля Encoder объединяет формат источника, codec, режим bitrate, средний и пиковый bitrate, ограничения buffer и схему каналов. Несколько audiences добавляют правила согласованности между audiences к ограничениям отдельных полей. В сеансе, возвращающем этот результат, именно здесь проверяется условие «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах».
Кодек может быть установлен и всё же отклонять выбранное сочетание формата и битрейта; наличие кодека и допустимость профиля — разные проверки в сеансе, возвращающем этот результат. Один конкретный способ получить это условие: в поле, заполняемое байтами, пользовательский редактор профиля передаёт миллисекунды. Он нужно сохранить поколение объекта и числовые параметры, а не только снимок итогового диалогового окна.
Поля трассировки, имеющие диагностическую ценность
| Поле | Что сохранить |
|---|---|
| Решающие значения | значение аудиобуфера, единицы, кодек и bitrate audience |
| Объект, вернувший ошибку | исходный WAVEFORMATEX, индекс audience, индексы audio codec и format, режим VBR, средний/пиковый bitrate, размер buffer, число каналов, язык и целевую совместимость |
| Сопоставление с сеансом | то же поколение source group, индекс audience, идентичность объекта и последовательность callbacks, в которой был получен этот результат |
| Данные нижнего уровня | первый HRESULT COM, драйвера, файловой системы или codec, полученный до того, как Encoder сопоставил условие с ним |
| Контролируемое сравнение | заведомо исправный сеанс, в котором изменяется только настройка границы «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах» |
Матрица решений
| Наблюдение | Как это интерпретировать |
|---|---|
| Наблюдение, подтверждающее он | Решающие данные: значение аудиобуфера, единицы, кодек и bitrate audience. Они подтверждают условие «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах» в том же поколении объекта. |
| Наблюдение, указывающее на более ранний сбой | Зафиксированные значения удовлетворяют правилу этой границы, но source, драйвер, COM activation или файловая операция раньше возвращает другой HRESULT для состояния «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах». |
| Наблюдение, указывающее на более поздний сбой | Encoder проходит эту границу («максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах»), но затем codec, archive или broadcast sink завершается ошибкой на следующем этапе. |
| Проверка после исправления | Внесите одно изолированное изменение: задать поддерживаемую длительность или размер буфера в единицах, ожидаемых API. После этого исходный вызов должен пройти ту же контрольную точку для состояния «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах». |
Практическое влияние он ограничен переходом «audio stream and audience settings», которому принадлежит условие «максимальный размер аудиобуфера находится вне допустимого диапазона либо задан не в тех единицах». Сам по себе он не доказывает повреждение всех входных данных, отсутствие всех кодеков или неработоспособность всей установки Windows Media. В показательном случае, когда в поле, заполняемое байтами, пользовательский редактор профиля передаёт миллисекунды, сохраните первый неуспешный вызов и идентификатор его объекта, чтобы более поздняя ошибка-оболочка не заменила данные о границе invalid audio buffermax.
Путь принятия решения
- Зафиксируйте
0xC00D1BBC, он, версию Encoder и точный вызов API или обращение к свойству, вернувшее ошибку. - Экспортируйте текущую конфигурацию
.wmeили.prxконфигурацию, затем зафиксируйте значение аудиобуфера, единицы, кодек и bitrate audience. - Проверьте предварительное условие настроек аудиопотока и аудиторий, не меняя одновременно источник, профиль и выходной приёмник.
- Выполните одно контролируемое сравнение, изменив только это условие: задать поддерживаемую длительность или размер буфера в единицах, ожидаемых API.
- После изменения пересоздайте затронутый объект Encoder; не предполагайте, что существующий graph автоматически отбросил прежнее состояние invalid audio buffermax.
Коды с похожими симптомами, но другими владельцами
| Результат | Почему это другая граница |
|---|---|
NS_E_INVALID_AUDIO_PEAKRATE_2 | Внесите одно изолированное изменение: задать поддерживаемую длительность или размер буфера в единицах, ожидаемых API. |
NS_E_INVALID_FOLDDOWN_COEFFICIENTS | коэффициенты multichannel fold-down находятся вне допустимого интервала dB |
NS_E_INVALID_AUDIO_PEAKRATE | пиковый аудиобитрейт находится вне допустимого диапазона кодека или режима |
Безопасное восстановление
Устраните условие-источник: задать поддерживаемую длительность или размер буфера в единицах, ожидаемых API. Затем перестройте только ту часть graph Encoder, которую затрагивает он и повторите исходный вызов.
Не меняйте codec одновременно с исправляемым полем профиля: сначала сохраните отклонённые значения и подтвердите результат на том же codec. Это позволяет повторно проверить тот же сеанс с ним без потери исходных диагностических данных.
Исходные материалы
- Структура WAVEFORMATEX.
- IWMEncProfile2.VBRMode.
- Добавление аудитории в профиль кодировщика.
- Выбор метода кодирования.
Нужно найти другой код? Найти другой код состояния или ошибки.