Hola Bypper,
> ¿Donde lo has conseguido?
> ¿no has tenido problemas para instalarlo?
El firmware: B442HP_S1001_090828a venía instalado en el equipo. Parece que hay más versiones que las de la web. Aún así, a mí se queda tostado con grabaciones grandes del TDT.
El perl está muy bien para hacer este tipo de ñapas. Es un poco críptico, pero haces mucho con pocas líneas. Encantado de poder ayudar en lo que pueda. A mí también me han ayudado mucho. Llevo mucho años en esto y no hay otra forma de conseguir avanzar más que ayudándonos.
> Undefined subroutine &main::Ord called at ./rob.pl line 16.
En el código que te pasé hay que cambiar "Ord" por "ord". Este código es un resumen del código original que incluye las funciones más importantes:
1- Recorrer los bloques de bytes que corresponden a cada grabación.
2- Para cada bloque, sacar información relevante
3- Sustituir el título original por el que nosotros queramos (en mi caso la fecha y hora del fichero asociado a esta grabación).
En el código original:
- La información sobre la fecha y la hora de las grabaciones están en un ficherillo txt generado (en el O2media) a partir de un simple "ls -l" del directorio "/tmp/hdd/dvdvr/dvb/" donde se almacenan las grabaciones del TDT (por ejemplo "dates.txt"), y en cada línea se guarda: <nombre del fichero.ts>,año,mes,día,hora
- Con esta información, para cada grabación se ve cual es su fichero de grabación ".ts" asociado y se pone en el título la fecha y hora de dicho fichero.
- Te adjunto código original:
--------------
Código:
#!/usr/bin/perl
$file=$ARGV[0]; # Fichero a modificar tsRecord.db
$dfile=$ARGV[1]; # Fichero txt con las fechas y horas de los ficheros ".ts"
my %dates;
my %month;
$month{"Jan"}="01";
$month{"Feb"}="02";
$month{"Mar"}="03";
$month{"Apr"}="04";
$month{"May"}="05";
$month{"Jun"}="06";
$month{"Jul"}="07";
$month{"Ago"}="08";
$month{"Sep"}="09";
$month{"Oct"}="10";
$month{"Nov"}="11";
$month{"Dec"}="12";
####### Cargamos en un hash los nombres de los ficheros .ts y sus fechas.
open(DS,"$dfile") || die "Impossible to open file";
while ($line=<DS>) {
chop($line);
my($file,$y,$m,$d,$dt)=split(/,/,$line);
if (length($d) == 1) {
$d = "0" . $d;
}
$dates{"$file"}="$y-" . $month{"$m"} . "-$d $dt";
}
close(DS);
######## El boque principal ##################
open(DAT,"$file") || die "Impossible to open file"; # Abre el fichero tsRecord.db
open(DAT2,">tsRecord.tmp"); # La salida a otro fichero
binmode(DAT); # Modo binario
binmode(DAT2);
$count=read(DAT,$dat,384); #*leemos bloques de 384bytes = 1 grabacion
while($count > 0) {
print "----------------------------------\n";
print "Count bytes = $count \n";
if ($count == 384) {
$chan=substr($dat,8,1); # Leemos el canal
$tit=substr ($dat,36,100); # Leemos el titulo
$pat=substr($dat,136,248); # leemos el fichero asociado a la grabacion .ts
$cero=index($tit,"0"); # Si ya se ha modificado este título, no volver a modificarlo
if ($cero == 0) {
foreach my $k (keys %dates) { #*Recorro el hash con todos los ficehros .ts
my $pos=index($pat,$k);
if ($pos>=0) { # Si es el fichero .ts asociado al bloque
my $fecha=$dates{"$k"} . " Ch" . ord($chan); # Hago un titulo con fecha y hora
print "Changing title $k with " . $fecha . "\n";
substr($dat,36,length($fecha),$fecha); # Lo substituyo en el nuevo fichero
}
}
}
}
print DAT2 $dat; # Escribes bloque modificado a la salida
$count=read(DAT,$dat,384); # Vuelves a leer el siguiente bloque
}
close(DAT);
close(DAT2);
---------------
> Y se me ocurre que en esta linea ...
> ¿tu crees que se podría extrapolar la idea para editar el fichero de los canales?
>
> El fichero en concreto es: "usr/local/etc/dvdplayer/dtv_channel.txt"
La verdad es que el tsRecord.db salió por intuición. Todavía no le he echado un vistazo al fichero de canales, pero si encuentras más o menos la estructura, seguro que algo se puede hacer. Esta noche le echo un vistazo.
Un saludo,
Rodrigo