[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Software, um TV-Aufnahmen zu machen



Dirk Salva schrieb:

> ich suche eine einfache und bequeme Software, um (gesteuerte)
> Fernsehaufnahmen mit der vorhandenen TV-Karte zu machen. D.h. ich

Ich verwende VDR als bequeme Software.

Einfache Software:

Ganz einfach z.B. CronScript für die Nachrichten:
> #!/bin/sh
> szap "ZDF" -r 1>/dev/null 2>&1 &
> cat /dev/dvb/adapter0/dvr0 > /video/nachr.ts

Etwas kompfortabler z.B. Perl:
#!/usr/bin/perl -w
#
use strict;
use warnings;

use Getopt::Long;
$Getopt::Long::ignorecase = 0;
use vars qw($opt_h $opt_help $opt_v $opt_version);
use Time::ParseDate qw(parsedate);
use Sys::Syslog;
use Proc::Killfam;

#program version
my $VERSION = "1.1";
my $USAGE   = "$0 [options] Sender Startzeit Endezeit

Zeitangaben: hh:mm oder yy/mm/dd.hh:mm

Options:
  -h, --help        Print this help then exit
  -v, --version     Print version
";

GetOptions( "v", "version", "h", "help" )
  || die "$USAGE";
if ( ( defined $opt_h ) || ( defined $opt_help ) ) { print "$USAGE";
exit(); }
if ( ( defined $opt_v ) || ( defined $opt_version ) ) {
    print "$VERSION\n";
    exit();
}

my ( $sender, $start, $ende ) = @ARGV;

until ( $sender =~ m/\w/ ) { print "$USAGE"; exit(); }

my $jetzt;
my $sek_start;
my $sek_end;
my $sek_diff;

$jetzt = time;

$sek_start = parsedate($start) - $jetzt;
if ( $sek_start < 0 ) {
    if ( ( $sek_start + 3600 ) > 0 ) {
        $sek_start = 0;
    }    # Start liegt in der letzten Stunde, deshalb Aufzeichnung sofort
    else {
        print "Start liegt in der Vergangenheit, bitte Datum mit
angeben:\n";
        print "$USAGE";
        exit;
    }
}

if ( $sek_start > 300 ) {

# Falls der Start mehr als 5 Minuten in der Zukunft liegt, einen at-Job
starten.
    system(
"echo \"/home/mati/scripte/perl/video.pl \'$sender\' $start $ende\" | at
$start \n"
    );
    print "Aufzeichnung von $sender startet um $start \n";
    exit();
}

if ( defined $ende ) {
    $sek_end = parsedate($ende) - parsedate($start);
}
else { $sek_end = 300; }

if ( $sek_end < 80 ) {
    print "Aufnahmezeit weniger als eine Minute, auf 1 Stunde gesetzt\n";
    $sek_end = 3600;
}

print $sek_start, " ", $sek_end, "\n";

sleep $sek_start;

my $pid = $$;
my ( $pid1, $pid2 );

if ( defined( $pid1 = fork ) ) {
    if ($pid1) {

        # print "Empfang PID $pid \n";
    }
    else {
        &empfang;
        exit;
    }
}
else { die "fork funktioniert nicht \n"; }

if ( defined( $pid2 = fork ) ) {
    if ($pid2) {

    }
    else {
        &aufzeichnung;
        exit;
    }
}
else { die "fork funktioniert nicht \n"; }

sleep $sek_end;

Proc::Killfam::killfam 'TERM', ( $pid1, $pid2 );

exit;

sub empfang {
    system("szap \'$sender\' -r 1>/dev/null 2>&1");
    exit;
}

sub aufzeichnung {
    system(
"cat /dev/dvb/adapter0/dvr0 > \'/mnt/hda8/video/$sender\'.ts 2>/dev/null"
    );
    exit;
}

sub log {
    my $para = shift(@_);
    if ( defined $para ) {
        chomp($para);
        my $leng = length($para);
        if ( $leng > 0 ) {
            Sys::Syslog::openlog( "video", 'pid, nowait', 'user' );
            Sys::Syslog::syslog( 'info', $para );
            Sys::Syslog::closelog();
        }
    }
}

mfg
Matthias Taube



Reply to: