Использование веб-камеры в Linux amd64

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

Так вот, среди огромного количества существующих сегодня вебкамер линукс определяет очень многие. У меня из десятка различных моделей ядро linux 2.6.31 поддерживает все. Проверить определилась ли камера, можно по наличию файла /dev/video0. Если камеру отключить, то этот файл исчезнет.

Чтоб проверить изображение на камере я использую mplayer:
mplayer tv:// /dev/video0

В линуксе имеется две подсистемы работы с устройствами видеозахвата: video4linux1 и соотвественно video4linux2. Вся ложка "не мёда" заключается в том, что одни программы требуют v4l1, другие требуют v4l2. Для решения этой проблемы имеется библиотке libv4l, которая после установки используется следующим образом. Я полагаю, что библиотека установлена в /usr/lib32.

Для совместимости с v4l1 в приложении запускаем так:
LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so приложение

Для совместимости с v4l2 в приложении запускаем так:
LD_PRELOAD=/usr/lib32/libv4l/v4l2convert.so приложение

Проблема сказывается, что в одних приложениях камера работает нормально, а в других показывает зеленый мусор или черные квадраты. Например, если mplayer показывает мусор вместо нормального изображения запускаем его так с использованием конвертора:
LD_PRELOAD=/usr/lib32/libv4l/v4l2convert.so mplayer tv:// /dev/video0

На самом деле, mplayer обычно собирается с поддержкой как первой, так и второй версии video4linux и такая проблема с ним встречается не часто. А вот в skype эта проблема самая типичная потому что скайп доступен только в бинарном виде и что либо изменить в нем мы не в силах. Для удобства, можно отредактировать файл /usr/bin/skype, который является скриптом и перед строкой
exec /opt/skype/skype
вставить строку
export LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so

Это заставить подгрузить нужную библиотеку перед загрузкой скайпа и скайп начнет нормально показывает изображение с камеры.

Я использую Linux Gentoo amd64 и в этой системе имеется еще одна проблема. Дело в том что skype доступен только в 32-битной сборке. При установке libv4l в amd64 системе устанавливается ее 64-битная версия и 32-битный скайп невозможно использовать с этой библиотекой. Скайп запускается, но выдается ошибка:
ERROR: ld.so: object '/usr/lib64/libv4l/v4l2convert.so' from LD_PRELOAD cannot be preloaded: ignored.
Естественно камера в скайпе показывает мусор:

Для решения проблемы прийдется собрать 32-битную библиотеку собственноручно. Для этого скачиваем и разворачиваем архив с исходниками:
$ tar -zxvf libv4l-0.6.1.tar.gz
$ cd libv4l-0.6.1/
Для того чтоб не захламлять систему установим ее в собственную директорию /usr/local/libv4l32:
make CFLAGS=-m32 LDFLAGS=-m32 PREFIX=/usr/local/libv4l32
make CFLAGS=-m32 LDFLAGS=-m32 PREFIX=/usr/local/libv4l32 install

Запускаем skype:
$ LD_PRELOAD=/usr/local/libv4l32/lib/libv4l/v4l2convert.so /opt/skype/skype

Второй вариант использования 32-битной libv4l библиотеки это просто собрать ее на любом 32-битном линуксе. После уставновки находим следующие файлы:

/usr/lib/libv4l1.so -> libv4l1.so.0
/usr/lib/libv4l1.so.0
/usr/lib/libv4l2.so -> libv4l2.so.0
/usr/lib/libv4l2.so.0
/usr/lib/libv4lconvert.so -> libv4lconvert.so.0
/usr/lib/libv4lconvert.so.0
/usr/lib/libv4l/v4l1compat.so
/usr/lib/libv4l/v4l2convert.so

и копируем их в /usr/lib32 нашей 64-битной системы

В ядре должен быть разрешен запуск 32 битного кода. Теперь запускаем скайп такой строкой:
LD_PRELOAD=/usr/lib32/libv4l/v4l2convert.so /opt/skype/skype

Если все пути правильные, то скайп должен нормально показывать изображение с веб-камеры

Комментарии

linux ето сила!

linux ето сила!

zz

а почему когда я вырубаю терминал то и скайп вырубается?

Без терминала

Без терминала все программы завершатся.
Запускайте через nohup

1

Спасибо Вам. По больше бы таких людей.

спс

Большое спасибо! Пол дня бился с решением.

Не получилось

У меня камера Zilink (Белорусская фирма) не получилось у меня настроить камеру на Линуксе...все делала вроде по инструкции, но почему то не работает :(

интерьер

Zinich, С Линуксом разобраться сложно, но зато потом

да статья

да статья интересная

Вообще, то под

Вообще, то под 64-битную систему спокойно подоходит путь /usr/lib32/libv4l/v4l2convert.so , по крайней мере у меня.

Поделитесь этой страницей



0
0
0
0
0
0
0
0

0

Комментарии ВКонтакте