Kivy VideoPlayer 全屏、循环和隐藏控件

Posted

技术标签:

【中文标题】Kivy VideoPlayer 全屏、循环和隐藏控件【英文标题】:Kivy VideoPlayer fullscreen, loop, and hide controls 【发布时间】:2015-04-26 11:53:32 【问题描述】:

我刚开始使用 Kivy,如果我做错了什么,请指出。我正在尝试使用视频播放器。也就是说,我似乎无法让它识别任何“选项”,而且我真的很想要一种隐藏控件的方法(以防止用户在电影播放时停止/暂停/更改音量/交互等)运行)。

这是我目前所得到的:

import kivy
kivy.require('1.9.0')

from kivy.app import App
from kivy.uix.videoplayer import VideoPlayer

class MyApp(App):
    def build(self):
        self.player = VideoPlayer(fullscreen=True, allow_fullscreen=True, source='mymovie.mp4', state='play', options='allow_stretch': True, 'eos': 'loop', 'fullscreen': True)
        return(self.player)


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

eos: 上面的“循环”,似乎完全被忽略了。就像“全屏”一样。双击播放器不会使其全屏运行。

我正在 Windows 上进行测试(但希望移植到 android),在后台的“控制台”窗口中,我有 2 个警告应该对我有所帮助,但我想我知道的不够多,不知道如何照顾它:

[WARNING           ] [VideoPlayer ] Cannot switch to fullscreen, window not found.
[WARNING           ] [VideoPlayer ] Cannot switch to fullscreen, window not found.

理想情况下,我会让它全屏运行,并且能够禁用控件(因此用户可以使用键盘/触摸/定时器事件/等与事物进行交互),但我找不到任何有关如何操作的文档禁用它们。有什么指点吗?

我已经设法让窗口本身以全屏模式运行,但我认为这不是一回事。 谢谢!

【问题讨论】:

我不确定我是否只是失明了,但循环播放视频的选项 ('eos':'loop') 似乎正在工作。但是仍然无法切换到全屏和隐藏视频控件: 【参考方案1】:

我通过使用kivy.uix.video.Video 而不是kivy.uix.videoplayer.VideoPlayer 解决了我的问题。我不知道这是否是我一开始就应该做的事情(刚刚开始!),但以防万一其他人遇到这个问题,这对我有用:

import kivy
kivy.require('1.9.0')

from kivy.app import App
from kivy.uix.video import Video

class MyApp(App):
    def build(self):
        video = Video(source='mymovie.mp4')
        video.state='play'
        video.options = 'eos': 'loop'
        video.allow_stretch=True
        return video

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

【讨论】:

全屏解决了吗。因为我在视频模块中没有看到任何全屏选项。有没有办法让我们在视频中获得全屏选项?【参考方案2】:

这是我为自己制作的一个示例,它演示了其中的许多功能。它回答了你的问题。

import kivy
kivy.require('1.9.0')
import time
import os
import sys
import psutil
import logging

from kivy.app import App
from kivy.uix.video import Video
from kivy.config import Config
from kivy.core.window import Window
Config.set('graphics', 'position', 'custom')
Config.set('graphics', 'left', 0)
Config.set('graphics', 'top',  500)
Config.set('graphics', 'resizable', 'False')
#Config.set('graphics', 'borderless',  1)
Config.set('graphics', 'width', 1127)
Config.set('graphics', 'height', 636)

class MyApp(App):

    video = None
    def build(self):
        Window.bind(on_keyboard=self.on_keyboard)  # bind our handler
        self.video = Video(source='C:\\drop.mp4')
        self.video.state='play'
        #self.video.options = 'eos': 'loop'
        self.video.allow_stretch=True
        self.video.pos_hint = 'top': 1.0
        self.video.bind(eos=self.VideoDone)
        return self.video

    def VideoDone(self, value, value2):
        print ("video done", value, value2)

    def on_stop(self):
        # The Kivy event loop is about to stop, set a stop signal;
        # otherwise the app window will close, but the Python process will
        # keep running until all secondary threads exit.
        print ('stopping and closing kivy')
        #self.video.state='stop'


    def on_keyboard(self, window, key, scancode, codepoint, modifier):
        print (window, key, scancode, codepoint, modifier)
        if codepoint == 'p':
            print ('pausing with p pressed')
            self.video.state='stop'
        if codepoint == 's':
            print ('starting with s pressed')
            self.video.state='play'
        if codepoint == 'r':
            print ('re-starting with r pressed')
            self.video.seek(0, precise=True)




if __name__ == '__main__':
    print ("hi")
    MyApp().run()

【讨论】:

以上是关于Kivy VideoPlayer 全屏、循环和隐藏控件的主要内容,如果未能解决你的问题,请参考以下文章

video.js全屏bug&隐藏/添加全屏按钮

html5 中的 video 如何隐藏底部的全屏按钮或控制条

Unity 视频播放器,基于VideoPlayer,实现滑动进度条,显示视频时长,全屏显示,音量调节

如何在 Kivy 中关闭全屏?

flutter视频播放videoplayer与chewie

Flutter videoplayer