| Предыдущий | Следующий |
| NS_E_CANNOT_DELETE_ACTIVE_SOURCEGROUP | NS_E_AUDIODEVICE_UNEXPECTED |
NS_E_AUDIODEVICE_BUSY
Как интерпретировать код в реальном сеансе кодирования
0xC00D1B61 имеет имя NS_E_AUDIODEVICE_BUSY. Его практическая область — монопольное открытие выбранной конечной точки аудиозахвата; это относится к согласованию устройства аудиозахвата, а не ко всем компонентам воспроизведения Windows Media или Windows.
Механизм и точка сбоя
Для живого аудиовхода подключаемый модуль источника должен открыть выбранную конечную точку и согласовать поток, совместимый с WAVEFORMATEX, прежде чем группа источников сможет быть подготовлена в сеансе, возвращающем NS_E_AUDIODEVICE_BUSY. Владение устройством и поддержка формата являются независимыми проверками в контрольной точке аудиоустройство занято.
Устройство, видимое в интерфейсе Encoder, всё ещё может отклонить запрошенный формат или быть монопольно занято другим процессом при построении графа кодирования в сеансе, возвращающем NS_E_AUDIODEVICE_BUSY. Типичный способ воспроизведения: другой рекордер удерживает открытым вывод захвата, когда Encoder подготавливает сеанс. Поэтому для NS_E_AUDIODEVICE_BUSY первый результат Encoder ценнее более позднего общего сообщения.
Матрица воспроизведения
| Поле | Что сохранить |
|---|---|
| Решающие значения | моникер устройства, дескрипторы процессов или владелец микшера, режим совместного доступа и первый HRESULT открытия |
| Объект, вернувший ошибку | моникер и понятное имя устройства, процесс, удерживающий конечную точку, тег WAVEFORMATEX, число каналов, число выборок в секунду, разрядность, выравнивание блока и HRESULT подключаемого модуля источника |
| Связь с сеансом | то же поколение группы источников, индекс аудитории, идентификатор объекта и последовательность обратных вызовов, которые привели к NS_E_AUDIODEVICE_BUSY |
| Данные нижнего уровня | первый HRESULT COM, драйвера, файловой системы или кодека, полученный до того, как Encoder сопоставил условие с NS_E_AUDIODEVICE_BUSY |
| Контролируемое сравнение | заведомо рабочий сеанс, в котором изменён только параметр, указанный границей аудиоустройство занято |
Матрица диагностических данных
| Наблюдение | Как его интерпретировать |
|---|---|
| Наблюдение подтверждает этот результат | Решающими данными являются моникер устройства, дескрипторы процессов или владелец микшера, режим совместного доступа и первый HRESULT открытия. Они подтверждают монопольное открытие выбранной конечной точки аудиозахвата в том же поколении объекта. |
| Наблюдение указывает на более ранний сбой | Зафиксированные значения удовлетворяют правилу аудиоустройство занято, но источник, драйвер, активация COM или файловая операция раньше возвращает другой HRESULT. |
| Наблюдение указывает на более поздний сбой | Encoder проходит эту границу — монопольное открытие выбранной конечной точки аудиозахвата, — но затем на следующей стадии происходит сбой кодека, архива или приёмника трансляции. |
| Проверка после исправления | Внесите одно изолированное изменение: освободите процесс, удерживающий конечную точку, либо выберите независимо доступный вход. После этого исходный вызов аудиоустройство занято должен пройти ту же контрольную точку. |
Практическое влияние NS_E_AUDIODEVICE_BUSY ограничено переходом согласования устройства аудиозахвата, которому принадлежит монопольное открытие выбранной конечной точки. Само по себе NS_E_AUDIODEVICE_BUSY не доказывает, что повреждены все входные данные, отсутствуют все кодеки или полностью неработоспособна установка Windows Media. В типичном случае, когда другой рекордер удерживает открытым вывод захвата при подготовке сеанса Encoder, сохраните первый сбойный вызов и идентификатор его объекта, чтобы последующая оболочка не заменила данные аудиоустройство занято.
Минимальный эксперимент
- Зафиксируйте
0xC00D1B61,NS_E_AUDIODEVICE_BUSY, версию Encoder и точный вызов API или обращение к свойству, вернувшее ошибку. - Экспортируйте текущую конфигурацию
.wmeили.prx, затем сохраните моникер устройства, дескрипторы процессов или владельца микшера, режим совместного доступа и первый HRESULT открытия. - Для
NS_E_AUDIODEVICE_BUSYпроверьте предварительное условие согласования устройства аудиозахвата, не меняя одновременно источник, профиль и выходной приёмник. - Выполните одно контролируемое сравнение, изменив только это условие: освободите процесс, удерживающий конечную точку, либо выберите независимо доступный вход.
- После изменения пересоздайте затронутый объект Encoder, а не предполагайте, что существующий граф отбросил прежнее состояние аудиоустройство занято.
Не объединяйте следующие результаты
| Результат | Почему это другая граница |
|---|---|
NS_E_AUDIODEVICE_UNEXPECTED | инициализация аудиозахвата после обнаружения устройства вне распознанной ошибки занятости или отклонения формата |
NS_E_AUDIODEVICE_BADFORMAT | согласование запрошенной структуры WAVEFORMATEX с устройством аудиозахвата |
NS_E_NO_AUDIODATA | сторожевой контроль обнаруживает, что открытый аудиоисточник перестал выдавать образцы |
Что изменить, а что оставить без изменений
Измените минимальное ответственное предварительное условие: освободите процесс, удерживающий конечную точку, либо выберите независимо доступный вход. При повторной проверке NS_E_AUDIODEVICE_BUSY сохраняйте неизменными все не связанные параметры источника, аудитории и выхода до повторения того же вызова.
Не меняйте одновременно аудиодрайвер, частоту дискретизации и подключаемый модуль источника; сначала сохраните точную структуру WAVEFORMATEX и первый HRESULT открытия или согласования в сеансе, возвращающем NS_E_AUDIODEVICE_BUSY.
Авторитетная документация для NS_E_AUDIODEVICE_BUSY
- Получение настроенного входа кодировщика.
- Структура WAVEFORMATEX.
- Подготовка группы источников к кодированию.
- WMEncoder.Start.
Нужно найти другой код? Найти другой код состояния или ошибки.
