Можно ли программно определить, воспроизводится ли видео? - PullRequest
6 голосов
/ 10 февраля 2011

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

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

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

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

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

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

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

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

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

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

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

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

0 голосов
/ 15 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...