LINUX.ORG.RU

Как быстро запилить встроенный плеер?

 , ,


0

2

Есть некоторое приложение на C++ и Qt, в нём есть встроенный проигрыватель видеозаписей, которые качаются с сервера.

Этот плеер сделан с помощью gstreamer-0.10, и в нём есть баги, пока не найденные и не исправленные. Также в связи с выпиливанием из репозиториев убунтощки gstreamer-0.10 нужно будет перевести его на gstreamer-1.0, что тоже не очень весёлая перспектива.

Я задумался, а может быстрее будет вообще выпилить gstreamer нафиг из этой программы и сделать плеер другим способом?

Требования такие - уметь работать с уже имеющимся GUI (кнопочки play, сброс к началу, ускоренное проигрывание, переход на произвольную позицию), опционально воспроизводить звук, записи качаются не целиком, а по частям во временный файл и оттуда воспроизводятся.

Какие возможные варианты:

1) заюзать библиотеки ffmpeg (уже используются приложением для других целей), но возможно придётся много кодить

2) Сделать Ъ-юниксвейно - запускать отдельным процессом какой-нить mplayer и через пайп читать декодированное raw видео, рисовать его на виджете

3) ... ?

И ещё это всё должно работать на онтопике, офтопике и маке

★★★★★

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

Сделать Ъ-юниксвейно - запускать отдельным потоком какой-нить mplayer и через пайп читать декодированное raw видео

mplayer умеет выводить видео в указанное окно. Пример: SMPlayer.

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

это что ли?

      -geometry x[%][:y[%]] или [WxH][+x+y]
              Настраивает  место  появления  на  экране  изображения.   x  и  y указываются в пикселах, считая от
              верхнего левого до нижнего правого угла выводимого изображения. Если после значения  указан  символ
              процента,   то  оно  превращается  в  процентное  относительно  размера  экрана  в  соответствующем
              направлении. Опция также поддерживает стандартный формат X11 опции  -geometry.   Если  опцией  -wid
              указано  внешнее  окно, то координаты x и y указываются относительно его левого верхнего угла, а не
              экранного.
              ЗАМЕЧАНИЕ: Эта опция поддерживается только драйверами x11, xmga, xv, xvmc, xvidix, gl, gl2,  direc‐
              tx, fbdev и tdfxfb.

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

Подтверждаю. Даже я, сварщик, делал плеер, забирая id окна и вставляя mplayer

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

Внезапно двачую этого содомита-экс-лиспера.

Работа С++-кодером влияет благотворно ;)

anonymous
()

А phonon в Qt уже выпилили? На Qt-4 он вроде более менее работал. Тестировал на linux и win. Под linux в качестве бекенда был gstreamer, в win - DirectShow.

Dead ★★★★
()

Учитывая, что

И ещё это всё должно работать на онтопике, офтопике и маке

то лучшее решение - libVLC (ffmpeg как вариант).

Вариант 2 лучше даже не рассматривать.

ncuxer
()
Ответ на: комментарий от Harald

Черт его знает, может и прокатит. Я как-то вообще предпочитаю без внешних вызовов обходиться, если можно.

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

Так а что не так с Phonon и Qt Multimedia? Насколько я помню трудоемкость, то вставить Phonon'овский плеер и привязать несколько кнопочек с прогрессбаром к нему - куда проще чем геморрой с mplayer'ом.

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

Qt Multimedia использует кодеки, которые уже есть в системе. Фонона под винду нет, поэтому под виндой будет печально.

ncuxer
()

gstreamer - самый нормальный вариант. не компостируй мозг и разберись с новой версией.

anonymous
()

Не пользуйся этим говном. Лучше mplayer используй в режиме slave

Eddy_Em ☆☆☆☆☆
()

встроить mplayer через -wid или использовать libvlc. В mplayer мне не нравится управление. Придётся писать команды в его stdin без возможности проверки результата на ошибки. В libvlc полноценный C API с кодами ошибок.

alex_custov ★★★★★
()

Вариант с mplayer мне нравится всё больше и больше :)

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

Qt Multimedia использует кодеки, которые уже есть в системе.

и в чем проблема поставить кодеки?

Фонона под винду нет, поэтому под виндой будет печально.

Как нет? Он у меня под виндой работал лучше чем под linux (Qt4). Под винду у него интервалы между вызовом Tick() были равны одному кадру. Под linux было похуже. Вроде бы нужно было Qt пересобрать с нужными флагами.

Dead ★★★★
()

в связи с выпиливанием из репозиториев убунтощки gstreamer-0.10 нужно будет перевести его на gstreamer-1.0, что тоже не очень весёлая перспектива

Истину глаголишь: в гстрёмере 1.0 весь интерфейс перекурочили, плюс функционал кое-где урезали. Возможно, это проблема обвязки на ruby, но мне от этого не легче.

ffmpeg .. но возможно придётся много кодить

И это верно. После гстрёмера интерфейс ффмпега абсолютно наркоманский. И пользоваться им тяжело, обвязки все глючные и урезанные. А чтобы писать свои, нужно много и упорно кодить на C

mplayer

Да, это самое простое, но возможно не самое гибкое решение.

Короче, куда не кинь (в плане мультимедиа) - всюду клин.

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

и в чем проблема поставить кодеки?

Если программа для себя, то не проблема. Если надо ставить на другие машины - то уже проблема.

Как нет? Он у меня под виндой работал лучше чем под linux (Qt4).

Упс, перепутал с чем-то.

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

Если надо ставить на другие машины - то уже проблема.

Не совсем понимаю суть проблемы. Вместе с установкой вашей программы ставить какой-нибудь K-Lite Codec Pack. Там жеж пара кликов мышкой.

P.S. Mplayer я тоже использовал, но там на самом деле много всяческих неявных проблем типа обработки ошибок от команд, парсинге его выхлопа и т.п. Уж лучше тогда какой-нибудь libvlc, хотя я его не смотрел, но там по идее должен быть какой-то API.

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

Не совсем понимаю суть проблемы. Вместе с установкой вашей программы ставить какой-нибудь K-Lite Codec Pack. Там жеж пара кликов мышкой.

А потом жри проблемы с конфликтами системных кодеков, мало ли что там у юзера стоит. А так - несколько dll в папке с программой и красота, всё железно работает.

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

А потом жри проблемы с конфликтами системных кодеков, мало ли что там у юзера стоит. А так - несколько dll в папке с программой и красота, всё железно работает.

Ну тогда да, смотрите другие варианты.

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