Phonon+Radiostreams Phonon findet zwar, aber nicht alle ID3

Alles rund um die Programmierung mit Qt
Antworten
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Phonon+Radiostreams Phonon findet zwar, aber nicht alle ID3

Beitrag 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?
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag 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 :-)
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag 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...
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Beitrag von Herzogswalder »

Laut Doku muß metaData als QMultiMap<QString,QString> deklariert sein.
Vielleicht ist das der Fehler in deinem Source.
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag 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...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Schau doch mal wie's der Amarok macht!
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Beitrag von Herzogswalder »

Wenn du nicht auf Phonon angewiesen, kann ich dir BASS empfehlen.
http://www.un4seen.com
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag 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 :) )...
listeman
Beiträge: 74
Registriert: 19. Mai 2009 13:54
Kontaktdaten:

Beitrag 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?
Antworten