Kivy 简明教程

Kivy - Video Player

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 类定义了以下属性 −

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

  2. state − 一个字符串,指示播放、暂停或停止视频。state 是一个 OptionProperty,默认为“stop”。

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

  4. position − 视频在 0 和持续时间之间的位置。位置默认为 -1,并在视频加载时设置为实际位置。

  5. seek(percent, precise=True) − 将位置更改为持续时间的一个百分比(严格来说,是一个比例)。百分比值应该是一个浮点数或整数,介于 0-1 之间。参数 precise 是一个布尔值,默认为 True,其中精确查找较慢,但会查找确切请求的百分比。

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

  7. volume − 视频音量,范围为 0-1。1 表示全音量,0 表示静音。

  8. annotation − VideoPlayer 使用一个 VideoPlayerAnnotation 对象构造注释,该对象基于存储在 JSA 文件中的 JSON 数据。

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

  1. start − 要显示注释的位置

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

  3. text − 要作为注释显示的文本。

  4. bgcolor − [r, g, b, a] - 文本框的背景色

  5. bgsource − 'filename' - 用于背景文本框的背景图像

  6. border − (n, e, s, w) - 用于背景图像的边框

Example

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

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()

Output

运行代码并检查输出 −

kivy video player