VPS-PDC rekordér pro DVBgrab 

S digitalizací TV vysílání v mé domácnosti jsem se donutil i doma nainstalovat soukromý DVBgrab.

Musel jsem ho upravit pro používání HTTP streamingu (protože v domácnosti, kde je méně potencionálních diváků, než televizních kanálů, se multicastové vysílání nevyplácí). A zapojil jsem taky svůj VPS rekordér, který jsem k tomu účelu doplnil o omezení maximální doby čekání na pořad (pro případ, že daný pořad vůbec nevysílají.)

Bohužel musím konstatovat, že stále nové dva veřejnoprávní kanály ČT 24 a ČT 4 nenabízejí žádnou formu VPS/PDC, takže ty je třeba stále nahrávat pouze podle času.
EDIT: Na programech ČT24 a ČT4 funguje již od 1.3.2007 přenos PDC dat v rámci teletextu (nikoli na 16. řádku). V tuto chvíli (únor 2010) navíc jsou u těchto programů vyplňovány i položky Running_status v EIT tabulkách.


Zde uvádím patch pro soubor backend/grab_process.php proti aktuálnímu SVN trunku (revize 347):
--- backend/grab_process.php	(revision 347)
+++ backend/grab_process.php (working copy)
@@ -9,7 +9,7 @@

$logdbg->log("Grabing id: $grb_id");
// get grab info
-$SQL = "select ch.chn_ip, ch.chn_port, g.grb_date_start, g.grb_date_end, g.grb_name
+$SQL = "select ch.chn_url, ch.chn_vpspid, g.grb_date_start, g.grb_date_end, g.grb_name, t.tel_date_start
from channel ch, television t, grab g
where ch.chn_id=t.chn_id and
t.tel_id=g.tel_id and
@@ -21,11 +21,12 @@
}
ensure_free_space();

-$chn_ip = $row[0];
-$chn_port = $row[1];
+$chn_url = $row[0];
+$chn_tspid = $row[1];
$begin_time = $DB->UnixTimeStamp($row[2]);
$end_time = $DB->UnixTimeStamp($row[3]);
$grab_name = $row[4];
+$vpsstart = $DB->UnixTimeStamp($row[5]);
$rs->Close();

$grab_filename = _Config_grab_storage."/$grab_name.ts";
@@ -34,12 +35,21 @@
sleep(10); // wait for beginning
}
$logdbg->log("starting grab: $grab_filename");
-$cmd = "dumprtp $chn_ip $chn_port > $grab_filename 2>/dev/null & "
- ."while [[ `date \"+%s\"` -le $end_time ]] ; do "
- ." sleep 10; "
- ."done; "
- ."kill %1";
+if ($chn_tspid == 0) { // bez VPS
+ $cmd = "wget \"$chn_url\" -q -O \"$grab_filename\" 2>/dev/null & "
+ ."while [[ `date \"+%s\"` -le $end_time ]] ; do "
+ ." sleep 10; "
+ ."done; "
+ ."kill %1";
+} else { // s VPS
+ $vpsdate=strftime("%d.%m.", $vpsstart);
+ $vpstime=strftime("%H:%M", $vpsstart);
+ $cmd = "wget \"$chn_url\" -q -O - | "
+ ."vpsrecord -q -p $chn_tspid -d $vpsdate -t $vpstime -l 1800 "
+ ." > \"$grab_filename\" 2>/dev/null ";
+}

+
$logdbg->log("running: $cmd");
$SQL = "update grab set grb_date_start=".$DB->DBTimeStamp(time())." where grb_id=$grb_id";
do_sql($SQL);

Kromě samotného souboru je ještě třeba upravit srukturu databáze, konkrétně sloupec chn_ip přejmenovat na chn_url a vyplnit celou URL streamu (např. http://localhost:8000/ct1) a sloupec chn_port přejmenovat na chn_vpspid a vyplnit číslem PID VBI streamu s VPS, nebo nulou, pokud se VPS nemá používat. Podrobněji v minulém postu.

Kromě toho jsem upravil skript pro parsování XMLTV na parsování formátu "XMLČT", tedy speciálního XML formátu, ve kterém Česká Televize nabízí svůj televizní program. Původně jsem chtěl použít data z Elektronického programového průvodce, ale narazil jsem na malou strukturovanost dat (každý pořad má jen jeden titulek, jeden krátký popisek a jeden dlouhý popisek). Zejména pro grabování seriálů je ale dobré, když jméno grabu obsahuje i číslo epizody. Skript pro grabování jsem poslal jako patch přímo do projektu, stejně jako opravu několika chyb v kódu, na které jsem při instalaci narazil.

Komentáře

Pro tento záznam nejsou komentáře povoleny.