Воспроизведение видео в Delphi

Многие Delphi программисты, хотя бы раз задумывались о том, чтобы реализовать в своих разработках воспроизведение видео. Но, к сожалению, очень часто попытки реализации сводятся к использованию компонента TMediaPlayer, который входит в комплект поставки Delphi.

Почему, к сожалению, или чем же так плох этот компонент?

Одним из главных недостатков TMediaPlayer на протяжении уже многих лет является далеко не всегда корректная работа с кодеками. В результате, часто возникают ситуации, когда видеофайл, который совершенно нормально воспроизводится даже в стандартном проигрывателе WindowsMedia, TMediaPlayer воспроизвести не в состоянии. А, при попытке воспроизведения данный компонент вместо видео отображает на компоненте, используемом в качестве экрана, сообщение об ошибке.

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

Рассмотрим четыре варианта воспроизведения видео, альтернативных TMediaPlayer.

1.Использование технологии ActiveX;

2.Работа непосредственно с DirectShow;

3.Использование специальных библиотек dll;

4.Использование API (SDK) стороннего проигрывателя;

Использование технологии ActiveX

Как следует из названия, данный подход основан на использовании для воспроизведения видео различных компонентов ActiveX, установленных в системе.

Достоинством этого подхода, является относительная простота использования. В Delphi имеется возможность импорта компонентов ActiveX (меню Component->ImportComponent или Component->Import ActivX Control, в зависимости от версии Delphi). После завершения операции импорта компонентом ActiveX можно пользоваться как обычным компонентом Delphi, что позволяет, в частности, реализовать нужный функционал достаточно быстро.

С помощью импорта ActiveX, можно использовать в программе, тот же WindowsMedia.

Однако, для того, чтобы программа могла выполнять свои функции, необходимые компоненты ActiveX должны быть установлены на компьютере пользователя. Это создаёт трудности, как при разработке, так и при использовании конечного программного продукта.

Работа непосредственно с DirectShow.

DirectShow это технология работы с мультимедиа разработанная корпорацией Microsoft. С её общим описанием можно ознакомиться, например, в Википедии.

Очевидное преимущество DirectShow состоит в том, что, работая непосредственно с ним, можно реализовать воспроизведение видео практически целиком и полностью, таким образом, каким это нужно разработчику или требуется в соответствии с поставленной задачей.

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

Использование специальных библиотек dll

Для реализации воспроизведения видео также можно использовать специально разработанные для этой цели библиотеки dll. Не всегда, но довольно часто данные библиотеки являются надстройками над тем или иным API, в частности, уже рассмотренным DirectShow, и предоставляют разработчику для работы с видео высокоуровневый интерфейс той или иной степени функциональности и удобства.

Среди многообразия библиотек для работы с видео можно выделить библиотеку xVideo, которая также известна под названием BASS_DSHOW. На момент написания статьи, библиотека бесплатна для некоммерческого использования.

Данная библиотека достойна внимания в первую очередь потому, что она является, в значительной степени, аналогом широко известной среди Delphi программистов библиотеки для работы с аудио BASS. Только она предназначена для работы с видео.

Также как и BASS, xVideo имеет простой и понятный API, а также подробную документацию и демо-примеры. Вследствие этого освоить работу с ней достаточно не сложно, а для программиста, ране уже работавшего с BASS, эта задача становится ещё проще.

К слабым сторонам xVideo относятся, в первую очередь, возможность воспроизведения видео только тех форматов, для которых установлены кодеки, а также некорректное масштабирование видео. То есть, если компонент, который используется в качестве экрана, имеет соотношение размеров не соответствующее соотношению размеров видео, либо вообще нестандартное (например, 20:3 вместо 16:9), то изображение при воспроизведении будет искажено. Кроме того, для работы библиотека xVideo требует наличия библиотеки BASSMIX.

Ссылки на сайт разработчика xVideo и её обсуждение приведены в конце статьи.

Использование API (SDK) стороннего проигрывателя

Некоторые проигрыватели, например VLC, имеют внешний API на основе которого, можно разработать свою программу, которая умеет воспроизводить видео.

Как правило, этот API представлен в виде SDK в составе одной или нескольких dll библиотек и, при наличии, набора вспомогательных компонентов, плагинов и так далее.

В отличие от всех подходов, рассмотренных ранее, при использовании API проигрывателя:

·Не требуется импорт ActiveX,

·Некоторые проигрыватели имеют встроенные наборы кодеков. Преимущества этого очевидны.

·Низкоуровневые и вспомогательные операции, такие как создание потока, уже упомянутое, масштабирование видео и так далее, как правило, уже реализованы в SDK и он берёт их выполнение на себя.

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

Недостатки:

·Большой объём компонентов SDK (в случае VLCверсии 2.1.0.0. порядка 46 МБ);

·Возможности программы могут быть ограничены возможностями API используемого плеера;

·Не все SDK имеют реализацию для Delphi. Поэтому, велика вероятность того, что придётся самостоятельно писать модули, реализующие импорт нужных функций из dllбиблиотек.

Среди SDK проигрывателей одним из наиболее известных является VLC SDK, распространяемый по лицензии GNU General Public License.

VLC SDK имеет встроенный набор кодеков , а также реализацию для многих языков программирования, в том числе, для Delphi. Последняя выполнена в виде набора компонентов PasLibVlc. По состоянию на момент написания статьи, поддерживаются версии Delphiс 4 по XE4.

PasLibVlc позволяет писать программы, как с использованием компонентов, так и с использованием непосредственно API. Оба варианта использования наглядно проиллюстрированы в демо-примерах, которые входят в комплект поставки.

Ссылки на официальные web-ресурсы VLC SDK и PasLibVlc приведены в конце статьи.

Заключение

В статье представлен краткий обзор лишь некоторых средств воспроизведения видео в программах, написанных на Delphi.

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

Из описанных в ней подходов и средств ни одно не рекомендуется как «лучшее» или наоборот «худшее». Все они имеют как сильные, так и слабые стороны. И, в зависимости от специфики конкретной задачи, в одном случае лучшим решением может оказаться одно, а в другом случае другое.

А, что применять в той или иной конкретной программе, это может решать только её разработчик.

Ссылки

1.Surodev.com – Официальный сайт разработчика библиотеки xVideo

2.Topic: BASS_DSHOW Video Library – Обсуждение библиотеки xVideo

3.libVLC — VideoLAN Wiki – Официальный сайт VLC SDK

4.PasLibVlc — VideoLAN player inside Delphi, Lazarus, FreePascal application – Официальный сайт PasLibVlc

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *