Пример 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# было бы довольно просто.