Welche Art von Puffer sollte ich für ein Einweg-Streaming-Audiogerät implementieren?

8

Ich arbeite an einem Projekt, bei dem Audiodaten auf ein Gerät gestreamt werden. Die Audiodaten werden über ein Opus codiert und mit jeweils 20 ms Nutzlast gestreamt. Das Streaming erfolgt über TCP, um Paketverluste vollständig zu vermeiden. Das Ziel des Streamings ist es, dem Live-Audio-Streaming so nahe wie möglich zu kommen, ohne Audioverlust oder Jitter.

Derzeit, was bei langsameren Internetverbindungen passiert, kann das Audio ein wenig zittern. Ich verwende derzeit keine Puffer, aber das Ziel ist es, so nah wie möglich am "Live-Streaming" zu sein und gleichzeitig den Jitter zu beseitigen.

Ich habe mich mit Jitterpuffern befasst, und es scheint, dass Jitterpuffer auch Verzögerungen an beiden Enden verarbeiten sollen, damit beide Enden so synchron wie möglich sind, was für meine Situation wie ein Overkill klingt. Ich befürchte, dass eine statische Puffergröße den Live-Streaming-Aspekt beeinträchtigt, wenn dies nicht erforderlich ist.

Das lässt mich also mit ein paar Fragen zurück, die alle irgendwie miteinander zusammenhängen.

  1. Was ist eine gute Methode oder ein guter Algorithmus zum Erkennen der Pufferlänge?
  2. Wie kann der Decoder auf der Empfängerseite am besten mit Daten versorgt werden? Wenn der Puffer eine bestimmte Anzahl von Millisekunden voll erreicht, werden Daten in 20-ms-Nutzdaten eingespeist?
  3. Verzögere ich das Spielen, wenn der Puffer unterfüllt ist?
  4. Wird der Puffer in Bytes oder Zeitlänge sein?

Vielen Dank!

Mikey A. Leonetti
quelle
1
Wie live muss es wirklich sein? Selbst wenn Sie einen 10-Sekunden-Puffer hätten, würde es jemand bemerken? Einige Live-TV-Sendungen verzögern sich aus Gründen der Inhaltskontrolle (z. B. Obszönität) fast so lange.
Robert Harvey
1
"Das Streaming erfolgt über TCP, um Paketverluste vollständig zu vermeiden." - TCP vermeidet keinen Paketverlust, sondern umgeht einen Paketverlust.
user253751

Antworten:

1

Es hängt ganz vom Durchsatz Ihres Netzwerks ab - wenn Sie eine Sekunde Daten füllen können, ist das alles, was Sie brauchen! Natürlich müssen Sie bestimmen, wie lange Ihr Netzwerk stottern und den Puffer nicht füllen wird. Testen Sie es und sehen Sie.

Andernfalls ist es möglicherweise einfacher, die Puffergröße zu konfigurieren. Schnelle Netzwerke können einen Sekundenpuffer haben (niemand wird 1 Sekunde nach der Aufnahme Audio bemerken) und langsame Netzwerke mit hoher Latenz oder schlechtem Durchsatz können mehr Puffer erstellen. Möglicherweise können Sie die Größe Ihres Puffers während der Wiedergabe ändern, wenn er jemals vollständig geleert wird. In diesem Fall wird die Wiedergabe jedoch wahrscheinlich ständig stottern.

Im Allgemeinen verzögern Sie die Wiedergabe nur, wenn der Puffer vollständig geleert ist. Es macht keinen Sinn, einen Puffer zu haben, wenn Sie ihn nicht verwenden.

Wenn Ihr Audio 20ms Pakete ist, dann Größe == Zeit.

gbjbaanb
quelle