LINUX.ORG.RU

Можно ли заставить VLC или Mplayer писать в /dev/video0 ?


2

2

Здравствуйте!

Файл /dev/video0 традиционно создается WEB-камерой. Из него берут видеопоток такие программы как kopete или skype.

Теперь представим задачу: мы хотим показать видеоролик собеседнику через skype.

WEB-камеры у нас нет, файл /dev/video0 не сущетсвует (но мы его можем создать).

Вопрос. Какие команды можно дать, чтобы Mplayer/VLC начали писать в /dev/video0?

Я пытался сделать так:

# Создаем символьный файл /dev/video0 
# Вроде у пользователей WEB-камер создается именно 
# символьный файл а не блочный
=> mknod /dev/video0 c 81 0

# Поставим ему максимальные права, чтоб не заморачиваться с правами
=> chmod 777 /dev/video0

# Попробуем что-нибудь записать в /dev/video0
# (По-идее, данный файл должен скушивать все, как /dev/null?)
=> cat "Это видеопоток"> /dev/video0
bash: /dev/video0: Нет такого устройства или адреса

# Хм, странно. А ну посмотрим:
=> ls -l /dev | grep video
crw-rw---T+ 1 root video     252,   1 Дек 12 23:43 fw1
crw-rw----+ 1 root video     195,   0 Дек 12 22:39 nvidia0
crw-rw----+ 1 root video     195, 255 Дек 12 22:39 nvidiactl
crwxrwxrwx  1 root root       81,   0 Дек 13 00:53 video0

Файл /dev/video0 на месте, но при попытке записать в него, система сообщает что файл не существует.

Наверное, я что-то принципиально не так делаю. А как правильно?

★★★★★

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

Если сам хочешь сделать, то, во-первых, придется сначала научиться минимальный модуль ядра писать (т.к. при обращению к /dev/videoX софт первым делом проверяет его тип и возможности), а во-вторых, немного изучить v4l2.

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

например так http://code.google.com/p/v4l2loopback

Ага, каждый день узнаешь что-то новое. vloopback в ядре 3.2 не поддерживается, оказывается сделали v4l2loopback. Скомпилял, запустил, работает:

=> lsmod | grep loopback
v4l2loopback           22660  0 
videodev               61658  1 v4l2loopback

и файл /dev/video0 автоматически создался:

=>ls -l /dev | grep video
crw-rw---T+ 1 root video     252,   1 Дек 12 23:43 fw1
crw-rw----+ 1 root video     195,   0 Дек 12 22:39 nvidia0
crw-rw----+ 1 root video     195, 255 Дек 12 22:39 nvidiactl
crw-rw---T+ 1 root video      81,   0 Дек 13 01:31 video0

Теперь самый главный вопрос: как засунуть в /dev/video0 поток, проигрываемый из файла?

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

vloopback в ядре 3.2 не поддерживается

С разморозкой! v4l уже давно стал v4l2!

try http://code.google.com/p/v4lsink/ as source of video data, it is only tested input program.


И вашпе, ты читать разучился?

* For instance, you can try the default settings with this command: * mencoder video.avi -ovc raw -nosound -vf scale=640:480,format=yuy2 -o /dev/video1

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

Так, в v4l2loopback обнаружился каталог examples, в нем две программы:

1. test - генерирует тестовую картинку

2. yuv4mpeg_to_v4l2 - вроде как гонит mpeg-видео в /dev/video0

Для простой проверки предлагают сделать команды:

$ ./test /dev/video0 &
$ xawtv -c /dev/video0

Результат: ./test запускается в виде отдельного job. Просмотрщик xawtv показывает черный экран. Пробовал посмотреть на картинку через Camorama - результат тот же: картинка отсутсвует.

Для проверки видео предлагают сделать команды:

$ mkfifo /tmp/pipe
$ ./yuv4mpeg_to_v4l2 < /tmp/pipe &
$ mplayer movie.mp4 -vo yuv4mpeg:file=/tmp/pipe

В результате ни xawtv ни Camorama ничего не показывают.

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

Кое-как заработало.

Сейчас пытаюсь превратить DV-камеру в WEB-камеру.

Нащупал команду:

dvgrab -noavc - | mencoder -ovc raw -nosound -vf scale=320:240,format=yuy2 -o /dev/video0 -

Изображение есть, но всё в зеленых тонах, в вертикальную полоску, с какими-то вертикальными штрихами.

Не знаешь, какой формат нужно указывать? Я уже перепробовал все что встречаются в документации по mencoder - каждый формат глючит по-своему. Картинку распознать можно с трудом, но нормальной получить не могу.

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

Хм, надо будет по-трезвому глянуть. Сдается мне, что твою проблему можно было немного более изящным способом решить…

Eddy_Em ☆☆☆☆☆
()
21 февраля 2013 г.
Ответ на: комментарий от Eddy_Em

Уважаемые господа, а не удалось ли нащупать решение? (на трезвую там голову, или иначе…).

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

Сорри, я имел в виду имитация miniDV-камеры, как web-камеры. Через v4l2loopback или как-то иначе. Куча софтин для видеотрансляции (особенно все флешовое) привыкла транслировать только вебкамеры, а надо бы подключить полноценную камеру с оптикой, miniDV было бы ОК.

Под винды это решалось кучей софтин (ManyCam forexample), под Linuxом про это есть только что заброшенная WebStudio (как-то не нравится, что ява, ведь хотелось бы минимум оверхеда), и, вот, попытки проделанные топикстартером с v4l2loopback (я тоже только что их повторил, получил «зеленую вебкамеру»), но хотелось бы большего, возможно упускаю очевидный и работающий вариант.

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