Gtk4 Gtk.Video() не воспроизводится

Gtk4 уже давно вышел с новым компонентом Gtk.Video(), который позволяет отображать видео в окне Gtk, не прибегая к использованию Gstreamer.

Это очень простой класс всего с несколькими подклассами (4), методами (10) и атрибутами (2).

Но как бы я ни старался, я не могу найти ни одного примера (? даже на C); Я зашел так далеко:

#!/usr/bin/env python3

import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw, Gio

class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(title = "Mini Player", *args, **kwargs)
        player = Gtk.Video.new()
        player.set_autoplay(True)
        print('file: ', player.props.file) # => None
        file_to_play = Gio.File.new_for_path('/my/valid/video/file.mp4')
        player.set_file(file_to_play) # => this is supposed to start the playing
        self.set_child(player)
        print('file: ', player.props.file) # => file: __gi__.GLocalFile object
        print('autoplay: ', player.props.autoplay) # => True
        # self.show() # I tried this too, it does nothing
        
class MyApp(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)
        self.connect('open', self.on_open)
        self.set_flags(Gio.ApplicationFlags.HANDLES_OPEN)  # Need to tell GApplication we can handle this
        self.win = None
        
    def on_activate(self, app):
        self.win = MainWindow(application=app)
        self.win.present()
    
    # This is to avoid the error "Your application claims to support opening files but does not implement g_application_open() and has no handlers connected to the 'open' signal." while I learn how to pass this file to the Mainwindow class
    def on_open(self, app, files, n_files, hint):
        self.on_activate(app)
        for file in files:
            print("File to open: " + file.get_path())  
            
app = MyApp(application_id = "com.example.GtkApplication")
app.run(sys.argv)

Появляется окно с аккуратной кнопкой воспроизведения в левом нижнем углу, все сигналы в порядке, никаких предупреждений или сообщений в консоли нет, но видео не воспроизводится, кнопка воспроизведения ничего не делает, и окно остается черным.

Я упускаю что-то очевидное?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я узнал что пропустил библиотеку:

sudo apt install libgtk-4-media-gstreamer

Сделай трюк, теперь он работает. Это очень медленно, но работает.

Другие вопросы по теме