Але, як сказали на якомусь форумі, випадків підключення цієї камери в Linux у вигляді WEB-камери в інтернеті не виявлені. При підключенні через USB камера нормально визначається як USB-пристрій, і на цьому все закінчується. Пристрої / dev / videoX не створюється, бо в ядерних драйвери підтримки даної камери немає і, мабуть, ніколи не буде.
Але не лежати ж камері без діла! Тим більше що бабуся з далекого міста дивується, чому вона може налаштувати скайп з камерою, щоб ми її бачили, а такі просунуті комп'ютерники як я - ні. Мені стало прикро, і я вирішив будь-що-будь завести цю камеру під Linux-ом.
Отже, з'ясувалося, що деякі умільці підключають DV-камери по шнуру FireWire, а потім, скориставшись модулем ядра vloopback. створюють пристрій / dev / video0. Це стандартний файл пристрою веб-камери, з ним можуть працювати такі програми як Kopete і Skype. Повністю опису даного процесу і потрібні команди ніде не знайшов, тому почав розбиратися, так би мовити, з нуля.
Перше, що з'ясувалося - це те, що модуль vloopback існує тільки для ядер 2.6.x, і його реалізації для 3.2.x немає в природі. А у мене система Debian Testing Squeezy з ядром 3.2.0-4-686-pae. Зібрати vloopback з початкових кодів для ядра 3.2.x теж не вийшло, а на офіційному сайті ні слова про підтримку ядер версії 3.
Для установки даного модуля необхідно встановити пакети з заголовками файлами ядра, які зазвичай називаються linux-headers *. У моєму випадку це був пакет linux-headers-3.2.0-4-common. Я його встановив, після чого розпакував архів v4l2loopback і запустив компіляцію з установкою:
- make (від користувача)
- make install (від рута)
В результаті модуль був скомпільований і встановлений в систему. Автозапуск модуля ніде інсталл-скриптом не описує, на перших порах його можна запускати руками:
У разі вдалого запуску модуля, в системі буде створено файл / dev / video0. а в списку модулів (можна подивитися через команду lsmod) з'являться рядки:
v4l2loopback 22660 0
videodev 61658 1 v4l2loopback
Можна вважати, що половина справи зроблена.
Далі необхідно перевірити, чи приймає Linux-система дані по FireWire. Пам'ятаючи про те, що починаючи з якоюсь версії ядра 2.6.x в Linux видалили модуль raw1394. і замінили його модулями firewire_ohci + firewire_core. з якими половина софта не працює, я приготувався до довгого колупання. Але, на подив, монтажна програма Kino бадьоро показала картинку з камери. Я зрадів і став перевіряти, чи можна передати FireWire потік в mplayer / mencoder.
Для початку я просто перевірив каптюрінг в файл через консольну програму dvgrab:
Далі я перевірив, чи може mplayer показувати потокові дані з камери. Програма dvgrab може передавати FireWire дані в стандартний потік. Для цього треба в кінці команди поставити знак "-". А програма mplayer може приймати дані зі стандартного потоку. Для цього в кінці команди теж потрібно поставити знак "-".
В результаті, сформувалася ось така команда:
dvgrab -noavc - | mplayer -noconsolecontrols -
Можна подивитися потік FireWire і через VLC:
dvgrab -noavc - | vlc -
Але VLC відображає картинку з сильним лагом в порівнянні з MPlayer.
Тепер потрібно зробити наступне:
Перші три пункти реалізуються за допомогою такої команди:
dvgrab -noavc - | mencoder -ovc raw -nosound -vf tfields = 0, detc, scale = 320: 340, format = yuy2 -o / dev / video0 -
Пробіжимося коротко по опціях mencoder-а.
Could not connect to video device (/ dev / video0).
Pleace check connection.
Кажуть, що ця помилка виникає через те, що користувач не включений в групу video. Перевіряємо - мій пользоватьель в групі video. Тоді в чому ж справа?
Картинка мерехтіла, була вся в зелених і синіх смужках, колір був відсутній як такий. Ох і довго ж я розбирався чому так. Зрештою так і не розібрався, але частково зміг обійти проблему.
Чому зеленуватий відтінок? Тому що в README програми test написано:
since all pixels are set to "0" it will be green.
Я плюнув на все, заліз в исходник test.c. поруч з глобальної змінної debug завів глобальну змінну pixel_byte:
static int debug = 0;
__u8 pixel_byte = 128;
У коді знайшов заповнення пам'яті константою 0:
memset (buffer, 0, framesize);
memset (check_buffer, 0, framesize);
for (i = 0; i
>
memset (buffer, pixel_byte, framesize);
memset (check_buffer, pixel_byte, framesize);
for (i = 0; i
>
Скомпілював, запустив, і підібрав значення константи pixel_byte = 128. При ній видається картинка в сірих тонах, а не в зелених. В ході підбору та перезапуску програми test, несподівано виявив, що після трьох-п'яти запусків програми test зникає весь цифровий шум, і картинка стає чіткою, без будь-яких артефактів:
Я попросив його зробити скріншот картинки, який видає скайп на його стороні. І ось що я побачив:
Подивитися реальний розмірЗ одного боку - огидні вертикальні смужки невідомого походження. З іншого боку, маємо дозвіл 720x360 (чому, цікаво? Mencoder повинен був смасштабіровать потік до 320x160
170). На лінійці читаються цифри, і видно міліметрові розмітка. Для того, щоб співрозмовник отримав уявлення про те, з ким він говорить, такого "якості" досить.
Взагалі, я вважаю, що ця картинка набагато краще, ніж видають ширвжитковий WEB-камери за 700-800 руб. Тільки чорно-біла.