Пользовательский контроль DirectShow VMR9 Video Display зависает при разблокировке компьютера - PullRequest
1 голос
/ 02 марта 2012

У меня есть пользовательский элемент управления в WinForm, который я использую для отображения потокового видео с помощью VMR9 / DirectShow.Net. Я передаю декодированные кадры в пользовательский фильтр PushSource. Я вижу странное поведение, когда компьютер заблокирован, а затем разблокирован

  1. Если я сделаю это достаточно быстро, видео начнет воспроизводиться, как только я разблокирую компьютер.
  2. Иногда возникает задержка в 5 - 60 секунд, прежде чем видео снова начинает отображаться
  3. Иногда отображение видео никогда не восстанавливается.

Я должен также добавить, что я могу записывать видео с помощью FFMpeg, пока компьютер заблокирован, а также подтвердил, что кадры вставляются в фильтр источника, но не отображаются (после разблокировки)

Я добавил поток, использующий IMediaEvent для мониторинга событий графика. Когда я запускаю потоковую передачу / график, я вижу события ClockChanged и Paused (даже если он воспроизводится). Когда я разблокирую свой компьютер, я вижу событие VMRRenderDeviceSet param1 = 2, param2 = 0 и Paused (param1 = 0, param2 = 0).

Моя топология графика (Пользовательская) Push Source Filter -> Преобразователь цветового пространства -> Ds .Net Grabber -> Преобразователь цветового пространства 0001 -> Рендеринг микширования видео 9.

Также я могу захватить правильный кадр, пока дисплей заморожен, поэтому, похоже, проблема в VMR9.

С предоставленной информацией кто-нибудь может пролить свет на то, что может быть не так? Я могу предоставить любые другие детали по мере необходимости.

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Если вы используете предопределенные кодеки для windows7, то замените их чем-то вроде xvid, в win7 у меня была такая же проблема, когда я потерял 3d-устройство, это может быть вызвано использованием ctrl + alt + del или чем-то подобным.

Пожалуйста, проверьте эту ссылку: http://www.codecguide.com/windows7_preferred_filter_tweaker.htm

После настройки просто запустите graphstudio и перетащите в него файл avi, чтобы увидеть, какие кодеки использует система. Такое же поведение вы увидите в графике с кодами win7 по умолчанию после ctrl + alt + del.

Но на самом деле это некоторая проблема с обработкой устройства сброса стандартными кодеками win7.

0 голосов
/ 29 марта 2012

У меня такая же проблема при работе с пользовательским распределителем. Причина этого, когда мы блокируем компьютер, тогда устройство DirectX теряется и все рисование останавливается. Если это так, попробуйте перезагрузить ваше устройство, используя метод device.reset. Здесь - образец для восстановления. Надеюсь, это поможет вам.

0 голосов
/ 02 марта 2012

Это ошибка:

// // MessageId: VFW_E_BUFFER_NOTSET // // MessageText: // // Не задано буферное пространство.% 0 // define VFW_E_BUFFER_NOTSET ((HRESULT) 0x8004020CL)

Должна быть причина для этого кода ошибки, и вряд ли сама VMR.Возможно, обратный фильтр (какова топология?) Наткнулся на эту ошибку.И, возможно, вы можете увидеть другие события, сгенерированные графиком, который вы можете получать и обрабатывать.

...