You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspbian Buster下PySide2+GStreamer视频播放报错求助

在树莓派Zero W上用PySide2播放视频时GStreamer异常的解决办法

我用PySide2开发的视频播放UI在Windows上运行正常,但放到树莓派Zero W上时,GStreamer库出现异常,程序无法初始化。

我的代码

class mainWindow(QStackedWidget):
    def __init__(self):
        super().__init__()
        # 无关代码省略

        # 视频播放器配置 - 窗口1
        self.videoPlayer=QMediaPlayer()
        self.videoPlayer.setMedia(QUrl.fromLocalFile("file:///home/.../pyside2/VideoExample.avi"))

        # 无关代码省略

class QVideoWidget2(QVideoWidget): 
    """自动切换窗口的视频控件"""
    def __init__(self, mainWindow):
        super().__init__()
        # 5秒后切换到索引为1的窗口
        QTimer.singleShot(5000, lambda: mainWindow.setCurrentIndex(1))

def main():
    ex = mainWindow()
    ex.videoPlayer.play() # 开始播放视频
    sys.exit(app.exec_())

app = QApplication(sys.argv)

运行时错误信息

QObject::connect: No such signal QVideoWidget2::supportedFormatsChanged()

ERROR: Caught a segmentation fault while loading plugin file: /usr/lib/arm-linux-gnueabihf/gstreamer-1.0/libgsttypefinsfunctions.so
Please either:
- remove it and restart
- run with --gst-disable-segtrap --gst-disable-registry-fork and debug

我已经尝试卸载并重装GStreamer,但问题依旧,求可行的解决方法。

补充环境信息

  • 树莓派系统版本:执行cat /etc/os-release输出
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
  • GStreamer版本:执行gst-launch-1.0 --gst-version输出
GStreamer Core Library version 1.14.4

解决步骤

1. 修复GStreamer插件崩溃问题

  • 先试临时规避方案,启动程序时添加参数:
    python3 your_script.py --gst-disable-segtrap --gst-disable-registry-fork
    
  • 如果临时方案有效,彻底修复插件:
    1. 备份出问题的插件文件:
      sudo mv /usr/lib/arm-linux-gnueabihf/gstreamer-1.0/libgsttypefinsfunctions.so /usr/lib/arm-linux-gnueabihf/gstreamer-1.0/libgsttypefinsfunctions.so.bak
      
    2. 重装GStreamer核心插件包:
      sudo apt-get install --reinstall gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
      

2. 修复Qt信号缺失问题

错误提示的supportedFormatsChanged()信号找不到,是因为自定义子类没有继承该信号,两种解决方式:

  • 方式一:给子类补全信号声明
    修改QVideoWidget2的代码:
    from PySide2.QtCore import Signal
    
    class QVideoWidget2(QVideoWidget): 
        """自动切换窗口的视频控件"""
        supportedFormatsChanged = Signal()  # 声明缺失的信号
        def __init__(self, mainWindow):
            super().__init__()
            QTimer.singleShot(5000, lambda: mainWindow.setCurrentIndex(1))
    
  • 方式二:改用原生控件
    直接使用QVideoWidget,把定时器逻辑移到主窗口里,避免子类继承问题。

3. 适配树莓派的视频播放环境

  • 安装AVI格式的解码插件:
    sudo apt-get install gstreamer1.0-libav
    
  • 指定GStreamer作为媒体后端,初始化QMediaPlayer时添加参数:
    self.videoPlayer = QMediaPlayer(None, QMediaPlayer.GstreamerMediaPlayer)
    
  • 修正视频路径,去掉file://前缀,直接用本地绝对路径:
    self.videoPlayer.setMedia(QUrl.fromLocalFile("/home/.../pyside2/VideoExample.avi"))
    

4. 补全PySide2依赖

确保树莓派上安装了完整的PySide2多媒体组件:

sudo apt-get install python3-pyside2.qtmultimedia python3-pyside2.qtwidgets

内容的提问来源于stack exchange,提问作者Edumt10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:31:13