Jump to content

Einbindung von libCEC


DVBview

Recommended Posts

Hallo DVBViewer-Team,

 

ich nutze schon ewig eure Software (war richtig gut angelegtes Geld) und hatte nun eine Frage. Ich habe mir im XBMC eine Verknüpfung eingebaut, welche dann XBMC beendet und DVBViewer startet. Sobald DVBViewer beendet wird, startet wieder XBMC. Soweit so gut.

 

Nun habe ich mir für das XBMC einen HDMI CEC-Adapter gekauft http://www.pulse-eight.com/store/products/104-usb-hdmi-cec-adapter.aspx

 

Der Adapter kann die CEC-Signale des TVs übernehmen und an XBMC weitergeben. Der Sinn des Ganzen? Wenn der TV das kann, kann man das XBMC mit der TV-Fernbedienung steuern.

 

Nun habe ich mit den Entwicklern von libCEC geschrieben und die sagten mir, dass libCEC Open-Source ist. Daher wollte ich ganz lieb fragen, ob das Team in der Lage wäre, Support für libCEC in den DVBViewer einzubauen.

 

Die nötigen Links:

https://github.com/Pulse-Eight/libcec

http://libcec.pulse-eight.com/

 

Wäre sehr nett, wenn sich jemand vom Team äußern könnte! Wäre sicherlich ein attraktives Feature! :)

 

Danke und liebe Grüße!

Link to comment
  • Replies 110
  • Created
  • Last Reply

Top Posters In This Topic

  • erwin

    28

  • nuts

    26

  • CiNcH

    21

  • DVBview

    14

Top Posters In This Topic

Wenn ich das richtig sehe steht die Bibliothek unter der GPL. Was bedeutet das jedes Programm was die direkt oder als Plugin einbindet auch unter die GPL gestellt werden muss. Wenn die Entwickler das nicht so wollen würden, hätten sie nicht die GPL sondern die LGPL verwendet.

 

Also kann dass wenn nur in einem eigenständigen Programm realisiert werden was dann über einfachere Kanäle als die enge Bindung der Plugin schnittstelle mit dem DVBViewer kommuniziert.

Link to comment

Stimmt, habe ich übersehen.

 

Ich habe nochmal das Team kontaktiert und mir wurde gesagt, es gebe eine kostenlose Lizensierungsmöglichkeit, sodass man nicht die Quelle offen legen muss. Daher fände ich es wirklich super, wenn das DVBViewer-Team die Chance nutzen könnte und libCEC einbauen könnte. Wäre wirklich ein gutes Feature, wenn man die TV-Remote auch für den DVBViewer nutzen könnte! :)

 

Ich könnte einen Kontakt vermitteln, wer vom DVBViewer Team wäre denn zuständig?

Edited by DVBview
Link to comment

Ist alles noch ganz neu (Adapter habe ich schon hier, funzt mit XBMC echt gut!) und das Team sagte mir, dass die Lizensierung für DVBViewer gratis möglich sei.

 

Daher wäre es doch wohl am besten für uns, wenn das DVBViewer-Team da aktiv werden könnte, denn das würde die Bedienung des HTPCs wirklich erleichtern!

 

Man werkelt momentan auch an einem Firmware-Update, damit man den HTPC durch den Adapter wecken kann, wenn man den TV anmacht!

Edited by DVBview
Link to comment

Hab heute auch meinen Adapter bekommen. Würde mich echt über ein Plugin für DVBViewer freuen. XBMC Plugin wäre natürlich der Oberhammer aber ich glaube nicht das dies passieren wird. Würde die Entwicklung eines Plugins gerne unterstützen.

 

Gruß

Link to comment

Der Adapter kann die CEC-Signale des TVs übernehmen und an XBMC weitergeben. Der Sinn des Ganzen? Wenn der TV das kann, kann man das XBMC mit der TV-Fernbedienung steuern.

 

Wenns dir nur darum geht den DVBV über den TV fernzusteuern könnten auch engagierte Entwickler (müssen nicht unbedingt zum DVBV-Team gehören) eine eigenständige Applikation erstellen welche die CEC-Kommandos als Tastatur-/APPCOMMAND-/Sendmessage- Ereignise reemitiert, welche dann der DVBV aufnimmt. Auch ein spezialisierter Kommunikationskanal zur Vermeidung von Fokusproblemen ist denkbar. Dies wäre meines Wissens im Rahmen der GPL möglich.

 

Anders wenn man den Gedankenn von Nuts aufgreift, also umgekehrt: der DVBV steuert den TV. Aber auch hier wäre vieles möglich.

 

Was hier für bereitwillige Entwickler fehlt, wären sowas wie use-cases, also Beispiele für Anwendungszenarien.

 

erwin

Link to comment

Ich denke, mit der Bibliothek wäre es recht einfach, eine Art "sendcec.exe" zu schreiben (in C/C++), die aus der Command.vbs heraus aufgerufen wird. Damit hätte man zumindest den Weg DVBViewer -> Fernseher realisiert.

 

Mein persönliches Problem damit: Ich habe immer noch den Effekt, dass der Fernseher vor dem HTPC eingeschaltet werden muss. Andernfalls gibt es keinen Ton per HDMI. Das war bei meinem alten PC mit Gigabyte Board und ATI 4550 Grafikkarte so und das ist auch beim MacMini der Fall.

 

Unter diesen Voraussetzungen bringt mir natürlich dieser Weg nichts.

Link to comment

Meist hilft dann ein hdmi-refresh!

Nach dem Standby (S3) funktioniert es bei mir auch ohne. Die ganze Kette (AVR und TV) wird dabei erst durch Eventghost neu gestartet.

 

Auch den TV mit dem PC automatisch abzuschalten wäre schonmal was. :)

 

So eine Art sendcec.exe müsste wirklich recht einfach möglich sein.

Vielleicht klicken uns das auch die libcec Entwickler schnell zusammen?

 

Ich werde mir so ein Teil mal auf jeden Fall ordern.

Sollten noch andere Interesse haben könnten wir uns auch zusammenschließen.

Link to comment

Meist hilft dann ein hdmi-refresh!

 

Und wie machst Du das?

 

Nach dem Standby (S3) funktioniert es bei mir auch ohne. Die ganze Kette (AVR und TV) wird dabei erst durch Eventghost neu gestartet.

 

Den AVR kann ich per Netzwerk steuern. Wie steuerst Du den Fernseher aus EventGhost? Auch per Netzwerk? Mein Sony hat zwar eine Netzwerkschnittstelle, ich habe aber bisher keine Möglichkeit gefunden, darüber irgendwas zu steuern.

Link to comment

Ich meine dazu reicht es den Monitor aus und anschließend den Monitor ein Befehl zu senden.

Dabei wird einfach die Datenübertragung unterbrochen (so schaltet windows auch die Monitore aus)

Hab dazu ein Skript, aber das müsste ich zuhause mal raussuchen.

 

Der TV wird derzeit über das FS20-System und den FS20PCS gesteuert.

Der PC-Sender schickt ein Funksignal zum FS20 IR-Empfänger und der schaltet den TV ein.

 

Das funktioniert zwar hat aber einige Nachteile (teuer, IR-Sender muss sichtbar paltziert werden, mein Samsung genehmigt sich 1-2 Sekunden bis er auf den IR-Befehl reagiert).

Mit der USB-CEC Box könnte man das viel besser lösen.

Edited by nuts
Link to comment

Ich meine dazu reicht es den Monitor aus und anschließend den Monitor ein Befehl zu senden.

Dabei wird einfach die Datenübertragung unterbrochen (so schaltet windows auch die Monitore aus)

Hab dazu ein Skript, aber das müsste ich zuhause mal raussuchen.

 

Danke, habe es schon gefunden. Einfach per SendMessage eine entsprechende BROADCAST-Message schicken.

Link to comment

Hey,

 

Danke für eure Antworten!

 

Also mir geht es primär einfach nur darum, dass ich die TV-Remote auch im DVBViewer nutzen kann. Und ich weiß leider nicht, welche dieser Wege hier am schnellsten sind.

 

Aber ich habe noch das Zitat, vielleicht hilft das:

well, we're providing a C, C++, .NET and command line interface, and will provide a tcp server/daemon too later on, so they should be able to integrate it any way they like

 

Link to comment

Das bräuchte es eine Art Input-Plugin. Unmöglich erscheint das nicht.

Wenn das richtig funktioniert wäre es schon ne tolle Sache für HTPC-User.

 

Mal sehen ob wir das Interesse dafür wecken können. :)

 

 

P.S.

@dbraner:

Func _Refresh_hdmi()
Local Const $WM_SYSCOMMAND = 274
Local Const $SC_MONITORPOWER = 61808
Local Const $POWERON = -1
Local Const $POWEROFF = 2

Local $hwnd = WinGetHandle('classname=Progman')

DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', $WM_SYSCOMMAND, 'int', $SC_MONITORPOWER, 'int', $POWEROFF)
Sleep(4000)
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', $WM_SYSCOMMAND, 'int', $SC_MONITORPOWER, 'int', $POWERON)

EndFunc   ;==>_Refresh_hdmi

Edited by nuts
Link to comment

Ihr seid die Experten. :)

 

Ich hoffe nur, dass das Team die Chance ergreift und es einbaut. Denn mMn wäre das ein super Zugewinn für DVBViewer und ein weiteres Argument für das Programm! :P

 

Naja, wäre cool, wenn sich vielleicht noch jemand vom Team meldet und sagt, ob wir das per PlugIn lösen sollen oder ob das Team die Lib einbaut. :)

Link to comment

@DVBview

 

Ich hab mir mal die oben genannten Quellen angesehen. Falls Du selbst in C/C++ programmierst würde ich dir Tips geben wo was wie zu ändern wäre. Ich selbst wills nicht selber machen, weil ich erstens mangels Hardware nicht testen kann und zweitens ich dann die ganzen GPL Pflichten zu bringen hätte, das ist mir dann doch zu aufwendig. Später vielleicht (Kauf eines CEC-TV steht bevor).

 

erwin

Link to comment

Die umgekehrte Richtung, also "sendcec" ist eigentliich rudimentär schon da;

 

testclient/main.cpp wäre zu compilieren

 

Aufrufparameter:

 

"[tx] {bytes} transfer bytes over the CEC line." << endl <<

"[txn] {bytes} transfer bytes but don't wait for transmission ACK." << endl <<

"[on] {address} power on the device with the given logical address." << endl <<

"[standby] {address} put the device with the given address in standby mode." << endl <<

"[la] {logical address} change the logical address of the CEC adapter." << endl <<

"[p] {device} {port} change the HDMI port number of the CEC adapter." << endl <<

"[pa] {physical address} change the physical address of the CEC adapter." << endl <<

"[as] make the CEC adapter the active source." << endl <<

"[osd] {addr} {string} set OSD message on the specified device." << endl <<

"[ver] {addr} get the CEC version of the specified device." << endl <<

"[ven] {addr} get the vendor ID of the specified device." << endl <<

"[lang] {addr} get the menu language of the specified device." << endl <<

"[pow] {addr} get the power status of the specified device." << endl <<

"[name] {addr} get the OSD name of the specified device." << endl <<

"[poll] {addr} poll the specified device." << endl <<

"[lad] lists active devices on the bus" << endl <<

"[ad] {addr} checks whether the specified device is active." << endl <<

"[at] {type} checks whether the specified device type is active." << endl <<

"[volup] send a volume up command to the amp if present" << endl <<

"[voldown] send a volume down command to the amp if present" << endl <<

"[mute] send a mute/unmute command to the amp if present" << endl <<

"[scan] scan the CEC bus and display device info" << endl <<

"[mon] {1|0} enable or disable CEC bus monitoring." << endl <<

"[log] {1 - 31} change the log level. see cectypes.h for values." << endl <<

"[ping] send a ping command to the CEC adapter." << endl <<

"[bl] to let the adapter enter the bootloader, to upgrade" << endl <<

" the flash rom." << endl <<

"[r] reconnect to the CEC adapter." << endl <<

"[h] or [help] show this help." << endl <<

"[q] or [quit] to quit the CEC test client and switch off all" << endl <<

 

erwin

Link to comment

P.S.: Wenn ihr mit den Entwicklern live chatten wollt:

irc.freenode.net (Port 6667) und da der Channel #pulse-eight

 

Entweder mit einem IRC-Clienten oder einfach web-basiert: http://de.irc2go.com/webchat/?net=freenode

 

Chat-Raum ist dann wie bereits oben gesagt "#pulse-eight" - Spitznamen könnt ihr frei wählen! ;) Die Entwickler sind "opdenkamp" und "Malard" - gechattet wird auf Englisch, opdenkamp kann aber auch Deutsch :P

Link to comment

Die ist scheinbar nur für Vista und 7. Nicht für XP.

 

erwin

 

Hier eine Fallmeldung von heute aus dem Pulse-Eight Forum

 

http://forums.pulse-eight.com/default.aspx?g=posts&t=332

 

 

Insbesondere Punkt 1) hatte mich zu der obigen Annahme geführt

 

Allerdings Punkt 3) ???

 

Mal sehen wie die offizielle Antwort ausfallen wird.

 

Übrigens diese ganze libcec ist doch ziemlich mit der heißen Nadel gestrickt (nicht im abwertenden Sinne gemeint). Fast täglich neue updates.

 

erwin

Link to comment

Und da isse, die offizielle Antwort.

 

We don't support XP, use Vista or 7, we will try to get XP support back, but we needed to drop using pthreads over supporting XP.

 

Can you provide us with any debug logs?

 

erwin

Edited by erwin
Link to comment

So hier was für bereitwillige Tester. Der Test-Client (cec-client.exe) wurde so modifiziert das vom TV auf den Test-Clienten umgeleitete Fernbedienungsfunktionen (CEC - Remote Control Pass Through) Tastatur bzw. WM_APPCOMMAND Ereignisse emulieren. Damit sind dann viele PC-Programme wie PowerDVD, DVBViewer etc. steuerbar sofern sie sich im Vordergrund befinden (für die Keyboardevents, bei APPCOMMANND nicht notwendigerweise). Also cec-client.exe vorher minimieren! Für die APPCOMMAND-Unterstützung des DVBViwers das MultimediaKey-Inputpugin verwenden.

 

Das Ganze steht unter der GPL. Benötigt wird eine lauffähige libcec-Installation (mit XMBC-testen)

 

UND: Ich selbst kann nicht testen. Keine Hardware! Ist also Blindflugprogrammierung. Habt Nachsicht.

 

 

cec-client-mod.zip

 

erwin

 

PS. Wie ich das sehe muss wohl cec-client-mod.exe bereits laufen damit der CEC-Adapter überhaupt am TV ausgewählt werden kann.

Edited by erwin
Link to comment

Super! Kann ich morgen testen!

 

Nur zum Verständnis. Soll ich den vorhandenen CEC-Client ersetzen? Oder soll diese .exe-Datei zusätzlich laufen?

 

Falls ja, kann man sie ja einfach in den Autostart-Ordner reinhauen und minimiert starten lassen oder?

Link to comment

Nur zum Verständnis. Soll ich den vorhandenen CEC-Client ersetzen? Oder soll diese .exe-Datei zusätzlich laufen?

Ersetzen.

 

Auch ein Mitlaufen des Logs ist angebracht. ( -f myTest.log -d 8 als Parameter). Siehe hier:

 

http://forums.pulse-eight.com/default.aspx?g=posts&m=1998#post1998

 

 

Falls ja, kann man sie ja einfach in den Autostart-Ordner reinhauen und minimiert starten lassen oder?

Ja schon. Wenn das Feedback positiv ist, d.h. es erstmal prinzipiell läuft, dann schieb ich eine verfeinerte Version nach. Mit Start miniminiert im Tray und so, oder als Windows-Service. Auch über ein optimales Tastenmapping können wir uns dann noch mal unterhalten.

 

erwin

Edited by erwin
Link to comment

Ah, noch eine Sache. Und zwar habe ich Win 7 64Bit und im Ordner gibt es noch eine 64bit Version vom cec-client.exe

 

Ich gehe mal davon aus, dass ich jetzt auch von dir eine x64 Version brauche oder?

Link to comment

Okay, dann warte ich und werde danach testen! :)

 

Hast du dir schon die HW bestellt?

 

(Ich würde es machen, solange die noch auf Lager sind, das dauert 1 bis 2 Monate, bis die wieder neue Adapter auf Lager haben)

Link to comment

(Ich würde es machen, solange die noch auf Lager sind, das dauert 1 bis 2 Monate, bis die wieder neue Adapter auf Lager haben)

So wie ich mich kenne brauch ich auch noch 1 bis 2 Monate bis ich mich für den Kauf des TV entschieden habe ;-). Manchmal beneide ich die Kurzentschlossenen.

 

Was meint ihr, sind Catalyst-Treiber zu erwarten die CEC unterstützen? Oder ist der maßgebliche Pin 13 auf den HDMI-AMD-Grakas gar nicht verdrahtet?

 

erwin

Link to comment

CEC ist eine Hardware-Sache, das kann man afaik nicht per Software nachrüsten! Zumindest kenne ich keine GraKa, die das kann.

 

(Der Adapter ist ja unabhängig vom TV)

 

Thx für die x64-Version, werde ich nachher testen!

Edited by DVBview
Link to comment

CEC ist eine Hardware-Sache, das kann man afaik nicht per Software nachrüsten! Zumindest kenne ich keine GraKa, die das kann.

 

Hardware ja, aber CEC ist Teil von HDMI und dies können die AMD Grakas. Hardwaremäßig könnten die Voraussetzungen durchaus schon erfüllt sein.

 

erwin

Link to comment

Mal eine andere Frage an die Adapter-Besitzer.

 

Das Teil schleift ja die anderen HDMI-Signale (bis eben auf den Pin 13) einfach durch. Habt ihr irgendwelche Qualitätseinbußen (Video/Audio) oder andere Einschränkungen in der Verkabelung (ARC z.B.) bemerkt?

 

erwin

Edited by erwin
Link to comment

Was meint ihr, sind Catalyst-Treiber zu erwarten die CEC unterstützen? Oder ist der maßgebliche Pin 13 auf den HDMI-AMD-Grakas gar nicht verdrahtet?

Würde ich mittelfristig nicht erwarten.

1. Ich habe noch gar nichts darüber gehört, dass sowas in Planung sei.

2. Selbst wenn es die Möglichkeit gäbe dauert die Umsetzung sicherlich einige Zeit.

Zuerst wird das an größere Firmen (z.B. Cyberlink) "verkauft", dann zieht MS fürs Mediacenter mit und bis es für die kleinen, freien Projekte nutzbar ist vergehen Jahre. Wie bei DXVA usw. :whistle:

 

 

Wie sich der Adapter im Zusammenspiel mit den sonstigen Geräte verhält würde mich aber auch interessieren.

Ich hoffe mal es gibt keine größeren Probleme beim hdmi-handshake?

 

Was mich auch noch interessieren würde: Wie muss man sich die Bedienung des PC's über die TV-Fernbedienung genau vorstellen?

Der TV fauert auf jeden IR-Eingang einen passendes CEC-Event ab und dieses wird von ein einem Programm über die libCEC API angenommen und weiterverarbeitet.

Nur dann reagiert der TV doch erstmal selbst auf die Befehle der Fernbedienung oder?

Edited by nuts
Link to comment

Was mich auch noch interessieren würde: Wie muss man sich die Bedienung des PC's über die TV-Fernbedienung genau vorstellen?

Der TV fauert auf jeden IR-Eingang einen passendes CEC-Event ab und dieses wird von ein einem Programm über die libCEC API angenommen und weiterverarbeitet.

Nur dann reagiert der TV doch erstmal selbst auf die Befehle der Fernbedienung oder?

 

Meine theoretischen Vorstellungen (praktische habe ich nicht, d.h. nicht auf die Goldwaage legen) sind folgendermaßen:

 

Ich steuere im TV die Geräteauswahl an und wähle als Gerät den Adapter. Fortan gehen Eingaben auf der Fernbedienung an dieses Gerät und damit über libcec an eine Applikation auf dem PC. Dies betrifft allerdings nicht alle Tasten. Eine Taste z.B. muss ja die Kontrolle ohne zutun externer Gerätschaft wieder dem TV zurückgeben können. Weiterhin stellt man fest wenn man im Pulse-Eight-Forum ein wenig mitliest das dies extrem geräteabhängig ist. Angefangen "ob diese Funktion überhaupt unterstützt wird", über "welche Tasten unterstützt werden", bis hin, dass ausschließlich die Volume-Tasten berücksichtigt werden.

 

Ein alternatives Szenario (ebenfalls aus dem Forum): Über den cec-client.exe wird dem TV über ein spezielles Kommando mitgeteilt, dass ein externes Gerät (der Adapter in diesem Falle) ein offenes Menü präsentiert und logischerweise jetzt auf Fernbedienungseingaben zur Auswahl wartet. Hier sollte der TV dann die Fernbedienungseingaben an dieses Gerät umleiten, zumindest die für Menüeingaben notwendigen (UP, DOWN, die Zifferntasten, ESC und RETURN).

 

erwin

Link to comment
Das Teil schleift ja die anderen HDMI-Signale (bis eben auf den Pin 13) einfach durch. Habt ihr irgendwelche Qualitätseinbußen (Video/Audio) oder andere Einschränkungen in der Verkabelung (ARC z.B.) bemerkt?

 

Nein, habe ich nicht bemerkt, das Ding schleift mechanisch durch. Also auch wenn du den Adapter nicht am USB hast, funktioniert es. ;)

 

Was mich auch noch interessieren würde: Wie muss man sich die Bedienung des PC's über die TV-Fernbedienung genau vorstellen?

 

Der TV macht vorher ein CEC-Handshake mit dem PC (bzw. mit dem Adapter) und von da an werden alle Befehle direkt durchgegeben. Hat Vor- und Nachteile, aber ich finds sehr komfortabel.

Natürlich nicht alle Befehle (also z.B. 3D-Menü oder Quellenauswahl).

Link to comment

Ah ok.

Müsste man dann also im Einzelfall ausprobieren, ob die freigegebenen Tasten auf der TV-Fernbedienung für die Bedienung des PC's ausreichen.

Spannende Sache. :)

Link to comment

Wenn ich das richtig sehe steht die Bibliothek unter der GPL. Was bedeutet das jedes Programm was die direkt oder als Plugin einbindet auch unter die GPL gestellt werden muss. Wenn die Entwickler das nicht so wollen würden, hätten sie nicht die GPL sondern die LGPL verwendet.

 

Also kann dass wenn nur in einem eigenständigen Programm realisiert werden was dann über einfachere Kanäle als die enge Bindung der Plugin schnittstelle mit dem DVBViewer kommuniziert.

 

Mir schwebt vor die cec-client.exe so zu modifizieren, dass wenn er Kommandos vom TV empfängt diese über die DVBV-COM Schnittstelle zur Ausführung zu bringen.

 

Also z.B. CEC Feature:

 

System Standby - Enables the user to switch all devices to standby with one button press.

Schickt den PC über den DVBV (Recordmodus oder Timer berücksichtigen) in Standby.

 

One Touch Record - Offers a What You See Is What You Record (WYSIWYR) facility, meaning that

whatever is shown on the TV screen is recorded on a selected Recording Device.

Instant Recording über COM starten

 

Timer Programming – Allows the user to program the timers in a Recording Device from an EPG running on a TV or STB.

Timerprogrammierung über COM

 

etc.

 

Was meinst Du, GPL konform, d.h. der DVBV muss nicht GePeLiert werden? Ist doch dann kein "abgeleitetes Werk" vorhanden? Der DVBV ist in keinster Weise von cec-client.exe/ceclib abhängig - umgekehrt schon. Und ich Vertreib den DVBV ja auch gar nicht mit der modifizierten cec-client.exe zusammen.

 

erwin

Edited by erwin
Link to comment

Hallo,

 

ich betreibe meinen HTPC zusammen mit einem Beamer. Wäre es nicht auch möglich den Beamer auszuschalten wenn ich den PC runterfahre bzw. in den Standby schicke.

 

Gruß KIDzero

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...