Как создать gstreamer-sharp с помощью monodevelop / xamarin?

Я разработчик AudioCuesheetEditor, приложения для редактирования звуковых листов. Новая версия должна иметь возможность воспроизводить звук, поэтому я хотел бы использовать gstreamer в качестве бэкэнда. Я немного исследовал gstreamer и обнаружил, что мне нужно использовать версию 1.x с привязкой gstreamer-sharp 0.99.x. Нет проблем, загрузил gstreamer-sharp 0.99.0, открыл решение с помощью monodevelop (в Linux) или xamarin (в Windows) и попытался собрать dll, но это не сработало. Я получаю сообщение об ошибке «пространство имен Gst.GLib не найдено».

Я разрабатываю с помощью xamarin / monodevelop, и мне нужно портативное приложение (работающее с mono / .net).

Кто-нибудь может мне помочь, получить gstreamer-sharp build?

Заранее спасибо!


person Sven    schedule 05.02.2014    source источник


Ответы (2)


gstreamer-sharp в настоящее время не поддерживается в Windows, однако вы можете скомпилировать управляемые части в Linux и скомпилировать клей в Windows с помощью Visual Studio:

  1. Установите gtk-sharp 3.0 с https://github.com/mono/gtk-sharp
  2. Скомпилируйте gstreamer-sharp с помощью ./autogen.sh && make
  3. Возьмите скомпилированные двоичные файлы glib-sharp и gstreamer-sharp и все файлы .c из sources / glue /
  4. Загрузите и установите двоичные файлы gstreamer со страницы http://gstreamer.freedesktop.org/data/pkg/windows/1.2.2/ и установите пакеты разработки и двоичные пакеты для архитектуры, для которой вы хотите скомпилировать. Вы можете использовать gstreamer 1.0 или 1.2.
  5. Используйте шаблон Visual Studio из пакета gstreamer-devel и измените тип проекта на библиотечный. Добавьте файлы c, взятые из папки sources / glue, и скомпилируйте библиотеку glue. Библиотека должна называться libgstreamersharpglue-1.0.0.dll.
  6. Совместите управляемые части с родными символами.

РЕДАКТИРОВАТЬ: теперь компилировать клей в Windows стало проще! Кто-то создал проект, который может скомпилировать клей с помощью Visual Studio в Windows. У меня есть вилка с двоичными файлами по адресу https://github.com/xDarkice/libgstreamersharpglue

person Stephan    schedule 06.02.2014
comment
Я думал о поздней привязке к gstreamer напрямую, было бы более прямо, и у меня была бы поддержка Windows. Зачем мне использовать обертку ?! - person Sven; 07.02.2014
comment
Я не уверен, что такое поздняя привязка, но привязка gstreamer вручную - это намного больше работы, чем компиляция для Windows. Управляемые части будут отлично работать с окнами, это просто клей, который не зависит от платформы. А компиляция клея для окон - это просто настройка небольшого проекта VC ++. - person Stephan; 08.02.2014
comment
Если вас интересуют только двоичные файлы, вы можете даже взять двоичные файлы с github.com / Vocaluxe / Vocaluxe / tree / develop / Output Вы можете найти все в папках x64 и x86. - person Stephan; 08.02.2014
comment
Хорошо, спасибо за действительно хорошую поддержку;). Итак, я бы загрузил клей и соединил его с dll gstreamer-sharp, который мне нужно скомпилировать на Linux, и тогда он заработает? Попробую немного;). - person Sven; 10.02.2014
comment
Вы даже можете взять gstreamer-sharp.dll оттуда, в основном в этом репозитории git есть все, что вам нужно, чтобы запустить базовую настройку. Я думаю, что родные зависимости 1.0.11 - person Stephan; 11.02.2014
comment
Я попробовал немного, и теперь у меня просто проблема с зависимостями. Я связал gstreamer-sharp.dll со своим проектом, и он сказал, что мне нужно связать glib-sharp.dll версии 3.0 с моим проектом. Поскольку у Fedora нет rpm, я вручную связал glib-sharp.dll из проекта, но теперь он говорит, что импортированный тип Glib.Value определен несколько раз, так как у меня нет gtk3-sharp.dll :(. Как решить это? - person Sven; 13.02.2014
comment
Glib-sharp.dll также находится в репозитории. - person Stephan; 13.02.2014
comment
Я знаю, я уже вручную привязал его к своему проекту, но потом появляется ошибка, указанная выше. Где-то уже определен GLib, и я думаю, что это в gtk-sharp2. - person Sven; 13.02.2014
comment
GTK-Sharp2 и GTK-Sharp3 нельзя устанавливать параллельно - person Stephan; 13.02.2014
comment
А, ладно, мне понадобится gtk-sharp3? Извините, для меня это немного сложно. Я попытался установить gtk-sharp3 на Fedora, но monodevelop, похоже, этого не заметил, так как он отображал Build for GTK-Sharp Version: 2.12 - person Sven; 14.02.2014
comment
Для gstreamer-sharp требуется glib-sharp от gtk-sharp3, но вы можете использовать скомпилированную версию из репозитория по ссылке выше. Я не уверен, что вы хотите заархивировать. В Linux проще скомпилировать gstreamer-sharp самостоятельно, просто установите gtk-sharp3 и запустите ./autogen.sh && make в своей копии gstreamer-sharp - person Stephan; 17.02.2014
comment
Я хочу создать аудио-бэкэнд для моего проекта, который не зависит от платформы и может воспроизводить * .mp3 && * .wav, также из указанного места и, возможно, позже также делать некоторую запись. Я попытался вручную связать библиотеки, но теперь получаю следующую ошибку: libgstreamer-1.0-0.dll не найден. Как мне сказать windows, что он установлен gstreamer? - person Sven; 18.02.2014
comment
В Windows вы можете использовать SetDllDirectory для поиска дополнительных библиотек во время выполнения. Вам также потребуется использовать Registry.Scan для поиска библиотек gstreamer, если ваша среда не настроена должным образом. - person Stephan; 20.02.2014
comment
Я подумал, что достаточно убедиться, что gstreamer находится в переменной пути окна, но дело не в этом. Есть ли документация, что мне нужно для gstreamer-sharp, чтобы найти gstreamer? Я использую моно, а SetDllDirectory нет. - person Sven; 20.02.2014
comment
Возможно, вам потребуются зависимости в пути и настройках переменных среды gstreamer. SetDllDirectory - это функция Windows, доступ к которой можно получить с помощью pinvoke. - person Stephan; 22.02.2014
comment
Ну разве нет документации на windows? Я искал путь и окна, но ничего не помогло. Также искали здесь gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/, но это тоже ничего не показало. Я попытался установить путь к C: \ Program Files (x86) \ gstreamer \ 1.0 \ x86 \ bin, где находится dll, но он все еще не может ее найти. Любая идея? - person Sven; 22.02.2014
comment
Если вы не можете правильно настроить переменные, лучше всего вручную добавить их во время выполнения с помощью SetDllDirectory и сканировать плагины вручную с помощью Registry.Scan. Gstreamer по-прежнему ориентируется на Linux в качестве основной цели, а платформа Windows практически не поддерживается. По крайней мере, сейчас они предоставляют пакеты. - person Stephan; 23.02.2014
comment
Я немного пробовал использовать SetDllDirectory (C: \ Program Files (x86) \ gstreamer \ 1.0 \ x86 \ bin \), а также LoadLibrary (C: \ Program Files (x86) \ gstreamer \ \ 1.0 \ x86 \ bin \ libgstreamer-1.0-0.dll) или установка пути к переменной среды Environment.SetEnvironmentVariable (PATH, Environment.GetEnvironmentVariable (PATH) +; C: \ Program Files (x86) \ gstreamer \ 1.0 \ x86 \ bin \), но ничего не помогает :(. - person Sven; 25.02.2014
comment
Он просто говорит, что libgstreamer-1.0-0.dll не найден. Похоже, что gstreamer - ничто для моего проекта, или какая-нибудь идея, как работать в Windows И Linux ?! - person Sven; 25.02.2014
comment
Есть ли список рассылки для gstreamer-sharp? Я не могу быть единственным, кто хочет использовать gstreamer-sharp на окнах ?! - person Sven; 27.02.2014
comment
Пожалуйста, проверьте github.com/Vocaluxe/Vocaluxe/blob/ разработка / Vocaluxe / Lib / Sound / - person Stephan; 28.02.2014
comment
Это мне немного помогает, теперь я могу выйти за рамки проблем, связанных с отсутствием DLL. Но теперь я получаю System.AccessViolationException в reg.ScanPath (C: \ Program Files (x86) \ gstreamer \ 1.0 \ x86 \ lib \ gstreamer-1.0); Есть идеи, почему это происходит ?! - person Sven; 02.03.2014
comment
По умолчанию права доступа к папке с программными файлами в Windows ограничены, попробуйте выполнить подключение из другой папки. - person Stephan; 02.03.2014
comment
Я также получаю это исключение, когда пытаюсь загрузить его из d: \ tmp \ gstreamer-1.0, поэтому я бы сказал, что есть еще одна ошибка. - person Sven; 04.03.2014
comment
Попробуйте собрать все из bin и lib в папку и использовать ScanPath и SetDllDirectory для этой папки. - person Stephan; 06.03.2014
comment
Хорошо, когда я пробую это, я получаю следующее исключение GLib.GException: no element playbin --- ›System.Exception: --- Конец трассировки стека внутреннего исключения --- в bei Gst.Parse.Launch (String pipeline_description) в bei MainWindow..ctor (программа _objProgram) в e: \ Projekte \ Audio Cuesheet Editor (Windows) \ src \ AudioCuesheetEditor \ MainWindow.cs: Zeile 100. .... Это также происходит при запуске gst-inspect playbin из e: \ tmp \ bin, но если я запускаю gst-inspect playbin из c: \ program (x86) \ gstreamer \ x86 \ bin, он говорит, что все идеально :(. - person Sven; 06.03.2014
comment
Понятия не имею, что могло помочь? Я очень расстроен и думаю, что мне нужно сделать лишь немного больше. - person Sven; 11.03.2014
comment
Что ж, я не уверен, что вызывает AccessViolationException, единственное, что я мог бы посоветовать, - это загрузить Vocaluxe, скомпилировать его и проверить, не столкнулись ли вы с AccessViolationException. - person Stephan; 12.03.2014
comment
Я немного попробовал и нашел кое-что действительно интересное. Я только что начал тестовый проект с Xamarin, просто небольшой проект GTK. Если я использую SetDllDirectory (C: \ Program Files (x86) \ gstreamer \ 1.0 \ x86 \ bin); перед Application.Init () (без ссылки на gstreamer или glib.dll) и запуска кода для FileChooserDialog, я также получаю System.AccessViolationException. Похоже, что с gstreamer что-то не так ?! - person Sven; 13.03.2014
comment
Я заполнил ошибку на bugzilla: bugzilla.gnome.org/show_bug.cgi?id = 726496 - person Sven; 17.03.2014
comment
Я вижу, вы создаете Vocaluxe с помощью Visual Studio, я создаю с помощью xamarin (в Windows) или monodevelop (в Linux). Может быть проблема в том, что работают разные компиляторы ?! - person Sven; 27.03.2014
comment
Не могли бы вы попробовать собрать sourceforge.net/p/audiocuesheet/code/HEAD/tree в вашей системе? Я просто немного очарован, как это работает в вашей системе, а в моей я получаю исключения, указанные выше ?! - person Sven; 30.03.2014
comment
Registry.ScanPath внутренне использует GLib.Marshaller.StringToPtrGStrdup. Попробуйте вызвать эту функцию, чтобы проверить, не вылетает ли она. - person Stephan; 02.04.2014
comment
Пробовал, и все работает. Я также пробовал это с привязками gstreamer x64, но затем вызовы dll завершились с ошибкой BadImageException, что является индикатором неправильной платформы dll. - person Sven; 02.04.2014
comment
Я мог бы собрать Vocaluxe сейчас, и по мере отладки я увидел, что используется бэкэнд gstreamer. Но почему он терпит неудачу в тестовой программе? - person Sven; 09.04.2014
comment
Не уверен, Vocaluxe использует отдельные конфигурации для x64 и x86, может компилировать в режиме x86? - person Stephan; 09.04.2014
comment
Я только что понял. Моя ошибка заключалась в том, что я не запускал Gst.Application.Init () до reg.ScanPath (). - person Sven; 10.04.2014
comment
@Darkice Могу ли я использовать gstreamer-sharp на Mac OS, iOS и Android? - person konstantin_doncov; 30.06.2014
comment
gstreamer-sharp работает в Mac OS, хотя iOS и Android с использованием Xamarin в настоящее время не поддерживаются, но в какой-то момент для этих платформ будет добавлена ​​поддержка. - person Stephan; 03.07.2014
comment
@Darkice Извините за мертвую ссылку! Я просто получаю много систематических ошибок при попытке скомпилировать gtk-Sharp в mingw, поэтому мне нужен более быстрый ответ или более подробное описание, чтобы разобраться в этой проблеме (Google помогает только в решении конкретных ошибок, а не для понимания что делать в определенных ситуациях). Если есть возможность, не могли бы вы дать мне свой адрес электронной почты или скайп? Спасибо! - person konstantin_doncov; 05.07.2014
comment
@Darkice привет! Пожалуйста, проверьте мой вопрос о gstreamer-sharp, спасибо! - person konstantin_doncov; 01.02.2016

gstreamer-sharp использует автоинструменты для своей системы сборки, вы не можете собрать ее с помощью IDE. Пожалуйста, танцуйте автоинструменты:

./autogen.sh --prefix=/the/prefix/where/you/want/to/install
make
sudo make install
person knocte    schedule 05.02.2014
comment
Спасибо за вашу помощь, но мне нужно использовать IDE, для упаковки и т. Д. Почему есть решение, когда IDE не поддерживается? - person Sven; 05.02.2014
comment
вы по-прежнему можете использовать IDE для своего приложения, но чтобы получить двоичные файлы gstreamer-sharp, вам нужно использовать autotools. Если вам не нравится эта ситуация, то мы будем рады вашей помощи, мы принимаем патчи (я сам gstreamer-sharp разработчик) - person knocte; 05.02.2014
comment
Я бы хотел помочь, но не знаю как? Также существует проблема, заключающаяся в том, что автоинструменты недоступны в Windows, и я также создаю сборки для Windows, поскольку приложение представляет собой решение с несколькими платформами. - person Sven; 05.02.2014
comment
gstreamer-sharp еще не совместим с windows, нам тоже нужна помощь (если у вас нет ноу-хау, чтобы помочь нам, вы всегда можете нанять нас в качестве подрядчиков). Благодарность - person knocte; 05.02.2014
comment
Ну, а gstreamer-sharp-0.9.0 совместим с windows? Я знаю, что это больше не поддерживается, но мне просто нужен бэкэнд для воспроизведения кроссплатформ, возможно, для записи. Кроме того, как проект Banshee справляется с этим, если доступен порт для Windows ?! - person Sven; 05.02.2014
comment
Я думаю, вы имеете в виду v0.10, а не v0.9, которая соответствует версии gstreamer0.10. Последние бинарные файлы Windows Banshee используют только gstreamer-sharp0.10. Мы еще не выпустили версию, которая работает с gstreamer-sharp0.99.0, это бэкэнд по умолчанию только в основной ветке. Мы подсчитали, что при выпуске Banshee 3.0 у нас будет совместимость Windows в Banshee с GStreamerSharp1.0, но мы не знаем, когда это произойдет. И снова волонтеры приветствуются. - person knocte; 05.02.2014
comment
Хорошо, я вижу. Итак, если я все правильно понимаю, где в настоящее время нет поддержки Windows для gstreamer (и gstreamer-sharp), правильно? - person Sven; 06.02.2014
comment
есть поддержка Windows для gstreamer, но мы еще не работали над поддержкой Windows для gstreamer-sharp - person knocte; 06.02.2014
comment
позвольте нам продолжить это обсуждение в чате - person Sven; 06.02.2014