Support Request #14217
closedReceive events from player
Description
Supportanfrage
ich hatte mich bereits im Ticket #12328 (https://support.digitalwerk.net/issues/12328) nach Möglichkeiten des Abfangens von Player-Events erkundigt. Projektbedingt bin ich allerdings jetzt erst zur Umsetzung gekommen.
Der im Ticket vorschlagene Code bzgl. adtf::services::IKernel::ISignalHandler fängt bei mir jedoch keine Player-Events ab. Bei Recorder-Events wird meine Funktion aber aufgerufen.
tResult cGAF3::HandleKernelSignal(const adtf::ucom::iobject_ptr<adtf::services::IKernel::ISignal>& pSignal)
{
LOG_INFO("ein Event...");
RETURN_NOERROR;
}
Mir scheint es aber auch, als würden nicht alle Recorder-Events ankommen - zeitlich vermisse ich auf meiner Log-Ausgabe jedenfalls ein Recording-Start-Event.
- Sollten die Player-Events theoretisch auch in der HandleKernelSignal-Methode ankommen? Bzw. was muss ich tun, damit ich auch die Player-Events erhalte?
- Kann ich da was bei der ADTF Config (z.B. Filter-Prios) falsch gemacht haben?
Lösung
Die Player Events bekommst du vom IPlayer Service direkt. Du musst also IEventSink implementieren und dich dann direkt beim IPlayer Service registrieren:
#include <plugins/player_intf.h>
object_ptr<adtf::services::IPlayer> pPlayback;
RETURN_IF_FAILED(_runtime->GetObject(pPlayback));
object_ptr<IEventSource> pEventSource = pPlayback;
pEventSource->RegisterEventSink(*this);
tResult HandleEvent(const IEventSource& oSource, const tVoid* pvEventData) override
{
const auto pEvent = static_cast<const IPlayer::tEvent*>(pvEventData);
// ...
RETURN_NOERROR;
}
Updated by hidden almost 3 years ago
- Status changed from New to In Progress
- Customer set to AUDI
- Topic set to ADTF::Player
Updated by hidden almost 3 years ago
Hi,
ich bin mittlerweile soweit, dass man PlayerEvents anscheinend nicht über den Kernel sondern Playback-Service abgreifen müsste.
Ich habe in der Doku die Methode HandleEvent() gefunden: https://support.digitalwerk.net/adtf/v3/adtf_html/classadtf_1_1ucom_1_1ant_1_1_i_event_sink.html#a9295727e519d1f9b655b71d5ed789661
Allerdings ist mir noch unklar, wie ich meinen Filter beim Player registriere und wie ich pvEventData auf IPlayer::tEvent caste.
Die Klasse IPlayer gibt es bei mir nicht unter adtf::service::ant:IPlayer, obwohl sie laut Doku dort aufgehängt sein müsste.
Brauche ich da ein sepziellen Include?
VG
Claudia
Updated by hidden almost 3 years ago
Hi Claudia,
die Player Events bekommst du vom IPlayer Service direkt. Du musst also IEventSink implementieren und dich dann direkt beim IPlayer Service registrieren:
object_ptr<adtf::services::IPlayer> pPlayback;
RETURN_IF_FAILED(_runtime->GetObject(pPlayback));
object_ptr<IEventSource> pEventSource = pPlayback;
pEventSource->RegisterEventSink(*this);
tResult HandleEvent(const IEventSource& oSource, const tVoid* pvEventData) override
{
const auto pEvent = static_cast<const IPlayer::tEvent*>(pvEventData);
...
RETURN_NOERROR;
}
Zu den Recorder Events kann ich jetzt nicht viel sagen, außer, dass die schon alle über den Kernel kommen sollten.
Grüße,
Martin
Updated by hidden almost 3 years ago
Du musst noch den header
#include <plugins/player_intf.h>
includieren.
Kommst du damit weiter?
Updated by hidden almost 3 years ago
Hi Martin,
mit dem richtigen Include hat es jetzt auch geklappt - Dankeschön :)
Damit kann das Ticket dann auch schon wieder geschlossen werden.
Viele Grüße
Claudia
Updated by hidden almost 3 years ago
- Status changed from In Progress to To Be Closed
- Resolution set to Solved Issue
Gerne!
Updated by hidden almost 3 years ago
- Project changed from 4 to Public Support
- Subject changed from Abfangen von Player Events to Receive events from player
- Description updated (diff)