2010-01-21 1 views
2

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

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

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

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

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

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

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

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

Я ценю всех, кто может иметь.

ответ

2

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

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

Исходный код мудрый, Banshee делает видео-дисплей с 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.

+0

Это замечательный материал, спасибо за ответ. Я внимательно посмотрю на Банши. Для удовольствия я попытался воспроизвести один из моих медиафайлов в Linux, и он попросил меня найти кодек; который он загрузил и установил (он был подключен gstreamer), а затем воспроизведен файл. Я понимаю, почему общие кодеки не включены в дистрибутивы Linux, но я думаю, мне не ясно, как Fluendo взимает плату за плагины на своем сайте, но ОС может просто захватить их и использовать. Возможно, это еще один вопрос! Еще раз спасибо. – TheNextman

+0

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

1

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

+0

libavcodec является частью ffmpeg, и да, moonlight использует ffmpeg. ffmpeg просто декодирует видео, он вообще не обрабатывает отображение, не говоря уже об аппаратном обеспечении. Moonlight имеет GPU accelleration в своем списке задач, но пока не предоставляет его. –

+0

Кроме того, из того, что я слышу, поддержка ffmpeg wmv/mp4 по крайней мере конкурентоспособна с кодеками MS Windows, если не лучше в случае mp4. –

+0

Спасибо. На самом деле мы фактически уволили Silverlight (хотя мы, как правило, крупные сторонники технологии). Нам нужно много места на клиенте для хранения медиафайлов, нужна локальная история хранения данных (например, SQLLite или VistaDB), и нам нужно быть достаточно близко к ОС, чтобы выполнять такие функции, как мониторинг производительности и изменение настроек хоста машина. – TheNextman

0

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

+0

Спасибо. Я смотрел libavcodec (и, в дополнение, ffmpeg). Кажется (пожалуйста, поправьте меня, если я ошибаюсь), что он не использует видеооборудование в Windows. Конечно, он использует гораздо больше процессора, чем просто воспроизведение видео в WPF, DirectShow или даже Windows Media Player. Тем не менее, я не против использовать наиболее подходящий инструмент для каждой платформы. Вы знаете, может ли ffmpeg использовать аппаратное ускорение в Linux? – TheNextman

+0

В автономном приложении ffmpeg используется аппаратное ускорение для отображения, если доступно, насколько мне известно. Но libavcodec не использует GPU для ускоренного декодирования и не делает видеоизображения - все, что он делает, это растровые изображения возврата. Я не думаю, что какая-либо существующая видео-библиотека для Linux ускоряет декодирование графического процессора, но я бы предположил, что если какая-либо библиотека сделает это, libavcodec будет. –

+0

Мне нужно будет установить Linux и посмотреть, я думаю ... Спасибо! – TheNextman

0

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 заявл ication.

+0

Мне нравится идея использования Silverlight и использование локальных веб-сервисов для доступа к системе - отличная идея! Однако, не вдаваясь в реальную специфику, мы считаем, что «толстый» клиент, вероятно, лучше подходит для нас, двигаясь вперед. – TheNextman