Настройка tv тюнера Beholder 609 на linux Mint 13

от автора

Надеюсь, что эта статья поможет кому-нибудь сэкономить время на настройку. Статья рассчитана на новичков, но надеюсь и опытные пользователи найдут что-нибудь полезное. Все действия производились в linux mint, но полагаю, что все будет работать и на Ububntu и на других дебианоподобных дистрибутивах.

Картинка для привлечения внимания. На фото тюнер Aver 307 грубо и безжалостно переделанный мной много лет назад в Behold 407.

Итак приступим.

Первоначальная настройка

Тв тюнер установлен, в него вставлена антенна, шнурок инфракрасного датчика и аудио кабель, второй конец которого в линейном входе звуковой карты. Для просмотра будем использовать программу tvtime.

sudo apt-get install tvtime 

При установке у вас спросят стандарт вещания и вариант частотной сетки каналов. Стандарт для России SECAM, а частотная сетка Мозамбик Россия.
При установке в каталоге пользователя создается каталог .tvtime, который недоступен для пользователя. Поэтому:

sudo chmod 7 ~/.tvtime/ 

Можно запускать.

tvtime 

В ~/.tvtime будут созданы файлы tvtime.xml и stationlist.xml.
Если вы увидели изображение с телевизора и услышали звук, вам сказочно повезло. Можете переходить к следующему пункту.
Если вы видите изображение не с тюнера, а, например, с Web камеры, добавьте в файл tvtime.xml

<option name="V4LDevice" value="/dev/video1/> 

и поробуйте подобрать номер устройства.
Если вы не слышите звук (99% так оно и есть). Запускаете

alsamixer 

и увеличиваете громкость по линии Line. Если под ползунком стоят буквы MM, значит линия отключена. Включаем — жмем клавишу «М».

Звук должен появиться. Если нет, то дальше уже зависит от конкретной модели звуковой карты. Проверьте с какого канала карта берет Line-In (у меня есть вариант Line-In и Rear Out). Могут быть и другие экзотические фишки связанные с вашей моделью оборудования. Например интегрированная звуковая Via vt1828s имеет параметр — loopback. Так вот когда он Enebled звук с тв тюнера идет, но не работают больше никакие звуки (немое кино, и неслышная музыка). При Disabled все наоборот.

Со звуком справились и чтобы окончательно закрыть тему, добавляем в tvtime.xml строку

<option name="MixerDevice" value="hw:0/Master"/> 

Она указывает программе каким каналом громкости рулить. Можно указать Line, да и вообще любой канал по вашему вкусу. Названия каналов смотрите в alsamixer. Регистр букв имеет значение.
Можно добавить опции глушить звук при выходе и поверх всех окон.

<option name="MuteOnExit" value="1"/>  <option name="AlwaysOnTop" value="1"/> 

Настройка каналов

Запускаем:

tvtime-scanner -d /dev/video1 -n SECAM 

Вместо /dev/video1 подставьте ваше устройство. Если вы пользуетесь услугами кабельного провайдера, то он может транслировать передачи в стандарте PAL. Ничего страшного в этом нет. Канал будет найден все равно. Изменить кодировку для конкретного канала можно будет позднее в файле stationlist.xml.
После сканирования каналов открываем stationlist.xml, удаляем лишние каналы, добавляем, если что-то не нашлось (но это вряд ли).
Так выглядит строка с каналом.

<station name="1" active="1" position="1" band="VHF Russia" channel="R1" finetune="0" norm="SECAM" audio="auto"/> 

name — имя канала, которое будет выводиться на экране при переключении. Если в именах каналах будут не только английские буквы, добавьте в объявление xml

 encoding="UTF-8"

Иначе после запуска tvtime буквы преобразуются в Unicode коды.
active — если 0, то при листании каналов он будет пропущен
position — на какой кнопке будет сидеть канал.
Остальные параметры нет необходимости менять вручную.

Программа телепередач

Самое большое преимущество компьютерного тюнера по сравнению с обычным телевизором — это возможность выводить программу телепередач прямо на экран. Переключаем канал и видим рекламу, но мы то знаем ЧТО будет сразу после нее и делаем звук погромче скорее листаем дальше.


Tvtime умеет работать с файлами формата xmltv и мы воспользуемся этим.
В tvtime.xml добавляем.

 <option name="XMLTVFile" value="~/.tvtime/xmltv.xml"/>   <option name="XMLTVLanguage" value="ru"/>  

Качаем и распаковываем программу.

cd ~/.tvtime  wget http://www.teleguide.info/download/new3/xmltv.xml.gz  gzip -f -d xmltv.xml.gz > xmltv.xml  

Теперь нужно связать каналы из xmltv.xml и stationlist.xml. У каждого канала в xmltv.xml есть id. Прописываем его в атрибут xmltvid в файл stationlist.xml вот так:

<station name="Первый" xmltvid="1" active="1" position="1" band="VHF Russia" channel="R1" finetune="0" norm="SECAM" audio="auto"/> 

Вот и все. Теперь можно включить телевизор и наслаждаться программой передач на экране. Правда если вы живете не в Default city столице нашей родины Москве, то ваша радость, скорее всего, будет неполной. Так как время фактической трансляции не будет совпадать со временем в программе телепередач. Причем для разных каналов отклонение во времени будет различным.
Исправим это:

sed -i '/channel="1"/s/+0400/+0600/g' xmltv.xml # Первый канал: +2 часа 

Изначально в файле xmltv.xml указан часовой пояс +4 часа (видимо от Гринвича), а мы сделаем +6 часов. Нужно выполнить подобную команду для каждого канала.

Настройка пульта

Самый сложный и самый затратный по времени этап.
Есть два способа работы с пультом:
1. Через lirc,
2. Как с дополнительно клавиатурой.
Мы пойдем по второму пути. Частично пульт уже должен работать. Работают цифровые клавиши и кнопки регулировки громкости. Остальные кнопки нет.
Дело в том, что пульт уже определился системой как клавиатура. Соответствие сканкодов и кейкодов клавиатуры задается на уровне ядра.
Порядок конвертации значений следующий (описываю как сам понял дилетантским языком, исправления и уточнения приветсвуются):
1. Драйвер переводит сканкод (физический сигнал) кнопки в однобайтный или многобайтный кейкод (код клавиши) и отправляет «заинтересованным лицам».
2. Заинтересованным лицом, в нашем случае, является X серевер, который в зависимости от модели клавиатуры определяет как интерпретировать полученный кейкод. Т.е. Даже один и тот же код, но полученный от разных моделей устройств X сервер может интерпретировать по разному. Это, обычно не касается буквенно-цифровых символов и основных (вроде стрелок и ентера) кнопок. А вот интересующих нас мультимедийных кнопок очень даже касается.
Есть и еще одна проблема. X сервер способен принимать только однобайтные кейкоды, а некоторые кнопки у пульта бехолдера имеют более длинный код. Будем исправлять. Устанавливаем утилиты:

sudo apt-get install ir-keytable input-utils 

Считываем текущую кодовую таблицу для пульта:

sudo ir-keytable -r -d /dev/input/event`cat /proc/bus/input/devices | grep -3 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/etc/rc_keymaps/behold-key 

Пояснение для новичков. На самом деле все не так страшно. Эту строку можно заменить на такую

sudo ir-keytable -r -d /dev/input/event5 > /etc/rc_keymaps/behold-key 

и она будет работать ничуть не хуже. Просто нужно знать каким именно event’ом числится ваш пульт в системе. Вся остальная страшная строка — это просто вычисление номера. Этой командой можно прочитать кодовую таблицу любой клавиатуры подключенной к компьютеру.

Появился файл /etc/rc_keymaps/behold-key с текущей раскладкой. Выглядит он так:

scancode 0x6b8600 = KEY_0 (0x0b)  scancode 0x6b8601 = KEY_1 (0x02)  scancode 0x6b8602 = KEY_2 (0x03)  scancode 0x6b8603 = KEY_3 (0x04)  scancode 0x6b8604 = KEY_4 (0x05)  scancode 0x6b8605 = KEY_5 (0x06)  scancode 0x6b8606 = KEY_6 (0x07)  scancode 0x6b8607 = KEY_7 (0x08)  scancode 0x6b8608 = KEY_8 (0x09)  scancode 0x6b8609 = KEY_9 (0x0a)  scancode 0x6b860a = KEY_AGAIN (0x81)  scancode 0x6b860b = KEY_CHANNELUP (0x192)  scancode 0x6b860c = KEY_VOLUMEUP (0x73)  scancode 0x6b860d = KEY_INFO (0x166)  scancode 0x6b860e = KEY_TEXT (0x184)  scancode 0x6b860f = KEY_RECORD (0xa7)  scancode 0x6b8610 = KEY_ZOOM (0x174)  scancode 0x6b8611 = KEY_MUTE (0x71)  scancode 0x6b8612 = KEY_POWER (0x74)  scancode 0x6b8613 = KEY_GREEN (0x18f)  scancode 0x6b8614 = KEY_SCREEN (0x177)  scancode 0x6b8615 = KEY_CHANNELDOWN (0x193)  scancode 0x6b8616 = KEY_OK (0x160)  scancode 0x6b8617 = KEY_MODE (0x175)  scancode 0x6b8618 = KEY_VOLUMEDOWN (0x72)  scancode 0x6b8619 = KEY_BLUE (0x191)  scancode 0x6b861a = KEY_STOP (0x80)  scancode 0x6b861b = KEY_PLAYPAUSE (0xa4)  scancode 0x6b861c = KEY_TUNER (0x182)  scancode 0x6b861d = KEY_SLEEP (0x8e)  scancode 0x6b861e = KEY_VIDEO (0x189)  scancode 0x6b861f = KEY_RED (0x18e)  scancode 0x6b8658 = KEY_SLOW (0x199)  scancode 0x6b865c = KEY_CAMERA (0xd4) 

Редактируем этот файл так чтобы не осталось многобайтных кодов и кодов, которые не понимает X сервер:

gksudo gedit /etc/rc_keymaps/behold-key 

Записываем обратно:

ir-keytable -c -w /etc/rc_keymaps/behold-key -d /dev/input/event`cat /proc/bus/input/devices | grep -3 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` 

Получаем до перезагрузки пульт с новой кодовой таблицей. После перезагрузки все станет как раньше. Я не знаю как сделать чтобы результат оставался навсегда, поэтому последнюю команду добавил в автозагрузку файл /etc/rc.local.
Привожу для примера мой отредактированный файл behold-key:

scancode 0x6b861c = KEY_PROG1 (0x94)  scancode 0x6b8612 = KEY_CLOSE (0xce)  scancode 0x6b8600 = KEY_0 (0x0b)  scancode 0x6b8601 = KEY_1 (0x02)  scancode 0x6b8602 = KEY_2 (0x03)  scancode 0x6b8603 = KEY_3 (0x04)  scancode 0x6b8604 = KEY_4 (0x05)  scancode 0x6b8605 = KEY_5 (0x06)  scancode 0x6b8606 = KEY_6 (0x07)  scancode 0x6b8607 = KEY_7 (0x08)  scancode 0x6b8608 = KEY_8 (0x09)  scancode 0x6b8609 = KEY_9 (0x0a)  scancode 0x6b860a = KEY_PROG2 (0x95)  scancode 0x6b8614 = KEY_PROG3 (0xca)  scancode 0x6b8617 = KEY_SWITCHVIDEOMODE (0xe3)  scancode 0x6b8610 = KEY_F11 (0x57)  scancode 0x6b860b = KEY_UP (0x67)  scancode 0x6b8615 = KEY_DOWN (0x6c)  scancode 0x6b860c = KEY_RIGHT (0x6a)  scancode 0x6b8618 = KEY_LEFT (0x69)  scancode 0x6b8616 = KEY_ENTER (0x1c)  scancode 0x6b8611 = KEY_MUTE (0x71)  scancode 0x6b860d = KEY_KPEQUAL (0x75)  scancode 0x6b860f = KEY_RECORD (0xa7)  scancode 0x6b861b = KEY_PLAYPAUSE (0xa4)  scancode 0x6b861a = KEY_STOPCD (0xa6)  scancode 0x6b860e = KEY_PAUSECD (0xc9)  scancode 0x6b861f = KEY_PREVIOUSSONG (0xa5)  scancode 0x6b861e = KEY_NEXTSONG (0xa3)  scancode 0x6b861d = KEY_MEDIA (0xe2)  scancode 0x6b8613 = KEY_VOLUMEDOWN (0x72)  scancode 0x6b8619 = KEY_VOLUMEUP (0x73)  scancode 0x6b865c = KEY_CAMERA (0xd4)  scancode 0x6b8658 = KEY_SPORT (0xdc) 

А вот некоторые коды, которые нормально воспринимает X сервер (данные получены методом сурового брутфорса). Обращаю ваше внимание, что так воспринимаются коды именно от пульта бехолдер. От других клавиатур код 0x94 может идентифицироваться вовсе не как KEY_PROG1.

KEY_CLOSE (0xce)  KEY_EXIT (0xae)  KEY_PROG1 (0x94)  KEY_PROG2 (0x95)  KEY_PROG3 (0xca)  KEY_PROG4 (0xcb)  KEY_POWER (0x74)  KEY_VOLUMEDOWN (0x72)  KEY_VOLUMEUP (0x73)  KEY_NEXTSONG (0xa3)  KEY_PLAYPAUSE (0xa4)  KEY_PREVIOUSSONG (0xa5)  KEY_STOPCD (0xa6)  KEY_RECORD (0xa7)  KEY_PLAYCD (0xc8)  KEY_PAUSECD (0xc9)  KEY_PLAY (0xcf)  KEY_FASTFORWARD (0xd0)  KEY_BASSBOOST (0xd1)  KEY_CAMERA (0xd4)  KEY_SOUND (0xd5)  KEY_FINANCE (0xdb)  KEY_SPORT (0xdc)  KEY_SHOP (0xdd)  KEY_ALTERASE (0xde)  KEY_MEDIA (0xe2)  KEY_VIDEO_NEXT (0xf1)  KEY_VIDEO_PREV (0xf2)  KEY_LINEFEED (0x65)  KEY_MACRO (0x70)  KEY_MIN_INTERESTING (0x71)  KEY_KPEQUAL (0x75)  KEY_KPPLUSMINUS (0x76)  KEY_PAUSE (0x77)  KEY_KPCOMMA (0x79)  KEY_HANJA (0x7b)  KEY_YEN (0x7c)  KEY_STOP (0x80)  KEY_AGAIN (0x81)  KEY_PROPS (0x82)  KEY_UNDO (0x83)  KEY_FRONT (0x84)  KEY_COPY (0x85)  KEY_OPEN (0x86)  KEY_PASTE (0x87)  KEY_CUT (0x89)  KEY_FIND (0x88)  KEY_MENU (0x8b)  KEY_CALC (0x8c)  KEY_SETUP (0x8d)  KEY_WAKEUP (0x8f)  KEY_FILE (0x90)  KEY_SENDFILE (0x91)  KEY_DELETEFILE (0x92)  KEY_XFER (0x93)  KEY_WWW (0x96)  KEY_MSDOS (0x97)  KEY_DIRECTION (0x99)  KEY_CYCLEWINDOWS (0x9a)  KEY_MAIL (0x9b)  KEY_BOOKMARKS (0x9c)  KEY_COMPUTER (0x9d)  KEY_BACK (0x9e)  KEY_FORWARD (0x9f)  KEY_CLOSECD (0xa0)  KEY_EJECTCD (0xa1)  KEY_EJECTCLOSECD (0xa2)  KEY_REWIND (0xa8)  KEY_PHONE (0xa9)  KEY_ISO (0xaa)  KEY_CONFIG (0xab)  KEY_REFRESH (0xad)  KEY_EDIT (0xb0)  KEY_SCROLLUP (0xb1)  KEY_SCROLLDOWN (0xb2)  KEY_NEW (0xb5)  KEY_REDO (0xb6)  KEY_HOMEPAGE (0xac)111  KEY_DASHBOARD (0xcc)  KEY_HP (0xd3)  KEY_QUESTION (0xd6)  KEY_EMAIL (0xd7)  KEY_CHAT (0xd8)  KEY_CONNECT (0xda)  KEY_SEARCH (0xd9)  KEY_CANCEL (0xdf)  KEY_BRIGHTNESSDOWN (0xe0)  KEY_BRIGHTNESSUP (0xe1)  KEY_SWITCHVIDEOMODE (0xe3)  KEY_KBDILLUMTOGGLE (0xe4)  KEY_KBDILLUMDOWN (0xe5)  KEY_KBDILLUMUP (0xe6)  KEY_SEND (0xe7)  KEY_REPLY (0xe8)  KEY_FORWARDMAIL (0xe9)  KEY_SAVE (0xea)  KEY_DOCUMENTS (0xeb)  KEY_WLAN (0xee)  KEY_UWB (0xef)  KEY_BRIGHTNESS_CYCLE (0xf3)  KEY_BRIGHTNESS_ZERO (0xf4)  KEY_DISPLAY_OFF (0xf5)  KEY_WIMAX (0xf6)  KEY_RFKILL (0xf7)  

При проведении работ по настройке кнопок пульта удобно пользоваться следующим методом мониторинга. Запускаем

sudo input-events -t60 5 

Где 60 это время ожидания нажатия в секундах, 5 номер клавиатуры в системе. И жмем кнопки на пульте.
Выдача имеет примерно следующий вид.

00:56:27.954276: EV_MSC MSC_SCAN 7046683  00:56:27.954281: EV_KEY KEY_PLAYPAUSE (0xa4) pressed  00:56:27.954281: EV_SYN code=0 value=0  00:56:28.062206: EV_MSC MSC_SCAN 7046683  00:56:28.062207: EV_SYN code=0 value=0  00:56:28.314253: EV_KEY KEY_PLAYPAUSE (0xa4) released  00:56:28.314254: EV_SYN code=0 value=0 

Вывод происходит при нажатии и при отпускании кнопки.
7046683 — это физический сканкод кнопки пульта в десятичной системе. Он будет выводиться в любом случае.
(0xa4) — кейкод который драйвер отправил дальше. Если его длина не равна одному байту, то X сервер его не увидит.
KEY_PLAYPAUSE — это имя кнопки. Если имени нет, то на эту кнопку нельзя будет повесить команду. Меняйте кейкод.

Последние штрихи

Мы получили пульт воспринимаемый системой как дополнительная клавиатура с мультимедийными клавишами. Осталось настроить реакцию системы на нажатия. Громкость и переключение каналов в tvtime уже работают, так как кнопки крестовины настроены как стрелки и Enter.
Идем в Настройки клавиатуры и задаем клавиши воспроизведения, которые будут работать в большинстве плееров.

На остальные кнопки настраиваем дополнительные команды.
Я назначил клавише FullScreen пульта значение F11. Эту клавишу понимает большинство программ как переход в полноэкранный режим и обратно, но не tvtime. Поэтому добавляем в файл tvtime.xml

  <bind command="toggle_fullscreen">      <keyboard key="F11"/>    </bind>  

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

tvtime-command TOGGLE_ASPECT 

полный список команд tvtime читайте в документации.
Если нужна кнопка для закрытия активного окна, устанавливаем:

sudo apt-get wmctrl 

И добавляем допкоманду:

wmctrl -c :ACTIVE: 

Вот и все. Буду рад исправлениям и уточнениям. Если тема интересна, то можно будет изучить вопрос по настройке медиакомбайна MythTV в многотюнерной конфигурации и с сетевыми клиентами. Между прочим, у MythTV есть бэкэнды под андроид. Можно смотреть эфирное ТВ с планшета или смарта… Заманчиво?!

ссылка на оригинал статьи http://habrahabr.ru/post/158447/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *