Кроссплатформенный мультимедийный киоск - PullRequest
2 голосов
/ 21 января 2010

Моей команде поручено создать полноэкранное приложение в стиле киоска для воспроизведения мультимедийных файлов. Первоначально нам нужно поддерживать WMV / MP4, а также некоторые изображения в полном разрешении 1080p, хотя в дальнейшем нам потребуется расширить это, чтобы охватить другие форматы (различные форматы видео, а также отображение HTML, SWF и т. Д.).

Приложение также содержит приличную часть бизнес-логики, относящейся к планированию, ведению журнала, мониторингу производительности, а также к сетевому коду для связи с центральным сервером через веб-службы (или, возможно, TCP) и, возможно, в качестве самого сервера. *

Для нашего воспроизведения видео WMV / MP4 аппаратное ускорение будет огромным бонусом. У целевого оборудования слабые процессоры, но сильные видеокарты.

Вот что важно: мы магазин .NET (наше существующее приложение - умный клиент WinForms) и чрезвычайно опытный и продуктивный в C # и стеке .NET. Изначально приложение будет ориентировано на Windows Embedded (.NET 3.0), , но , нам также потребуется версия для Linux. У нас есть некоторый опыт работы с C / C ++ и Linux, но мы не ожидаем хорошей производительности на этой платформе.

Так что я обращаюсь к рекомендациям по следующим пунктам:

  1. Видео. В Windows мы добились хорошего успеха при использовании DirectShow.NET. На подходящем оборудовании WPE MediaElement также, кажется, работает хорошо. Что мы должны использовать в Linux? libavcodec кажется обычным выбором. Это аппаратное ускорение на видеокартах NVidia на Linux? Какие еще варианты у нас есть в Linux? Есть что-нибудь кроссплатформенное, что я мог бы рассмотреть?

  2. Stack. а) В идеале мы могли бы написать все это в .NET, а затем запустить под Mono в Linux. Воспроизведение видео и, возможно, некоторые другие компоненты (например, мониторинг производительности) не будут поддерживаться в Mono. Я думаю, мы могли бы переписать эти элементы, скажем, в C ++; но я предполагаю, что большинство вещей на стороне бизнес-логики будет работать. б) Может быть, лучше потерять нашу предельную производительность в версии для Windows из-за того, что это кроссплатформенное решение. А как насчет Java? У нас есть разные варианты, когда дело доходит до видео? Как насчет другого фреймворка? Что-то вроде QT? Кто-нибудь еще может предложить что-нибудь кроссплатформенное, что будет иметь отношение?

Вообще говоря, учитывая требования, что бы вы использовали?

Я ценю любые ваши ответы.

Ответы [ 4 ]

3 голосов
/ 22 января 2010

Мое предложение заключается в том, что вы используете компоненты Fluendo GStreamer для воспроизведения видео, поскольку он поддерживает аппаратное ускорение, где это возможно, и полностью лицензированные кодеки.

Вы можете посмотреть медиаплеер Banshee, который поддерживает воспроизведение видео, если у вас установлены пакеты Fluendo / GStreamer. Загрузите OpenSUSE 11.2, в котором есть все, что вам нужно, чтобы попробовать и разработать, а затем купить и установить кодеки Fluendo.

Исходный код мудрый, Банши делает отображение видео из C #, смотрите здесь:

Исходный код C #, использующий GStreamer и выполняющий рендеринг видео, находится здесь:

http://git.gnome.org/browse/banshee/tree/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying

Библиотека поддержки C для вызова в Fluendo доступна здесь:

http://git.gnome.org/browse/banshee/tree/libbanshee

Для тестирования Banshee вам не нужно ничего покупать, но ваши видеокодеки будут ограничены видео в кодировке Ogg / Theora. Как только вы получите кодеки Fluendo, вы сможете воспроизводить файлы WMV.

1 голос
/ 21 января 2010

Один из вариантов - использовать Silverlight и исследовать Moonlight в качестве опции для версии linux. Насколько я понимаю, у Moonlight есть несколько плагинов для носителей / кодеков (я считаю, что ffmpeg является основным провайдером) и может дополнительно использовать пакет кодеков MS для поддержки таких вещей, как WMV / MP4.

0 голосов
/ 24 января 2010

Moonlight предлагает два кодека: (a) Полностью лицензированная версия, поставляемая напрямую от Microsoft и не требующая дальнейших переговоров с MPEG-LA и другими держателями патентов, или (b) серверная часть ffmpeg, требующая от вас вести переговоры с патентом держатели акций, если вы планируете использовать.

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

Вы все еще можете использовать C # / Sqlite или VistaDB в качестве системы хранения в качестве части приложения Silverlight.

Вы можете разместить приложение silverlight в http://localhost/App.xap, и это приложение получит локальный доступ к аппарату, связавшись с веб-службой REST или SOAP по http://localhost/rest.ashx или http://localhost/soap.asmx

.

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

http://localhost/scanner.ashx?operation=scan_badge

Затем ваш scanner.ashx HttpHandler выполнит фактическое сканирование (у этого есть полные системные права) и вернет значение в приложение Silverlight.

0 голосов
/ 22 января 2010

Вы можете использовать ffmpeg в моно и .net . Это может включать или не включать отображение видео - ffmpeg обычно просто предоставляет вам декодированное растровое изображение, с которым вы можете делать все, что захотите, будь то отображение его в окне, сохранение в файле, что угодно. Если вы используете ffmpeg-sharp, один и тот же код должен работать в Windows или Linux. Действительно, поместить растровое изображение в окно - это самая простая часть.

...