Использование веб-камеры в 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 , по крайней мере у меня.