Проигрывание AVI в Lazarus
Модератор: Модераторы
Проигрывание AVI в Lazarus
Собственно в теме описана вся проблема. Есть ли какой-нибудь способ проиграть обычный avi-файл в Lazarus. Важно только изображение, т.е. звук воспроизводить не обязательно. Заранее спасибо за помощь.
Используя комманды системы задействовать внешний плеер, например mplayer. В линуксе его нужно устанавливать а в виндовсе достаточно скачать готовую сборку с сайта проекта и положить в каталог программы.
Для линукса комманда имеет вид:
Для виндовса:
Для линукса комманда имеет вид:
Код: Выделить всё
FPSYSTEM('nohup mplayer "file.avi" &');Для виндовса:
Код: Выделить всё
FPSYSTEM('start "mplayer.exe" "file.avi"');Сквозняк писал(а):Используя комманды системы задействовать внешний плеер, например mplayer.
Я так понимаю, что запустится отдельное окно? А можно как-то выводить это на TPanel к примеру? И дело ещ в том, что каждый кадр должен быть обработан. Т.е. можно как-то указывать какой именно фрейм выводить?
Да, окно отдельное. В мплаере много комманд, ипользуя их можно начинать проигрывание с определённого места на определённое время, только точность будет невысокая - место высчитывается по ключевым кадрам, а в наиболее популярных форматах это не очень просто. Если тебе нужны отдельные кадры, то можно выводить не на экран а в скриншоты используя видеовывод pngИ уже с картинкой делать всё, что тебе нужно. Если этого недостаточно, смотри другие плееры или способы обработки информации лазарусом.
Код: Выделить всё
mplayer file.avi -vo pngmplayer вообще можно заставить выводить только картинку без рамки и задавать ее размер и положение с помощью опций. То есть встроить в интерфейс программы. Кажется даже можно управлять. Как, можно посмотреть исходники фронтендов
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
GORKOFF писал(а): А можно как-то выводить это на TPanel к примеру?
Можно, в качестве примера можно посмотреть на плагин WlxMPlayer
Сквозняк писал(а):например mplayer ... в виндовсе достаточно скачать готовую сборку с сайта проекта и положить в каталог программы.
При этом важно помнить про лицензию mplayer (GPL v2) и выпускать свою программу под совместимой лицензией, с открытыми исходниками.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Разве вирусные свойства GPL распостраняются на бинарники?
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Ism писал(а):mplayer вообще можно заставить выводить только картинку без рамки и задавать ее размер и положение с помощью опций
При запуске - один из параметров хендл окна, в который выводить изображение. Тогда он не будет создавать своё окно, а использует то, которые ты указал.
Команды управления посылаются в stdInput процесса, который ты создаёшь для запуска MPlayer-а.
Спасибо за помощь, но всё же это не совсем то. Я плохо сформулировал вопрос.
Мне скорее нужно получить кадр из AVI-фильма, обработать его, запросить другой кадр и так далее.
Мне скорее нужно получить кадр из AVI-фильма, обработать его, запросить другой кадр и так далее.
Brainenjii писал(а):Разве вирусные свойства GPL распостраняются на бинарники?
Если я правильно понимаю пункт 2, он не делает различий между исходниками и бинарниками. Там написано, что всё, что включает GPL-программу или её часть (производная работа, derivative work), должно распространяться на условиях GPL. Если в составе этой работы есть независимые от GPL-программы части, то сами по себе (без GPL-программы) они могут быть под любой лицензией. Но если распространять их вместе с GPL-программой, их придётся лицензировать под GPL, поэтому логично выбрать в качестве этой "любой" лицензии GPL-совместимую, например BSD или MIT.
Неправильно понимаете. Это не "derivative work", а "mere aggregation", не обязано иметь одну лицензию. Использовать mplayer в slave mode можно, поскольку взаимодействие осуществляется через документированный протокол межпроцессного взаимодействия.
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 в проприетарных программах, а может и признать. Но выяснять это экспериментально я бы не стал.
