用于Windows的gstreamer python绑定

时间:2013-06-24 15:14:05

标签: python windows gstreamer python-gstreamer

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

我绝对不明白如何在windows中使用gstreamer与python。我从gstreamer official website安装了 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的文件,其中包含环境变量的路径(不是在安装时添加到系统变量。我检查了。

有关同一问题herehere的其他问题,例如,都使用gstreamer的 winbuild 版本。为什么会这样?

我完全迷失在这一个。

修改

好吧,我使用SDK for Gstreamer 0.10(其中有一个pygst.py)管理它,但是没有办法使用Gstreamer 1.0系列,因为0.10是“生命终结” ?

3 个答案:

答案 0 :(得分: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加载失败等。这是我对所有内容的详细设置:

安装Gst 0.10 SDK和Python模块

  1. 从docs.gstreamer.com/display/GstSDK/Installing+on+Windows安装SDK。检查并设置环境变量
    GSTREAMER_SDK_ROOT_X86 = ..你的sdk目录
    GST_PLUGIN_PATH =%GSTREAMER_SDK_ROOT_X86%\ lib中\ gstreamer的-0.10
    路径=%GSTREAMER_SDK_ROOT_X86%\ bin中;%GSTREAMER_SDK_ROOT_X86%\ lib中;%路径%
  2. 从ftp.gnome.org/pub/GNOME/binaries/win32 /
  3. 安装 pygtk-all-in-one-2.24.2.win32-py2.7
  4. 在您的Python站点包中,dir创建文件 pygst.pth 。放下以下行,这些行应指向GSt 0.10 Python模块目录:
    ..你的%GSTREAMER_SDK_ROOT_X86%\ lib \ python2.7 \ site-packages
    ..你的%GSTREAMER_SDK_ROOT_X86%\ lib \ python2.7 \ site-packages \ gst-0.10
  5. 之后,pydoc应该能够找到pygst,gst等的文档。另外,Visual Studio的Python工具中的intellisense也应该工作(在重建完成数据库并重新启动VS之后)
  6. 安装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 \
      路径=%GSTREAMER_1_0_ROOT_X86%\ bin中;%GSTREAMER_1_0_ROOT_X86%\ lib中;%路径%
    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
      lib 目录包含 .typelib 文件
      一些简单的例子似乎工作正常。
    5. VS中的Intellisense似乎不适用于从gi.repository导入。
    6. 您可以像这样测试您的安装:

      python2 -c“import gi; gi.require_version('Gst','1.0');来自gi.repository import Gst; Gst.init(None); pipeline = Gst.parse_launch('playbin uri = {{3 };';; 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)“

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

      HTH, 汤姆

答案 1 :(得分: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

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

第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分钟,才能看到类似于以下的结果。 因为某些原因需要时间

enter image description here

答案 2 :(得分:2)

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

安装程序尝试成为每个python的“可移植和私有”安装,而无需更改注册表/环境变量。

我关于运行时dll的注意事项,建议不要混合运行时因为pygi专门为python a.k.a链接到python的msvcrt,并使用python使用的stat()约定。如果一个公共api这样的glib的stat()使用与其他dll不同的约定,那么运行时混合可能会导致无声崩溃。除此之外,它可能工作正常。