LINUX.ORG.RU

Захват видео при помощи mplayer


0

0

Нужно захватить в линуксе видеоряд с камеры, подключенной к tv-тюнеру.
На самом деле захват проходит без сучка без задоринки, mplayer tv://выводит на экран видео с камеры, а mencoder tv:// - записывает на диск.

Однако, хотелось бы видеть, что именно записывается с кассеты, то есть знать, когда прервать захват. для этого нужно во время работы mencoder выводить ещё и сам захватываемый поток на экран.

Рылся в мане, но не нашел такой возможности. Хотел подключить mplayer к тому же /dev/video0, но он написал, что устройство занято.

У меня два пути решения такой проблемы:
1. Запустить mencoder с возможностью просмотра видео
2. Как-то продублировать видеодевайс /dev/video0и к нему подключить mplayer.
Желательно с минимальными потерями производительности. Подскажите, как можно реализовать воспроизведение видео во время его захвата?


Ответ на: комментарий от madcore

Элементарно. Вывод в файл буферизуется и происходит порциями. Воспроизвести такой файл очень тяжело.

Второй минус метода - явное отставание.

Третий минус - тратятся ресурсы на декодирвоание. <<Сырое>> видео — наименее затратный вариант.

RPG
() автор топика

Получится ли как надо не знаю:

mkfifo play.pipe
mplayer play.pipe &
cat /dev/video0  | tee play.pipe | mencoder ...
sdio ★★★★★
()
Ответ на: комментарий от sdio

не получится, если конечно из /dev/video0 не льется уже готовый TS-поток, например

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

К сожалению, VLC не особо подходит. Нужно написать заточенный под определенные нужды интерфейс, этот интерфейс будет обёрткой mplayer. Я его выбрал как раз из-за скорости.

У меня есть мысль, запараллелить /dev/video0. Но я не знаю как это делать.

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

Ну у меня с TV card с аппаратным mpeg-кодером, нормально льется поток хоть cat, хоть dd

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

Кстати, единственный сработавший способ - это проигрывание полученного фйла. С секундной задержкой правда и через одно место:) Но хотелось бы более изящного решения. Типа распараллеливания девайса... Или захват из окна mplayer.

RPG
() автор топика

А если сделать, чтобы программа, захватывающая видео, транслировала видео по сети, а этот поток уже и записывать, и проигрывать. Более конктретных рекомендаций не будет, т.к. не занимался этим.

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

Хорошо, тогда как это делает VLC? Возможно, обратная связь для записи и нужна, но воспроизведение? Подключился и читай на здоровье. Карточка вообще говоря на этот девайс всё время видео передает (по умолчанию черный экран), грубо говоря вещает.

Может быть стоит попробовать? Я читал про loopback для video, может это то самое...

Мне бы почитать, как сделать дубликат устройства. А то гугл ахинею выдает

RPG
() автор топика
Ответ на: комментарий от isden

> можно тупо играть с дивайса mplayer'ом и захватывать область из окна в котором играется картинка :) Это тоже уже проскакивало в моей голове. Но я не знаю как, я умею только захватывать видео с mplayer-а через свою QT-прогу:)

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

>Хорошо, тогда как это делает VLC?

Он тоже воспроизводит уже пожатый поток :)

Возможно, обратная связь для записи и нужна, но воспроизведение?


Для тюнера в этом плане нет разницы, записываешь ты или смотришь.
Единственное, что в теории может быть возможность по DMA кидать сразу в XV, минуя промежуточную память и не тратя cpu.

madcore ★★★★★
()

В общем, решил я эту проблему... Через одно место, но решил. Сначала mplayer генерит поток, затем этот поток распараллеливается на mplayer и файл avi.

Задержка есть, где-то треть секунды, неприятно, конечно, но, похоже, это единственный способ.

Что касается самого видео, то оно в сыром виде и его на потоки бить нельзя -после этого теряется возможность читать с устройства.

RPG
() автор топика
Ответ на: комментарий от madcore

Точно, только без чая:) mkfifo play.pipe nohup mencoder tv:// -tv width=720:height=576:noaudio -vf pp=lb -ovc lavc -lavcopts vcodec=mpeg2video -o play.pipe & cat play.pipe | tee capt.avi | mplayer -cache 1024 -

И с потоком не хочет работать он.

Это называется вообще говоря через задницу... Нужно искать нормальные методы:)

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

Так а почему бы не хватать в нечто вроде yuv4mpeg, бить его на две части через фифо, и полученный результат смотреть и жать? mplayer в данном случае может быть и в самом начале строки (-vo yuv4mpeg).

Дополнительно - прога XdTV умеет и хватать, и показывать одновременно. (и для сжатия применяет тот же ffmpeg/libavcodec - так что при одинаковых параметрах должно быть не медленнее).

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

Бить на части, потом резать, сжимать в реалтайме - большая нагрузка очень на проц. Тем более, если я сделаю -vo изображение пропадёт! Не нравится мне такая особенность mplayer'a

Спасибо за прогу я буду смотреть исходники как там сделано. Кстати, ffmpeg-то как раз у меня ничего не захватил:) И Kdenlive тоже.

RPG
() автор топика
Ответ на: комментарий от Andrew-R

Зависло так зависло! killall -9 xdtv не спасает, что делать? Я впервые сталкиваюсь с тем, что kill -9 не пашет.

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

Скачал нечто, под названием vloopback. Судя по их сайту, модуль должен распараллеливать видеопоток. Действительно. появилось ещё два видеоустройства, НО mplayer ругается и говорит что они заняты! В чём может быть проблема?

Качал отсюда:
http://www.lavrsen.dk/twiki/bin/view/Motion/VideoFourLinuxLoopbackDevice

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