8

我正在研究 gstreamer 作为一种从列表中选择视频设备以将其提供给 opencv 脚本的方法。

我绝对不明白如何在 Windows 中将 gstreamer 与 python 一起使用。我从gstreamer 官方网站安装了Windows gstreamer 1.07 二进制文件。但是,我无法在 python 中导入和模块。pygstgst

>>> import pygst

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import pygst
ImportError: No module named pygst
>>> 

我检查了gstreamer的安装,似乎没有pygst.py提供。然而,有一个名为的文件gst-env包含环境变量的路径(在安装时未添加到系统变量中。我检查了。

此处此处有关同一问题的其他问题,例如,都使用 gstreamer 的winbuild版本。为什么呢?

我完全迷失了这个。

编辑

好的,我使用适用于 Gstreamer 0.10 的 SDK(其中有一个pygst.py)对其进行了管理,但是由于 0.10 是“生命终结”,因此没有办法使用 Gstreamer 1.0 系列吗?

4

3 回答 3

13

这有点晚了,但希望它会有所帮助。

使用 GStreamer 1.0 最简单的方法是从以下网址下载最新版本:http: //sourceforge.net/projects/pygobjectwin32/files/

这将安装 Python(2.7 或 3.3)模块,以及可选的带有插件的 GStreamer。

但是,如果您已经拥有 GStreamer 0.10 SDK(来自 docs.gstreamer.com/display/GstSDK/Home)和旧安装的 GStreamer 1.0,则运行 Gstreamer 0.10 Python 程序可能会出现一些问题,例如 ImportError: DLL load failed 等. 这是我对所有内容的详细设置:

安装 Gst 0.10 SDK 和 Python 模块

  1. 从 docs.gstreamer.com/display/GstSDK/Installing+on+Windows 安装 SDK。检查并设置环境变量
    GSTREAMER_SDK_ROOT_X86=..your sdk dir
    GST_PLUGIN_PATH=%GSTREAMER_SDK_ROOT_X86%\lib\gstreamer-0.10
    Path=%GSTREAMER_SDK_ROOT_X86%\bin;%GSTREAMER_SDK_ROOT_X86%\lib;%Path%
  2. 从 ftp.gnome.org/pub/GNOME/binaries/win32/安装pygtk-all-in-one-2.24.2.win32- py2.7
  3. 在您的 Python 站点包目录中创建文件pygst.pth。放入以下行,应指向 GSt 0.10 Python 模块目录:
    ..your %GSTREAMER_SDK_ROOT_X86% \lib\python2.7\site-packages
    ..your %GSTREAMER_SDK_ROOT_X86% \lib\python2.7\site-packages\gst-0.10
  4. 之后,pydoc 应该能够找到 pygst、gst 等的文档。此外,Visual Studio 的 Python 工具中的智能感知也应该可以工作(在重建 Completion DB 并重新启动 VS 之后)

安装 Gst 1.0 和 Python 模块

  1. 从 gstreamer.freedesktop.org/data/pkg/windows/ 安装 GStreamer 1.0。检查环境:
    GSTREAMER_1_0_ROOT_X86=..Gst 1.0 安装目录
    GST_PLUGIN_PATH_1_0=%GSTREAMER_1_0_ROOT_X86%\lib\gstreamer-1.0\
    Path=%GSTREAMER_1_0_ROOT_X86%\bin;%GSTREAMER_1_0_ROOT_X86%\lib;%Path%
  2. 从上面的 Sourceforge 链接安装pygi-aio-3.10.2-win32_rev14-setup 。在安装中包含 Gstreamer 和插件。
  3. 创建文件gi.pth :
    %GSTREAMER_1_0_ROOT_X86%\bin
    %GSTREAMER_1_0_ROOT_X86%\lib
  4. 我从site-packages/gnome目录中删除了所有内容,除了:
    libgirepository-1.0-1
    libpyglib-gi-2.0- python27-0 带有 .typelib文件 的
    lib目录,并且一些简单的示例似乎可以正常工作。
  5. VS 中的 Intellisense 似乎不适用于从 gi.repository 导入。
  6. 您可以像这样测试您的安装:

    python2 -c "import gi; gi.require_version('Gst', '1.0'); from gi.repository import Gst; Gst.init(None); pipeline = Gst.parse_launch('playbin uri= http://docs. gstreamer.com/media/sintel_trailer-480p.webm '); pipeline.set_state(Gst.State.PLAYING); bus = pipeline.get_bus();msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.ERROR | Gst .MessageType.EOS)"

编辑:如果您同时使用 GStreamer0.10 和 GStreamer1.0,最好为 GStreamer0.10 创建一个单独的虚拟环境,并将 .pth 文件放在其站点包目录中。请参阅下面的评论。

HTH,汤姆

于 2014-01-13T01:06:17.823 回答
3

第 1 步:Windows 8.1 64 位

第 2 步:下载并安装 Python

C:\>wget https://www.python.org/ftp/python/2.7.9/python-2.7.9.amd64.msi
C:\>./python-2.7.9.amd64.msi
C:\>cd C:\Python27
C:\>pwd
C:\Python27

第 3 步:下载为 Gstreamer 1.0 安装 Python 绑定

C:\>wget http://sourceforge.net/projects/pygobjectwin32/files/pygi-aio-3.14.0_rev14-setup.exe
C:\>unzip "pygi-aio-3.14.0_rev14-setup.exe"
C:\>whereis_unzipped "pygi-aio-3.14.0_rev14-setup.exe"
C:\pygi
C:\>./c:\pygi\setup.exe

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

第 4 步:运行此代码

C:\>C:\Python27\python.exe -c "import gi; gi.require_version('Gst', '1.0'); from gi.repository import Gst; Gst.init(None); pipeline = Gst.parse_launch('playbin uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm'); pipeline.set_state(Gst.State.PLAYING); bus = pipeline.get_bus();msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.ERROR | Gst.MessageType.EOS)"

第 5 步:您必须等待 10 分钟,才能看到类似于以下的结果。因为某种原因需要时间

在此处输入图像描述

于 2015-04-01T11:58:16.427 回答
2

来自http://sourceforge.net/projects/pygobjectwin32/files/的安装程序应该适用于 Tom 给出的测试用例。尝试将 pygi 安装程序安装的插件与官方 gstreamer 安装的插件相匹配。

安装程序尝试为每个 python 进行“便携式和私有”安装,而无需更改注册表/环境变量。

我关于运行时 dll 的说明,建议不要混合运行时,因为 pygi 中的一个是专门为 python 制作的,也就是链接到 python 首选的 msvcrt,并使用 python 使用的 stat() 约定。如果像 glib 的 stat() 这样的公共 api 使用与其他 dll 不同的约定,则运行时混合可能会导致静默崩溃。除此之外,它可能工作正常。

于 2014-02-06T15:26:43.967 回答