2011-02-10 2 views
5

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

Бонусные баллы, если я могу определить, какой дисплей в системе с несколькими мониторами он играет.

+1

вы говорите об обнаружении, если он играет на сайте? или просто вообще? – Jason

+0

Просто в общем. Media Player, VLC и т. Д. Используют ускорение видеокарты, если доступно с оверлеями и т. Д. Я пытаюсь поймать ловушку, если это произойдет. – Boarder2

+0

Аналогичный вопрос с некоторыми возможными решениями: http://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now – TheLegendaryCopyCoder

ответ

0

Я не думаю, что это возможно во всем мире, поскольку видео можно воспроизводить через DirectX, OpenGL или даже GDI. Я думаю, что ваш лучший вариант - иметь белый список приложений, которые используются для воспроизведения и опроса на запущенных процессах. После того, как у вас есть этот процесс, вы можете попробовать найти его окна/элементы управления и, возможно, попытаться получить HDC и использовать соответствующий (DirectShow) API для запроса или управления устройством.

Когда у вас есть окно, просто позвоните System.Windows.Forms.Screen расскажет, какой экран показывает эти координаты.

3

Исследуйте DirectShowSpy от alax.info. Это позволит вам «шпионить» за работой графиков DirectShow. Очень полезно в сочетании с инструментом, например GraphStudio.

Я разработчик C++, пишущий приложения DirectShow, и все время использую оба инструмента, они являются незаменимыми инструментами отладки.

Google - предмет таблицы текущих объектов. Графы DirectShow (обычно) добавляются в таблицу рабочих столов, поэтому вы можете перечислить ROT, чтобы определить, какие графики выполняются в системе.

На вашей видеокарте будет использоваться фильтр рендеринга DirectShow для воспроизведения видео на графике Directshow. Средство рендеринга обычно питается фильтром декодера. Фильтр декодера выполняет работу по декодированию видео, и именно декодер должен быть проинструктирован использовать ускорение DXVA.

Так, например, у вас может быть фильтр декодера H.264 на графике воспроизведения, вы должны дать ему указание использовать ускорение DXVA.

Было моим опытом, что фильтр декодера будет иметь возможность включить/выключить декодирование DXVA с ускорением видео, но это будет специфично для рассматриваемого декодера, и поэтому будет намного сложнее для всеобщего обнаружения.

Так, например, вы можете написать код, чтобы определить, разрешен ли DXVA, путем запроса фильтра декодера в работающем графике, который декодирует поток H.264, но код для запроса фильтра декодера для графика VP8, скорее всего, будет иметь другой код.

This MSDN link поддерживает мой опыт в том, что ускорение DXVA переключается через фильтр декодера; может быть какой-то способ запросить графическую карту, но я думаю, что это будет конкретный поставщик карт gfx.

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

Смежные вопросы