技术研究之GStreamer
前言
Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。
参考文章:
【1】.什么是Gstreamer
1.windows 安装
在windows上安装gstreamer,需要安装MSYS2,然后安装pygobject,如果不这样做,pygobject可能无法安装成功,反正我直接使用 pip 安装pygobject 会报错。
经过长时间折腾,我发现我还是没有在windows上安装配置成功 gstreamer + pygobject ,很多的东西都没有办法处理,问题是一个接着一个,到底哪里问题呢?
1.安装gstreamer
前往官网下载相应windows版本,执行安装程序。
2.设置环境变量
将 gstreamer 的bin目录添加到系统环境变量中,如:C:\Program Files\GStreamer\1.0\bin。
3.安装pygobject
(1) 安装MSYS2:
从MSYS2官网下载 MSYS2 安装程序并运行。安装过程中选择一个不包含空格和中文的安装目录。完成安装后,勾选“Run MSYS2 now”并点击“Finish”。
(2) 更新MSYS2:
打开MSYS2终端,执行命令更新软件包列表和包管理器。如果提示需要重启MSYS2终端,请关闭并重新打开。
1 | pacman -Syu |
(3) 安装PyGObject和依赖:
在MSYS2终端中,执行以下命令安装PyGObject和其他必要的依赖库:
1 | pacman -S mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-python3 mingw-w64-ucrt-x86_64-python3-gobject |
根据提示,确认安装并等待完成。
(4) 验证安装:
安装完成后,可以在Python脚本中导入gi模块来验证PyGObject是否安装成功。例如,创建一个名为test.py的文件,内容如下,将脚本放到 C:\msys64\home\hjkj 下,然后执行 python test.py。就可以查看一个GTK窗口。
1 | import gi |
在MSYS2终端中运行python test.py,如果能够正常显示一个GTK窗口,则说明PyGObject安装成功。
注意
如果Python版本不是64位的,可能需要安装mingw-w64-i686-python-gobject。
如果安装过程中遇到问题,可以尝试更新MSYS2或者搜索相关的错误信息。
参考文章:
【1】.笔记: PyGObject 在 windows 上安装的曲折经历
【2】.Getting Started 这里是官方关于不同系统安装运行 pygobject 的方法。
【3】.python tar.gz怎么安装?tar.gz格式第三方库安装详解
【4】.PyGObject 安装了 libxrender1 libxcb-shm0 libpixman-1-0 libcairo-gobject2 libgirepository-1.0-1 libcairo2 libxcb-render0
2.linux安装
这里我在尝试使用UOS进行安装配置,也就是使用 yum 进行安装。
1 | sudo dnf install gcc gobject-introspection-devel cairo-gobject-devel pkg-config gtk4 |
参考文章:
【1】.视频监控笔记(四):Ubuntu配置GStreamer实现python推流 这里用的是 ubuntu 进行的开发。
【2】.Download GStreamer
问题
1.’gbk’ codec can’t decode byte 0xae in position 7746: illegal multibyte sequence
这是安装 pygobject 这个包的时候,在windows上报的错误。
【尝试方案】
(1).修改安装脚本
结果没有找到这个文件,所以没有修改。
(2).修改环境变量
增加了 PYTHONIOENCODING=utf-8 这个环境变量,结果无效。
【解决方案】
通过控制面板 -> 时钟和区域 -> 区域 -> 更改系统区域设置 -> Beta版,这个勾选上。
参考文章:
【1】.PIP安装第三方库报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa4 in position 469: illegal multibyte 这里是修改安装脚本进行处理
【2】.Where to set PYTHONIOENCODING=UTF-8?
【3】.解决python3编码问题的方法 在环境变量中,设置PYTHONIOENCODING=utf-8
【4】.打开后不显示文字或乱码 解决关于图新地球乱码的问题,设置了系统区域选项
5.Dependency ‘girepository-2.0’ is required but not found
在 windows 上安装 pygobject 的时候,报错。
【尝试方案】
(1)尝试清空缓存
1 | pip cache purge |
(2)尝试安装 CMake
【解决方案】
安装低版本
1 | pip install pygobject==3.50.1 |
参考文章:
【1】.PyGObject>=3.51.0 depends on libgirepository 2.0
6.Namespace Gst not available
在windows上安装配置了gstreamer,但是运行程序的时候,报错。
【解决方案】
设置环境变量
1 | set GI_TYPELIB_PATH=C:\Program Files\gstreamer\1.0\msvc_x86_64\lib\girepository-1.0 |
7.Could not locate g_option_error_quark: ‘gobject-2.0-0.dll’: 找不到指定的模块。
【解决方案】
重新安装 gstreamer,然后设置环境变量,换到了一个没有空格的目录下,然后设置环境变量
1 | export GI_TYPELIB_PATH=/c/gstreamer/1.0/msvc_x86_64/lib/girepository-1.0 |
8.unable to create a wrapper for GLib.Error
在 MSYS2 UCRT64 环境下,安装 pygobject 时报错。
【尝试方案】
(1)尝试安装依赖,无效
1 | pacman -Sy mingw-w64-ucrt-x86_64-glib2 \ |
(2)尝试设置环境变量,无效
1 | export GST_PLUGIN_PATH=/c/gstreamer/1.0/msvc_x86_64/lib/gstreamer-1.0 |
(3)尝试设置环境变量,无效
1 | set PATH=C:\gstreamer\1.0\msvc_x86_64\bin;%PATH% |
9.Dependency ‘gobject-introspection-1.0’ is required but not found.
从 2.0 降级到 1.0,我又遇到了新的问题。
【尝试方案】
(1)尝试安装 3.42.2 版本,结果报错:gi\gimodule.c: fatal error C1083: 无法打开包括文件: “msvc_recommended_pragmas.h”: No such file or directory
1 | pip install pygobject==3.42.2 |
