LINUX.ORG.RU

Вывод видео потока в окно X11

 , ,


0

3

Раньше для захвата видео с веб-камеры и вывода видео-потока в X-окно пользовался GStreamer'ом.
Для вывода потока подсовывал дескриптор окна window.xid (в винде window.handle) компоненте «xvimagesink» и картинка шла в окно.

Теперь я захватываю поток через FFMpeg (он же LibAV), но как выводить в X11-окно - так и не понял.
Перерыл весь гугл, нашёл, что в X11 для вывода используется подсистема XVideo. Но её API - не нашёл.

Вопрос: как вывести сырой (RAW: RGB или YUV) видео поток в окно, зная его дескриптор/хэндл (X11 и WinAPI)?

★★★★

Нифига не понял. А зачем тебе так делать, если захват можно выполнить при помощи ffserver, а вывод — при помощи mplayer или того же ffplay?

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

Мне надо вывести в окно моей программы.
Т.е. в окно, созданное мною.

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

Обана!! Похоже, то что надо! Сенькс!
Щас попробую под линуксом.
А я почему-то в man ffmpeg такого девайса (xv) не нашёл.

Интересно, а под виндой «xv» будет робить, если ему виндовый handle как window_id подсунуть?

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

Всяко пробую c ffmpeg - не выводит.

Пробую так:

mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0 -vo xv
- идёт.

Пробую так:

avconv -f video4linux2 -i /dev/video0 -s 640x480 -f avi - | avplay -
- идёт.

Но вот так (как мне нужно):

avconv -f video4linux2 -i /dev/video0 -s 640x480 -f xv normal
- не идёт! Ошибку пишет:
«Requested output format 'xv' is not a suitable output format».

Погуглил - выяснилось, что avconv должен быть сконпилирован со специальными ключами, которые задействуют компоненты «xv» (X Video) и «sdl» (Simple DirectMedia Layer). ИЧСХ, именно эти компоненты мне и нужны.

И вот теперь снова вопросы:

1) мне самому конпилировать под линь и под вынь, и прикладывать либы к дистрибутиву своей программы? а как же 64-битные системы и всё такое? всякие вынь8 и т.п.? чувствую, хапну я геморроя с этим конпилированием.

2) если не конпилировать, то самому писать либу, которая на низком уровне лезет в ffmpeg и суёт ему видео-поток (я смотрел код ffplay, он сам раскодирует поток на кадры и кладёт в окно)? а потом ещё писать обвязку на ruby?

Как быть?! Нет в жизни счастья...

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

Как быть?!

1) мне самому конпилировать под линь и под вынь, и прикладывать либы к дистрибутиву своей программы

Krieger_Od ★★ ()

Вопрос: как вывести ... видео поток в окно, зная его дескриптор/хэндл (X11 и WinAPI)?

mplayer -wid | -gui-wid window-id

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

FUCK YEAH!!!

Под линуксом работает!
Если ещё под виндой заработает, то будет вобще песня!

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

p.s. Конпилировал весь день - Xv и SDL так и не робит...
Да, я не умею, и самое главное - не люблю конпилировать.

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

Делаю в лине такими командами:

avconv -f video4linux2 -i /dev/video1 -vcodec mpeg2video -pix_fmt yuv420p -me_method epzs -b 2600k -bt 256k -f mpegts udp://127.0.0.1:5004?listen
mplayer -wid 39846401 -demuxer +mpegts -framedrop -benchmark ffmpeg://udp://127.0.0.1:5004

Теперь главное чтоб в винде заработало.

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