Seite 1 von 1

Phonon+Radiostreams Phonon findet zwar, aber nicht alle ID3

Verfasst: 14. November 2009 12:31
von listeman
Hallo Leutz,

hoffe, bin diesmal im richtigen Unterforum

Beim Programmieren eines Radiorippers mit streamripper benutze ich Phonon. Es funktioniert einwandfrei.
Jetzt möchte ich allerdings beim einfachen Abspielen eines Streams ohne Aufnahme die ID3-Daten des Streams ermitteln.
Folgende Abfrage bringt zwar allerhand ID3-Tags, aber nicht die gewünschten (Titel,Artist). Streamripper findet diese aber...
Zudem wird das metaDataChanged()-Signal nur beim Start der Aufnahme ausgelöst. Wenn während des Abspielens das Lied und somit auch die ID3-Infos ändern, dann wird dieses Signal NICHT ausgelöst.

Poste mal den fraglichen Code:

mainwindow.cpp:

Code: Alles auswählen

musikplayer = new Phonon::MediaObject(this);
musikausgabe = new Phonon::AudioOutput(Phonon::MusicCategory, this);
Phonon::createPath(musikplayer, musikausgabe);
(...)
connect(musikplayer, SIGNAL(metaDataChanged()), this, SLOT(metaInfoGeaendert()));
(...)
void MainWindow::metaInfoGeaendert() {
    QMap<QString,QString> metaData = musikplayer->metaData();
    ui->radios->item(isPlay,3)->setText(metaData.value("ARTIST"));
    ui->radios->item(isPlay,4)->setText(metaData.value("TITLE"));
}
Die beiden Felder Artist und Title bleiben jedoch leer. Folgende Abfrage:

Code: Alles auswählen

void MainWindow::metaInfoGeaendert() {

    QMap<QString,QString> metaData = musikplayer->metaData();

    QStringList keys = metaData.keys();
    QString k;
    for(int i = 0; i < keys.size(); ++i) {
        k += keys.at(i) + "\n";
    }
    QMessageBox::information(this,"keys",k);

    QStringList values = metaData.values();
    QString v;
    for(int i = 0; i < values.size(); ++i) {
        v += values.at(i) + "\n";
    }
    QMessageBox::information(this,"values",v);

    ui->radios->item(0,3)->setText(metaData.value("ARTIST"));
    ui->radios->item(0,4)->setText(metaData.value("TITLE"));

}
bringt alle verfügbaren Daten, jedoch scheinen die gewollten nicht vorhanden zu sein.

Wie erhält streamripper denn diese Daten?

Verfasst: 14. November 2009 13:47
von listeman
Okay, hab in den FAQs von streamripper die (für mich neue) Info gefunden, dass die Metadaten eines Radiostreams in so genannten Meta-Intervallen gesendet werden.

Wie kann ich aber dann auf die zugreifen? Werd mal noch nen bissel weiter suchen, aber wenn jemand ne Idee hat, wäre ich sehr dankbar :-)

Verfasst: 18. November 2009 18:27
von listeman
Niemand ne Idee? Meine Suche hat mich nicht weiter gebracht...
Mein Problem ist weiterhin, dass ich nicht weiß, wie ich per Phonon das Meta Intervall und die darin enthaltenen Informationen bekommen kann...

Verfasst: 18. November 2009 20:19
von Herzogswalder
Laut Doku muß metaData als QMultiMap<QString,QString> deklariert sein.
Vielleicht ist das der Fehler in deinem Source.

Verfasst: 18. November 2009 22:28
von listeman
Hm, das bringt keinen Unterschied...

Ich glaube, das Problem ist folgendes:
Mit "musikplayer->metaData()" bekomme ich die generellen Metadaten des Streams (wie Audio-Codec, Organisation, etc.) in einem Q(Multi)Map (die erhalte ich auch mit meinem Code).
Die Metadaten der einzelnen Songs jedoch werden in dem schon erwähnten Meta-Intervall gesendet. Ich müsste also das irgendwie abfangen und auslesen... das ist aber das Problem, wie?

Wäre echt super, wenn jemand ne Idee hätte, da ich das recht dringend bräuchte :-) Es muss auch nicht unbedingt mit Phonon sein...

Verfasst: 19. November 2009 06:48
von AuE
Schau doch mal wie's der Amarok macht!

Verfasst: 19. November 2009 09:35
von Herzogswalder
Wenn du nicht auf Phonon angewiesen, kann ich dir BASS empfehlen.
http://www.un4seen.com

Verfasst: 21. November 2009 12:07
von listeman
Okay, hab mal den Source-Code von Amarok angeschaut. Es gibt da nen paar Dateien, die für das Empfangen von Stream-Metadaten verantwortlich zu sein scheinen.
Jedoch versteh ich nicht so ganz, wie die das machen... es übersteigt etwas meine Kenntnisse...


Hm, BASS sieht interessant aus... wenn es mit Phonon wirklich nicht möglich sein wird, probier ich es glaub ich mal aus (eine Lösung mit Phonon wäre mir natürlich lieber :) )...

Verfasst: 24. November 2009 03:23
von listeman
Okay, die Lösung lautet gstreamer!! Amarok benutzt es, und es ist in der Lage die Meta-Daten gesendet im Meta-Intervall zu bekommen (-> http://gstreamer.freedesktop.org/data/d ... adata.html)

Die Dokumentation auf gstreamer.freedesktop.org ist allerdings recht komplex und kompliziert... sobald ich die nächsten Tage etwas Zeit habe, werde ich das mal durcharbeiten... oder kennt jemand vllt ein einfacheres HowTo?