|
Пингвин-кинооператор
Сегодня цифровая видеокамера уже не является чем-то особенным и недоступным. Цены на такие устройства потребительского класса перестали кусаться, и все больше людей при покупке видеокамеры, выбирая между аналоговым или цифровым вариантом, отдают предпочтение последнему. Попробуем разобраться, как заставить работать такую камеру совместно с компьютером под управлением GNU/Linux. Во время написания статьи был использован дистрибутив Kubuntu 6.06, чего, как говорится, и вам желаю :-). Практически все сказанное действительно и для других дистрибутивов Linux.
Совсем немного теории
Несмотря на то, что на корпусе большинства цифровых видеокамер можно найти надпись вроде «USB 2.0 compatible», для захвата компьютером видеопотока традиционно используется совсем другой интерфейс
IEEE 1394. Этот высокоскоростной интерфейс поддерживает «горячее» подключение и позволяет соединить до 63 устройств. Различные производители называют его в своих устройствах по-разному. Наиболее употребляемым является название «Firewire», предложенное компанией
Apple, которая и занималась активно его разработкой, особенно на первых порах. На компьютерах Apple этот порт давно уже стал стандартным,
Sony называет такие устройства
i.Link оба слова означают одно и то же. Кстати, обозначение «IEEE 1394» не несет какого то особого смысла, ничего магического. Просто это был 1394й по счету стандарт, выпущенный комитетом. В настоящее время существует два стандарта IEEE 1394. Первый стандарт,
IEEE 1394a, поддерживает обмен данными со скоростью до 400 Мб/c, более новый
IEEE 1394b (FireWire800 и FireWire1600) поддерживает уже скорость вплоть до 1600 Мб/c (даже до 3200). Несмотря на то, что стандарт USB 2.0 позволяет передавать информацию со скоростью 480 Мб/c, то есть теоретически быстрее, чем IEEE 1394a, на практике скорость у Firewire получается выше. И так как Firewire первоначально разрабатывался в том числе и для передачи видеопотоков, он может передавать в изохронном режиме данные с гарантированной скоростью. В этом случае вся полоса отдается «нуждающемуся» устройству, и устройства не конкурируют между собой за полосу пропускания, как это происходит в USB (особенно при каскадном подключении). Поэтому на форумах очень часто можно встретить высказывания, что, мол, качество видео, перегнанного по Firewire, получается выше, чем при трансфере через USB. Кстати, IEEE-1394 устройства достаточно независимы. То есть фактически ничто не мешает напрямую, без использования ПК, соединить видеокамеру с внешним жестким диском, использующим Firewire, куда и перегнать отснятый материал.
Для того чтобы переписать отснятый материал, вам, естественно, понадобится поддержка Firewire. Если в материнской плате ее нет, то необходимо докупить внешнюю PCI-карту. Такая карта стоит порядка 15 у.е. Кроме того, понадобится шнур: со стороны, подключающейся к компьютеру, он имеет разъем с 6 контактами, а со второй, подсоединяемой к видеокамере 4 (без контактов питания).
Поддержка IEEE 1394 в Linux
Работа по поддержке IEEE 1394 в Linux ведется уже давно, и сейчас можно сказать, что основные проблемы уже решены. Хотя, как водится, драйвера и спецификации производители скрывают, поэтому будет ли работать конкретное устройство, зависит от используемого в нем чипа. Сегодня не должно быть проблем с устройствами, использующими чипы
Texas Instruments PCILynx/PCILynx2, а также со всеми OHCI-совместимыми чипами, производимыми различными компаниями. Не поддерживаются чипы Sony, используемые в ноутбуках серии Vaio (некоторые ноутбуки этой серии, впрочем, используют OHCI-совместимый CXD3222), а также Adaptec AIC5800. Для проверки совместимости вашего чипа или устройства необходимо посетить web-сайт поддержки IEEE1394 в Linux www.linux1394.org.
Поддержка IEEE 1394 включена в основное ядро начиная с версии 2.3.40, и сейчас реализована для всех версий ядер от 2.2 до 2.6 (для 2.2 и ранних версий 2.4 в виде патча). Поэтому пользователям современных дистрибутивов нет необходимости пересобирать ядро только в случае возникновения проблем, возможно, понадобится установить более свежую версию библиотек
libraw1394 и
libiec61883. Первая обеспечивает прямой доступ к устройству, вторая базируется на libraw1394 и обеспечивает стандартный интерфейс для доступа к потоковым данным, включая DV, MPEG2, аудио и видеоданным.
Один из вариантов иерархии драйверов на моем компьютере выглядит так:
физическое устройство > ohci1394 > ieee1394 > raw1394 > libraw1394 > приложение. При этом ieee1394 является высокоуровневым драйвером, обеспечивающим единый интерфейс доступа. Можно использовать три низкоуровневых модуля, работающих непосредственно с устройством: это ohci1394 для чипов 1394 Open Host Controller Interface, драйвер aic5800 для Adaptec AIC5800 и pcilynx-драйвер для чипов Texas Instruments PCILynx.
Если все установлено и правильно настроено, после подключения всех имеющихся устройств в системе могут появиться следующие модули и файлы устройств:
raw1394 обеспечивает прямой «сырой» доступ с возможностью управления камерой, но его не рекомендуется использовать по причине возможных проблем с безопасностью. Доступ в пространстве пользователя, как показано выше, осуществляется через libraw1394;
video1394 основной асинхронный OHCI-драйвер, обеспечивает более производительный DMA-доступ, поэтому и используется для работы с цифровыми камерами;
dv1394 осуществляет прием и передачу сигналов с цифровых видеокамер (Digital Video), полностью инкапсулирует обработку DV поверх 1394. Ранее для работы с DV-камерами использовался video1394, но работа с ним могла вызвать конфликт устройств, поэтому его переписали;
eth1394 позволяет связать компьютеры через IEEE1394-сеть. Первоначально обеспечивал инкапсуляцию Ethernet, затем была добавлена поддержка IPv4-over-1394 (RFC-2734);
sbp2 Serial Bus Protocol, обеспечивает доступ к устройствам хранения информации;
amdtp реализует поддержку протокола Audio & Music Data Transmission Protocol (в настоящее время IEEE1394 используется в профессиональном звуковом оборудовании).
Итак, для работы с цифровыми DV-видеокамерами на потребуются модули raw1394 и dv1394, с которыми, собственно, и работает нелинейный видеоредактор Kino.
Смотрим, что в Kubuntu
В Kubuntu с распознаванием дополнительной платы расширения и видеокамеры у меня проблем не было. Но они могут возникнуть в других дистрибутивах (особенно старых) или с другими устройствами. Поэтому подробно рассмотрим, как определить причину, если что-то пойдет не так.
Вот что сказано в сообщениях ядра по поводу инициализации PCI устройства:
Находим следующие строчки, гласящие о том, что устройство найдено и драйвера загружены:
Подробнее информацию о найденном PCI-устройстве запрашиваем командой:
Как видите, установлен OHCI-совместимый адаптер, поэтому проблем в работе быть не должно. Смотрим, какие модули сейчас загружены.
Требуемых для работы raw1394 и dv1394, как видите, нет. И наконец, посмотрим на интересующие нас файлы устройств:
Да, негусто. В одном из советов по работе с Kino в Ubuntu рекомендуется загружать такие модули либо вручную
либо прописав их загрузку в /etc/modules, добавив две строки:
В Kubuntu модуль sbp2 загружается по умолчанию. Если вы не собираетесь использовать FireWire-диски, то стоит, наверно, отключить загрузку модуля sbp2, удалив либо закомментировав запись.
Но в современных дистрибутивах, использующих технологии
udev и
hal, устройства подхватываются на лету. Проверим, сработает ли это в Kubuntu. Подключаем шнуром камеру и включаем питание. Кое-что в системе изменилось. Команда lsmod показала наличие двух необходимых нам модулей raw1394 и dv1394. Появились и два новых устройства /dev/raw1394 и /dev/dv13940. Получилось!
Для проверки запускаем видеоредактор Kino, заходим в
Edit > Preferences и выбираем
IEEE1394. В
AV/C Device набираем /dev/dv1394-0, если хотим работать с этим модулем, или /dev/raw1394. Если с определением первого проблем не было, то при попытке выбрать raw1394 было выдано сообщение о том, что невозможно открыть файл устройства с рекомендацией проверить наличие read/write permission у текущего пользователя. Проверяем:
Как видите, чтобы работать с этими устройствами, необходимо запускать Kino от имени root, вроде gksudo kino, что не есть гут. Или пользователь должен принадлежать к группам video и disk для работы, соответственно, с dv13940 и raw1394. Смотрим, к каким группам принадлежит текущий пользователь:
Или как вариант:
Группа video в списке есть, поэтому внесем себя в группу disk. Как обычно, сделать это можно несколькими вариантами. Самый простой открыть файл /etc/groups и внести пользователя grinder в строку, описывающую группу disk:
Если хотите использовать графические утилиты, то выбираем
K > System Setting > Users & Group, переходим во вкладку
Group, здесь активируем
Показывать системные группы, после чего переходим в
Administrator Mode, нажав одноименную кнопку и введя свой пароль. Дважды щелкаем по группе disk, выбираем название используемой вами учетной записи и нажимаем
Добавить. Засим необходимо выйти из системы и зарегистрироваться опять. Теперь все нормально.
В более ранних дистрибутивах файлы устройств, возможно, придется создавать вручную. В Linux каждое устройство имеет имя и два номера: основной (major) и дополнительный (minor). Например, для всех IEEE1394 основной номер имеет цифру 171, а дополнительный определяется назначением и характеристиками устройства. Так, для dv1394 он имеет значение от 32 до 47, для raw1394 отсчет начинается с нуля.
Например, для того чтобы создать устройство raw1394, выполните такую команду:
А чтобы создать файл dv1394, предназначенный для записи информации с первого устройства в PAL (имя может меняться), введите следующее:
Более подробная информация дана на сайте проекта Linux IEEE1394.
Для того чтобы эти файлы создавались автоматически при загрузке системы, можно использовать следующий нехитрый скрипт:
Сохраняем его в /etc/init.d/firewire и делаем исполняемым:
Теперь, чтобы он выполнялся автоматически, создаем символическую ссылку:
Для проверки работы IEEE1394-устройств можно использовать утилиту
gscanbus (gscanbus.berlios.de), которую можно загрузить из пакетного репозитария Ubuntu:
После чего запускаем, набрав команду gscanbus в окне терминала. В появившемся окне (
рис.) будут показаны все найденные устройства, с сохранением их топологии подключения.
Щелчок мышкой по любому из них вызовет подробную информацию. Если выбранное устройство видеокамера, то вы сможете управлять ей прямо из окна gscanbus.
В целом же, в большинстве современных дистрибутивов вам достаточно будет просто подключить видеокамеру к компьютеру и запустить Kino, не вникая в подробности.
Linux forever!
|