Kivy - 播放器



Kivy 库中的 VideoPlayer 组件是一个现成的控件,用于播放视频文件并控制其播放和声音。它是一个预定义的布局,包含播放区域和用于播放/停止以及暂停/恢复播放的按钮。它还有一个可以将播放位置移动到所需位置的进度条。

VideoPlayer 类在 "kivy.uix.videoplayer" 模块中定义。

from kivy.uix.videoplayer import VideoPlayer
player = VideoPlayer(**kwargs)

您需要使用表示要播放的视频文件的字符串为 VideoPlayer 对象的 source 属性赋值。Kivy 支持不同的视频格式,包括 "mp4"、"avi" 和 "mpg"。

要开始播放视频,应将 state 属性设置为 'play'。

from kivy.uix.videoplayer import VideoPlayer
player = VideoPlayer(source = "test.mp4")
player.state = 'play'

Kivy 的 VideoPlayer 的重要功能之一是能够在视频中的特定位置显示文本注释,并在特定时间内显示。注释存储在一个扩展名为 ".jsa" 的文件中,并且与视频文件同名。

.jsa 文件是一种基于 JSON 的文件格式。它包含注释的起始位置、在屏幕上显示的持续时间(以秒为单位)和注释文本的值。

[
   {"start": 0, "duration": 2,
   "text": "Introduction"},
   {"start": 10, "duration": 5,
   "text": "Hello World"},
]

要使视频循环播放,请将 eos 选项设置为 loop −

options={'eos': 'loop'}

VideoPlayer 类定义了以下属性 −

  • source − 要读取的视频源。source 是一个 StringProperty,表示要播放的视频文件的路径。

  • state − 一个字符串,指示是播放、暂停还是停止视频。state 是一个 OptionProperty,默认为 'stop'。

  • allow_fullscreen − 默认情况下,您可以双击视频使其全屏显示。将此属性设置为 False 以阻止此行为。

  • position − 视频在 0 到 duration 之间的位置。position 默认为 -1,并在视频加载时设置为实际位置。

  • seek(percent, precise=True) − 将位置更改为 duration 的百分比(严格来说,是比例)。percent 值应为浮点数或整数,介于 0-1 之间。precise 参数是一个布尔值,默认为 True,其中精确查找速度较慢,但查找结果与请求的百分比完全一致。

  • thumbnail − 要显示的视频缩略图。如果为 None,VideoPlayer 将尝试从 source + '.png' 中查找缩略图。

  • volume − 视频的音量,范围为 0-1。1 表示最大音量,0 表示静音。

  • annotation − VideoPlayer 使用 VideoPlayerAnnotation 对象根据存储在 JSA 文件中的 JSON 数据构建注释。

以下键允许在 JSA 文件中使用 −

  • start − 要显示注释的位置。

  • duration − 注释标签在播放器窗口上显示的时间。

  • text − 要显示为注释的文本。

  • bgcolor − [r, g, b, a] - 文本框的背景颜色。

  • bgsource − 'filename' - 用于文本框背景的背景图片。

  • border − (n, e, s, w) - 用于背景图片的边框。

示例

以下代码在应用程序窗口上呈现一个视频播放器组件 −

from kivy.app import App
from kivy.uix.videoplayer import VideoPlayer
from kivy.core.window import Window

Window.size = (720, 350)

class MainApp(App):
   title = "Simple Video"
   def build(self):
      player = VideoPlayer(
         source="video.mp4",
         size_hint=(0.8, 0.8),
         options={'fit_mode': 'contain'}
      )
      player.state = 'play'
      player.options = {'eos': 'loop'}
      player.allow_stretch = True
      return player
      
MainApp().run()

输出

运行代码并检查输出 −

Kivy Video Player
广告