Медиа плеер в Visual Studio 2010

Введение

Я всегда думал, что разработка расширений для Visual Studio – это крайне сложная задача. И я уверен, что так оно и было раньше, но теперь создать свое собственное расширение и поделиться им со всем миром стало действительно просто.

В статье описывается мой первый опыт разработки приложения для Visual Studio и, я надеюсь, не последний.

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

Я подумал, что было бы неплохо иметь возможность переключаться между станциями прямо из окна Visual Studio. Пожалуй, это даже может повысить продуктивность работы. Вот так пришла идея создания расширения для Visual Studio.

Что нужно установить

Писал расширение я уже достаночно давно, так что ипользовалась Visual Studio 2010 RC.

Чтобы разрабатывать расширения для Visual Studio 2010 RC нужно установить следующее (для Release версии ссылки, разумеется, будут другими):

Немного теории

Что такое расширение для Visual Studio, какие они бывают и зачем нужны можно почитать в следующей статье на Хабре (http://habrahabr.ru/blogs/vs/74883/), я вставлю сюда основной кусок:

Visual Studio Extensibility


Как известно, Microsoft Visual Studio — среда для разработки (IDE). Причём расширяемая среда.

В связи с тем, что среда непростая, имеет продолжительную историю и позволяет реализовывать серьёзные вещи на своей основе, появился термин Visual Studio Extensibility (VSX), который объединяет в себе всё, что относится к расширению функционала студии (буду называть её так).

Студия имеет уже десятилетнюю историю. Она была создана в COM-времена (я знаю, что они не прошли) для COM-разработки. Потом изменила своё основное предназначение на .NET-разработку. Но осталась COM-based-приложением, поэтому основная расширяемость непосредственно связана с её COM-природой. Для неё, расширяемости, используется .NET- и COM-интероперабельность. Это, несомненно, привносит в процесс расширения увлекательность и некий шарм (небольшая доля сарказма).

Ядро студии от версии к версии остаётся в основном тем же, что и у 2002-й версии, а большинство новых возможностей (VS2005, VS2008 и VS2010) реализованы с использованием мощи VSX.

К сожалению, разработчику, который будет работать с VSX, придётся столкнуться с «очаровательным кодом», который разрабатывался на протяжении нескольких лет разными людьми, и перерабатывался множество раз. А если учесть природу студии и, возможно, сжатые сроки её разработки, можно представить сколько интересного и удивительного разработчик может увидеть. Всё к тому же сожалению, именование сущностей тоже несколько хромает.

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

Зачем расширять студию?


Собственно, зачем нам может понадобится расширение студии? Если подумать, то можно обнаружить множество решений, основанных на VSX, которые мы (имею в виду дотнетчиков) используем в повседневной жизни. WPF, Silverlight и XAML, WCF, LINQ, Tools for Office, Crystal Reports, Workflow Foundation, тестовые проекты — разработки от MS, которые в более ранних версиях студии отсутствовали, но потом появились благодаря прогрессу. Далее — собственно VSX, который, получается, основан на себе самом и включающий Integration package, DSL Tools и другие штуки. Известные ReSharper, AnkhSVN, XMLSpy и GhostDoc. Возможно, менее известные CodeRush, TestDriven.NET, Smart Paster. Небазовые для .NET языки F#, IronPython, IronRuby, PHP. Всё это вещи в той или иной степени основанные на VSX.

Сразу стоит заметить: расширение студии доступно в двух вариантах — Isolated Mode и Integrated Mode. Различие тут в том, что само ядро студии и её API доступно всегда, но функционал, который присутствует в обычной студии будет доступен только в интегрированном режиме (например, сишарп и вижуал-бейсик, веб-проекты, всяческие окна и инструменты). В изолированном мы получим исключительно оболочку, шелл.

XNA Game Studio, Microsoft Robotics Studio, SQL Server Management Studio, Microsoft Visual Studio Macros — первые, пришедшие в голову продукты, реализованные на основе изолированного шелла. Так же, вся линейка Express-студий: Visual Basic 2008 Express Edition, Visual Web Developer 2008 Express Edition, Visual C++ 2008 Express Edition, Visual C# 2008 Express Edition, — думаю, имеет те же корни.

Нa Хабре, кстати, были публикации о примерах использования VSX:

Теперь, надеюсь, немного более понятно зачем расширять студию. Видится мне, что VSX полезная штука, особенно учитывая то, что он и сам развивается. Новая Visual Studio 2010 должна быть более дружелюбной к тем, кто планирует заняться расширением. Как минимум, по причине того, что .NET Framework 4.0 будет включать в себя Managed Extensibility Framework (как напомнил хабраюзер Vladek).

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

Если же мы хотим обойтись без приобретения дорогостоящей копии Visual Studio Standard, Professional или версии Team System, то специально для нас есть бесплатный Visual Studio Isolated Shell, который можно использовать для создания своих стендэлон-продуктов, например специфических редакторов.

Возможности VSX


Возможности расширения 2008-й версии, так же как и 2005-й, включали в себя три основных варианта:

  • макрос (macros),
  • надстройка (add-in),
  • пэкедж (integration package).

Насколько я понимаю, 2010-я студия и новый SDK пока ничего другого в этот список не привнесли.

Вернёмся к расширениям. Макросы и надстройки доступны всегда, но создание пэкеджей требует наличие Visual Studio SDK.

Для того чтобы получить полную отдачу от VS SDK лучше сначала поставить VS 2008 SDK 1.0, а уже потом VS 2008 SDK 1.1. В 1.1 по какой-то причине отсутствует Project Base, о котором будет рассказано позже.

В общем, после установки VS SDK появится возможность создавать надстройки и пэкеджи, а после установки Visual Studio 2008 Shell (isolated mode) with SP1 — VS Shell-based-решения. Отмечу, что изолированный шелл существует в десяти локализациях.

Исключительно тремя вариантами VSX ограничивается только технически. А так, есть ещё и визуалайзеры (Visualizers), окна (Tool Window), проекты (Project Templates), MSBuild-расширения, DSL Tools и уже упомянутый VS Shell Isolated.

Теперь по порядку:

  • Макросы. Позволяют записывать действия для их дальнейшего повторения, т. е. позволяют программно их автоматизировать. Написание макросов ограничено вижуал-бэйсиком (VB.NET).
  • Надстройки. Надстройки — не просто код. Надстройка интегрируется в оболочку в виде скомпилированного COM-компонента (который является обычной .NET-сборкой) и имеет практически полный доступ к среде и её API.
  • Пэкеджи. Позволяют полностью интегрироваться в оболочку, как и надстройки, но в дополнение предоставляют возможность создавать собственные типы проектов и интегрировать новые языки программирования.

MPF


Основой VSX является Managed Package Framework (MPF). Он позволяет создавать пэкеджи с управляемым кодом. MPF содержит инкапсулированные имплементации множества интерфейсов пэкеджей, что позволяет обходиться меньшим количеством кода для создания собственных пэкеджей.

MPF-неймспейсы


Следующий список неймспейсов становится доступен после установки SDK:

Неймспейс
Описание
Microsoft.VisualStudio
Классы для работы с COM-ошибками, константам студии и вин32-окнами
Microsoft.VisualStudio.Package
Обёртки из управляемого кода для проектов студии, редакторов кода и MSBuild
Microsoft.VisualStudio.Package.Automation
Обёртки для объектов автоматизации
Microsoft.VisualStudio.Shell
Базовые классы MPF, имплементирующие множество основных объектов студии, от которых можно наследоваться
Microsoft.VisualStudio.Shell.Design
Расширения дизайнеров
Microsoft.VisualStudio.Shell.Design.Serialization
Расширения сериализации дизайнеров
Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom
CodeDOM-расширения дизайнеров
Microsoft.VisualStudio.Shell.Flavor
Поддержка подтипов проектов

VSXtra


По словам создателя этого инструментария (VSXtra) разработка пэкеджей стала намного легче, чем была. При помощи использования множества обёрток, других паттернов и прочего он приложил усилия, чтобы скрыть COM-природу студии и «шизофренического состояния» разработчика, требуемого для работы с COM через .NET.

Проблемы, решаемые VSXtra:

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

В общем, он обернул MPF, дореализовав то необходимое, чего не реализовали, причём обёртка эта достаточно современна и гармонична.

Главная задача этого продукта подтолкнуть команду разработчиков студии к созданию нового современного MPF. Ну, а побочная — помочь разработчикам и развлечь своего автора.

Visual Studio 2010 Beta SDK


Visual Studio 2010 Beta SDK содержит несколько новых элементов, которые упрощают разработку расширений:

  • шаблоны создания окон и команд;
  • новый набор шаблонов расширений редактора;
  • новые билд-таски для создания VSIX-манифестов и VSIX-контейнеров, которые можно загрузить в Visual Studio Gallery, позволяющую расшарить ваше расширение;
  • редактор VSIX-манифестов;
  • пустой VSIX-проект, который позволит завернуть в VSIX-контейнер уже существующие проекты расширений.

Что изменилось:

  • DSL Tools вынесены за пределы SDK и теперь доступны в самой студии;
  • примеры SDK доступны только онлайн;
  • документация SDK доступна только онлайн.

На бэте работа над SDK конечно же не закончена. Дальше будет следующее:

  • улучшение процесса разработки расширений;
  • добавление дополнительных шаблонов проектов для расширений;
  • создание дополнительных инструментов создания и отладки расширений;
  • продолжение создания дополнительных примеров создания расширений для десятой студии.

Использование расширения

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

Плейлист может выглядеть следующим образом:

16bit radio >>> http://www.16bit.fm/play/16bit.fm_192.m3u

dance radio >>> http://danceradio.ru/playlist160.m3u

Dinamyte Radio >>> http://80.254.15.12:8000/listen.pls

song 1 >>> D:/0/11.mp3

song 2 >>> D:/0/12.mp3

Где ‘>>>’ – это разделитель. Все, что находится слева от разделителя – это имя радиостанции (или просто название песни/плейлиста для медиа-плеера и т.д.). Тут можно писать все, что угодно. Это имя будет видно в Visual Studio, но оно ни на что не влияет.

Путь к медиа-файлу (подходит все, что может проигрывать Windows Media Player кроме видео: ссылка на интернет радио, плейлист, аудио-файл и т.д.) указывается справа от разделителя.

Сначала нужно создать собственный плейлист (в любом текстовом редакторе) и загрузить его в расширение (кнопка «Load»). После этого нужно выбрать подходящий элемент списка в комбобоксе.

В плеере имеются стандартные кнопки управления проигрывателем: Play/Pause, Stop и регулятор громкости.

Разработка расширения «медиа плеер» для Visual Studio 2010

Во время разработки рсширения для плеера я сталкнулся со следующими основными проблемами:

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

Пути решения этих проблем будут описаны в следующей статье.

Реклама
Запись опубликована в рубрике Uncategorized с метками , . Добавьте в закладки постоянную ссылку.

3 комментария на «Медиа плеер в Visual Studio 2010»

  1. Уведомление: Дайджест технических материалов #1 (для разработчиков) - Alex Krakovetskiy blog - Microsoft User Group Винница

  2. Уведомление: Дайджест технических материалов #3 (Silverlight и RIA) - Alex Krakovetskiy blog - Microsoft User Group Винница

  3. Уведомление: SAM

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s