Использование PowerShell в настройке Vista Media Center и программы передач
Подобрал я комплектующие для Media Center. Хочу поделиться опытом настройки… Но, давайте по порядку.
Сборка
|
Корпус mATX Thermaltake LANBOX Lite Black (Корпус отличный - удобный, вместительный, тихий) |
3240 |
|
Motherboard ASUS P5K-VM |
3150 |
|
CPU Intel Core 2 Duo E4300, 1,8GHz, 2Mb, 800MHz Socket-775 OEM |
2980 |
|
Кулер Intel |
270 |
|
GotView X5 DVD Hybrid PCI-Express |
2370 |
|
PCI-E GeForce 8600GT (Купил с пассивным охлаждением, чтобы не шумела) |
2850 |
|
Привод Samsung DVDRW SH-S203B (HDDVD привод куплю позже, как раз под него место есть) |
720 |
|
HDD SATA 500Gb Samsung (Весьма тихий HDD) |
3150 |
|
2 DIMM DDR-II, 1024Mb |
1100 |
|
Картридер 3.5, USB |
250 |
Сборка компьютера в таком корпусе доставила только удовольствие. После того, как материнская плата, HDD, приводы и блок питания были привинчены к специальным блокам их осталось только установить в корпус и включить питание.
По FireWire присоединил внешний HDD Maxtor еще на 500Gb.
Для ТВ-тюнера я предварительно купил фильтр на ТВ антенну - не хотелось бы, чтобы случайный разряд выжег тюнер и материнскую плату.
Пульт для Media Center пока используется стандартный, но планирую взять радио пульт, чтобы громкость музыки можно было регулировать находясь в кухне, где стоит вторая пара колонок.
Весьма интересным вариантом показалась клавиатура совмещенная с трекболлом и дальностью действия 5 метров - BTC 9116URF. Клавиатура бюджетная, очень компактная и удобная, хотя ее самый главный плюс - она единственная была в продаже c допустимым радиусом действия дальше 3 метров и за разумные деньги (не 4500 рублей). Из минусов можно назвать излишнюю лаконичность и отсутствие кнопок для Media Center, но с другой стороны - все нужные функции вынесены на комбинации клавиш Media Center и я с удовольствием ими пользуюсь.
ОС
Операционка - конечно же Vista Ultimate. После того как разберусь со всеми драйверами и устройствами, скорее всего переставлю начисто, уже с SP1.
Я не отключал UAC, но вот Auto Logon для Media Center - необходимая вещь.
Ноутбуки дома "смотрят" на расшаренный Public Folder - BackupStorage, куда и настроен ежедневный (еженощный) backup средствами Vista на самих ноутбуках. Компьютеры обычно не выключаются на ночь и постоянно находятся в сети через WiFi, поэтому бекап критичной информации проходит автоматически и без излишних сложностей.
Также во всю используются функции Sharing Media в Media Player. Настроены динамические playlists которые автоматически срабатывают при подключении ассоциированных с ними устройств. Оцифровал новый альбом, появилась новая пачка семейных фото, не думая втыкаешь флешку, с которой слушаешь музыку в машине, туда заливаются последние обновления. (Позже будет Zune 2).
Soft
Телевизор я не смотрю, НО, настройка заливки программы передач и автоматическая запись нужных программ по сложному расписанию - задача интересная. Собственно было бы здорово записывать:
- Discovery MythBusters
- Discovery How It's Made
- Discovery Brainiacs
- Смешариков на любых каналах
- MTV Клиника
-
Пару фильмов с TV1000, чтобы посмотреть на выходных
Программа передач основных каналов эфирного телевидения, которая предоставляется Microsoft для пользователей Media Center, мне не подходит, потому что я пользуюсь услугами Диван-ТВ. Понятно, что я не один такой и есть варианты решения.
После недолгих поисков в Интернет стало понятно, что мне должны помочь TVxb и BladeRunner, который в свою очередь был написан с использованием программы QuickGuide. Убил я времени на выяснение истории этих программ порядочно и выяснилось, что последняя версия BladeRunner не работает под Vista, а QuickGuide не поддерживается последнее время.
И это замечательно! Потому что появилась отличная возможность на практике использовать PowerShell, до которого руки не доходили еще с тех пор как он был Monad'ом. Удачно получилось, что еще и Самару всю снегом занесло и выходные были свободные :)
PowerEPG
Немного теории. Существует сторонняя компания, которая собирает и обрабатывает программы передач основных TV каналов по всему миру. Microsoft централизованно забирает эти данные и отдает пользователям Media Center через Electronic Program Guide (EPG) сервис. Этот Web Service (https://data.tvdownload.microsoft.com/discovery/discoveryservice.asmx/GetTVServicesMetaInfo?protocolVersion=1.0&clientAuthToken=111&clientId=111&countryCode=ru&languageId=en&clientType=ehome&version=6.0) в качестве входных данных принимает номер версии Media Center, страну, почтовый индекс и тип передачи сигнала (кабельное, эфир), а, в конечном итоге, на выходе отдает XML с указанием откуда можно забрать ужатый и зашифрованный XML файл с программой передач для указанного региона и провайдера услуг.
Собственно задача состоит из двух частей - собрать программу передач с нужных каналов и потом скомпоновать эту информацию в нужный формат. Первую часть решает вполне адекватная программа TVxb. Единственное, для нее нужно подготовить правильный .ini файл и создание этого инишника хотелось бы автоматизировать. А вот преобразование текстовой (да и любой другой) информации - это отличная задача для PowerShell. Также я предполагаю использовать API Windows Media Center из того же PowerShell.
Итак, нужно сделать входной .ini файл для TVxb. На сайте Диван-ТВ я нашел частотный план, подобрал соответствующие каналам программы передач на tv.mail.ru и после нескольких экспериментов родился XLS файл, в котором собрана информация по каналам. После сохранения XLS файла в формат CSV мы получаем возможность обработать его в PowerShell:
$channels = Import-MyCsv $CHANNELSFILE
Function Import-MyCsv ([string] $CsvPath)
{
$script:unicode_bug = [IO.Path]::GetTempFileName()
(gc $CsvPath) -replace '("[^"\r\n]*")?;(?![^";\r\n]*"$)', ',' > $script:unicode_bug
$return = Import-Csv $script:unicode_bug
Remove-Item $script:unicode_bug
$return
}
Мне пришлось написать функцию, которая заменяет разделители ";" для используемого в России формата на ",", которые ожидает PowerShell. Также команда Import-Csv в бета версии PowerShell 2.0 выдает и принимает текст в формате ANSI, а мне нужен UTF - поэтому здесь используется Trick с перенаправлением вывода, который, по сути, перекодирует текст в ANSI.
Function Make-TVxbIni
{
echo "Generating TVxb.ini..."
$i=0
@"
auto=no
htmlencoding=windows-1251
xmltvoutput="$($XMLTVFILE)"
mcechanneloutput="channelinfo.xml"
xmlencoding=utf-8
lang=ru
days=7,+1
$($channels | foreach {
$i++
if ($_.Url -ne '') {
'
[{0}]
name={1}
name={2}
icon={3}
' -f $_.Id, $_.Title, $i, $_.Icon
if ($_.Url -match "^http") {
'
url={0}
start={1}
title={2}
' -f $_.Url, $_.TVxbStart, $_.TVxbTitle
} else {
'
start=1
title=2
htmlstart=
url=http://tv.mail.ru/?date=[day=yyyy-mm-dd]&channel={0}&period=3
' -f , [int]$_.Url
if ($_.Descriptions -ne '') {
'
special=fulldescriptions
descriptionhtmlstart=
extractelement=from=description,to=subtitle,position=4,start=Производство:
extractelement=from=description,to=director,position=3,start=Режиссер :,Режиссеры :
extractelement=from=description,to=actors,position=2,start=Ведущий :,Актер :,Звезды кино :,В ролях :, Звезды тв :
descriptionhours={0}
' -f $_.Descriptions
}
'
extractelement=from=title,to=subtitle,position=1,start=(,end=)
'
}
}
})
"@ | Out-File -encoding UTF8 $TVXBINIFILE
echo "Ok`n"
if (($run -eq 1))
{
echo "Running TVxb..."
. $TVXBPATH -NoConsole
echo "Ok`n"
}
}
Также можно сгенерировать .reg файл, который подскажет вашему тюнеру на каких частотах нужно искать интересные вам каналы. В остальном формирование .ini файла банальная для PowerShell задача, особенно если использовать @" "@ Here-Strings. Полученный .ini мы можем подкорректировать, добавить какие-то совсем нестандартные источники и скопировать в папку, где его будет искать TVxb. Дальше работа за ним - собрать программу передач. На выходе мы получим xmltv.xml, с которым мы уже и будем возиться.
Какое же это удовольствие работать с XML (да и не только с XML) в PowerShell!!! Все запросы можно отлаживать прямо в командной строке прежде чем вставить их скрипт, например:
PS C:\Users\serpo> $xml = [xml]""
PS C:\Users\serpo> $xml.Load("C:\programdata\tvxb\xml\xmltv.xml")
PS C:\Users\serpo> $xml
xml tv
--- --
version="1.0" encoding="utf-8" tv
PS C:\Users\serpo> $xml.tv
generator-info-name generator-info-url channel programme
------------------- ------------------ ------- ---------
TVxb/1.0108 http://www.tvxb.com/ {channel, channel, channel... {programme, programme, pro...
PS C:\Users\serpo> $xml.tv.programme.Count
5409
PS C:\Users\serpo> $xml.tv.programme | where {$_.channel -eq "Discovery"} | select-object -first 3
start : 20080205060500 +0400
stop : 20080205070000 +0400
channel : Discovery
title : title
sub-title : sub-title
desc : Сновит - это первый завод сжиженного природного газа в Европе, и его строительство ведется в порту Кадиз на
юге Испании. Оборудование в 35000 тонн представляет гигантский проект.
start : 20080205101000 +0400
stop : 20080205110500 +0400
channel : Discovery
title : title
sub-title : sub-title
desc : Развлекательная передача, в которой научные принципы проверяются на практике. От взрыва домиков на колесах
до варки яиц с помощью ста мобильных телефонов.
start : 20080205110500 +0400
stop : 20080205120000 +0400
channel : Discovery
title : title
sub-title : sub-title
desc : Разрушители мифов Джемми и Адам проверяют старые легенды и современные мифы с помощью современной науки.
Все просто и интерактивно!
Формируем Guide.xml (Make-GuideXml) который потом будем использовать в нашем EPG сервисе. Дальше остается дело техники - упаковать файл, закриптовать и подписать. Файл готов.
Переходим к инсталляции всего этого хозяйства.
- TVxb установлен по умолчанию.
- Нужно установить на компьютер IIS и дать необходимые права на папку InetPub пользователю, из под которого этого скрипт будет работать.
- Раскладываем компоненты нашего решения по папкам в соответствии с настроенными в скрипте путями
-
Поправляем URL с которого Media Center забирает данные. В моем случае это:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Media Center\Service\EPG\discSvc
http://localhost/epg/GetTVServicesMetaInfo.html
- Читаем статью, достаем hotfix, устанавливаем патч и добавляем ключ:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Media Center\Service\EPG\disableUpdateDiscSvc - 1
- Дальше в Media Center выбираем Set Up TV Signal, свой почтовый индекс (хотя можно любой) и через несколько минут и возможного рестарта Media Center программы должны загрузится
- После этого нужно назначить программы передач на найденные каналы (надо посмотреть SDK на предмет сделать это программно)
-
Tada!
Next Steps
Помимо необходимых кодеков (ffdshow-tryouts) я посчитал целесообразным установку Media Control PlugIn, но пока руки не дошли до настройки и использования функционала J
У меня Audio настроено через SPDIF и есть проблема - Master Volume (с пульта) не влияет на громкость воспроизведения Dolby Digital на DVD. Нужно будет разобраться c настройками аудио кодеков.
Надо разобраться с возможностью просмотра роликов с YouTube - есть программа Yougle которая вроде это может делать.
Реализовать функционал домашнего Web сервера – публикация фото и видео, управление запиью передач (и возможно другими функциями) удаленно. Это вообще-то функционал Windows Home Server, но пока мне кажется проще (интереснее!) сделать это самому, хотя скорее всего через некоторое время проще будет купить еще и полноценный сервер, чтобы он делал лампочками blinkety-blink, blinkety-blink J.
Настроить подключенную видео камеру, чтобы с дочерью и женой общаться в командировках можно было через Live Meeting, Live Messenger и Office Communicator. Ради смеха можно сделать для камеры моторизированную площадку из конструктора Lego MindStorm которая будет управляться через Web и Bluetooth J
Ах да! Забрать скрипт можно здесь :)