Schnittmarken Tauschen - zweite Runde
- Doc
- Geschlossen
-
-
-
hehe
habs auch vorhin gesehenaber gonz hat ja schon ein geupt
-
Hi
neue und geänderte version!
Änderungen
- finden der verzeichnisse mit "find"
- Ort der sharemark dateien einstellbar ( Variable LOC) -
Hallo,
ich habe mal 2 Tage was anderes gemacht, und über ein paar Dinge nachgedacht, die
ich gern zur Diskussion stellen würde. Erstmal meine Einschätzung der Dinge:- ptsmarks sind geeignet, um marks auszutauschen
- Einem aktiven Austausch stehen keinerlei Hindernisse im Weg, solange alle Beteiligten
wissen, was sie tun (per DB, mail, Posting) - Einen Service per Web einzurichten hat xpix ebenfalls in no time hingekriegt
- Wir haben keinen Schutz vor DAUs, Saboteuren, Schnittmarkenfetischisten etc
- Wir wissen nicht, wieviele unterschiedliche Gruppen von Usern noch auftauchen werden,
die so wie xpix andere marks haben - die eindeutige Identifizierung eine channels ist nicht drin.
Was machen wir jetzt, wenn das Ding wirklich von vielen Usern genutzt wird, und zu
jeder populären Serie 10 Anfangs-Schnitte und 10 End-Schnitte hochgeladen werden?
Und zusätzlich 5 Gruppen auftauchen, so dass jede mark 5 mal da ist?Dann gibt es doch in nulkommanichts sowas wie eine Star-Trek-Mailing-Liste, über die
passende Schnittmarken verteilt werde, damit man sich den ganzen Ärger mit den doppelten
marks etc sparen kann.Oder man wirft gleich noad an.
Und die meiste Arbeit an dem Projekt, nämlich das dämliche Suchen einer channel-Bezeichnung
trotz vfat und AutoPID und wasweissichnicht, sowie das Aufsetzen der DB waren "nice tries".Das würde mich schon etwas nerven, deshalb noch ein paar Ideen, bei denen mich
interessieren würde, was Ihr davon haltet.- Ich wäre schwer dafür, eine allgemeingültige Liste der Kanal-Kennungen mit dem Skript
zu bundeln. Also sowas wie die "neue" ChannelID, generiert aus der offiziellen Astra
channel.conf.
Bei den Usern, bei denen aus der channels.conf die gleichen channel-ids erzeugt werden
ändert sich nix. Alle anderen können ein Mapping vornehmen, per channel-nummer oder
per vollständigem Eintrag.
Dann haben wir schon mal böse Überraschungen mit weiteren Patches etc verhindert. Wenn
es kein Mapping gibt, dann wird nichts hoch oder runtergeladen. Die Liste kann man ja
jederzeit erweitern. - Die Datenbank akzeptiert marks nur einmal, und zwar wird die Zeit, die alle marks
zusammen abdecken, als "besetzt" gekennzeichnet. Bsp: Jemand lädt marks von 20:00 bis
23:00 auf Kanal XY hoch, der nächste, der das versucht, kriegt ein nettes Dankeschön,
aber die marks gehen nicht mehr in die DB. - Alternativ: alle marks, die zusammen hochgeladen werden, bekommen eine GruppenID. Wenn
marks runtergeladen werden, dann wird die GruppenID mit übertragen. Das Skript setzt dann
die marks aus der ersten Gruppe. Sollten die nicht i.O. sein, dann kann man die nächste
Gruppe versuchen.
Was haltet Ihr davon, oder sehe ich zu schwarz (wer das denkt darf ab sofort die channelid-Generierung proggen )?
Cheers
Peter
-
Hai
Hab nix dagegen
-
Ich stecke nicht allzutief im Thema, aber hier ein paar Ideen Doc:
* Benutzer müssen sich vorher anmelden, das wären zwar ein wenig Administration, würde aber verhindern, dass einfach viel Hochgeladen wird.
* Anstatt nach einer Kennung auf Channelebene zu suchen, könnte man nicht einfach anhand der ersten Schnittmarke eine eindeutige Uhrzeit festlegen? Man hätte eine grobe einteilung welcher Channel das ist (man könnte ja mehrere pro7 aufnehmen etc) und müßte dann nur noch schauen, obs für diese channelgruppe schnittmarken gibt.
* Das Herunterladen könnte man in ein Plugin schreiben und dann dort eine Abfrage einbauen welche Marks man haben möchte, dort würde man eine Liste bekommen, evtl mit dem User dahinter wer es hochgeladen hat (siehe 1) -
Hallo Doc und @all,
nun es scheint doch darauf hinauszulaufen das wir eine Useradministration einbauen. Das sollte an sich kein Problem sein und ich werde mich da heute mal dran setzen.
Anhand der UserId kann man einmalig herausbekommen wie stark die Verschiebung des Users zu den anderen ist und kann dieses fest in die Usertable reinschreiben. Interessant wäre jetzt auch die Frage, ob die Verschiebung (bei mir 1,09 Sekunden) sich auch noch von channel zu channel unterscheiden. Scheinbar aber nicht
Nehmen wir mal an es steht folgendes in der User table:
name = xpix, offset = 1,09 Sec
name = doc, offset = 0,5 secFordert jetzt doc eine Schnittmarke an die xpix geuploadet hat dann wird einfach folgendes berechnet:
mark = mark + (0,5sec - 1,09sec)
Somit sollte endlich das Problem der magischen Verschiebung gelöst sein.
Auch ist es möglich in der DB noch eine Table zu bauen, die Doc's vorgeschlagene astrachannelid zu UserChannelId einzubauen.
Ich finde wir sollten an dem Projekt dran bleiben, nachdem was ich jetzt probiert habe mit Docs programmen funktioniert es SUPER und der Rest ist Finetuning. Das Konzept stimmt aber und das ist wichtig!
cu
xpix -
Hi xpix
ZitatOriginal von xpix
nun es scheint doch darauf hinauszulaufen das wir eine Useradministration einbauen. Das sollte an sich kein Problem sein und ich werde mich da heute mal dran setzen.
Klasse, wenn Du das schulterstZitat
Anhand der UserId kann man einmalig herausbekommen wie stark die Verschiebung des Users zu den anderen ist und kann dieses fest in die Usertable reinschreiben. Interessant wäre jetzt auch die Frage, ob die Verschiebung (bei mir 1,09 Sekunden) sich auch noch von channel zu channel unterscheiden. Scheinbar aber nicht
Bei den ARD Tests mit der Tagesschau waren es doch 2.4irgendwas Sekunden, und zwar bei Dir und einem anderen User, oder erinnere ich mich da nicht richtig?Zitat
Nehmen wir mal an es steht folgendes in der User table:name = xpix, offset = 1,09 Sec
name = doc, offset = 0,5 secFordert jetzt doc eine Schnittmarke an die xpix geuploadet hat dann wird einfach folgendes berechnet:
mark = mark + (0,5sec - 1,09sec)
Somit sollte endlich das Problem der magischen Verschiebung gelöst sein.
Naja, so ganz einfach ist es nicht, wenn wir nämlich diesen Wert in 1/90000 Sekunden umrechenen und von den ptsmarks abziehen, dann kriegen wir eine ungültige mark (der berühmte Timedrift), aber da will ich jetzt nicht schon wieder einen Roman schreiben Soviel soll reichen: Wir müssen den Versatz in GOPs rauskriegen, nicht in Sekunden. Es sind ws 2 GOPs, das sind 0.98 Sekunden. Die ptsmarks liegen aufgrund von Schwankungen aber 1.09 Sekunden auseinander, das kann marks2pts aber in Zukunft ausbügeln.Zitat
Auch ist es möglich in der DB noch eine Table zu bauen, die Doc's vorgeschlagene astrachannelid zu UserChannelId einzubauen.
Na da bin ich mir eben nicht so sicher, das würde ich auf jeden Fall dem User aufdrücken. Wenn man aus irgendwelchen Gründen (Patches, "Handarbeit" an der channels.conf, andere Signalquelle) nicht Astra-kompatibel sein sollte, dann muss man eben eine Ersetzungs-Tabelle lokal pflegen. Dan kann man ja ein kleines Tool mitliefern, das ein mapping zB anhand der SID vorschlägt, und der User muss immer nur noch "j" drücken, um das vorgeschlagene Mapping für eine Channel zu übernehmen (wenn die lokale channels.conf nicht zu chaotisch ist).Zitat
Ich finde wir sollten an dem Projekt dran bleiben, nachdem was ich jetzt probiert habe mit Docs programmen funktioniert es SUPER und der Rest ist Finetuning. Das Konzept stimmt aber und das ist wichtig!
Einverstanden, dann lass uns diesen Ansatz weiter verfolgen@ Torsten
Danke für Deinen Input
- Die Useradministration geht xpix jetzt an
- Das mit der Uhrzeit ist nicht so toll, viele FIlme starten eben um 20:15. Darum muss es doch wieder irgendwas geben, um einen channel zu identifizieren (oder seine Gruppe). Also bleibt das ursprüngliche Problem bestehen.
- Ummpf, wie schon erwähnt kann ich nur Perl ;). Wenn Du ein Perl Interface zum Plugin proggen kennst, dann sag Bescheid
[OT]
Ein paar Hintergrund Gedanken: ich finde immer noch, das ein Plugin Overkill ist, um ein paar Skripte zu steueren. Irgendwo in einem anderen Thread hatte ich ja mal ein "generisches" Plugin angeregt, das einfach Funktionaltität der reccmds.comf / commands.conf anbietet, aber deutlich erweitert. Das Plugin sollte eine Menüstruktur aus einem xml-File einlesen und die auf dem OSD darstellen, und die Menüpunkte mit Aktionen verknüpfen (Ebene wechseln, Programm ausführen etc). So könnten viele "Skript"-Erweiterungen elegant eingebaut werden, inkl Menüsteuerung, ohne dass man immer wieder am VDR rummfummeln muss. Einfach das xml-File in die Plugin.conf eintragen, und das Menü ist da. Wer mal Langeweile hat ....
[/OT]Cheers
Peter / doc
-
Hallo Doc,
ZitatOriginal von Doc
Bei den ARD Tests mit der Tagesschau waren es doch 2.4irgendwas Sekunden, und zwar bei Dir und einem anderen User, oder erinnere ich mich da nicht richtig?Nope, das war nicht bei mir. Ich glaube das war vor Wochen nur ein Aussreisser mit einer falsch gesetzten Mark! Wir haben bis jetzt bei allen Tests immer einen Versatz bei mir von ca. 1 Sekunde.
Thema Offset, also dann speichern wir dort einen Integerwert ab? (Anzahl der GOPS?)
-
Hallo xpix
ZitatOriginal von xpix
Thema Offset, also dann speichern wir dort einen Integerwert ab? (Anzahl der GOPS?)
Hmmm, wir müssen auf jeden Fall rauskriegen, wieviele GOPS es letzlich sind, soll das Skript das nach dem Download "berechnen", oder schreiben wir es gleich in die DB?
Entweder also "pts"-Drift in 1 / 90000 Sekunden, oder GOP-Drift in, ääh, GOPs ;). In beiden Fällen wäre es ein 32 BIT Integer.
Cheers
Peter / Doc
-
hey,
hurra es lueppt
PHP
Alles anzeigen# pts2marks 2003-10-24.20\:13.50.50.rec/ found the following files: record_file: 001.vdr index file 2003-10-24.20:13.50.50.rec//index.vdr marks file 2003-10-24.20:13.50.50.rec//marks.vdr trying to open 2003-10-24.20:13.50.50.rec/001.vdr handle: GLOB(0x819d7d0) size: 1641261445 **************************************** READING INDEX FILE, please be patient **************************************** index file has a size of 863880 bytes, that is 4319.4 seconds of recording managed to read 863880 bytes of '2003-10-24.20:13.50.50.rec//index.vdr' Invoked by pts2marks, 2003-10-24.20:13.50.50.rec//ptsmarks.vdr not found, trying to download retrieving [URL]http://xpix.dieserver.de/cgi/pts/pts2.cgi?channel=S19.2E-46-1791-1792&from=1067018880&to=1067023800&txt=1[/URL] got #<pre>zeit 2003-10-24 20:14:43 pts 7585103872 noad 0 id 520 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 20:29:42 pts 7666040832 noad 0 id 521 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 20:38:04 pts 7711227904 noad 0 id 522 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 20:54:29 pts 7799898112 noad 0 id 523 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 21:02:04 pts 7840825344 noad 0 id 524 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 21:12:25 pts 7896727552 noad 0 id 525 channel S19.2E-46-1791-1792 changed_at 20031024214607 zeit 2003-10-24 20:12:48 pts 7585169408 noad 0 id 526 channel S19.2E-46-1791-1792 changed_at 20031024225038 zeit 2003-10-24 20:27:48 pts 7666139136 noad 0 id 527 channel S19.2E-46-1791-1792 changed_at 20031024225038 zeit 2003-10-24 20:36:10 pts 7711358976 noad 0 id 528 channel S19.2E-46-1791-1792 changed_at 20031024225038 zeit 2003-10-24 20:52:35 pts 7799996416 noad 0 id 529 channel S19.2E-46-1791-1792 changed_at 20031024225038 zeit 2003-10-24 21:00:10 pts 7840923648 noad 0 id 530 channel S19.2E-46-1791-1792 changed_at 20031024225038 zeit 2003-10-24 21:10:31 pts 7896825856 noad 0 id 531 channel S19.2E-46-1791-1792 changed_at 20031024225038 Matched 20:14:43 and 7585103872 Matched 20:29:42 and 7666040832 Matched 20:38:04 and 7711227904 Matched 20:54:29 and 7799898112 Matched 21:02:04 and 7840825344 Matched 21:12:25 and 7896727552 Matched 20:12:48 and 7585169408 Matched 20:27:48 and 7666139136 Matched 20:36:10 and 7711358976 Matched 20:52:35 and 7799996416 Matched 21:00:10 and 7840923648 Matched 21:10:31 and 7896825856 Got Success from download Converting 2003-10-24.20:13.50.50.rec//ptsmarks.vdr The first PTS of the recording is: 7576059904 The last PTS of the recording is: 7964721152 Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Found correct pts Output is: 2003-10-24.20:13.50.50.rec//marks.vdr
es haben noch ein paar binmode's gefehlt. perl 5.8.0 braucht das scheinbar zwingend.
mein diff zur 0.0.11er version:
Diff
Alles anzeigen# diff -uN sharemarks/marks2pts sharemarks.new/marks2pts --- sharemarks/marks2pts 2003-10-23 18:48:07.000000000 +0200 +++ sharemarks.new/marks2pts 2003-10-27 16:18:35.000000000 +0100 @@ -388,19 +388,20 @@ print "Converting $pts_file\n"; open PFH, $pts_file || die "$!\n"; + binmode PFH; while(<PFH>) { chomp $_; push @raw_pts, $_; } close PFH; my $first_pts = (split/_/, mark2pts("00:00:00.1"))[0]; #print "The first PTS of the recording is: $first_pts\n"; my $last_IFrame = ${$recording->{Iframe_list}}[-2]; my $last_gop_start = $recording->{Iframes}{$last_IFrame}; my ($gop, $dummy) = $recording->get_gop_at(($last_IFrame/25),1); my $last_pts = extract_first_pts($gop); - #print "The first PTS of the recording is: $last_pts\n"; + #print "The last PTS of the recording is: $last_pts\n"; if (-e "$indir/marks.vdr") { my $err = system ("mv $indir/marks.vdr $indir/marks.vdr.orig"); @@ -612,6 +613,7 @@ die "Need the file epg.data $video_dir but could not find it!\n"; } open FH, "$video_dir/epg.data"; + binmode FH; my @helper = (<FH>); close FH; my $epgs = join "", @helper; @@ -650,7 +652,7 @@ sub extract_first_pts { my $buffer = shift; #print "buffer has length of " . length($buffer) . "\n"; my $offset = 0; my %pes_header; @@ -761,14 +763,13 @@ $end = ( split/ : /, $end )[0]; my $bytes_to_read = $end - $start; my $IFH = ${$self->{file_handles}}[$fileno]; - - my $success = (sysseek $IFH, $start, 0); if (!($start == $success)) { print "could not seek, dieing..\n"; die; } my $rbuffer; my $rbytes = sysread $IFH, $rbuffer, $bytes_to_read, 0; if ($rbytes != $bytes_to_read) { @@ -856,9 +857,10 @@ print "marks file $self->{marks_file}\n"; foreach (@files) { $_ = $indir . $_; #print "trying to open $_\n"; my $DUMMYFH; open $DUMMYFH, "$_" || die "Can not open $_: $!\n"; + binmode $DUMMYFH; push @{$self->{file_handles}}, $DUMMYFH; my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat $DUMMYFH; @@ -877,6 +879,7 @@ if (! $self->{marks_file}) {return;} #print "Trying to get marks_file: $self->{marks_file}\n"; open MFH, "$self->{marks_file}" || die "Could not open marks.vdr"; + binmode MFH; @{$self->{marks}} = <MFH>; foreach (@{$self->{marks}}) { #print "got mark $_"; @@ -906,13 +909,14 @@ my $buffer; open FH,"$index_file" || die "Can not open File: $!\n"; - - my $bytesread = sysread (FH, $buffer, $index_size); + binmode (FH); + + my $bytesread = sysread FH, $buffer, $index_size, 0; - print "managed to read $bytesread bytes of index.vdr\n"; + print "managed to read $bytesread bytes of '$index_file'\n"; if ($bytesread != $index_size) { - die "Somehow failed to read all of index.vdr\n"; + die "Somehow failed to read all of '$index_file'\n"; } my $offset = 0; my $I_counter = 0; @@ -1105,6 +1109,7 @@ my $filename = sprintf "chunk_%03u.vdr", $counter; if (! $self->{split_output}) { open OF, ">./$filename" || die "can not open output file!\n"; + binmode OF; } foreach (@chunks) { @@ -1115,6 +1120,7 @@ if ($self->{split_output}) { $filename = sprintf "chunk_%03u.vdr", $counter; open OF, ">./$filename" || die "can not open output file!\n"; + binmode OF; } my $fileno = $start_file -1;
-- randy
-
Hi randy,
ZitatOriginal von randy
hey,hurra es lueppt
Cool, Du hast zwar auch ne Menge Textfiles mit binmod behandelt, aber unter Linux
sollte ja binmod auch gar nicht nötig sein und deshalb auch nicht stören.Ich schau mir den Patch dann noch mal im Detail an und baue in in die
nächste Version ein (nicht ohne Dir vorher ne Testversion aufs Auge zu drücken ;)).Cheers
Peter / doc
-
Zitat
Original von Doc
Hallo xpix
[quote]Original von xpix
Hmmm, wir müssen auf jeden Fall rauskriegen, wieviele GOPS es letzlich sind, soll das Skript das nach dem Download "berechnen", oder schreiben wir es gleich in die DB?Ich dachte das macht der User einmalig, also wenn er eine Sekunde nachgeht dann gibt er dort 2 GOPS als Offset ein. Oder hab ich das falsch verstanden?
Die Useradministration ist fast fertig, bekommst heute abend noch eine Mail von mir.
-
Hi xpix
ZitatOriginal von xpix
Ich dachte das macht der User einmalig, also wenn er eine Sekunde nachgeht dann gibt er dort 2 GOPS als Offset ein. Oder hab ich das falsch verstanden?
Die Useradministration ist fast fertig, bekommst heute abend noch eine Mail von mir.
Völlig einverstanden, der User soll das eintragen anhand von einigen Tests, die er machen muss:)Und Du bist ja mal wieder unverschämt schnell, ich freu mich auf Deine Mail
Cheers
Peter / Doc
-
Hallo Doc/Xpix,
was ist stand der dinge ?
Gibt es einen anderen Thread den ich verpasst habe ?
Was ist denn jetzt das aktulle script ?
sharemarks_md5.tgz oder sharemarks-0.11Oder gibt es ein neues ?
Gruß
Viking -
Zitat
Original von viking
Hallo Doc/Xpix,was ist stand der dinge ?
Gibt es einen anderen Thread den ich verpasst habe ?
Was ist denn jetzt das aktulle script ?
sharemarks_md5.tgz oder sharemarks-0.11Oder gibt es ein neues ?
Gruß
VikingHi Viking,
ich glaube, ich bin jetzt der Bremsklotz
Xpix hat die Benutzerverwaltung schon lange fertig, und ich habe einfach keine Zeit mehr für das Skript gefunden.
Ich versuche, in dieser Woche nochmal eine etwas erweiterte Version rauszuhauen, aber ich habe recht viel um die Ohren (und auch noch ein paar Dinge an vdrsync zu schrauben).
Die md5-Version hat (glaube ich) noch einen Fix mehr als die 0.11, aber das ist eigentlich egal. Wichtig wäre erstmal die Userverwaltung und eine .sharemarks Datei mit der config im Userverzeichnis, in der man seinen Drift, seine Fake-Source etc definieren kann. Wie gesagt, ich versuche was in dieser Woche auf die Beine zu stellen.
Cheers
Peter / Doc
-
Zitat
Original von Doc
Du gehst nicht zufällig durch nen Proxy ins Internet ....? Sieht mir doch stark so aus als würdest Du keine Verbindung bekommen.
(Weiss jemand, wie ich mit LWP::Simple über nen Proxy ins Netz komme? Reichen da ENV Variablen?)
hi Doc.
besser spät als nie, falls diese Info noch gebraucht wird:
Wenn du LWP::Useragent verwendest, kannst du einfach mitCodemy $ua = new LWP::UserAgent; $ua->proxy('http', $http_proxy); my $req = new HTTP::Request(GET => $downloadurl); my $res = $ua->request($req); $html = $res->content;
eine Webseite durch einen Proxy ziehen.
die "light"-Version LWP::Simple kann seine Proxydaten nur per Umgebungsvariable holen, indem du $ua->env_proxy nutzt.
hth.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!