Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины.
   

Вернуться   Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины. > Анонсы, Информация и Общие Темы > Подсказки, описания и FAQ по XBMC

Ответ
 
Опции темы Опции просмотра
Старый 10.04.2013, 12:00   #1
mech
Junior Member
 
Регистрация: 05.03.2012
Адрес: Украина
Сообщений: 9
По умолчанию [Инструкция] Как подружить XBMC 12.x, IPTV-http (unicast), tvheadend и mproxy.

DISCLAIMER: Описанный мной способ – жуткий костыль, который может привести к нестабильной работе системы и, возможно, потере данных. Так же описанные ниже действия открывают потенциальную дыру в безопасности. Я не несу никакой ответственности за вред, который может быть причинен при выполнении данных инструкций. Все, что вы делаете – вы делаете на свой страх и риск.

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

Для чего это нужно.
Существует не так много решений для просмотра IPTV в XBMC. Самый удачный, на мой счет, является использование tvheadend в качестве бэкенда. Его преимущества:
1. Прост в установке и настройке.
2. Есть все необходимые функции, такие как Timeshift, EPG, Automatic Recorder и пр.

Среди подобных продуктов можно отметить mythtv и уже упомянутый выше pvr.iptvsimple, но первый, на мой взгляд, чересчур монструозный, а второй, как и следует из его названия, чересчур простой – он умеет только показывать, и, к тому же, не без проблем. Так же существует плагин IP-TV, который в 12-й версии XBMC перестал корректно работать и по функциям еще проще, чем pvr.iptvsimple.

Так в чем же проблема? А проблема в том, что tvheadend может обрабатывать только multicast udp потоки. Но поскольку просмотр udp-multicast с использованием Wi-Fi роутера приводит к отваливанию всех беспроводных клиентов, приходтся использовать udpxy, который преобразует multicast udp на входе в unicast http на выходе. Т.е. на выходе мы получаем http-поток, который tvheadend обрабатывать не умеет.

Решение проблемы описано здесь. Краткая цитата:
Цитата:
mproxy (github.com/stefansaraev/mproxy) is a small and relatively simple daemon that listens for IGMP membership query / IGMP leave group messages on loopback interface (lo). whenever QUERY comes it forks a "vlc" process that is configured to re-stream over udp multicast. on LEAVE message it kills the vlc process. it is based on mrouted. in fact it is a "simplified", stripped down version of mrouted, without all the "routing" thing we don't need at all. just listen for igmp membership/leave and serve.
Это решение идеально при использовании сборок OpenELEC, но не подходит при использовании обычного Linux.

Что же делать?
Делать будем костыли

Итак, поехали...
Поскольку XBMC у меня установлен под Linux Cent OS 6.4 (Final), все команды я буду приводить относительно этой системы. Для Ubuntu, я думаю, будет достаточно заменить yum на atp-get. Так же в других дистрибутивах могут быть другие пути — следите за этим.
Будем считать, что имя пользователя, от которого запускается XBMC, тоже xbmc.
Не могу сказать, какие пакеты понадобятся для сборки, но как минимум, необходимо установить kernel-headers и git.
Создаем (если еще не создана) папку Install и переходим в нее:
Код:
mkdir ~/Install && cd ~/Install
Устанавливаем необходимое:
Код:
sudo yum install kernel-headers vlc git
git clone https://github.com/stefansaraev/mproxy.git
Далее необходимо подправить исходники mproxy. В файле ~/Install/mproxy/vif.c необходимо заменить:
Код:
void accept_group_report(u_int32 group)
{
    char cmd[128];;
    snprintf(cmd, sizeof(cmd), "%s %s %s", "ext.sh 2>/dev/null", inet_fmt(group, s1, sizeof(s1)), " start");
    system(cmd);

    return;
}

/*
 * Process an incoming IGMPv2 Leave Group message.
 */
void accept_leave_message(u_int32 group)
{
    char cmd[128];;
    snprintf(cmd, sizeof(cmd), "%s %s %s", "ext.sh 2>/dev/null", inet_fmt(group, s1, sizeof(s1)), " stop");
    system(cmd);

    return;
}
на
Код:
void accept_group_report(u_int32 group)
{
    char cmd[128];;
    snprintf(cmd, sizeof(cmd), "%s %s %s", "/home/xbmc/.xbmc/addons/service.network.mproxy/bin/ext.sh 2>/dev/null", inet_fmt(group, s1, sizeof(s1)), " start");
    system(cmd);

    return;
}

/*
 * Process an incoming IGMPv2 Leave Group message.
 */
void accept_leave_message(u_int32 group)
{
    char cmd[128];;
    snprintf(cmd, sizeof(cmd), "%s %s %s", "/home/xbmc/.xbmc/addons/service.network.mproxy/bin/ext.sh 2>/dev/null", inet_fmt(group, s1, sizeof(s1)), " stop");
    system(cmd);

    return;
}
Красным цветом отмечего имя пользователя, под которым стартует XBMC. Если у вас оно отличается — замените на свое.
После чего компилируем mproxy:
Код:
make
Далее распаковываем приложенный архив mproxy.zip в /home/xbmc/.xbmc/addons
И копируем скомпилированный mproxy:
Код:
cp ~/Install/mproxy/mproxy ~/.xbmc/addons/service.network.mproxy/bin/mproxy.bin
Собираем tvheadend.
Код:
cd ~/Install 
git clone https://github.com/tvheadend/tvheadend.git
cd tvheadend
./configure
make
В папке ~Install/tvheadend/build.linux будет лежать нужный нам бинарник.
Для rpm-based дистрибутивов (Redhat, Fefora, CentOS, etc.) можно использовать следующий .spec файл:
Name: tvheadend-git
Summary: TV streaming server
Version: 3.5.72
Release: 1%{dist}
License: GPL
Group: Applications/Multimedia
URL: http://www.lonelycoder.com/tvheadend
Packager: Jouk Hettema
Source: %{name}-%{version}.tar.bz2
Prefix: /usr
BuildRequires: avahi-devel, openssl, glibc, zlib

%description
Tvheadend is a TV streaming server for Linux supporting DVB-S, DVB-S2,
DVB-C, DVB-T, ATSC, IPTV, and Analog video (V4L) as input sources.

%prep
%setup -q

%build
%configure --release --prefix=%{prefix}/bin --enable-bundle
%{__make}

%install
%{__rm} -rf %{buildroot}

mkdir -p $RPM_BUILD_ROOT/%{prefix}

%{__install} -d -m0755 %{buildroot}%{prefix}/bin
%{__install} -d -m0755 %{buildroot}/etc/tvheadend
%{__install} -d -m0755 %{buildroot}/etc/sysconfig
%{__install} -d -m0755 %{buildroot}/etc/rc.d/init.d
%{__install} -d -m0755 %{buildroot}%{prefix}/shared/man/man1

%{__install} -m0755 build.linux/tvheadend %{buildroot}%{prefix}/bin/
%{__install} -m0755 man/tvheadend.1 %{buildroot}%{prefix}/shared/man/man1
%{__install} -m0755 contrib/redhat/tvheadend %{buildroot}/etc/rc.d/init.d

cat >> %{buildroot}/etc/sysconfig/tvheadend << EOF
OPTIONS="-f -u xbmc -s"
EOF

%pre

%preun
if [ $1 = 0 ]; then
/sbin/service tvheadend stop >/dev/null 2>&1
/sbin/chkconfig --del tvheadend
fi

%post
/sbin/chkconfig --add tvheadend

if [ "$1" -ge "1" ]; then
/sbin/service tvheadend condrestart >/dev/null 2>&1 || :
fi

%clean
%{__rm} -rf %{buildroot}

%files
%defattr(-,root,root)
%doc debian/copyright LICENSE README
%dir %attr(-,tvheadend,root) %{prefix}
%{prefix}/bin/tvheadend
%{prefix}/shared/man/man1/tvheadend.1*
%{_sysconfdir}/rc.d/init.d/tvheadend
/etc/tvheadend
%config /etc/sysconfig/tvheadend

%changelog
* Fri Feb 18 2011 Jouk Hettema <joukio@gmail.com> - 2.12.cae47cf
- initial build for fedora 14

Как собирать пакеты используя .spec файлы объяснять не буду, в интернете полно информации. И не забываем, что в самом начале я предупреждал — это руководство для опытных пользователей.

Далее.
Если еще не установлен pvr.hts addon, собираем из исходников:
Код:
cd ~/Install
git clone https://github.com/opdenkamp/xbmc-pvr-addons.git
cd xbmc-pvr-addons
./bootstrap
./configure
make zip
Файл ~/Install/xbmc-pvr-addons/addons/pvr.hts-linux-x86_64.zip (в зависимости от вашей системы имя файла может отличаться) устанавливаем средствами XBMC:
Система — Дополнения — Установить из файла ZIP

Запускаем tvheadend:
Код:
 cd ~/Install/tvheadend/build.linux/
./tvheadend -C
Открываем браузер, вводим адрес http://127.0.0.1:9981 (если XBMC, tvheadend и браузер установлены на одной машине), или http://192.168.xxx.xxx:9981 (подставить IP-адрес машины, на которой установлен tvheadend). Если открылась страница настроек tvheadend — можно идти дальше. Если нет — что-то не работает или работает не так, надо искать и исправлять.

Почти готово, осталось совсем чуть-чуть
Добавляем маршруты для правильной работы mproxy:
Код:
sudo -i
echo "ifconfig lo multicast" >> /etc/rc.local
echo "ip route add 224.0.0.0/4 dev lo src 127.0.0.1" >> /etc/rc.local
Создаем плей-лист в файле ~/.xbmc/addons/service.network.mproxy/config/ext.conf
Формат файла должен быть таким:
Код:
224.0.0.150 http://192.168.1.1:81/udp/225.225.225.203:1234      #Viasat History
224.0.0.151 http://192.168.1.1:81/udp/225.225.225.204:1234      #Viasat Explorer
224.0.0.152 http://192.168.1.1:81/udp/225.225.225.1:1234         #Perviy Natzional'niy
IP-адрес выбирайте произвольно, начиная (как показала практика) с адреса 224.0.0.100.

Правим sudoers:
Код:
sudo visudo
комментируем строку «Defaults requiretty» добавлением символа # в начало. После строки
Код:
root    ALL=(ALL)       ALL
добавляем строку
Код:
xbmc    ALL=(ALL)       ALL, NOPASSWD: /home/xbmc/.xbmc/addons/service.network.mproxy/bin/mproxy.bin,/usr/bin/killall -9 mproxy.bin
Прописываем каналы в браузере в настройках tvheadend: Configuration — DVB Inputs — IPTV.
Код:
 Chanel name — название канал (произвольно)
Interface — lo (обязательно)
Group — xxx.xxx.xxx.xxx (адрес в соответствии с настройками в файле ~/.xbmc/addons/service.network.mproxy/config/ext.conf)
UDP Port — 1234 (обязательно)
Запускаем mproxy в XBMC: Система — Дополнения — Отключенные дополнения — Службы — mproxy. Подобным образом включаем addon tvheadend (в папке Клиенты PVR).

Ну а дальше проверяем, работает ли вся эта кухня. Из главного меню XBMC выбираем ТВ и, если повезло, смотрим любимые каналы.

Что еще не сделано?
1. EPG — как его настроить в tvheadend написано множество статей. Поищите в гугле по запросу tv_grab_file и посмотрите здесь.
2. Демонизация tvheadend. Для OpenSUSE есть готовый пример. Для CentOS (вероятно, подойдет для других rpm-based дистрибутивов) привожу свой вариант файла /etc/rc.d/init.d/tvheadend:
Код:
#!/bin/sh
#
# tvheadend    Start/Stop the hts tvheadend daemon.
#
# chkconfig: 345 90 60
# description: Tvheadend is a TV streaming server for Linux supporting
#              DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video
#              (V4L) as input sources. It also comes with a powerful and
#              easy to use web interface both used for configuration and
#              day-to-day operations, such as searching the EPG and
#              scheduling recordings.

### BEGIN INIT INFO
# Provides: tvheadend
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start:  345
# Default-Stop: 90
# Short-Description: run tvheadend daemon
# Description: Tvheadend is a TV streaming server for Linux supporting
#              DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video
#              (V4L) as input sources. It also comes with a powerful and
#              easy to use web interface both used for configuration and
#              day-to-day operations, such as searching the EPG and
#              scheduling recordings.
### END INIT INFO

[ -f /etc/sysconfig/tvheadend ] || { 
    [ "$1" = "status" ] && exit 4 || exit 6 
}

RETVAL=0
prog="tvheadend"
exec=/usr/bin/tvheadend
lockfile=/var/lock/subsys/tvheadend
sysconfig=/etc/sysconfig/tvheadend

# Source function library.
. /etc/rc.d/init.d/functions

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

start() {
    [ -x $exec ] || exit 5
    [ -f $sysconfig ] || exit 6
    echo -n $"Starting $prog: "
    daemon $exec $OPTIONS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
}

stop() {
    echo -n $"Stopping $prog: "
        if [ -n "`pidfileofproc $exec`" ]; then
                killproc $exec
                RETVAL=3
        else
                failure $"Stopping $prog"
        fi
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
}

restart() {
    stop
    start
}

reload() {
        echo -n $"Reloading $prog: "
        if [ -n "`pidfileofproc $exec`" ]; then
                killproc $exec -HUP
        else
                failure $"Reloading $prog"
        fi
        retval=$?
        echo
}

force_reload() {
        # new configuration takes effect after restart
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status -p /var/run/tvheadend.pid $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

А так же файл /etc/sysconfig/tvheadend
Код:
OPTIONS="-f -u xbmc -s"
Уверен, для .deb-based дистрибутивов (Debian, Ubuntu, Mint и т.д.) есть куча готовых примером.

Что делать, если не работает?
1. Существенные проблемы могут возникнуть, если имя пользователя не xbmc. Необходимо будет делать много правок как в аддоне mproxy, так и в исходниках и конфигурационных файлах. Будьте внимательны.
2. Проверить, запускается ли mproxy
Код:
ps -A |grep mproxy
Должно быть два процесса: mproxy.bin и mproxy.start
3. Проверить, добавился ли маршрут
Код:
 route -n
Должна присутствовать строка
Код:
224.0.0.0       0.0.0.0         240.0.0.0       U     0      0        0 lo
4. Посмотреть log-файл ~/.xbmc/addons/service.network.mproxy/service.log
5. Остановить слжубу mproxy в XBMC, отредактировать файл ~/.xbmc/addons/service.network.mproxy/bin/ext.sh, раскоментировав все строки с командой echo, в терминале выполнить команду
Код:
tail -f ~/.xbmc/addons/service.network.mproxy/service.log
, запустить mproxy и попытаться включить какой-либо канал. Если смысл вывода не понятен — спрашивайте здесь.
6. Ознакомиться с этой темой.
7. Если уж совсем не получается, пишите здесь как можно подробнее (с выводом из предыдущих пунктов), постараюсь помочь.

Желаю удачи
Вложения
Тип файла: zip mproxy.zip (88.8 Кб, 154 просмотров)
mech вне форума   Ответить с цитированием
   
Старый 17.09.2014, 09:07   #2
nntndfrk
Member
 
Аватар для nntndfrk
 
Регистрация: 25.07.2013
Адрес: Черновцы, Украина
Сообщений: 77
Отправить сообщение для nntndfrk с помощью ICQ
По умолчанию

К сожалению, автор ветки давно не появлялся, но есть несколько вопросов, перед тем как осваивать мануал.
Будет ли работать этот метод, если mproxy установить на сервере Tvheadend (ос Ubuntu), а клиентом будет Raspberry PI (ОС Raspbmc)?
__________________
Raspberry Pi (Model B), OpenELEC 5.0 RPi.
nntndfrk вне форума   Ответить с цитированием
Старый 17.09.2014, 12:24   #3
LordMerlin
Senior Member
 
Аватар для LordMerlin
 
Регистрация: 11.12.2009
Адрес: Russia
Сообщений: 2,197
По умолчанию

Конечно
__________________
Dune HD TV-102/Pioneer VSX-520-K/Samsung ES6727

ВИКИ Настройка DSPlayer: http://xbmc.ru/wiki/index.php?title=Настройка_DSPlayer
DSPlayer поддержка ускорения GPU: http://xbmc.ru/forum/showthread.php?t=12
XBMC+SVP: http://habrahabr.ru/post/181598/
Крипто-робот, бонус за регистрацию, оплата за результат: https://apitrade.pro/bonus_xbmcru.htm
LordMerlin вне форума   Ответить с цитированием
Старый 17.09.2014, 16:28   #4
nntndfrk
Member
 
Аватар для nntndfrk
 
Регистрация: 25.07.2013
Адрес: Черновцы, Украина
Сообщений: 77
Отправить сообщение для nntndfrk с помощью ICQ
По умолчанию

Цитата:
Сообщение от LordMerlin Посмотреть сообщение
Конечно
Просто в примере, mproxy собран как дополнение к XBMC.
Его нужно ставить дополнением на клиенте с XBMC или автономно на сервере с Tvheadend без XBMC?
__________________
Raspberry Pi (Model B), OpenELEC 5.0 RPi.

Последний раз редактировалось nntndfrk; 17.09.2014 в 17:02.
nntndfrk вне форума   Ответить с цитированием
Старый 18.09.2014, 11:24   #5
LordMerlin
Senior Member
 
Аватар для LordMerlin
 
Регистрация: 11.12.2009
Адрес: Russia
Сообщений: 2,197
По умолчанию

Смотрите. У вас Бокс выступает фронтэндом, а твхедэнд бэкэндом. А Мпрокси для того, чтобы всунуть в Твхедэнд ХТТП стримы. Если у вас только они и нет УДП и не надо таймшифта и записей то используйте просто pvr.iptvsimple и все. А если надо, то можно Мпрокси поставить на сервере. Так даже правильнее. Но только учтите что придется тогда все самомоу осваивать, инструкция не подойдет для этого.
__________________
Dune HD TV-102/Pioneer VSX-520-K/Samsung ES6727

ВИКИ Настройка DSPlayer: http://xbmc.ru/wiki/index.php?title=Настройка_DSPlayer
DSPlayer поддержка ускорения GPU: http://xbmc.ru/forum/showthread.php?t=12
XBMC+SVP: http://habrahabr.ru/post/181598/
Крипто-робот, бонус за регистрацию, оплата за результат: https://apitrade.pro/bonus_xbmcru.htm
LordMerlin вне форума   Ответить с цитированием
Ответ
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 01:21. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.