Моя цель — реализовать кнопки для:
- перемотки назад на 5 секунд
- перемотки вперед на 5 секунд.
Мои текущие настройки:
- Использование Kivy Video в качестве основного компонента для воспроизведение видео.
- Использование FFpyPlayer для рендеринга видео.
- Использование KivyMD для стилизации пользовательского интерфейса. и макет.
Ниже приведена упрощенная версия моей настройки. Код включает в себя кнопки для перемотки назад и вперед на 5 секунд. Однако кнопки иногда не работают должным образом и иногда переходят к началу или концу видео вместо того, чтобы пропустить его на желаемую величину.
Код: Выделить всё
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.video import Video
from kivy.clock import Clock
from kivymd.app import MDApp
from kivymd.uix.button import MDRaisedButton
from kivymd.uix.slider import MDSlider
from kivymd.uix.screen import MDScreen
KV = '''
MDScreen:
BoxLayout:
orientation: 'vertical'
Video:
id: video
source: 'videos/test.mp4'
state: 'stop'
allow_stretch: True
BoxLayout:
size_hint_y: None
height: '50dp'
padding: '10dp'
spacing: '10dp'
MDRaisedButton:
text: 'Play'
on_release: app.play_pause_video()
MDRaisedButton:
text: 'Pause'
on_release: app.play_pause_video()
MDRaisedButton:
text: 'Rewind 5s'
on_release: app.rewind_5s()
MDRaisedButton:
text: 'Forward 5s'
on_release: app.forward_5s()
MDSlider:
id: slider
min: 0
max: 100
value: 0
on_touch_up: app.on_slider_touch_up(*args)
'''
class VideoPlayerApp(MDApp):
def build(self):
self.screen = Builder.load_string(KV)
self.video = self.screen.ids.video
self.slider = self.screen.ids.slider
Clock.schedule_interval(self.update_slider, 1 / 30)
return self.screen
def play_pause_video(self):
if self.video.state == 'play':
self.video.state = 'pause'
else:
self.video.state = 'play'
def rewind_5s(self):
new_position = max(self.video.position - 5, 0)
self.video.seek(new_position)
def forward_5s(self):
new_position = min(self.video.position + 5, self.video.duration)
self.video.seek(new_position)
def update_slider(self, dt):
if self.video.duration > 0:
self.slider.max = self.video.duration
self.slider.value = self.video.position
def on_slider_touch_up(self, instance, touch):
if instance.collide_point(*touch.pos):
self.video.seek(instance.value)
if __name__ == '__main__':
VideoPlayerApp().run()
- Синхронизация времени: Видео не всегда плавно переключается при поиске, что приводит к заметным заиканиям или задержкам.
- Отзывчивость кнопок: Кнопки перемотки назад и вперед реагируют непостоянно, возможно, из-за ограничений метода seek().
- Переход к началу/концу. Иногда при нажатии кнопок перемотки назад или вперед на 5 с видео неожиданно переходит к самому началу или концу вместо пропуска всего на 5 секунд.
- Есть ли более эффективный подход в FFpyPlayer или Kivy, чтобы повысить производительность функции search() для плавных 5-секундных пропусков?
Существуют ли какие-либо библиотеки, методы или приемы, которые обеспечивают лучший контроль над воспроизведением видео в Kivy, особенно для реализации функций перемотки вперед и назад?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -player-wi