ich hoffe ich bin hier richtig, ansonsten verschiebt mich bitte .
Als begeisterter "Streamer" bin ich über das Problem gestolpert, dass anscheinend keine automatische Initialisierung zusätzlicher APIDs bei verschlüsselten Sendern erfolgt, wenn sich die Anzahl der APIDs eines Senders seit seiner ersten Anwahl (Genaueres folgt noch) erhöht. Auch die automatische Aktualisierung der Streaminformationen (Anzeige über Neutrino Streaminfos oder Tonauswahlmenü) scheint nicht zu funktionieren, wenn kein Senderwechsel gemacht wird (aber das gehört eventuell ins Neutrino Forum).
Zur näheren Erläuterung meiner Beobachtungen:
Wenn ich nach dem Reboot der DBox Premiere 1 anwähle und dort eine Sendung mit einer APID ausgestrahlt wird, zeigen die Streaminfos korrekt diese APID an und auch das Tonauswahlmenü (grüne FB-Taste) ist entsprechend nicht verfügbar (ach!? ... bitte Geduld ich komme bald auf den Punkt).
Bleibe ich auf diesem Sender und die nachfolgende Sendung wird dann z.B. in Zweikanalton ausgestrahlt, so ändern sich leider weder die Streaminfos (es wird immer noch eine APID angezeigt) noch wird das Tonauswahlmenü aktiv (das ist das erste Problem). Schalte ich nun auf einen anderen Kanal (z.B. Premiere 2) und dann wieder zurück auf Premiere 1, so werden die Streaminfos aktualisiert und auch das Tonauswahlmenü ist verfügbar, aber wenn ich dann die zweite APID anwähle, um den Ton anzuhören, so höre ich nichts (und das ist mein Hauptproblem). Und wenn ich diese Sendung streame, bleibt die Datei für diese APID auch leer.
Schalte ich nach dem Reboot erst dann auf den betreffenden Sender, wenn beide APIDs übertragen werden, dann ist der Ton auch hörbar und er lässt sich auch aufzeichen (wer möchte, kann sich meine Testreihe dazu in epischer Breite unter http://tuxbox.org/forum/viewtopic.php?t=26086 durchlesen - ist aber nicht zwingend notwendig ).
Bei der Untersuchung des Konsolenlogs ist mir dann aufgefallen, dass immer dann, wenn die camd2 nach dem Umschalten protokolliert
- [camd] starting onid 0001 sid 000a
descramble onid: 0001 sid: 000a status: 1d1d
- [camd] refusing duplicate service
Daraufhin habe ich mir das CVS gezogen und mir in camd.c die Stelle gesucht, an der diese Meldungen generiert werden. Dort habe ich dann gefunden, dass die jeweils letzten acht verschlüsselten Services in einem Array gecached werden, und eine erneute Anfrage an das CAM Modul nur dann gestellt wird, wenn ein neunter Sender hinzukommt. Nun vermute ich, dass beim Hinzukommen weiterer APIDs jedoch ein neuer Request an das CAM Modul geschickt werden muss, damit auch die neuen APIDs aus dem Stream gefischt werden (bitte nicht hauen, wenn ich nun total falsch liege, aber so habe ich mir das als Laie erklärt). Um diese Vermutung zu verifizieren, habe ich kurzerhand die Länge des Arrays auf 1 gesetzt und damit die Reinitialisierung des Caches bei jedem Umschalten erzwungen. Und siehe da, zumindest nach dem Umschalten waren alle Tonoptionen verfügbar und hörbar - auch dann, wenn ich zuvor bereits mit geringerer Anzahl von APIDs den Sender schon einmal angewählt hatte.
Hier kommt jetzt mein erste Frage an euch Profis. Ist meine Vermutung richtig (die, dass bei der Erhöhung der APID-Anzahl das CAM-Modul für diesen Service neu initialisiert bzw. zumindest informiert werden muss)? Oder stoße ich damit nur zufällig ein Folge-Event an, das für die eigentliche Bereinigung des Problems sorgt?
Sollte die Vermutung stimmen, muss dann wirklich das gesamte CAM-Modul reinitialisiert werden, oder gibt es auch eine CAM-Funktion, mit der explizit ein bereits entschlüsselter Service überschrieben/aktualisiert werden kann?
Und dann natürlich meine zweite Frage. Gibt es bereits ein Event, dass gefeuert wird, wenn sich die Anzahl der APIDs ändert (damit man das lästige Umschalten auch noch überflüssig machen könnte)? Wenn nicht, wo müsste ich mich einklinken, um ein solches Event zu erzeugen? Und wenn dieses Event dann verfügbar ist, an welchen Stellen müsste ich es dann auswerten, um den gewünschten Erfolg (die automatisch Aktualisierung sowohl der Anzeige als auch des CAMs ohne Senderwechsel) zu erzielen?
Da ich ein absoluter tuxbox-CVS-Neuling bin, wäre ich über jeden Hinweis von euch dankbar. Nur durch Source-Code lesen und Forum-Stöbern bin ich leider noch nicht im Detail dahinter gestiegen, wo ich bezüglich des Event-Handlings einsteigen müsste. Sorry für die vielen Worte (ich kann leider nicht anders, auch wenn ich mich immer weider bemühe ) und vielen herzlichen Dank an alle Helfer bereits im Voraus.
In freudiger Erwartung alsbaldiger Antworten,
Ralf