2012-03-02 2 views
1

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

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

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

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

Моя топология графа (Custom) Нажмите Source Filter -> Color Space Converter -> Ds .Net Grabber -> Цветовое пространство конвертера 0001 -> Video Mixing Renderer 9.

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

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

+0

Тупики при разблокировке рабочей станции обычно вызваны тем, что SystemEvents запускает событие в неправильном потоке. Это восходит к инициализации вашей программы, что поток создает первое окно. С проблемой, когда это не основной поток.Написание собственного заставки - типичная причина. –

+0

Основной поток создает форму, в которой inturn создает элемент управления. Нет заставки или что-то в этом роде. Насколько я мог видеть, для разблокировки нет SystemEvents, только сеанс, завершающий/завершающий и сеансовый. Как вы думаете, мне нужно каким-то образом обработать эти события? – integra753

+0

Нет, я просто упомянул об этом как об общей причине. Слишком мало информации о вашем вопросе, чтобы помочь избавиться от таких возможностей. Шансы получить полезный ответ низкие. –

ответ

0

Это ошибка:

// // MessageId: VFW_E_BUFFER_NOTSET // // MessageText: // // No buffer space has been set.%0 // define VFW_E_BUFFER_NOTSET ((HRESULT)0x8004020CL)

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

2

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

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

После конфигурации просто запустить GraphStudio и перетащить файл AVI в нем, так что вы увидите, какие кодеки использование системы. Вы увидите такое же поведение в graphedit с кодами win7 по умолчанию после ctrl + alt + del.

Но на самом деле есть некоторые проблемы с обработкой устройства сброса с помощью кодеков win7 по умолчанию.

+0

Как заменить кодеки, просто установить их или мне нужно заставить их использовать при создании графика? Ctrl + Alt + Del дает мне подобное поведение, и, похоже, больше информации об этом в сети, поэтому, надеюсь, я что-то нахожу. – integra753

+0

Установите пакет кодеков klite, в котором содержится специальный инструмент для замены кодеков win7 или просто Google. – AlexTheo

+0

Отправлялся на несколько дней, поэтому просто обернулся, чтобы попробовать это. Я должен был упомянуть об этом, но проблема блокировки возникла при воспроизведении видео в том же приложении со слегка другой графической конфигурацией. Я установил K-Lite и отключил Mpeg4s Decoder DMO и ffshow видеофильтр, что вынудило график использовать AVI Decompressor в качестве декодера. При этом я больше не вижу проблем с заблокированными/Ctl + Alt + Delete при воспроизведении видео. Unfortunaltley Я все еще вижу проблему с моим потоком видео в реальном времени. Я думаю, что проблема должна быть в моем исходном фильтре, поэтому я собираюсь начать копать там. – integra753

0

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