Jump to content

COM in Delphi 2005 / 2006


Recommended Posts

Hallo!

Ich versuche gerade mit dem COM-Template aus dem Mitgliederbereich den DVBViewer Pro zu steuern.

 

z.B.

procedure TfrmMain.Button1Click(Sender: TObject);
begin
 DVBViewer.SendCommand( CMD_RECORD);
end;

 

Beim Klick ist DVBViewer=Nil (Interface wurde ja noch nicht genutzt), und dann würd über

 

function TfrmMain.DVBViewer: IDVBViewer;
var
 Unknown: Iunknown;
begin
 if FDVBViewer = nil then
 begin
   Unknown := nil;
   if GetActiveObject(CLASS_DVBViewer, nil, Unknown) <> MK_E_UNAVAILABLE then
     Unknown.QueryInterface(IID_IDVBViewer, FDVBViewer);
 end;
 Result := FDVBViewer;
end;

 

der DVBViewer angesprochen. Leider verabschiedet sich das Programm bei beiden Delphiversionen in der Zeile Unknown.QueryInterface(IID_IDVBViewer, FDVBViewer); mit

---------------------------

Benachrichtigung über Debugger-Exception

---------------------------

Im Projekt template.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0045376d: read of address 0x00000000' aufgetreten.

---------------------------

Anhalten Fortsetzen Hilfe

---------------------------

Link to comment
Guest Lars_MQ
read of address 0x00000000' aufgetreten.

GetactiveObject liefert kein interface zurück und dann geht

der zugriff auf Unknown in die hose.

 

Ich weiss nicht was ich mir dabei gedacht habe, besser wäre

if succeeded(GetActiveObject(CLASS_DVBViewer, nil, Unknown)) then

 

Läuft denn der DVBViewer?

Link to comment

Vergessen zu sagen: Klar läuft der DVBViewer. Ich bekomme zwar kein Bild oder so (siehe http://www.DVBViewer.com/forum/index.php?showtopic=12585 ) aber das sollte ja nicht stören, auch in soweit da auf dem anderen PC mit Delphi2005 und einwandfrei funktionierendem DVBViewer das selbe Problem auftritt...

 

Irgendeine Idee warum das nicht geht?

 

Sollte mein Programm vielleicht direkt den DVBViewer starten und dann irgendwie direkt über dessen Handle gehen?

Link to comment
Guest Lars_MQ

Coinitialize(nil)

bei formcreate

und

Couninitialize

bei formdestroy

aufrufen. Eventuell hat sich ja was geändert bei Delphi, in der 7 wird das beim einbinden der comobj macht.

Link to comment

Sehr schön, das scheint soweit zu klappen :) Danke!

 

Ich muss ein Programm schreiben, dass die DVB-T Sendungen aufnehmen lässt. Ich geben die dann abwechselnd (jedes File ca. 1 GB) wieder, da das mit dem Streaming zu VLC leider nicht so klappt...

 

Kann ich den Aufnahme-Dateinamen setzen?

 

Leider kann auch der Laptop hier ja nicht über Netzwerk oder DVB-T-Karte (Problem siehe oben) Fernsehen wiedergeben bzw. aufnehmen. Kann ich irgendwie mit Probledaten (Datei, DVD oder Livestream? etwas aufnehmen lassen?

 

Ich muss mir mal die DirectX-Quelle DVBFile anschauen, vielleicht lässt sich damit was machen (muss mal sehen wie man die Aufnehmen kann --> RTFM mach ich gleich mal).

 

Generell sehr gutes Programm, hängt sich nur leider recht oft auf (w00t)

Edited by berens
Link to comment
Guest Lars_MQ

Im allgemeinen hängt sich der Viewer sehr selten auf. Schuld ist meist das Directshowsubsystem von Windows. Mit richtig eingestellten decodern und ganz wichtig ohne irgendwelche codecpacks (!) läuft er sehr stabil.

 

Ich habe auch nur die hälfte von dem verstanden, was Du machen willst. Wir können Dir gerne helfen, aber dazu musst Du Dich etwas verständlicher ausdrücken (w00t)

Link to comment
Coinitialize(nil)

bei formcreate

und

Couninitialize

bei formdestroy

aufrufen.

 

Böse. Nimm einfach den constructor und den destructor.

 

Gründe siehe Google Groups. Habe mal religiöse Kämpfe diesbezüglich gefochten (entweder in den Gruppen für Delphi oder denen für C++Builder).

Link to comment

So, wieder da (eben 2 Tage ohne Internet dank Telekom).

 

Also, Problemstellung:

Zeige DVB-T Fernsehen in unserer eigenen Delphiapplikation an. Die TV-Karte sollte nicht zwingend im selben PC sein, wie der, auf dem die Anzeige läuft.

 

Möglicher Lösungsansatz:

Stelle auf dem TV-PC mit DVBViewer einen Unicast stream bereit und zeige diesen in der eigenen Applikation an.

--> Geht leider nicht, weil VLC (das haben wir eingebettet) damit leider nicht so wirklich zurecht kommt

--> Multicast können wir dem Kunden (großes Firmennetzwerk) nicht zumuten (geht aber glaube ich eh nicht mit VLC)

 

Praktische Lösung die ich zu automatisieren Anstrebe (für Alternativen wäre ich sehr, sehr dankbar!):

DVBViewer zeichnet die Sendung die dargestellt werden soll auf die Festplatte auf. (Das wird von meinem Programm veranlasst, und auch alles drumherum (Steuerung des Clients etc.) Der "Client" greift über Datei- und Druckerfreigabe auf diese Datei zu und spielt diese ab. Dank des COM-Interfaces kann ich denke ich mal auch den Dateinamen herausbekommen (unter dem das Programm atm aufgezeichnet wird) und diese Datei dann über Netzwerk abspielen lassen. Nachdem das Programm / der Film vorbei ist wird die Aufnahme gestoppt und die Datei gelöscht.

 

Kann ich den Dateinamen aus selber setzen, unter dem jetzt direkt aufgenommen wird? Man kann ja einstellen, dass nach z.B. 600 MB eine neue Datei angefangen wird. Steht die dann auch bei RecordManager.Items dabei?

 

PS: Warum heisst das bei RecordManager ItemS und bei TimerManager Item (glaube ich)?

Link to comment
Guest Lars_MQ
Warum heisst das bei RecordManager ItemS und bei TimerManager Item (glaube ich)?

Weil ich solche sachen manchmal spät in der nacht mache (w00t)

 

Ich glaube, die vlc lösung wäre per unicaststream die beste.

 

Hast Du mal probiert mit dem vlc mediaplayer dich an den Viewer via http:\\[ip]:2345 zu verbinden?

Wenn das damit geht, sollte es auch in eurer app gehen. ich habs hier bei mir mal fix aufgebaut, läuft tiptop. Über Navigation wählt man die ServiceID aus und schon zeigt der vlc das bild. Getestet mit dem viewer direkt -> optionen -> netzwerk unicast aktiviert.

Link to comment

Zu schön wäre es: http://www.DVBViewer.com/forum/index.php?showtopic=12568

 

Ich glaube dir, dass es _generell_ geht, und finde das auch beachtlich dass das (generell (w00t) ) klappt. Leider ist er halt bei mir so, dass es nur sehr, seeeeeehr sporadisch klappt (weshalb auch immer). Und das kann/darf ich beim Kunden leider nicht anbieten, wenn es nicht 99% funktioniert...

 

Netzwerkfunktion wie oben beschrieben schon in allen Konstellationen (3 Tage lang!) durchgetestet, aber wie gesagt, siehe Link oben.

Link to comment
Guest Lars_MQ
    <entry name="Type">1</entry>

    <entry name="Nid">192.168.1.24</entry>

    <entry name="MulticastIP">224.0.0.1</entry>

    <entry name="MulticastPort">2345</entry>

    <entry name="MulticastTTL">1</entry>

    <entry name="MulticastBuffer">376</entry>

    <entry name="UnicastPort">1234</entry>

    <entry name="Buffersize">376</entry>  <-- hier

    <entry name="Maxusers">2</entry>

ok, ich seh schon. Ein verdacht:

Ändere mal in den unicast optionen die buffergrösse von 376 (=2 x 188 (ein TS paket)) auf 18800 (evtl. etwas damit spielen aber bitte immer vielfache von 188). Ich glaube die 376 sind zu klein. Natürlich keine garantie, aber ein versuch ist es wert (w00t)

Link to comment

Kann das leider nicht ausprobieren, oh man!

 

Ich bekomm pro Stunde imme andere Sender rein (mal ARD, mal ZDF, mal nen halben Tag lang gar keinen Sender) _trotz_ TV-Kabel von KabelDeutschland!

 

Jedes mal, wenn ich den Antennenstecker an der Karte ziehe, hängt sich DVBViewer komplett auf!

Link to comment
trotz_ TV-Kabel von KabelDeutschland!

..kann es sein, dass du hier die leute an der nase rumführst? Anscheinend willst du kabel mit deiner dvb-t karte empfangen. Jedenfalls vermute ich das, oder hast du auch noch ne kabelkarte?

Link to comment
trotz_ TV-Kabel von KabelDeutschland!

..kann es sein, dass du hier die leute an der nase rumführst? Anscheinend willst du kabel mit deiner dvb-t karte empfangen. Jedenfalls vermute ich das, oder hast du auch noch ne kabelkarte?

 

 

Das klärt sich gerade... Derrick, wir beide diskutieren da bereits in http://www.DVBViewer.com/forum/index.php?s...4&st=0&p=94845& drüber. Aber so langsam verstehe ich das Problem (w00t)

 

 

Edit: Unabhängig davon: sobald der Empfang schlechter wird, hängt sich DVBViewer auf bis der Empfang wieder besser wird...

Edited by berens
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...