![]() |
Media Center entwickeln
Hallo Community :)
Ich bin dabei ein Media Center zu Programmieren, Audio, Video sowie Radio ist soweit auch nicht das Problem sondern eher die Erweiterungen dabei. Das Media Center läuft auf einem kleinen PC der natürlich nur den Fernseher zur Ausgabe benutzt. ![]() Für die Eingabe und weitere Ausgabe nutze ich ein Plugin System das die Daten an die Dll's weiter reicht oder von ihnen bekommt. Das klappt auch so halbwegs. Was für mich nun ein kleines Problem darstellt ist wie ich die Plugins am TV nur mit Hilfe der Fernbedienung einstellen könnte oder besser sie erstmal von den Einstellungen her anzeigen. Bisheriger Aufbau ist nur das Hintergrundbild und Links das Menü. alles andere ist im Hauptteil frei. Ein Plugin ist z.B. eine Relaiskartenansteuerung die die Elektrischen Geräte schaltet wie TV, Verstärker, Receiver usw. Es wäre natürlich von Vorteil wenn ich einfach im Menüpunkt Module eben das Plugin angezeigt bekomme und dort die einzellnen Relais schalten kann. Anderes Beispiel wäre die die Konfiguration eines externen Displays. Alternativ wäre auch die Konfiguration übers Netzwerk möglich durch ein weiteres Plugin. Die Plugins sollten natürlich wenn es geht auch in anderen Sprachen erstellbar sein können. Ich habe weder bei dem einen noch bei dem anderen Gerade einen Ansatz wie man das realisieren könnte, steht da echt auf dem Schlauch. Habt ihr hier vielleicht ein paar ansätze wie man dieses kleine Problem lösen könnte? Würde mich sehr über einen haufen Antworten und Vorschläge freuen. Gruß Cyber |
Re: Media Center entwickeln
Schau dir dazu den Quelltext von MediaPortal an
diesen kannst du als SVN Build von SourceForce laden. Viel Arbeit wenn man bedenkt das es dass alles schon gibt. ;) gruss |
Re: Media Center entwickeln
KLar gibt es das aber was würde dagegen sprechen?
Habe mir halt den Entschluss eines Selber zu programmieren. Es geht ja auch nicht immer nur um das fertige Produkt sondern auch darum vllt etwas zu lernen bei so einem Projekt. |
Re: Media Center entwickeln
Kannst du mit deiner Fernbedienung ein hierachisches Menü bedienen ???
Pfeil hoch/runter wählt den Menüpunkt Hat ein Menüpunkt ein Untermenü, kann man es mit Pfeil rechts betreten. Pfeil nach links geht wieder eine Menüebene zurück. Mit dem OK/Enter-Button wird ein Menüpunkt ausgewählt. |
Re: Media Center entwickeln
Zitat:
zunächst einmal, ich mag keine plugins. lauter firlefanz, den man sich erst selber zusammen suchen und konfigurieren muss. du sprachst von einer relaisschaltung, die einzelne komponenten einschalten kann. nun gut. wenn ich im menü z.b. auf DVD drücke, will ich, daß der fernseher angeht, die DVD liegt wohl im computer, also der ist schon an, und dann der verstärker der soundanlage. idealerweise sollte die quelle für den sound dann auf den computer geschaltet werden, und die lautsärke direkt am verstärkerknopf geregelt. letzteres hab ich mit lego-mindstorms schon mal gemacht (motor und gummiring an den knopf :-D ) und dann soll die dvd losgehen. langer rede kurzer sinn: mach die menüs so kurz wie möglich - ein menüpunkt, und du guckst DVD, ein anderer und du hörst radio, nochn anderer und du guckst TV, und der rest geht automatisch. allzuviele dinge kann man in sonem mediacenter ja nicht anstellen. welches plugin du in welcher situation wie konfigurieren würdest, weißt du doch im voraus. lass das das programm übernehmen. |
Re: Media Center entwickeln
Daran arbeite ich gerade und schlage mich gelegentlich noch mit AV's rum.
Bisher ist es aber nur eine Ebene. Mit Select/Enter leert sich und dann baut sich die nächste ebene auf. Es kann zur Zeit sogar mit der Maus bedient werden, aber auch da hagelt es noch ein paar AV's beim Clearen des Menüs. Das menü ist über eine Collection von TPanel bewerkstelligt. @blue Es soll ja nicht bei TV und Verstärker, Eben alles was so im StandBy strom zieht. Z.B Habe ich meine Playstation dran, warum sollte sie im StandBy Strom ziehen? Jedesmal hin unt Stecker ziehen ist auch ein wenig umständlich... Das Relais Plugin ist für mindestens 8 Relais aber nach oben hin offen(Schieberegister machens möglich). Man kann also auch weitaus mehr damit anfangen. Was das Menü angeht. Musik, Playlisten, und Videos übers Netzwerk. Noch einmal zu den Plugins. Anzeigen der Anruflisten, aktuelles Gespräch, usw... Ich kann es ja einfach umbenennen Media Home Server Cetner ;) |
Re: Media Center entwickeln
Sieht ziemlich interessant aus und was die Alternativen angeht bei welchen Programmen gibts die nicht ?
Zitat:
|
Re: Media Center entwickeln
Lieber nur ein Gerät als 4(TV, Verstärker, Sat-Receiver und Playstation). Ist ja auch nur ein Beispiel.
Selbst den Media PC kann man so umbauen das er eben nicht in den StandBy geht, sondern sich auch von den 230V trennt. Dazu muss zwischen Netzteil und Board(Power) einfach nur eine Selbshaltung, PowerOff -> Selbshaltung schaltet und die 230V sind auch dort weg. Beim einschalten per Fernbedienung hapert es noch ein wenig. Wake on USB klappt ohne StandBy nicht aber per Transistorschaltung ließe sich vllt. der IOW24 extern ansteuern und per Signal auf der Fernbedienung die Selbsthaltung wieder einschalten. Der IOW verbraucht wesentlich weniger Spannung als der PC im StandBy. Das ist aber jetzt nur nebensächlich und hat weniger mit der eigentlichen Software zu tun. Wenn ich die AV's beseitigt bekomme ist die Hauptsteuerung auch recht einfach wie bei einem DVD Player. Left, Right, Up, Down und Select zum durchblättern des Menüs. Zudem ist jeder Button der Fernbedienung frei wählbar und wird per mini Protokoll an die jeweils aktive Struktur übergeben. |
Re: Media Center entwickeln
hi,
das thema interessiert mich auch ziemlich :) Hast du vielleicht ein paar infos dazu? Was brauche ich an zus. Hardware, links für die programmiertechnische umsetzung? Das wär supernett. Gruß Ansgar |
Re: Media Center entwickeln
Zitat:
* das Menü wird ganz normal als Popupmenu aufgebaut. Ein Rechtsklick auf das Formular bringt es nach oben und man kann ganz normal mit der Maus bedienen. Das reicht aber noch nicht. Zusätzlich wird die Menüstruktur über Panels (oder Buttons) visualisiert. Die Panels werden dynamisch anhand der Menüitems erzeugt und in einer TObjectList eingetragen, damit man sie auch dynamisch wieder löschen kann. |
Re: Media Center entwickeln
@Ansgar
Die Schaltung zur Selbsthaltung(auf Transitoren basierend) habe ich gerade nicht parat, da müsste ich erst in meinen Schulunterlagen schauen. Es gibt aber auch Selbsthaltungen die rein über ein Relais geschaltet werden. Werde sie mal posten sobald ich sie gefunden habe. Hier mal dargestellt mit einem Schütz ![]() Programmiertechnisch braucht man da nichts zu machen, es ist alles eine reine Hardware Lösung. In der Theorie schaut das in etwa so aus: Das Scütz ist eigentlich nichts weiter als ein Relais. Wird der S2 gedrückt, so schaltet das Schütz und schliesst die Verbindung 13/14. Wird der Taster S2 wieder los gelassen so bleibt die Verbindung zwischen 13/14 weiterhin bestehen solange bis S1 gelöst wird. Denn dann verliert das Relais den Strom und öffnet wieder die Verbindung 13/14. An dem Relais kann man mehr als nur ein Gerät schalten. Es steht mindestens noch ein Schaltkreis zur Verfügung den wir nutzen können. Hieran wird nun die 230V Leitung des PC angeschlossen. Der Tster S1 wird durch einen weiteren Relaiskontakt geschaltet. An S2 wird der so gesehen der IOW angeschlossen, bzw. besser gesagt nur der IR-Empfänger. Wir brauchen nur ein einziges mal einen Spannungsanstieg um das Relais K1 zu schalten. Dazu wird der RC5 Code der Fernbedienung nicht genutzt sondern nur das Positive Datensignal. Liegt also am IR Sensor eine Spannung an so schaltet das Relais durch. Jetzt gibt es 2 Möglichkeiten, die eine ist der PC startet automatisch bei anliegen der Spannung. Die andere Möglichkeit wäre durch erweiterung der Schaltung. Schaltet jetzt der PC ein, so wird durch beispielsweise der Power-Led das Relais was hier S1 darstellt geschlossen und die Selbsthaltung ist aktiv. Schaltet der PC sich ab, die Power-LED erlischt und das Relais öffnet sich wieder, die Selbsthaltung schaltet sich wieder ab. Da PC und die Relais jeweils verzögerungen haben, wird die Schaltung natürlich durch Transistoren und Kondensatoren ersetzt damit genug Zeit bleibt bis der PC wirklich läuft. Kondensatoren sind kleine Energiespeicher. Werden sie Paralell zu den Relais geschaltet werden sie geladen, fällt die Spannung ab so entladen sie sich und liefern noch je nach grösse Spannung um die die Schaltung Temporär zu versorgen damit sichergestellt ist das auch wirklich der PC läuft. Ich hoffe ich konnte dir das so einigermassen erklären. Hier noch ein Schaltbild wie es im groben ausschaut mit den Relais. ![]() So könnte es nachher in etwas aussehen. Da die Schaltung auf 5V ausgelegt wird, kann natürlich der TSOP mit dem IOW im Share stehen. Dazu muss jedoch der IOW ein wenig umgebaut werden, damit dieser unabhängig vom USB auch Spannung bekommt. Zudem könnte man es noch soweit entwickeln das selbst keine Netzversorgung mehr auf dem IOW liegen muss, dieser könnte über einen Akku betrieben werden, dieser lädt sich dann im normal Betrieb wieder auf. @shmia Was ist denn an einem CollectionItem und einer Collection auszusetzen gegenüber der ObjectList? Hier einmal meine Menü Klasse, leider noch mit Fehlern behaftet beim freigeben der Panels.
Delphi-Quellcode:
unit menu_class;
interface uses Classes, Defines, Windows, SysUtils, Controls, Graphics, JvPanel; type TButtonStyle = (etButton, etSeperator, etText); type TMenuEntry = class(TCollectionItem) private FPanel: TJvPanel; FButtonStyle: TButtonStyle; public destructor Destroy(); override; property Button: TJvPanel read FPanel write FPanel; property ButtonStyle: TButtonStyle read FButtonStyle write FButtonStyle; end; type TMenuEntries = class(TCollection) private function GetEntry(Index: Integer): TMenuEntry; public constructor Create; destructor Destroy; override; function Add(AOwner: TWinControl): TMenuEntry; procedure Del(Index: Integer); property MenuEntry[Index: Integer]: TMenuEntry read GetEntry; end; type TMenuManager = class(TObject) private FOwner: TWinControl; FXPos: Integer; FYPos: Integer; FTempYPos: Integer; FMenuEntries: TMenuEntries; FActiveButton: Integer; FItemClick: TNotifyEvent; function GetAcctiveButton: Integer; procedure SetActiveButton(const Value: Integer); procedure OnClick(Sender: TObject); public constructor Create(AOwner: TWinControl; XPos, YPos: Integer); destructor Destroy; override; procedure AddButton(Caption: String; ButtonStyle: TButtonStyle = etButton); procedure RemoveButton(Index: Integer); procedure ClearButtons; function Count: Integer; property ButtonActive: Integer read GetAcctiveButton write SetActiveButton; property OnItemClick: TNotifyEvent read FItemClick write FItemClick; end; implementation { TMenuManager } procedure TMenuManager.AddButton(Caption: String; ButtonStyle: TButtonStyle); var AMenuEntry: TMenuEntry; begin Self.FTempYPos := Self.FMenuEntries.Count * 40 + Self.FYPos; AMenuEntry := Self.FMenuEntries.Add(Self.FOwner); AMenuEntry.FPanel.DoubleBuffered := True; AMenuEntry.FPanel.Left := Self.FXPos; AMenuEntry.FPanel.Top := Self.FTempYPos; AMenuEntry.FPanel.Height := 33; AMenuEntry.FPanel.Width := 233; AMenuEntry.FPanel.Transparent := True; AMenuEntry.FPanel.BevelInner := bvNone; AMenuEntry.FPanel.BevelOuter := bvNone; AMenuEntry.FPanel.Color := clGray; AMenuEntry.FPanel.Alignment := taLeftJustify; AMenuEntry.FPanel.Caption := Caption; AMenuEntry.FPanel.Font.Color := clBlack; AMenuEntry.FPanel.Font.Size := 24; AMenuEntry.FPanel.Font.Style := [fsBold]; if ButtonStyle = etSeperator then AMenuEntry.FPanel.BorderWidth := 0 else AMenuEntry.FPanel.BorderWidth := 1; AMenuEntry.FPanel.Parent := FOwner; AMenuEntry.FPanel.OnClick := Self.OnClick; AMenuEntry.FPanel.Tag := AMenuEntry.Index; AMenuEntry.FButtonStyle := ButtonStyle; end; procedure TMenuManager.ClearButtons; begin while Self.FMenuEntries.Count > 0 do begin Self.FMenuEntries.Del(Self.FMenuEntries.Count -1); end; end; function TMenuManager.Count: Integer; begin Result := Self.FMenuEntries.Count; end; constructor TMenuManager.Create(AOwner: TWinControl; XPos, YPos: Integer); begin inherited Create; Self.FOwner := AOwner; Self.FXPos := XPos; Self.FYPos := YPos; Self.FTempYPos := Self.FYPos; Self.FActiveButton := -1; Self.FMenuEntries := TMenuEntries.Create; end; destructor TMenuManager.Destroy; begin Self.ClearButtons; Self.FMenuEntries.Destroy; inherited Destroy; end; function TMenuManager.GetAcctiveButton: Integer; begin Result := Self.FActiveButton; end; procedure TMenuManager.OnClick(Sender: TObject); begin if Assigned(FItemClick) then begin if Sender is TJvPanel then begin Self.SetActiveButton(TJvPanel(Sender).Tag); //Self.FActiveButton := TJvPanel(Sender).Tag; OnItemClick(Self); // <-- panel existiert nicht mehr end; end; // hier error!!!!!!!!!!!!!!!!! end; procedure TMenuManager.RemoveButton(Index: Integer); begin Self.FMenuEntries.Del(Index); end; procedure TMenuManager.SetActiveButton(const Value: Integer); var AMenuEntry: TMenuEntry; begin if Value = -1 then Exit; AMenuEntry := Self.FMenuEntries.MenuEntry[Value]; if (AMenuEntry <> nil) and (Value <> Self.FActiveButton) then begin if AMenuEntry.ButtonStyle = etButton then begin AMenuEntry.FPanel.Color := clYellow; if Self.FActiveButton > -1 then Self.FMenuEntries.MenuEntry[Self.FActiveButton].FPanel.Color := clGray; Self.FActiveButton := Value; end; end; end; { TMenuEntries } function TMenuEntries.Add(AOwner: TWinControl): TMenuEntry; begin Result := inherited Add as TMenuEntry; Result.FPanel := TJvPanel.Create(AOwner); Result.FPanel.Parent := AOwner; end; constructor TMenuEntries.Create; begin inherited Create(TMenuEntry); end; procedure TMenuEntries.Del(Index: Integer); begin Self.GetEntry(Index).Free; end; destructor TMenuEntries.Destroy; begin inherited Destroy; end; function TMenuEntries.GetEntry(Index: Integer): TMenuEntry; begin Result := inherited Items[Index] as TMenuEntry; end; { TMenuEntry } destructor TMenuEntry.Destroy; begin Self.FPanel.Free; inherited Destroy; end; end. |
Re: Media Center entwickeln
Mal eine kleine Nebenfrage...
Meine Panel besitzen die Eigenschaft OnClick und reagieren auch auf den Click der Fernbedienung. Beim leeren der Menüliste bekomme ich natülich eine AV. Er ist noch in der Procedure drin aber eigentlich existiert das Objekt nicht mehr. Wie könnte ich das umgehen?
Delphi-Quellcode:
mit OnItemClick wird folgendes aufgerufen
procedure TMenuManager.OnClick(Sender: TObject);
begin if Assigned(FItemClick) then begin if Sender is TJvPanel then begin Self.SetActiveButton(TJvPanel(Sender).Tag); //Self.FActiveButton := TJvPanel(Sender).Tag; OnItemClick(Self); // <-- panel existiert nicht mehr end; end; // hier error!!!!!!!!!!!!!!!!! end;
Delphi-Quellcode:
Er springt nachher in das OnClick Ereignis zurück und dort kommt die AV.
procedure TMain_Frm.SelectPressed;
var I: Integer; begin case Self.FCC.PlayerMode of // Hauptmenü pmMain: begin case Self.FMenuManager.ButtonActive of // Musik Menü aktiv setzen 0: begin Self.FOSD.Show('Musik Modus', 2000); Self.FCC.PlayerMode := pmMusik; Self.FMenuManager.ClearButtons; end; // DVD Menü aktiv setzen 1: begin Self.FOSD.Show('DVD Modus', 2000); Self.FCC.PlayerMode := pmDVD; // Self.FMenuManager.ClearButtons; for I := Self.FMenuManager.Count -1 downto 0 do Self.FMenuManager.RemoveButton(I); end; Weiß jemand eine saubere Lösung womit ich sie auch wieder entfernen kann? |
Re: Media Center entwickeln
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ist schon etwas her aber ich hatte mal wieder Zeit und hab alles ein wenig umgebaut. Eigentlich habe ich den bisherigen Ansatz komplett über den Haufen geschmissen. Mittlerweile Arbeite ich um die Oberfläche zu erstellen mit Andorra 2D. Bisher sieht es auch noch mehr nach einer Kopie von Media Portal aus aber das ist ja nur ein Skin. Das ist bisher auch nur ein Test. Das komplette System bietet keine Maussteuerung sondern nur über Plugins und Tastatur. Die wesentliche Steuerung soll nur 5 Tasten/Zustände kennen(links, rechts, hoch, runter, auswählen) Beim ersten Versuch hatte ich eigentlich nur das Menü, dort war die steuerung nicht sonderlich schwer. Jetzt habe ich aber neben dem Menü auch noch andere "Buttons". Wie könnte man das am besten programmiertechnisch umsetzen mit den Tasten? Wenn das Menü aktiv ist, kann man mit hoch, runter das Menü steuern. Mit links, rechts sollte man dann von dem Menü auf die anderne "Buttons" kommen, hier wäre das Schliessen, wechsel von Fenster auf Vollbild und Herunterfahren. Hatte persönlich jetzt etwas im Kopf das ich eine Mutterklasse habe TMediaObject von dort aus werden alle anderen Elemente abgeleitet, TMediaMenuObject, TMediaButton, usw. Dann eine Klasse mit einer Liste die alle MediaObjecte beinhaltet und pro Object die Tasten die man nutzen kann und auf das "Nachbar" Object verweisen. Zusätzlich übernimmt die Klasse auch das abfangen der Tastendrücke und leitet sie an das entsprechende Object weiter bzw. von dort zum nächsten. Kleiner Nachteil, es müsste alles im Skin hinterlegt sein... Das ist halt meine Idee, die Frage, ist das ne gute Idee oder gibt es da bessere Lösungen, sofern das überhaupt eine gute Lösung wäre. Gruß Cyberaxx |
Re: Media Center entwickeln
Zitat:
Eine Taste für [Abbrechen] und eine weitere für [Zurück zum Hauptmenü} wären für mich unverzichtbar. Wenn man einem Dreieck noch ein paar/viele Ecken mehr verpasst, könnte sich daraus fast etwas "Rundes" entwickeln, vergleichbar mit einem Rad. Warum von Vorne mit dem Dreieck anfangen? Ist nicht böse, sondern eher fragend gemeint. |
Re: Media Center entwickeln
Hai Cyberaxx,
hänge das Bild bitte als Anhang an deinen Post. Zum einen möchte sich nicht jeder die 40 kB runterladen müssen und zum anderen kann es sein das es irgendwann nicht mehr auf dem Server liegt und dann sieht das ganze nicht mehr "schön" aus. Danke. |
Re: Media Center entwickeln
Das es keine Mausunterstützung hat ja seinen Sinn, für mich zumindest. Es läuft ausschliesslich auf dem TV, ich sitz auf der Couch und da habe ich sicher keine Lust mit der Maus zu spielen. Ich habe also meist nur eine Fernbedienung. Da ich die Maussteuerung eh selber umsetzen müßte wird sie nicht mit eingebaut. Ich denke mal wenn es soweit ist könnte man dies über ein Plugin lösen.
Zitat:
haben ja nichts mit der Objektsteuerung zu tun sondern sind an die "Form" gebunden. |
Re: Media Center entwickeln
hört sich ziemlich interessant an!
kannst du mal die sourcen hochladen! dann kann man sich mehr darunter vorstellen? idee und design find ich super! mfg |
Re: Media Center entwickeln
Naja das Design ist ein wenig von Media Portal abgeschaut.
Da ich mit der 3D Umsetzung noch nicht zufrieden bin gibt es da leider noch nicht viel was man hochladen könnte, ich sitze gerade daran das ich die Menüsteuerung hinbekomme ohne Maus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz