uscr 10.03.2013 19:28

СкриптыРазворачиваем Midleware Stalker для приставок infomir MAG245. Или: пара скриптов, которые повышают моё ЧСВ.

Введение


В котором становится понятно, что я продался и задёшево пиарю IPTV приставки.


Здравствуйте! Понадобилось мне тут организовать портал для приставок MAG245 (не реклама, просто они и правда клёвые). Процесс внедрения не отнял у меня много времени, но захотелось поделиться опытом или дать подсказку тем, кто планирует внедрять STB, но не может определиться с моделью. Суть в том, что приставка сама по себе ничего не умеет. Её можно научить показывать IPTV, работать со всякими ютубами, но это скучно и долго. А выдавать приставки абонентам предполагается в ощутимых масштабах. Тут нам на помощь приходит производитель, который предоставляет свободное ПО под названием middleware stalker. По сути - это набор html, js и php файлов, которые приставка забирает с веб-сервера и получает список каналов, телепрограмму и вообще, формирует интерфейс, который отображает пользователю. То есть правкой конфига портала мы можем повлиять сразу на все пользовательские приставки - можем убрать пункт меню с запуском приложения для просмотра ютуба или запретить работать с флешками. Процесс разворачивания самого портала описан у производителя, да и сложного там ничего нет.

Хотя документация у них в жутком состоянии - всё разрозненно, что-то на вики, что-то на основном сайте... Если кто ткнёт в нормальную, приятную во всех отношениях документацию - буду рад.


Есть только вот одна проблема: базовый функционал - создание списка каналов, реализован...никак. Каналы предполагается добавлять руками. Я быстренько прикинул перспективу добавления 104 каналов руками и приуныл. Поборов уныние, я полез в БД. И нашёл там табличку itv, которая и хранит в себе список каналов. Запихнул туда тестовую строку и обломался - в админке канал виден, на приставке его нет. Почитал форум и обнаружил информацию о том, что наряду с itv необходимо помещать список каналов так же и в табличку ch_links. Проблема в том, что в ch_links описание канала привязано к ID в itv. Так родился не очень приятный, но рабочий алгоритм - проливаем каналы в itv, затем дропаем все записи из ch_links, делаем выборку из itv и инсертим всё, что нужно в ch_links. Плейлист обновляется не часто, так что дропать всю табличку при малейшем изменении плейлиста - не очень страшно (но очень не красиво, да).


Чуть ближе к сути


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


Сам плейлист хранится в формате m3u, что вполне ожидаемо, так что нужно было придумать, как сделать его БАШчитаемым. Кроме того, необходимо сразу писать в базу ID канала в XMLке, которая содержит в себе программу передач (описание формата: http://vefire.ru/help/xmltv-tutorial). Так алгоритм принял окончательный вид: расковырять программу передач и плей-лист -> получить на выходе файлик в котором в одной строке будут содержаться необходимые сведения -> надругаться над базой. Всё это вылилось в два скрипта: playlist_cutter.sh и playlist_update.sh.


playlist_cutter




Для начала, дикая строка пропускает через себя XML и выдаёт в отдельный файл список вида: ID CHANNEL_NAME. Примерно так:

 1
2
3
4
5
6
7
8
9
10
1 Первый канал
2 Россия 1
3 ТВЦ
4 НТВ
5 Россия Культура
235 Россия 2 (Спорт)
101 ТНТ
102 Домашний
103 РЕН ТВ
104 СТС



Затем, начинается "парсинг" m3u.

Плейлист выглядит примерно так:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#EXTINF:0 tvg-name="Первый",Первый
#EXTVLCOPT:deinterlace=-1
#EXTVLCOPT:deinterlace-mode=yadif2x
#EXTVLCOPT:udp-caching=2000
rtp://@235.1.5.1:5678

#EXTINF:0 tvg-name="Первый HD",Первый HD
###EXTVLCOPT:deinterlace=-1
###EXTVLCOPT:deinterlace-mode=yadif2x
###EXTVLCOPT:udp-caching=2000
rtp://@235.1.5.73:5678

#EXTINF:0 tvg-name="Россия 1",Спорт 1
#EXTVLCOPT:deinterlace=-1
#EXTVLCOPT:deinterlace-mode=yadif2x
#EXTVLCOPT:udp-caching=2000
rtp://@235.1.5.2:5678



Решено было идти по простейшему пути: файл читается построчно, скрипт прогоняет строку через фильтры. Если фильтр находит особую строку (имя канала, или адрес потока), то "поднимает флаг". То есть, если пришла строка с именем канала, то теперь уже последующие строки не будут обрабатываться фильтром имени канала, а сразу будут парсится на предмет адреса потока и так до тех пор, пока не будет обнаружена вся необходимая информация. На интерпрайз не тянет, но формат списка не меняется (потому что плейлист составляю лично я руками), так что всё работает гладко и чётко. После выуживания всех нужных сведений, имя канала ищется в списке, полученном после парсинга телепрограммы. Причём ишется как имя канала, так и имя канала, с удалёнными буквами "r" - есть у той иксемельки, что я использую такой вот косячёк. Итак, сам скрипт:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash

PLAYLISTURL="http://DOMAIN/stb_channels.m3u"
PLAYLIST="ch.m3u"

TVGUIDEURL="http://DOMAIN/xmltv.xml"
TVGUIDE="TVGUIDE"

OUT_FILE="channels_processed"

PRE_FILTER="EXTINF|rtp:|udp:"
NAME_FILT="tvg-name"
MLTST_FILT="rtp:|udp:"

let name=0
let mltcst=0
let HD=0
let tvgid=0
cat /dev/null > $OUT_FILE
cat /dev/null > $TVGUIDE

let number=1

wget $PLAYLISTURL -O $PLAYLIST
wget $TVGUIDEURL -O- | egrep -v 'generator-info-url|DOCTYPE' | grep -n1 'channel id' | cut -d '=' -f2 | egrep -v 'channel|--' | sed 's/[ru>"]//g' | cut -d '<' -f1 | sed 's/\r//g' | sed '$!N;s/\n/ /' > $TVGUIDE

while read line
do
i=`echo $line | egrep $PRE_FILTER`
if [ ! -z "$i" ]; then
flag=`echo $line | egrep $NAME_FILT`
if [ ! -z "$flag" ]; then
NAME=`echo $line | awk -F, '{print $2}' | sed 's/"//g' | sed 's/,/_/g'`
flag=`echo $NAME | egrep HD`
if [ ! -z "$flag" ]; then
let HD=1
fi
failname="`echo $NAME|sed 's/r//g'`"
flag=`cat $TVGUIDE | egrep -i "$NAME|$failname"| awk '{print length, $0}' | sort -n | awk '{$1=""; print $0 }' | head -1`
if [ ! -z "$flag" ]; then
let tvgid=`echo $flag|cut -d ' ' -f1`
fi
let name=1
fi
if [ $name -ne 0 ]; then
flag=`echo $line | egrep "$MLTST_FILT"`
if [ ! -z "$flag" ]; then
MLTCST=`echo $i`
let mltcst=1
fi
fi
if [ $mltcst -ne 0 ]; then

NAME=`echo "$NAME" | sed 's/ /_/g'`
echo $number $NAME $MLTCST $HD $tvgid >> $OUT_FILE
let name=0
let mltcst=0
let HD=0
let tvgid=0
let number++
fi
fi

done < $PLAYLIST



Для того, что бы упростить последующий разбор результата, в имени канала пробелы заменяются на символ "_".

Итак, получился такой вот файл:

1
2
3
4
5
6
7
1 Первый rtp://@235.1.5.1:5678 0 300125
2 Первый_HD rtp://@235.1.5.73:5678 1 300125
3 Спорт_1 rtp://@235.1.5.2:5678 0 940
4 Спорт_2 rtp://@235.1.5.4:5678 0 1354
5 Россия_К rtp://@235.1.5.5:5678 0 5
6 Россия_24 rtp://@235.1.5.6:5678 0 676
7 Россия_HD rtp://@235.1.5.72:5678 1 300124



Порядковый номер, Название, адрес потока, HD или нет (не знаю зачем, но в БД есть такой столбец), ID в xml с телепрограммой.

Теперь в дело вступает скрипт playlist_update.sh.


playlist_update




Скрипт осуществляет несложный разбор строки из файлика, полученного на предыдущем этапе и принимает решение о том, что делать с записью в базе. Для этого делается выборка записи, которая имеет тот же порядковый номер, что и обрабатываемый в настощий момент канал. Если такого номера в БД нет - инсеритм. Если есть, но адрес потока не совпадает - апдейтим запись, если номер и адрес совпадает - на всякий случай апдейтим имя канала (ну очепятку исправили в плей-листе, например). При этом проверяем, если в базе у канала нет ИД телепрограммы, то дописываем и этот ИД. Затем, как я и говорил, дропается содержимое ch_links и проливается заново. Заодно, удаляется информация о программе передач из таблички epg потому, что там привязка опять таки к ИП канала. И если мы изменим ИД канала, то программа передач на приставке будет отображаться неверно. После всего этого дёргаем php скрипт, который заполняет табличку с программами передач ("принудительное обновление epg" в админке). Данные для работы с БД берутся из конфига портала (типа фича).

Встречайте! Непревзойдённый playlist_update.sh:

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash

CONFIG="/var/www/stalker_portal/server/config.ini"

MHOST_FILTER="mysql_host"
MPASS_FILTER="mysql_pass"
MUSER_FILETER="mysql_user"
MDB_FILTER="db_name"

PLAYLIST_TABLE="itv"
CHANNEL_TABLE="ch_links"
EPG_TABLE="epg"

TMP_FILE=/tmp/.playlist_update.tmp

CUTTED_PLAYLIST="channels_processed"

ENCODING="utf8"

UPDATE_EPG_STRING="sh /var/www/stalker_portal/server/tasks/update_epg.sh force"

echo '' > $TMP_FILE

mhost="`cat $CONFIG | grep -v ';' | grep $MHOST_FILTER | cut -d '=' -f2 | cut -d ' ' -f2 | sed 's/\r//g'`"
mpass="`cat $CONFIG | grep -v ';' | grep $MPASS_FILTER | cut -d '=' -f2 | cut -d ' ' -f2 | sed 's/\r//g'`"
muser="`cat $CONFIG | grep -v ';' | grep $MUSER_FILETER | cut -d '=' -f2 | cut -d ' ' -f2 | sed 's/\r//g'`"
mdb="`cat $CONFIG | grep -v ';' | grep $MDB_FILTER | cut -d '=' -f2 | cut -d ' ' -f2 | sed 's/\r//g'`"

#UPDATE MAIN CHANNEL_LIST

if [ "$1" == "force" ]; then
read -p 'It will reset playlist. Really? (YES, no) ' answer
if [ "$answer" == "YES" ]; then
echo "Okaaay... :( 10 seconds for press Ctrl+C"
sleep 10
echo "DELETE FROM $PLAYLIST_TABLE; ALTER TABLE $PLAYLIST_TABLE AUTO_INCREMENT=0;" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb
else
exit 1
fi
fi

while read line
do

set -- $line

num=$1
name="`echo $2 | sed 's/_/ /g'`"
url_raw="`echo $3 | sed 's/@//g'`"
url="rtp $url_raw"
isHD="$4"
let tvgid="$5" 2>/dev/null

if [ $tvgid -eq 0 ]; then
tvgid=''
fi

db_request=`echo "SELECT id, cmd, xmltv_id FROM $PLAYLIST_TABLE WHERE number=$num" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb --disable-column-names`

url_db="`echo $db_request | awk '{print $2 " " $3}'`"
id_db="`echo $db_request | awk '{print $1}'`"
tvgid_db="`echo $db_request | awk '{print $4}'`"
if [ -z "$db_request" ]; then
sql="`echo "SET NAMES '$ENCODING'; INSERT INTO $PLAYLIST_TABLE (name, number, censored, cmd, descr, cost, count, status, tv_genre_id, base_ch, hd, xmltv_id, service_id, bonus_ch, volume_correction, use_http_tmp_link, mc_cmd, enable_tv_archive, wowza_tmp_link, wowza_dvr, monitoring_status, monitoring_status_updated, enable_monitoring, monitoring_url, enable_wowza_load_balancing, cmd_1, cmd_2, cmd_3, logo, correct_time, allow_pvr, allow_local_pvr) VALUES ('$name', $num, 0, '$url', '', 0, 0, 1, 2, 1, $isHD, '$tvgid', '', 0, 0, 0, '$url_raw', 0, 0, 0, 1, NULL, 0, '', 0, '', '', '', '', 0, 0, 1);"`"
elif [ ! "$url_db" == "$url" ]; then
if [ ! "$tvgid_db" == "" ]; then
sql="`echo "SET NAMES '$ENCODING'; UPDATE $PLAYLIST_TABLE SET name='$name', number=$num, cmd='$url', mc_cmd='$url_raw' WHERE id=$id_db;"`"
else
sql="`echo "SET NAMES '$ENCODING'; UPDATE $PLAYLIST_TABLE SET name='$name', number=$num, cmd='$url', mc_cmd='$url_raw', xmltv_id='$tvgid' WHERE id=$id_db;"`"
fi
elif [ "$url_db" == "$url" ]; then
if [ ! "$tvgid_db" == "$tvgid" ]; then
sql="`echo "SET NAMES '$ENCODING'; UPDATE $PLAYLIST_TABLE SET name='$name', number=$num WHERE id=$id_db;"`"
else
sql="`echo "SET NAMES '$ENCODING'; UPDATE $PLAYLIST_TABLE SET name='$name', number=$num, xmltv_id='$tvgid' WHERE id=$id_db;"`"
fi
fi

echo $sql | mysql -h "$mhost" -u $muser --password="$mpass" $mdb --disable-column-names

done < $CUTTED_PLAYLIST

#UPDATE ch_links table:
echo "SELECT id, cmd, status, use_http_tmp_link, wowza_tmp_link, monitoring_url, enable_monitoring FROM $PLAYLIST_TABLE;" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb --disable-column-names | sed 's/\t/ /g' > $TMP_FILE

echo "DELETE FROM $CHANNEL_TABLE; ALTER TABLE $CHANNEL_TABLE AUTO_INCREMENT=0;" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb
echo "DELETE FROM $EPG_TABLE; ALTER TABLE $EPG_TABLE AUTO_INCREMENT=0;" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb
while read line
do

set -- $line

itv_ud=$1
itv_url="$2 $3"
itv_sitatus=$4
itv_use_http_tmp_link=$5
itv_wowza_tmp_link=$6
itv_monitoring_url=$7
itv_enable_monitoring=$8

#echo "INSERT INTO $CHANNEL_TABLE (ch_id, priority, url, status, use_http_tmp_link, wowza_tmp_link, user_agent_filter, monitoring_url, use_load_balancing, changed, enable_monitoring) VALUES ($itv_ud, 0, $itv_url, $itv_sitatus, $itv_use_http_tmp_link, $itv_wowza_tmp_link, 0, '$itv_monitoring_url', 0, $itv_enable_monitoring)
echo "INSERT INTO $CHANNEL_TABLE (ch_id, priority, url, status, use_http_tmp_link, wowza_tmp_link, user_agent_filter, monitoring_url, use_load_balancing, enable_monitoring) VALUES ($itv_ud, 0, '$itv_url', $itv_sitatus, $itv_use_http_tmp_link, $itv_wowza_tmp_link, 0, '$itv_monitoring_url', 0, '$itv_enable_monitoring');" | mysql -h "$mhost" -u $muser --password="$mpass" $mdb

done < $TMP_FILE

$UPDATE_EPG_STRING > /dev/null



Итак, последовательным запуском playlist_cutter.sh и playlist_update.sh мы получаем обновлённый плейлист, который затем подхватят приставки.


Собственно, приставки




Итак, плейлист мы обновлять научились, теперь можно выдавать тонны приставок абонентам. Перед выдачей нужно, всё таки, произвести первоначальную настройку: установить логотип компании там, где нужно, "натравить" её на адрес портала, установить режим видеовыхода. Приставки содержат в себе урезанный линукс, так что всё это можно сделать по SSH. Алгоритм такой: цепляем приставу к деплой-серверу, она получает айпишник, мы коннектимся к ней по SSH из скрипта, закручиваем нужные гаечки ( с помощью приставкоспецифичной утилиты fw_setenv), подменяем конфиг SSH и заливаем authorized_keys, ребутаемся. Теперь приставка настроена, а ssh вход по паролю запрещён, войти можно только по ключам, прописанным в authorized_keys. Так же скрипт пишет примитивные логи, что бы затем можно было найти концы, если что.

deploy


  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash

if [ -z "$1" ]; then
echo "Need STB IP adress, and tv system."
echo "TV system is NTSC (super SD), PAL (SD), or HD (yep, it's 1080p). HD is default."
exit 1
fi

LOGDIR="/tmp/stb_deploy_log"
LOGDATE=`date +%d-%m-%G`
STBLOGSTRING="fw_printenv kernel Image_Version Image_Desc serial# Boot_Version ethaddr"

if [ ! -e $LOGDIR -o ! -d $LOGDIR ]; then
echo "Cannot locate $LOGDIR"
echo "Create $LOGDIR or change LOGDIR env"
exit 2
fi

DEPLOYDIR="/home/nazarovd/Dropbox/Scripts/MAG245deploy"
IMGDIR="img"
SCRIPTDIR="bin"
KEYDIR="key"
CONFDIR="conf"

STBTMPDIR="/tmp/"
STBSPLACHSCREENDIR="/home/default/"
STBSPLACHSCREENPREFIX="splash-"

BOOTLOGO="IPH-bootlogo.bmp.gz"
BOOTLOGOSETSCRIPT="update_logo.sh"

SSHKEYFILE="authorized_keys"
SSHCONFIG="sshd_config"
STBSSHCONFPATH="/etc/openssh/"
STBAUTH_KEYSPATH="/root/.ssh/"

DEFAULTPORTAL="URL"
NTPSERVER="192.168.0.3"
DEFAULTTIMEZONE="/usr/share/zoneinfo/Europe/Moscow"
BGCOLOR="0x00ffffff"
FGCOLOR="0x00000000"

STBSETENVSTRING="fw_setenv net dhcp '|' portal1 $DEFAULTPORTAL '|' ntpurl $NTPSERVER '|' language ru '|' timezone_conf_int plus_02_00_13 '|' logo_x 0 '|' logo_y 0 '|' bg_color $BGCOLOR '|' fg_color $FGCOLOR '|' graphicres tvsystem_res '|' bootupgrade no"

if [ -z "$2" ]; then
TVSYSSTRING="fw_setenv tvsystem 1080p-60"
else
case $2 in
"pal")
TVSYSSTRING="fw_setenv tvsystem PAL"
;;
"NTSC")
TVSYSSTRING="fw_setenv tvsystem NTSC"
;;
"hd")
TVSYSSTRING="fw_setenv tvsystem 1080i-60"
;;
esac
fi

STBIP=$1
STBLOGIN=root

echo 'Standart password: 930920'
ssh-copy-id $STBLOGIN@$STBIP

#Copy stuff:
#Boot-logo
scp $DEPLOYDIR/$IMGDIR/$BOOTLOGO $STBLOGIN@$STBIP:$STBTMPDIR
scp $DEPLOYDIR/$SCRIPTDIR/$BOOTLOGOSETSCRIPT $STBLOGIN@$STBIP:$STBTMPDIR
ssh $STBLOGIN@$STBIP "chmod +x $STBTMPDIR$BOOTLOGOSETSCRIPT"
#Splash-screen
scp $DEPLOYDIR/$IMGDIR/$STBSPLACHSCREENPREFIX* $STBLOGIN@$STBIP:$STBSPLACHSCREENDIR
#END Stuff

#SETUP:
#bootlogo:
ssh $STBLOGIN@$STBIP "$STBTMPDIR$BOOTLOGOSETSCRIPT $STBTMPDIR$BOOTLOGO"

#Timezone:
ssh $STBLOGIN@$STBIP "rm -f /etc/localtime"
ssh $STBLOGIN@$STBIP "ln -sf $DEFAULTTIMEZONE /etc/localtime"


#Set env:
#Tvsystem:
ssh $STBLOGIN@$STBIP "$TVSYSSTRING"
#Different:
ssh $STBLOGIN@$STBIP "$STBSETENVSTRING"

#ssh
scp $CONFDIR/$SSHCONFIG $STBLOGIN@$STBIP:$STBSSHCONFPATH
scp $KEYDIR/$SSHKEYFILE $STBLOGIN@$STBIP:$STBAUTH_KEYSPATH

LOGFILE="`ssh $STBLOGIN@$STBIP "fw_printenv ethaddr" | cut -d '=' -f 2 | sed 's/:/_/g'`"

#Write log:
touch $LOGDIR/$LOGFILE
echo "" >> $LOGDIR/$LOGFILE
echo "------------------------------------------------" >> $LOGDIR/$LOGFILE
echo $LOGDATE >> $LOGDIR/$LOGFILE
echo "------------------------------------------------" >> $LOGDIR/$LOGFILE
ssh $STBLOGIN@$STBIP "$STBLOGSTRING" >> $LOGDIR/$LOGFILE
echo "------------------------------------------------" >> $LOGDIR/$LOGFILE
echo "" >> $LOGDIR/$LOGFILE

#reboot
ssh $STBLOGIN@$STBIP "reboot"
#END SETUP



Такие дела. Как всегда, жду конструктивной критики по скриптам.


Тэги: m3u mag245 stalker плейлист
+ 6 -
Похожие Поделиться

cppmm 11.03.2013 06:05 #
Парсить html регекспами нехорошо. xsltproc лучше или вставки на другом языке(я бы perl взял).

Вечером ещё посмотрю подробнее.

P.S. В тегах запятые забыл.
uscr 11.03.2013 10:08 #
Парсить html

xml?
kstep 11.03.2013 19:06 #
В простых случаях, если XML-ка достаточно стандартного вида, я ещё часто конечный автомат на awk использую, чтобы с XSLT не заморачиваться.
mealsforall 11.03.2013 21:36 #
Ничо не понятно, но зато очень интересно вдруг узнать, чем люди на работе занимаются. :)
mephisto 11.03.2013 22:53 #
а насколько сложно пользователю подсунуть на приставку свой ключик?
uscr 12.03.2013 13:45 #
Зная что это такое - элементарно, если прошивка заводская. А зачем?
uscr 12.03.2013 13:46 #
Стоп. Или ssh ключик?
mephisto 12.03.2013 23:42 #
Именно его :)
dront78 12.03.2013 09:46 #
Или: пара говноскриптов, которые повышают моё ЧСВ.


это такая ложная скромность? мне вот было интересно почитать. присоединяюсь к mealsforall, только "говно" уберите с главной :D
uscr 12.03.2013 13:46 #
это такая ложная скромность

Разумеется. Внутри меня сидит пятнадцатилетняя девочка, которую никто не любит.
derfenix 12.03.2013 12:30 #
Хоть и не реклама, но спасибо за наводку на приставку :) давно присматриваю себе что-нибудь в качестве интернет-медиацентра, но всё какая-то хрень урезанная или дорогущая попадалась. А это - вроде то, что доктор прописал! Благодарю :)
uscr 12.03.2013 13:48 #
Только купить её физлицу не просто, насколько я понимаю. А так - да. Мы ставили абонентам дорогущие и тупые приставки от Amino и сначала не верили, что эта приставка за такую цену покажет себя гораздо лучше.
kstep 12.03.2013 15:32 #
А мне вот интересно, почему физлицу так сложно будет купить такую железяку? В чём проблема?
uscr 12.03.2013 16:44 #
А где? Она позиционируется как операторская железка, у неё даже инструкция начинается со слов "ваш провайдер уже настроил доступ к порталу". Где она продаётся за наличные простым смертным - нагуглить не удалось.
kstep 12.03.2013 17:47 #
Ну я бы начал с отдела продаж того же Инфомира (их мыло в подвале их же сайта есть). Представился бы разоботчиком, который желает получить образец для тестов и разроботки.
uscr 12.03.2013 17:53 #
Образцы для тестов они не дают даже за деньги, на предмет покупки дали мыло человека, который продал одну приставку по безналу и пропал :)
Собственно, чёто я туплю. По безналу никто не мешает физлицу купить. Оплатить счёт в банке, да и всё. Могу поделиться контактами.
Alexom 13.03.2013 10:03 #
Вот здесь есть - MAG 240 или MAG 250. Действительно, ничем, кроме номера на крышке ничем не отличаются ни по железу, ни по софту. Для частных лиц производителем выпускается Aura HD. Это та же самая MAG 250/245, только с предпрописанными ссылками на провайдеров TV OTT и онлайн-кинотеатры. Можно взять в версии light - Aura HD k8 или k10 c допами в виде обучаемого пульта (одновременное управление телевизором и приставкой) и кабелем HDMI. Извините за рекламу.
Alexom 13.03.2013 10:04 #
MAG245, конечно же, не 240
crom 09.09.2013 19:58 #
(из личного опыта)
Отличаются функцией перепрог. пульта (lirc) в удобном "user friendly interface".
derfenix 12.03.2013 20:18 #
uscr 12.03.2013 20:30 #
Это она кстати. 250 ничем не отличается по железу от 245. И прошивки там идентичные.
crom 09.09.2013 20:23 #
Железо "изнутри", касаемо CPU,RAM все ок. А вот обвязка минимальная, гальваническая развязка, зашита(скромная , только HDI), моё личное мнение сделано с удовлетворением минимума.
И сам лично сдампил адреса каналов, через telnet|tcpdup, и юзаю HTPC через более привычный progdvб с заменой mac.