Пример DirectShow.NET - загрузите лучший профиль

Я использую пример приложения CapWMV для DirectShow.NET.

Он загружает профиль очень низкого качества в Capture.cs:

// Windows Media Video 8 for Dial-up Modem (No audio, 56 Kbps)
// READ THE README for info about using guids
Guid cat = new Guid(0x6E2A6955, 0x81DF, 0x4943, 0xBA, 0x50, 0x68, 0xA9, 0x86, 0xA7, 0x08, 0xF6);

Ридме говорит

Если вы ДОЛЖНЫ использовать направляющие, вы можете найти их в%windir%\WMSysPr9.prx.

Но когда я загружаю другой профиль, если происходит сбой, возможно потому, что я не подключаю аудиопоток, как объясняет документ Readme для WindowsMedia:

Самый простой (тот, который используется чаще всего в примерах) - это использовать IWMProfileManager::LoadProfileByID. Этот метод использует Guid, который сопоставляется с записями в% windir% \ WMSysPr9.prx и используется для указания различных параметров вывода (BPS, размер видео и т. Д.).

Если профиль настроен на 2 потока (т. Е. Аудио и видео), вы ДОЛЖНЫ подключить к записывающему устройству как аудио-, так и видеопоток, иначе записывающее устройство не сможет записать.

Поскольку я предполагаю, что не могу загрузить профиль из файла с DirectShow.NET, я должен загрузить лучший профиль из WMSysPr9.prx (с помощью Guid) и подключить аудиопоток.

Как бы я сделал это соединение в этом примере?

1 ответ

Решение

Основанные на GUID "системные" профили устарели. Это предопределенные профили Windows Media 8, на которые вы можете ссылаться только по GUID, а не строить весь профиль по частям. Windows Media 9 не предлагал никаких предустановок, поэтому вы должны создать пустой профиль и добавить туда потоки для их настройки.

Системные профили:

Нет предопределенных системных профилей, которые используют кодеки Windows Media 9 Series. Вы можете создать свой собственный профиль Windows Media 9 Series, используя профиль версии 8 в качестве отправной точки. Для получения дополнительной информации см. Повторное использование потоковых конфигураций.

MSDN поможет вам в создании профиля здесь:

Основные этапы создания и / или изменения профилей:

  • Создайте пустой профиль или загрузите существующий профиль для редактирования.
  • При необходимости настройте каждый из потоков на основе поддерживаемых данных профиля, полученных из кодека, который будет использоваться для кодирования потока.
  • Настройте взаимное исключение, если это необходимо.
  • Настройте совместное использование полосы пропускания, если это необходимо.
  • Установите приоритет потоков в файле, если требуется.

Вы можете найти фрагмент кода здесь. Это C++, но преобразование в C# было бы довольно просто.

Другие вопросы по тегам