Cannot find matching video player interface for ‘ffpyplayer‘.解决方案

问题描述:Psychopy不能正常调用ffpyplayer接口

Cannot find matching video player interface for 'ffpyplayer'.

解决步骤:

1、测试ffpyplayer

bash 复制代码
python -c "from ffpyplayer.player import MediaPlayer; print('OK')"

如果报错:

ImportError:

/home/cat/anaconda3/lib/python3.8/site-packages/ffpyplayer/player/player.cpython-38-aarch64-linux-gnu.so:

undefined symbol: ff_reverse

原因:ffpyplayer 的动态库依赖系统的 libav(ffmpeg)库,*,但你的 Anaconda Python 环境里带的 libstdc++ 和 libgcc_s 与系统 ffmpeg 编译时使用的不兼容,所以符号 ff_reverse 找不到。

简单来说:系统 ffmpeg 没有这个符号,而 ffpyplayer 是按旧 ffmpeg 编译的。所以必须重新编译 ffpyplayer。

2、彻底重装 ffpyplayer

①先删干净:

bash 复制代码
pip uninstall ffpyplayer -y

②再清缓存(一定要做):

bash 复制代码
pip cache purge

③安装系统 FFmpeg 开发库

bash 复制代码
sudo apt update
sudo apt install -y \
ffmpeg \
libavcodec-dev \
libavformat-dev \
libavdevice-dev \
libavutil-dev \
libswscale-dev \
libswresample-dev \
libsdl2-dev

④然后强制源码编译:

bash 复制代码
pip install --no-binary ffpyplayer ffpyplayer

这一步会:自动链接系统 ffmpeg、重新生成 .so。

(编译过程需要等待几分钟)

⑤编译完成后再测试(若还有问题转第3条):

bash 复制代码
python -c "from ffpyplayer.player import MediaPlayer; print('OK')"

⑥确认 PsychoPy backend

运行:

bash 复制代码
python -c "from psychopy.visual.movies import players; print(players._players)"

3、后续遗留问题

如果python -c "from ffpyplayer.player import MediaPlayer; print('OK')"后,出现新错误:

undefined symbol: g_task_set_static_name

说明问题已经不在 ffpyplayer 本身,而是在 GLib / GIO 库版本冲突。

核心原因是:conda 的 GLib 与系统 GLib 混用了。

一步验证是不是 conda 冲突:

bash 复制代码
ldd /home/cat/anaconda3/lib/python3.8/site-packages/ffpyplayer/player/player*.so | grep glib

如果看到:

bash 复制代码
libglib-2.0.so => /home/cat/anaconda3/lib/libglib-2.0.so

则100% 确认是 conda 库污染。

修复方式:

把 conda 的 glib 暂时移走:

bash 复制代码
cd ~/anaconda3/lib

mv libglib-2.0.so.0 libglib-2.0.so.0.bak
mv libgobject-2.0.so.0 libgobject-2.0.so.0.bak
mv libgio-2.0.so.0 libgio-2.0.so.0.bak
mv libgmodule-2.0.so.0 libgmodule-2.0.so.0.bak
相关推荐
GeW2 小时前
从代码到共识:技术突围如何映照大国相处之道
linux
承渊政道2 小时前
Linux系统学习【进程信号详细解析——认识、产生、保存以及捕捉信号】
linux·学习·ubuntu·ssh·vs code·进程信号
硅基手札2 小时前
【linux内核专栏01】Linux 内核心智模型与设计哲学
linux·运维·驱动开发·开源软件
码完就睡3 小时前
Linux——socket网络编程
linux·运维·网络
道尔柯南3 小时前
【Linux】网络基础概念
linux·运维·网络
程序员老陆3 小时前
FFmpeg 日志级别深度解析:从 AV_LOG_ERROR 到 AV_LOG_TRACE 的完整指南
ffmpeg·音视频
傲世仙尊3 小时前
从抢票事故到锁的原理-互斥条件变量与生产消费模型
linux·驱动开发
AI+程序员在路上3 小时前
AP6275S蓝牙双接口解析:HCI UART与PCM的分工与协同
linux·c语言·物联网
小此方3 小时前
Linux网络(十八):TCP连接管理详解:从三次握手、四次挥手到CLOSE_WAIT与TIME_WAIT,深入理解2MSL与端口复用
linux·网络·网络协议·tcp/ip
进击的荆棘3 小时前
Linux系统——文件(上)
linux·运维·服务器·文件