【问题标题】:python kivy add background video mp4python kivy 添加背景视频mp4
【发布时间】:2019-11-05 12:03:16
【问题描述】:

是否可以在 kivy 中播放视频(mp4)作为背景?我正在使用下面的代码,但没有加载视频.....

__author__ = 'kshk'
import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import  GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.video import Video

class Dashboard(GridLayout):
    def __init__(self, **kwargs):
        super(Dashboard,self).__init__(**kwargs)
        self.cols = 2
        self.add_widget(Label(text="Login"))
        self.username = TextInput(multiline=False)
        self.add_widget(self.username)
        self.add_widget(Label(text="Password"))
        self.password = TextInput(password=True,multiline=False)
        self.add_widget(self.password)
        self.video = Video(source="/tmpt/driver.mp4")
        self.add_widget(self.video)

class MyApp(App):
    def build(self):
        return Dashboard()

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

更新:

日志:

/usr/bin/python /home/kshk/PycharmProjects/KSHK-PYQT1/main.py
[INFO              ] Kivy v1.8.0
[INFO              ] [Logger      ] Record log in /home/kshk/.kivy/logs/kivy_14-07-13_58.txt
[INFO              ] [Factory     ] 157 symbols loaded
[DEBUG             ] [Cache       ] register <kv.lang> with limit=None, timeout=Nones
[DEBUG             ] [Cache       ] register <kv.image> with limit=None, timeout=60s
[DEBUG             ] [Cache       ] register <kv.atlas> with limit=None, timeout=Nones
[INFO              ] [Image       ] Providers: img_tex, img_dds, img_pygame, img_pil, img_gif 
[DEBUG             ] [Cache       ] register <kv.texture> with limit=1000, timeout=60s
[DEBUG             ] [Cache       ] register <kv.shader> with limit=1000, timeout=3600s
[INFO              ] [Text        ] Provider: pygame
[DEBUG             ] [Cache       ] register <kv.loader> with limit=500, timeout=60s
[INFO              ] [Loader      ] using a thread pool of 2 workers
[DEBUG             ] [Cache       ] register <textinput.label> with limit=None, timeout=60.0s
[DEBUG             ] [Cache       ] register <textinput.width> with limit=None, timeout=60.0s
[DEBUG             ] [Video       ] Ignored <pygst> (import error)
[DEBUG             ] [Video       ] Ignored <ffmpeg> (import error)
[DEBUG             ] [Video       ] Ignored <pyglet> (import error)
[INFO              ] [Video       ] Provider: null(['video_pygst', 'video_ffmpeg', 'video_pyglet'] ignored)
[DEBUG             ] [App         ] Loading kv </home/kshk/PycharmProjects/KSHK-PYQT1/my.kv>
[DEBUG             ] [App         ] kv </home/kshk/PycharmProjects/KSHK-PYQT1/my.kv> not found
[DEBUG             ] [Window      ] Ignored <egl_rpi> (import error)
[INFO              ] [Window      ] Provider: pygame(['window_egl_rpi'] ignored)
libpng warning: iCCP: known incorrect sRGB profile
[WARNING           ] [WinPygame   ] Video: failed (multisamples=2)
[WARNING           ] [WinPygame   ] trying without antialiasing
[DEBUG             ] [Window      ] Display driver x11
[DEBUG             ] [Window      ] Actual window size: 800x600
[DEBUG             ] [Window      ] Actual color bits r8 g8 b8 a0
[DEBUG             ] [Window      ] Actual depth bits: 24
[DEBUG             ] [Window      ] Actual stencil bits: 8
[DEBUG             ] [Window      ] Actual multisampling samples: 0
[INFO              ] [GL          ] OpenGL version <2.1 Mesa 10.1.5>
[INFO              ] [GL          ] OpenGL vendor <VMware, Inc.>
[INFO              ] [GL          ] OpenGL renderer <Gallium 0.4 on llvmpipe (LLVM 3.4, 256 bits)>
[INFO              ] [GL          ] OpenGL parsed version: 2, 1
[INFO              ] [GL          ] Shading version <1.30>
[INFO              ] [GL          ] Texture max size <8192>
[INFO              ] [GL          ] Texture max units <16>
[DEBUG             ] [Shader      ] Fragment compiled successfully
[DEBUG             ] [Shader      ] Vertex compiled successfully
[DEBUG             ] [ImagePygame ] Load </usr/lib/python2.7/site-packages/kivy/data/glsl/default.png>
[INFO              ] [Window      ] virtual keyboard not allowed, single mode, not docked
[DEBUG             ] [Atlas       ] Load </usr/lib/python2.7/site-packages/kivy/data/../data/images/defaulttheme.atlas>
[DEBUG             ] [Atlas       ] Need to load 1 images
[DEBUG             ] [Atlas       ] Load </usr/lib/python2.7/site-packages/kivy/data/../data/images/defaulttheme-0.png>
[DEBUG             ] [ImagePygame ] Load </usr/lib/python2.7/site-packages/kivy/data/../data/images/defaulttheme-0.png>
[INFO              ] [OSC         ] using <multiprocessing> for socket
[DEBUG             ] [Base        ] Create provider from mouse
[DEBUG             ] [Base        ] Create provider from probesysfs
[DEBUG             ] [ProbeSysfs  ] using probsysfs!
[INFO              ] [Base        ] Start application main loop
[INFO              ] [GL          ] NPOT texture support is available
[INFO              ] [Base        ] Leaving application in progress...

更新: 现在我正在尝试使用 AnchorLayout 并将视频添加到背景并在前面使用 GridLayout....

main.py

__author__ = 'kshk'
import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import  GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.video import Video
from kivy.uix.widget import Widget
from kivy.uix.anchorlayout import AnchorLayout

class MyWidget(Widget):
    pass

class WidgetsApp(App):
    def build(self):
        return MyWidget()
if __name__ == '__main__':
    WidgetsApp().run()

widgets.kv

#File widgets.kv
#:kivy 1.8.0
<MyWidget>:
AnchorLayout:
    Video:
        source: 'driver.avi'
        size: 100,100
    GridLayout:
        Button:
            text: 'Hello'
            pos: 0,100
            size: 100, 50
            color: .8, .9, 0, 1
            font_size: 32
        Button:
            text: 'World!'
            pos: 100,0
            size: 100, 50
            color: .8, .9, 0, 1
            font_size: 32

我得到的只是黑屏!...

更新:

我指出了这个错误......知道如何获得这个插件吗?我已经安装了 gstreamer。

[DEBUG             ] [VideoPyGst  ] Load <driver.mp4>
** Message: don't know how to handle video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, level=(string)4.2, profile=(string)main, width=(int)1920, height=(int)1080, framerate=(fraction)2997/125, pixel-aspect-ratio=(fraction)1/1, parsed=(boolean)true
[ERROR             ] [VideoPyGst  ] There is no codec present that can handle the stream's type.
[DEBUG             ] [VideoPyGst  ] gstplaybasebin.c(2323): prepare_output (): /GstPlayBin:playbin
[ERROR             ] [VideoPyGst  ] GStreamer encountered a general stream error.
[DEBUG             ] [VideoPyGst  ] qtdemux.c(3891): gst_qtdemux_loop (): /GstPlayBin:playbin/GstDecodeBin:decodebin0/GstQTDemux:qtdemux0:
streaming stopped, reason not-linked
[INFO              ] [Base        ] Leaving application in progress...

更新:

在 mac 上工作,没有问题,所以看起来像 fedora 上的插件问题....:(

【问题讨论】:

    标签: python linux kivy


    【解决方案1】:

    是否可以在kivy中播放视频(mp4)作为背景?

    是的,只需将视频放在您想要显示的任何其他内容的后面。您的示例不会这样做,因为它是网格布局的一部分,您可能希望改为使用 AnchorLayout 将两个孩​​子放在同一个地方(这不是唯一的方法,但它很简单)。

    AnchorLayout:
        Video:
            source: 'whatever'
        GridLayout:
            # ... <- your normal stuff goes here
    

    至于为什么你的视频不显示,我不知道。您确定文件路径有效吗?您是否在终端中获得任何有关它的日志?

    【讨论】:

      【解决方案2】:

      我得到的只是黑屏!...

      回答这个黑屏问题,可能你没有把python文件和.kv文件链接起来。这两个文件的链接应该是 Builder.load_file()..

      例如..

      ...
      from kivy.uix.anchorlayout import AnchorLayout
      
      Builder.load_file("widgets.kv")
      
      class MyWidget(Widget):
          pass
      ...
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        相关资源
        最近更新 更多