2016-06-09 18 views
0

Ich streame Audio in C# über Naudio läuft in einem separaten Thread über eine ThreadSafe-Warteschlange gespeist. Die Eingabe in naudio ist ein Stream, der aus 16 Bit PCM-Daten besteht, AAC, die von libfaad2 mit PInvoke decodiert wurden, da ich keinen nativen C# -AAC-Decoder fand. Die Daten bestehen aus einem kontinuierlichen Datenstrom, der aus Live- "dab plus" -Senderquellen stammt.AAC und naudio Abtastrate stimmen nicht überein

Das funktioniert alles sehr schön und glatt, mit einer kleinen Ausnahme. Die Datenraten, die vom AAC-Decoder und von naudio gemeldet werden, stimmen nicht überein. Der libfaad2-Decoder meldet beispielsweise eine Abtastrate von 48000 Hz, nachdem er mit den Metadaten der Sendestation initialisiert wurde. NAudio - initialisiert mit dieser Abtastrate - erzeugt nach kurzer Zeit eine "Buffer full" -Ausnahme (30 Sek. Mit 512000 Bytes Naudipuffer, die Timeoutskalierung linear mit der Puffergröße skaliert).

Die Option "DiscardOnBufferOverflow" von naudio ist keine praktikable Lösung des Problems, da es natürlich zu hörbaren Artefakten nach diesem Ereignis führt. Wenn ich für nAudio die berichteten 48000 Hz um 3000 erhöhe, d. H. Das naudio mit 51000 Hz initialisiere, läuft es fast eine Stunde vor der Pufferüberlauf-Ausnahme.

Ich habe auch eine Drei-Minuten-Datei mit naudio bei 48kHz aufgenommen, klingt perfekt.

Meine Frage: Was könnte der Grund für die fehlende Bitrate zwischen naudio und dem AAC-Decoder beim Streaming sein? Ich würde gerne den Grund dafür wissen, da ich den aktuellen Hack nicht implementiert lassen möchte.

Antwort

0

Die Abtastrate wird in Hz und nicht in bps gemessen. Sind Sie sicher, dass der AAC 48kHz oder vielleicht 48kbps beträgt? In diesem Fall könnte die Abtastrate 44,1 kHz betragen, was den Unterschied erklären könnte.

um dies zu debuggen, würde ich etwas von der Ausgabe von libfaad2 in eine 48kHz WAV-Datei schreiben und prüfen, ob es mit der erwarteten Geschwindigkeit abgespielt wird.

+0

Mark, vielen Dank für Ihre schnelle Antwort! Entschuldigung für die Hz-bps-Verwirrung. Natürlich sind die Abtastraten Hz. Ich habe die Frage entsprechend bearbeitet. Das dab plus-System erzeugt vier mögliche Abtastraten, 16, 24, 32 und 48 kHz (siehe Standard ETSI TS 102 563 V 1.2.1 von 2010), die verwendete wird in den Metadaten des Streams angegeben (siehe Tabelle 2) im Dokument). Wie ich in meiner Frage geschrieben habe, hatte ich bereits Ihren Vorschlag zur Aufnahme einer Datei mit naudio bei 48 kHz Samplingrate erkannt: Die Datei enthält 3 1/2 Minuten perfekter klassischer Musik ohne hörbare Fehler. – josh

+0

könnte es einfach sein, dass die NAudio-Wiedergabe hinterherhinkt und Stille eingefügt wird, wodurch der Puffer langsam überfüllt wird? Nur eine andere Erklärung, die mir einfällt, ist, dass das Wiedergabegerät nicht wirklich mit 48 kHz arbeitet. –

+0

Falls die naudio Stille eingefügt wird, würde dies nicht als Lücken im Stream angezeigt werden? Und eine Ungenauigkeit im Wiedergabegerät (neuer Laptop Quadcore i7) sollte auch beim Abspielen der Datei mit dem Win10 Media Player auftauchen? Ich werde versuchen, die aac-Ausgabe in eine Datei von ausreichender Größe aufzuzeichnen und es von dieser Datei zu naudio in einer isolierten Anwendung zu streamen. Wahrscheinlich vermuten Sie, dass es sich um ein Echtzeitproblem handelt, was möglicherweise in die richtige Richtung weist. – josh

Verwandte Themen