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

VideoPlayer嵌入主程序仅播声音无画面及ffpyplayer警告问题求助

问题分析与解决方案

核心问题说明

你遇到的仅播放声音无画面的问题,和ffpyplayer的警告无关(该警告只是提示音频通道布局冗余,不影响视频渲染),核心原因是:创建的VideoPlayer控件没有被正确添加到界面布局中,导致控件无法被渲染显示,只有音频在后台运行。

原代码的关键错误

  1. 错误调用PlayVid的方法:PlayVid是MDApp的子类,不应用来封装播放逻辑,且PlayVid.playnow(self)用SecondWindow实例调用该方法的方式完全错误,创建的VideoPlayer没有被挂载到任何界面控件上。
  2. SecondWindow的build方法逻辑错误:在Screen的build方法中自己实例化SecondWindow会导致循环引用,且ScreenManager应该由主App类来创建和管理,而非单个Screen。

修正后的完整代码

Python代码(main.py)

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.videoplayer import VideoPlayer
from kivymd.app import MDApp


class SecondWindow(Screen):
    def start_play(self):
        # 创建VideoPlayer并配置参数
        video = VideoPlayer(source='Roadhouse.mp4')
        video.state = "play"
        video.options = {"eos": "stop"}
        video.allow_stretch = True
        
        # 将VideoPlayer添加到当前Screen的布局中
        self.clear_widgets()  # 可选:清空原有控件避免重复添加
        self.add_widget(video)


class MainApp(MDApp):
    def build(self):
        # 由主App管理ScreenManager和Screen
        sm = ScreenManager()
        sm.add_widget(SecondWindow(name='second'))
        return sm


if __name__ == '__main__':
    MainApp().run()

对应的KV布局文件(main.kv)

<SecondWindow>:
    Button:
        text: "开始播放"
        size_hint: 0.3, 0.1
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        on_press: root.start_play()

其他说明

  • 如果你想保留原有PlayVid的结构,也可以将其改为普通控件类而非MDApp子类,再在SecondWindow中实例化并添加到布局。
  • 关于ffpyplayer的警告:可以尝试更新ffpyplayer版本(pip install --upgrade ffpyplayer),但该警告不影响功能,可忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:30:51