LINUX.ORG.RU

Gtk4 -> GtkVideo: видеоплеер в 2 строчки

 ,


2

2

В Gtk4 добавлен виджет GtkVideo. Теперь свой плеер с контролами можно реализовать также просто как и «Hello World!»:

var window = new Gtk.Window ();
var video = new Gtk.Video.for_filename ("/path/to/video");
window.add (video);
video.autoplay = true;
window.show_all ();

В качестве бэкэнда gstreamer и ffmpeg. Круто однако!

★★★

Последнее исправление: nvl (всего исправлений: 1)

На скриншоте - эталонная гномопрограмма.

Deleted
()

Теперь свой плеер с контролами можно реализовать также просто как и «Hello World!»

Но зачем?

mandala ★★★★★
()

Джва года ждал! Так победим.

Singularity ★★★★★
()
Ответ на: комментарий от mandala

Но зачем?

Странный вопрос... Если программисты пишут программы, значит они для чего-то нужны. Или это вопрос из разряда философских, типа «Зачем жить»?

nvl ★★★
() автор топика
Ответ на: комментарий от nvl

Это что-то из разряда как я школьником в делфи наваял за 5 минут mp3-плеер (лет 15 назад). Еще тогда я понял что в отрыве от чего то большего и цельного этот пример не имеет практического смысла.

mandala ★★★★★
()
Последнее исправление: mandala (всего исправлений: 1)
Ответ на: комментарий от t184256

Тут не соглашусь. Даже с использованием gstreamer-player-1.0, нужно было реализовывать класс class VideoRenderer : Gst.Object, Gst.PlayerVideoRenderer + оверлей с контролами и свазанный с ними код контроля воспроизведения/горомкости и отображения информации.

nvl ★★★
() автор топика
Ответ на: комментарий от mandala

Это что-то из разряда как я школьником в делфи наваял за 5 минут mp3-плеер (лет 15 назад).

А, понятно, ты пришёл поделиться своим опытом...

nvl ★★★
() автор топика
Ответ на: комментарий от nvl

тьфу блин, я не про то что фича не нужна, я про что лепить такой пример как-то на уровне базовой документации и писать про это глупо. Хотя если так хочется, то ладно, мне вообще пофиг.

mandala ★★★★★
()
Ответ на: комментарий от mandala

Надо было 15-страничный листинг в качестве примера? Как всегда чушь порешь.

nvl ★★★
() автор топика
Ответ на: комментарий от t184256

Ту т проблема в том, что изображение будет выведено. Но! В случае иксов в иксовое окно. А в случае wayland, просто появится участок с изображением без декораций.

nvl ★★★
() автор топика
Ответ на: комментарий от nvl

И даже это было бы проблемой, не будь у playbin возможности задать произвольный sink.

Извини, что отвечаю не кодом, мои знания протухли еще в районе GTK2, pygtk и gstreamer 0.8, но я прям очень сомневаюсь, что функциональность с тех пор могла упасть.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Чтобы реализовать аналогичныю функциональность надо было реализовывать рендерер. Вот примитивный код рендерера для gtk sink

	public class VideoRenderer : Gst.Object,  Gst.PlayerVideoRenderer {

		public Gst.Element sink;
		public Gst.Element gtk_sink;
		public Gtk.Widget widget;

		construct {
				this.gtk_sink = Gst.ElementFactory.make ("gtksink", "sink");
				this.sink = this.gtk_sink;
		}

		public unowned Gst.Element create_video_sink (Gst.Player player) {

			return this.sink;
		}

		public Gtk.Widget get_widget () {

			this.gtk_sink.get ("widget", out this.widget);

			return this.widget;
		}
	}
потом сам класс Video
		public class Video : Gtk.Box {

		Gst.Player player;
		VideoRenderer renderer;
		Gst.PlayerGMainContextSignalDispatcher dispatcher;
		Gtk.Widget video_area;

		construct {

			Gst.Element sink;

			renderer = new VideoRenderer ();
			dispatcher = new Gst.PlayerGMainContextSignalDispatcher (null);
			player = new Gst.Player (renderer, dispatcher);
		    	video_area = renderer.get_widget();
		        video_area_box.add (video_area);
...........

nvl ★★★
() автор топика
Ответ на: комментарий от nvl

Ну вот не верю я тебе. Неужто раньше не было возможности сделать конвейер playbin -> autovideosink, а затем autovideosink.set_xwindow_id(window.xid)?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Меня интересует больше всего вопрос про ffmpeg-бэкенд. Сдается мне, что по лицензионным причинам gtk4 будут поставлять в дистрибутивах собранным без ffmpeg-бэкенда...

nvl ★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Зависит от ОС. На лине gstreamer.

А возможность работы через FFmpeg в Qt только в сторонних либах, что печально, ибо GStreamer та ещё дрянь, с которого давно бегут на FFmpeg (например, все современные браузеры).

Я надеюсь этот модуль: http://www.qtav.org/ или его аналог когда-нибудь включат в официальную поставку Qt.

EXL ★★★★★
()
Ответ на: комментарий от ozz_is_here

Для VB6 были отдельные элементы насколько я помню, и либы ко всему этому, поэтому даже форматы из стандартного элемента играться не будут.

linuhs_user
()
Ответ на: комментарий от nvl

не думаю. ffmpeg сам по себе никаких патентов и лицензий не нарушает, нарушают лишь некоторые кодеки, которые входят в его состав. соответственно никто не мешает собрать его без поддержки этих кодеков (также как и заменить эту версию другой, собранной со всеми нужными кодеками). ну а ffmpeg-бекенд в gtk всего лишь использует интерфейс ffmpeg'а и сам по себе тоже ничего не нарушает

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от mandala

в делфи наваял за 5 минут mp3-плеер

Еще тогда я понял что в отрыве от чего то большего и цельного этот пример не имеет практического смысла.

Скрещиваешь это со контролом «список», и получается плеер с плейлистом. На моё удивление этой поделкой один человек даже пользовался. Чёрный текст на белом фоне ему оказался удобнее, чем зелёный на чёрном в Winamp'е. Так что для пользы особо большего и не надо.

i-rinat ★★★★★
()

Гм. Я такое на дельфи в 2003 году делал. Это вершина развития гытыка?

leave ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Все так, только в репозиториях fedora нет ни одного пакета с зависьмостью от ffmpeg. Не могу найти почему, только это: FFMpeg is not acceptable for Fedora

nvl ★★★
() автор топика
Последнее исправление: nvl (всего исправлений: 1)

Этот кусочек кода не может быть под копирайтом или GPL-копилефтом, т.к. не достаточно креатива.

gag ★★★★★
()
Ответ на: комментарий от gag

это шаблон из IDE в который вставлены несколько строк

nvl ★★★
() автор топика
Ответ на: комментарий от eternal_sorrow

ну у fedora в этом смысле политика жестче даже чем у дебиана

Сравнение бессмысленное, у них разные подходы. Дебиан угорает по лицензионной чистоте, выкидывает в non-free прошивки и даже документацию у емаксу, но игнорирует патенты. Федора не придирается так к лицензиям, но зато соблюдает патентное законодательство США.

anonymous
()
Ответ на: комментарий от Thetan

Для начала бы им Glade в Builder интегрировать

А мне как раз удобно, что Glade отдельно, а в Builder видеть xml-код.

а то работать невозможно.

В чем невозможность?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.