Проигрывание AVI в Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
GORKOFF
незнакомец
Сообщения: 4
Зарегистрирован: 11.09.2011 12:56:48

Проигрывание AVI в Lazarus

Сообщение GORKOFF »

Собственно в теме описана вся проблема. Есть ли какой-нибудь способ проиграть обычный avi-файл в Lazarus. Важно только изображение, т.е. звук воспроизводить не обязательно. Заранее спасибо за помощь.
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

Используя комманды системы задействовать внешний плеер, например mplayer. В линуксе его нужно устанавливать а в виндовсе достаточно скачать готовую сборку с сайта проекта и положить в каталог программы.
Для линукса комманда имеет вид:

Код: Выделить всё

FPSYSTEM('nohup mplayer "file.avi" &');

Для виндовса:

Код: Выделить всё

FPSYSTEM('start "mplayer.exe" "file.avi"');
GORKOFF
незнакомец
Сообщения: 4
Зарегистрирован: 11.09.2011 12:56:48

Сообщение GORKOFF »

Сквозняк писал(а):Используя комманды системы задействовать внешний плеер, например mplayer.

Я так понимаю, что запустится отдельное окно? А можно как-то выводить это на TPanel к примеру? И дело ещ в том, что каждый кадр должен быть обработан. Т.е. можно как-то указывать какой именно фрейм выводить?
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

Да, окно отдельное. В мплаере много комманд, ипользуя их можно начинать проигрывание с определённого места на определённое время, только точность будет невысокая - место высчитывается по ключевым кадрам, а в наиболее популярных форматах это не очень просто. Если тебе нужны отдельные кадры, то можно выводить не на экран а в скриншоты используя видеовывод png

Код: Выделить всё

mplayer file.avi -vo png
И уже с картинкой делать всё, что тебе нужно. Если этого недостаточно, смотри другие плееры или способы обработки информации лазарусом.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

mplayer вообще можно заставить выводить только картинку без рамки и задавать ее размер и положение с помощью опций. То есть встроить в интерфейс программы. Кажется даже можно управлять. Как, можно посмотреть исходники фронтендов
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

GORKOFF писал(а): А можно как-то выводить это на TPanel к примеру?

Можно, в качестве примера можно посмотреть на плагин WlxMPlayer
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Сквозняк писал(а):например mplayer ... в виндовсе достаточно скачать готовую сборку с сайта проекта и положить в каталог программы.

При этом важно помнить про лицензию mplayer (GPL v2) и выпускать свою программу под совместимой лицензией, с открытыми исходниками.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Разве вирусные свойства GPL распостраняются на бинарники?
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Ism писал(а):mplayer вообще можно заставить выводить только картинку без рамки и задавать ее размер и положение с помощью опций


При запуске - один из параметров хендл окна, в который выводить изображение. Тогда он не будет создавать своё окно, а использует то, которые ты указал.
Команды управления посылаются в stdInput процесса, который ты создаёшь для запуска MPlayer-а.
GORKOFF
незнакомец
Сообщения: 4
Зарегистрирован: 11.09.2011 12:56:48

Сообщение GORKOFF »

Спасибо за помощь, но всё же это не совсем то. Я плохо сформулировал вопрос.
Мне скорее нужно получить кадр из AVI-фильма, обработать его, запросить другой кадр и так далее.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Brainenjii писал(а):Разве вирусные свойства GPL распостраняются на бинарники?

Если я правильно понимаю пункт 2, он не делает различий между исходниками и бинарниками. Там написано, что всё, что включает GPL-программу или её часть (производная работа, derivative work), должно распространяться на условиях GPL. Если в составе этой работы есть независимые от GPL-программы части, то сами по себе (без GPL-программы) они могут быть под любой лицензией. Но если распространять их вместе с GPL-программой, их придётся лицензировать под GPL, поэтому логично выбрать в качестве этой "любой" лицензии GPL-совместимую, например BSD или MIT.
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

Неправильно понимаете. Это не "derivative work", а "mere aggregation", не обязано иметь одну лицензию. Использовать mplayer в slave mode можно, поскольку взаимодействие осуществляется через документированный протокол межпроцессного взаимодействия.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

pda писал(а):Это не "derivative work", а "mere aggregation".

Посмотрим GPL FAQ. Там пишут, что mere aggregation -- это когда я записываю mplayer и свою программу рядом на один и тот же диск. Это не наш случай.

Там же пишут, что если два модуля соединены друг с другом -- они формируют larger work (сходу не переведу), и если хотя бы одна её часть под GPL, то вся larger work должна быть под GPL. При этом что считается соединением, а что нет - решается в суде.

В GNU считают, что статическая или динамическая линковка - это наверняка соединение, а пайпы, сокеты и командная строка -- скорее всего не соединение, т.е. программы остаются независимыми. Дальше они же пишут, что если через пайпы/сокеты/командную строку ведётся обмен внутренними сложными структурами данных, то это тоже, возможно, соединение. При этом окончательное решение остаётся за судьёй, которому нужно ещё доказать, что команды mplayer slave mode не являются такими структурами.

pda писал(а):Использовать mplayer в slave mode можно, поскольку взаимодействие осуществляется через документированный протокол межпроцессного взаимодействия.

Ни в самой GPL, ни в FAQ ничего не написано о документированных протоколах межпроцессного взаимодействия. В FAQ написано, что если есть сомнения в связанности/не связанности программ, вопрос решается в суде.

Для меня "вопрос решается в суде" = "нельзя". Теоретически суд может признать законность использования mplayer slave mode в проприетарных программах, а может и признать. Но выяснять это экспериментально я бы не стал.
Ответить