DirectShow IVideoWindow не может быть шире 4096 пикселей.

У меня есть приложение С#, которое использует DirectShow для воспроизведения видеоклипов. Недавно мы пытались воспроизвести видео размером 9600x1080 пикселей, но оно не показывалось. DirectShow выдает события, которые все.

Мы используем пакет кодеков K-Lite (1295) и используем ffdshow libx264 в качестве кодека и средства визуализации видео. Media Player Classic, использующий тот же рендерер, может нормально воспроизводить клип. Последняя версия нашего приложения использует DirectShow.NET, в то время как более старые версии напрямую вызывают интерфейсы DirectShow. И старая, и новая версии нашего приложения имеют одинаковые проблемы.

После некоторых экспериментов мы выяснили следующее:

  • Если ширина окна видео составляет 4096 пикселей или меньше, оно будет отображать видео. Если это 4097 или шире, видео не будет отображаться. Мы пробовали воспроизводить HD-клип и 720-клип с одинаковыми результатами. Они будут воспроизводиться при разрешении окна видео 4096x1080, но не при разрешении окна 4097x1080 или шире.

  • При изменении разрешения или графических настроек есть несколько вспышек (несколько кадров) видео, когда применяются настройки, поэтому можно предположить, что на самом деле он воспроизводит видео, но отображает только черный цвет.

Проверено на Windows 10, 64 бит.

Любые идеи о том, что мы можем сделать, чтобы исправить это?


person ulvesked    schedule 25.03.2019    source источник


Ответы (1)


Существенной частью является видеорендерер, который вы используете. Хоть вы и не упомянули, вполне вероятно, что вы просто используете значения по умолчанию, а это VMR-7 в оконном режиме. Это дает вам устаревший устаревший компонент с ограничениями, с которыми вы сталкиваетесь.

Вы заинтересованы в обновлении своего приложения для использования EVR.

Выбор подходящего средства визуализации видео

[…]

В Windows Vista и более поздних версиях приложения должны использовать EVR, если это поддерживается оборудованием.

[…] методы используют VMR-7 по умолчанию. […] EVR и VMR-9 никогда не являются средствами визуализации по умолчанию.

person Roman R.    schedule 25.03.2019
comment
Это кажется справедливым. Мы используем IGraphBuilder.RenderFile без какой-либо специальной обработки, поэтому, как вы упомянули, вероятно, будет использоваться VMR-7. Я сделаю некоторые тесты с EVR. - person ulvesked; 25.03.2019