1 (edytowany przez Wojciech Apel 2012-12-02 18:14:13)

Temat: Magnetowid na OperWRT

#1. Mam przyjemność brać internet od operatora, który ma też usługę telewizji IPTV. Wysyła mi więc do domu, na innym VLANie piękne strumienie 200 kanałów, przy czym to co w powietrzu jest FTA i co nie jest zbyt płatne i premium szyfrowane nie jest. Czasem nawet premium leci otwartym tekstem, bo taki CANAL+ w ramach promocji daje wszystkim. Nagrywanie na STB jest kłopotliwe, bo tam dysk mały, tylko na STB otworzyć się da.... zrobiłem więc sobie z OperWRT taki mały magnetowid.

#2. Korzystam z ruskiego udpxrec - śliczny program z pakietu udpxy zamieniającego multicasty na strumien http (togo znowu używam do oglądania niezakodowanych (TVP1, TVP-Kultura, TV Trwam) kanałów w kuchni, na iPadzie).

To udpxyrec jest śliczne, ale wywoływanie z konsoli było kłopotliwe dla mnie i domowników. Logować się na jakiegoś Linuxa? Oj, nie..... Zrobiłem więc nakładkę, aby z WWW dało się to wywołać i jeżeli ma to być inspiracją dla kogoś, kto też ma IPTV to polecam.

#3. Wyjaśnienia do kodu:
- multicasty mam dostępne na innym fizycznym porcie. Zabawa w VLANy na TP-1043 jakoś mi nie wychodziła, wieszało się, szalało więc na swiczu obok wydzieliłem port z IPTV i wprowadzilem do TP-linka odobno.
- nagrywanie dokonuje się na domowy serwer (zwie się mk-125). W tej chwili jest to Synology - i dlatego takie cuda z montowanie katalogów. Do TP-linka nie chciałem podłączać dysków skoro obok leży porządny serwer.
- fajnie się tego używa. Rodzinka zadowolona, a jak jeszcze u operatora przez chwile zepsuł się system szyfrowania... ale już naprawili.
- wgrywa się to w katalog /www/cgi-bin - jak widać, zapisałem to w shell'u bo w tym pisać kiedyś umiałem
- to co się nagrywa określa się poprzez adres grupy multicastowej. Dla rodzinki dorobiłem też wybór z menu i pierwszy raz w życiu użyłem AWK'a :-)
- aby działał wybór z menu to w tym samym katalogu powinien też być plik lista-kanalow-nagrywanych o strukturze
  nazwa kanalu ; grupa multicastowa ;


#4. Miłego nagrywania fajnych filmów z TVP-Kultura i nie tylko.

W.


#!/bin/sh

#
# Obs3uga przez www i cgi-bin procesu nagrywania multicastów programem udpxrec
#
# wersje:
# 1.0    - 29 lipca 2012     - pierwsza stabilna wersja
# 1.1    - 12 sierpnia         - wszystko w jednym, wykonywalnym pliku
# 1.2    - 3 pa_dziernika     - dok3adam wypisywanie do loga komend i parametrow bo co¶ _le nagrywa - inny kana3 i inn± godzinê
# 1.3    - 8 pa_dziernika     - dorabiak drugi formularz, z wyborem kanalu z menu
#                 - jakies tyle formatuj±ce dla zabawy
# 1.4    - 13 pa_dziernika    - dok3adam automatyczne montowanie serwera jezeli nie jest podmontowany
#
#

version="1.4"

echo "Content-type: text/html"
echo ""

cat <<EOT
<?xml version="1.0" encoding="ISO-8859-2"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head><title>Magnetowid $version</title>

<style>

body {
    font-family: Verdana, sans-serif, Arial; 
    background-color: #FFFFF4;
}

div {
    margin: 0.4em;
    padding: 0.3em 1em;
}

h1, h2, h3 {
    margin: 0;
    padding: 0.2em 0;
}

</style>

</head>
<body>
EOT

data=`date "+%Y-%m-%d %H:%M:%S"`
cmd=`echo "$QUERY_STRING" | grep -oE "(^|[?&])cmd=[^&]+" | sed "s/%3A/:/g" | sed "s/%2B/+/g" | cut -f 2 -d "=" | head -n1`

# w celach debugingowych wsadam w log informacje o wywo3aniu i parametrach
cat <<EOT >> /var/log/udpxrec.log

*********************************

$data Uruchomienie /cgi-bin/magnetowid 
--- command: $cmd
--- query_string: $QUERY_STRING
EOT

if [ $DEBUG ] ; then
    echo "$QUERY_STRING"
    echo "Komenda: $cmd"
    echo "<hr>"
fi

case $cmd in
ps)
    echo "<h1>Lista procesow udpxy i udpxrec</h1>"
    echo "<pre>"
    ps | grep "udpx" | grep -v "grep"
    echo "</pre>"
    ;;

killur)
    echo "<h1>Lista procesow udpxrec</h1>"
    echo "<pre>"
    echo "Przed skasowaniem"
    ps | grep "udpxrec" | grep -v "grep"
    killall udpxrec
    sleep 1 # kilowanie troszkê trwa
    echo "Po  skasowaniu"
    ps | grep "udpxrec" | grep -v "grep"
    echo "</pre>"
    
    ;;

log)
    echo "<h1>Plik z logiem  udpxyrec</h1>"
    echo "<pre>"
    cat /var/log/udpxrec.log
    echo "</pre>"
    ;;

ls)
    echo "<h1>Katalogi zamontowane - sprawdz czy je widac</h1>"
    echo "<pre>"
    echo "<h3>Katalog: //mk-125/video - wszystkie materialy wideo na serwerze</h3>"
    ls -l /mk-125-video
    echo "<h3>Katalog: //mk-125/video/magnetowid - uzywany do nagrywania</h3>"
    ls -l /mk-125-video/magnetowid
    echo "</pre>"
    ;;

umount)
    umount /mk-125-video
    echo "<pre>"
    echo "<H3>Efekt dzialania komendy mount</H3>"
    mount
    echo "</pre>"
    ;;

mount)
    mount -t cifs //192.168.1.12/video /mk-125-video -o user=magnetowid,password=magda1towid
    echo "<pre>"
    echo "<H3>Efekt dzialania komendy mount</H3>"
    mount
    echo "<H3>Jezeli poniezej widac pliki z mk-125 to dobrze, jak nie to masz problem</H3>"
    echo
    ls -l /mk-125-video
    echo
    ls -l /mk-125-video/magnetowid
    echo "</pre>"
    ;;

kanaly)
    echo "<pre>"
    cat /www/cgi-bin/lista-kanalow-nagrywanych
    echo "</pre>"
    ;;

rec)
    echo "<h1>Uruchamiam udpxyrec</h1>"
    data=`date +%Y-%m-%d-%H-%M`

    path="/mk-125-video/magnetowid/"
    file="$data-magnetowid.ts"

    start=`echo "$QUERY_STRING" | grep -oE "(^|[?&])g_start=[^&]+" | sed "s/%3A/:/g" | sed "s/%2B/+/g" | cut -f 2 -d "=" | head -n1`
    stop=`echo "$QUERY_STRING" | grep -oE "(^|[?&])g_stop=[^&]+"  | sed "s/%3A/:/g" | sed "s/%2B/+/g" | cut -f 2 -d "=" | head -n1`
    kanal=`echo "$QUERY_STRING" | grep -oE "(^|[?&])kanal=[^&]+"   | sed "s/%3A/:/g" | cut -f 2 -d "=" | head -n1`

    cat <<EOT >>/var/log/udpxrec.log
--- start: $start
--- stop: $stop
--- kanal: $kanal
--- plik: $file
EOT

    # parametry:
    # -v - wypisuje na konsoli loga opisujacego to co czyni a czyni wiele (gdy pracuje jako demon to w pliku loga -l)
    # -l - plik z logiem - przydatne gdy pracuje jako demon
    # -T - to, ze ma byc nie-demonem czyli czekac az skonczy (jezeli demon to wtedy jest -v to musi byc -l)
    # -m - wstakuje interfejs z ktorego ma brac multicasty (bez tego tez dziala, bo ustawilem routing)
    # -B - ustawia wielkosc jakiego bufora domyslnego na 2K wiec powiekszam na 64K ale nie wiem po co
    # -M - maksymalna wielkosc pliku

    udpxrec -M 10Gb -B 64K -m eth0.100 -p /var/run/udpxrec.pid -l /var/log/udpxrec.log -v -b $start -e $stop -c $kanal $path$file

    sleep 2 # bo udpxrex potrzebuje czasu zanim wszystko napisze w logu
    echo "<pre>"
    echo "<h3>Sprawdzenie uruchomionych procesow udpxrec poleceniem ps</h3>"
    ps | grep "udpxrec" | grep -v "grep"

    echo "<h3>Plik loga - ostatnie 44 linijki</h3>"
    tail -n 44 /var/log/udpxrec.log
    echo "</pre>"
    ;;

*)
    # je¿eli niew3a¶ciwa komenda albo pusta komenta to wysletla formatkê











godzina=`date +%H:%M`

ListaKanalow=`awk 'BEGIN { FS=";" } ; { print "<OPTION value=",$2,">",$1,"</OPTION>" }' /www/cgi-bin/lista-kanalow-nagrywanych`




cat <<EOT
<H1>Magnetowid $version</h1>

<div style="border: 1px solid green;">
<H3>Sprawdzenie serwera</H3>
<UL>
EOT


if [ -d /mk-125-video/magnetowid ]
then
    echo "<LI>Server MK-125 podmontowany"
else     {
    echo "<LI>Próbuje zamontowaæ serwer MK-125"
    mount -t cifs //192.168.1.12/video /mk-125-video -o user=magnetowid,password=magda1towid
    if [ -d /mk-125-video/magnetowid ]
    then
        echo "<LI>Sukces! Serwer MK-125 zamontowany w katalogu /mk-125-video/magnetowid"
    else
        echo '<LI style='color: red;'>Problem z podmontowaniem serwera MK-125!'
    fi
    }
fi

echo "<LI style='color: blue;'>Gdy prze3adowano strone by3a godzina: $godzina"


cat <<EOT

</UL>
</div>

<div  style="border: 1px solid red;">

<h3>Zlecanie nagrania</h3>

<P>Format godziny:<br>
[+]dd:hh:mm.ss  a dokladnie [[+]dd:]hh:mm[.ss]<br>
+ - oznacza, ze za tyle czasu, bez + oznacza czas bezwzgledny<br>
dd - liczba dni, ale gdy nie ma to tego samego dnia, moze nie byc wtedy bez :<br>
hh - godzina w formacie 24-godzinnym<br>
mm - minuty<br>
ss - sekrundy - moze nie byc wtedy bez kropki<br>


<table><tr><td style="margin: 0; padding: 1em; border: 1px solid gray;">
<B>Klasyczne programowanie</B>
<form method="GET">
Start: <input class="input" type="text" maxlength="8" name="g_start"><BR>
Stop: <input class="input" type="text" maxlength="8" name="g_stop"><BR>
Kanal: <input class="input" type="text" maxlength="25" name="kanal"><BR>
<input type="submit" value="Zlec nagrywanie"><br>
<input type="hidden" name="cmd" value="rec">
</form>
</td>


<td style="margin: 0; padding: 1em; border: 1px solid red;">
<B>Wybór z menu wszystkich kana3ów</B>
<form method="GET">
Start: <input class="input" type="text" maxlength="8" name="g_start"><BR>
Stop: <input class="input" type="text" maxlength="8" name="g_stop"><BR>
Kanal: <SELECT name="kanal">$ListaKanalow</SELECT><br>
<input type="submit" value="Zlec nagrywanie"><br>
<input type="hidden" name="cmd" value="rec">
</form>
</td></tr></table>

</div>


<div style="border: 1px solid brown;">
<H3>Pozostale komendy</H3>
<UL>
<LI><A href="/cgi-bin/magnetowid?cmd=kanaly">Lista kanalow</A>
<LI><A href="/cgi-bin/magnetowid?cmd=ps">Stan procesow magnetowidu (udpxyrec)</A>
<LI><A href="/cgi-bin/magnetowid?cmd=killur">Zakoñczenie (brutalne - killall) procesów nagrywania udpxyrec</A>
<LI><A href="/cgi-bin/magnetowid?cmd=log">Plik logu magnetowidu</A>
<LI><A href="/cgi-bin/magnetowid?cmd=ls">Zobacz pliki w katalogu //mk-125/video/magnetowid </a>
<LI><A href="/cgi-bin/magnetowid?cmd=mount">Podlacz (zamontuj) do magnetowidu katalog serwera MK-125</A>
<LI><A href="/cgi-bin/magnetowid?cmd=umount">Odlacz (odmontuj) katalog serwera</A>
</UL>
</div>

EOT
    ;;


esac

echo "</body></html>"

2

Odp: Magnetowid na OperWRT

Wojciech Apel napisał/a:

Zabawa w VLANy na TP-1043 jakoś mi nie wychodziła, wieszało się, szalało więc na swiczu obok wydzieliłem port z IPTV i wprowadzilem do TP-linka odobno.

Też mam 1043, też mam IPTV, powalczyłem i da się to zrobić.
Śmiga aż miło, więcej tu:
http://eko.one.pl/forum/viewtopic.php?id=3400

TP-Link TL-WDR4300 v1, Reboot (17.01-SNAPSHOT, r3876-efb6ca1)

3

Odp: Magnetowid na OperWRT

alossek napisał/a:
Wojciech Apel napisał/a:

Zabawa w VLANy na TP-1043 jakoś mi nie wychodziła, wieszało się, szalało więc na swiczu obok wydzieliłem port z IPTV i wprowadzilem do TP-linka odobno.

Też mam 1043, też mam IPTV, powalczyłem i da się to zrobić.
Śmiga aż miło, więcej tu:
http://eko.one.pl/forum/viewtopic.php?id=3400

Nie ukrywam, że to Twój artykuł stał się dla mnie inspiracją aby tego TP-linka kupić i OpenWRT zainstalować. Bez Ciebie nie wpadłbym na to, że takie udpxy istnieje, choć wiem, że mój kumpel odpowiednik tego napisał, u niego w domu i u nas w sieci działa, ale nie zrobił tego w sposób nadający się do publikacji.

W.

4

Odp: Magnetowid na OperWRT

Wojciechu, z całym szacunkiem dla Twojej pracy, sam lubię sobie podłubać, naskrobać jakiś skrypt, ale czy nie myślałeś, żeby użyć do tego TVHeadend? Co prawda, nie wiem jak to działa w połączeniu z IPTV, ale w połączeniu z DVB działa idealnie, ustawiasz sobie co ma się nagrać albo z poziomu www, albo z poziomu XBMC, wygodnie i sprawnie. W szczególności obsługa przez XBMC jest tutaj godna polecenia smile

5

Odp: Magnetowid na OperWRT

TVHeadend? Nawet nie wiedziałem, że jest TVHeadend! Muszę poGoooglać.

W.

6

Odp: Magnetowid na OperWRT

Skompilowałem tvheadend pod ar71xx, zobacz tutaj:

http://eko.one.pl/forum/viewtopic.php?pid=56515#p56515

Sam mam w domu IPTV i będę walczył na dniach, mam nadzieję, że wyjdzie smile W każdym razie z DVB-T działa wybornie.

7

Odp: Magnetowid na OperWRT

Jest też u mnie w repo.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: Magnetowid na OperWRT

Cezary napisał/a:

Jest też u mnie w repo.

Super, a przy okazji bym poprosił o mediainfo do AA.

Pozdrawiam!

TP-Link TL-WDR4300 v1, Reboot (17.01-SNAPSHOT, r3876-efb6ca1)

9

Odp: Magnetowid na OperWRT

Nie da się, makefile gdzieś zgubiłem od niego smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: Magnetowid na OperWRT

Cezary napisał/a:

Nie da się, makefile gdzieś zgubiłem od niego smile

Szkoda,
ale przy okazji zasugeruje tak po cichu, 
może by gdzieś na stronie wystawiać także makefile
(do tych niestandardowych pakietów takich jak tvhended i mediainfo) ?

TP-Link TL-WDR4300 v1, Reboot (17.01-SNAPSHOT, r3876-efb6ca1)

11

Odp: Magnetowid na OperWRT

https://dev.openwrt.org/changeset/34486

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Magnetowid na OperWRT

Dzięki, nie wiedziałem że to jest w trunku.
Choć pewnie przydały by się makefile
do pozostałych pakietów których raczej w trunku nie ma
(wspomniany już mediainfo który akurat się zgubił :-), napiprojekt, itp.)

TP-Link TL-WDR4300 v1, Reboot (17.01-SNAPSHOT, r3876-efb6ca1)