Автор |
Сообщение |
Сообщение создано: 29. 02. 2012 [16:30]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
Пробую реализовать бекенд Media виджета для проигрывания мультимедиа ресурсов (в идеале потока с IP-камеры).
Решил использовать Qt/KDE фреймворк Phonon.
Начата реализация api в VCAEngine и отоброжение через UI.Vision (WebVision пока не трогал, да и еще не решил как быть с ним).
В VCAEngine добавлены новые свойства:
"Phonon" для атрибута "Type" виджета "Media";
Свойства "brightness", "contrast" ,"hue", "saturation" для него (пока не обрабатываются в Vision’е ;-) )
Phonon отключается в скрипте ./configure опцией --disable-Phonon (правда autotools я не очень знаю, так что там есть что улучшить). Возможно не везде проставил корректно ifdef HAVE_PHONON, так как пока тестировал только на работоспособность с включенным Phonon.
В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)
Так же попытался добавить включение фуллскрина по двойному клику на media-виджете. Теперь не пойму куда добавить обработку выхода из фулл скрина ;-).
Прилагаю тестовый проект, патч на версию 0.7.2 ( svn1669 ) и скриншот с наблюдаемым багом.
проект на дропбоксе: http://dl.dropbox.com/u/6985606/phonon.tar.xz
Под Debian Squeeze необходимы пакеты: libphonon-dev для сборки и libphonon4 для работы.
В качестве бекендов могут быть phonon-backend-xine, phonon-backend-vlc и phonon-backend-gstreamer (на последнем наблюдаю еще один баг: при завершении видео потока, не происходит перезапуск проигрования с начала, хотя соответсвующий coonect между сигналам finished() и слотом play() установлен).
P.S.: еще раз прошу о помощи в первую очередь с восстановлением нормального функционала media::image, чтоб можно было продолжать двигаться дальше.
[Сообщение редактировалось 1 раз(а), в последний раз 29.02.2012 в 16:53.]
Вложенный файл
test.png (Тип файла: image/png, Размер: 279.44 килобайт) — 2059 загрузок
phonon_p1.patch (Тип файла: text/x-patch, Размер: 10.27 килобайт) — 1756 загрузок
|
Сообщение создано: 29. 02. 2012 [17:02]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"aleax" wrote:
Начата реализация api в VCAEngine и отоброжение через UI.Vision (WebVision пока не трогал, да и еще не решил как быть с ним).
HTML5 тег "media", "video", наверное.
"aleax" wrote:
В VCAEngine добавлены новые свойства:
"Phonon" для атрибута "Type" виджета "Media";
Свойства "brightness", "contrast" ,"hue", "saturation" для него (пока не обрабатываются в Vision’е ;-) )
А вот это нехорошо! Модель данных (VCAEngine) не должна содержать информации о деталях и способах реализации, хотя-бы потому, что это-же в WebVision будет определённо реализовываться не с помощью Phonon!
Добавляйте более абстрактный тип "Video" или используйте существующий "Movie", в котором, при доступности Phonon, использовать для проигрывания в Vision его иначе старое.
И свойства контрастности, яркости и т.д., что фактически является фильтром лучше оформить одним параметром "фильтр" с записью отдельных частей через разделитель.
"aleax" wrote:
В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)
При каком типе? Нужно условно инициировать объект Phonon, а не всегда.
"aleax" wrote:
Так же попытался добавить включение фуллскрина по двойному клику на media-виджете. Теперь не пойму куда добавить обработку выхода из фулл скрина ;-).
Разбираться с событиями, которые слушает объект Phonon и фильтровать их.
"aleax" wrote:
P.S.: еще раз прошу о помощи в первую очередь с восстановлением нормального функционала media::image, чтоб можно было продолжать двигаться дальше.
Примите к сведению мои замечания, а пока я погляжу на патч.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 29. 02. 2012 [17:13]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"roman" wrote:
"aleax" wrote:
В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)
При каком типе? Нужно условно инициировать объект Phonon, а не всегда.
Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 29. 02. 2012 [17:23]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
"roman" wrote:
Добавляйте более абстрактный тип "Video" или используйте существующий "Movie", в котором, при доступности Phonon, использовать для проигрывания в Vision его иначе старое.
"aleax" wrote:
В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)
При каком типе? Нужно условно инициировать объект Phonon, а не всегда.
Оригинально в ините создается layout в который добавляется QLabel, и уже в зависимости от типа заполняется либо как QPixmap, либо как QMovie.
Я пошел путем создания виджета VideoPlayer, и соответственно добавления в layout либо QLabel (с удалением VideoPlayer), либо наоборот.
|
Сообщение создано: 29. 02. 2012 [17:27]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
"roman" wrote:
Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.
Изначально так и пытался сделать, но споткнулся о наличие в layout’е QLabe`а, соответственно встал вопрос к чему привязать QWidget видеоплеера.
|
Сообщение создано: 29. 02. 2012 [17:37]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"aleax" wrote:
"roman" wrote:
Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.
Изначально так и пытался сделать, но споткнулся о наличие в layout’е QLabe`а, соответственно встал вопрос к чему привязать QWidget видеоплеера.
Привязывать к тому к чему QLabel привязывается.
То что у Вас происходит как раз и объясняется этим:
w->layout()->removeWidget( shD->player );
w->layout()->addWidget( shD->labWdg );
Удаление виджета из лайоута не удаляет его физически, а значит он остаётся принадлежать корневому виджету и будет отображаться, разве что не будет контролироваться размещением.
Делайте так как в FormEl.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 29. 02. 2012 [22:20]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
Что-то не пойму как быть.
В FormEl определяется указатель на "базовый" виджет addrWdg, который и кастуется к необходимым виджетам.
Переделывать на данный вариант Media —> наделать новых багов в рабочем коде, ну и отделаться малой кровью не получится.
В общем попробую пойти таким путем, а там посмотрим.
|
Сообщение создано: 01. 03. 2012 [09:37]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
"aleax" wrote:
Что-то не пойму как быть.
В FormEl определяется указатель на "базовый" виджет addrWdg, который и кастуется к необходимым виджетам.
Переделывать на данный вариант Media —> наделать новых багов в рабочем коде, ну и отделаться малой кровью не получится.
В общем попробую пойти таким путем, а там посмотрим.
Что-то я перемудрил. Утро вечера мудренее — вынес из инита, и вроде все стало работать нормально. Приду на работу выложу новый патч.
|
Сообщение создано: 01. 03. 2012 [11:29]
|
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
|
Второй вариант, с инициализацией в attrSet.
Вложенный файл
phonon_p2.patch (Тип файла: text/x-patch, Размер: 10.42 килобайт) — 1718 загрузок
|
Сообщение создано: 01. 03. 2012 [12:57]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"aleax" wrote:
Второй вариант, с инициализацией в attrSet.
Замена так и не реализована. Просто выполняется подмена в лайоуте, что неэффективно в отношении потребления памяти.
Реализация проигрывания видео с помощью Phonon не внесена в существующий тип "Movie".
Learn, learn and learn better than work, work and work.
|