2017-10-17 2 views
0

Funktion opus_encode benötigt Rahmengröße als Parameter. In api doc heißt es, die Puffergröße sei die Anzahl der Samples pro Kanal. Aber wie kann ich bestimmen, welche Größe ich verwenden soll?Wie kann ich die Opus-Codepuffergröße bestätigen?

Ich benutze Opus in Android. Abtastrate 16k, Puffergröße 1280. Wenn ich beim Codieren und Decodieren die Framegröße auf 640 festlege, beträgt die Länge der dekodierten Datei die Hälfte des rohen Pixels. Wenn ich auf 960 setze, ist die dekodierte Datei 2/3 des rohen PCM. aber auf 1280 eingestellt, wird encode -1 als arg error zurückgeben.

Wenn ich coole Bearbeitung verwende, um decodiert zu spielen, ist es schneller als rohe PCM.

es muss etwas über meine Parameter sein. Kann jemand mit Opus mir helfen? Vielen Dank.

Antwort

1

Opus kodieren Definition:

opus_int32 opus_encode (OpusEncoder *   st, 
          const opus_int16 * pcm, 
          int     frame_size, 
          unsigned char *  data, 
          opus_int32   max_data_bytes) 

Wenn Sie angeben frame_size Sie es auf die Anzahl der Proben pro Kanal zur Verfügung in pcm Puffer einstellen müssen.

Der OPUS-Codec unterstützt Stereo- und Monosignale und die entsprechende Konfiguration des Encoders ist channels Parameter, den Sie angeben, wenn Sie die Funktion opus_encoder_create aufrufen.

Sie müssen auch wissen, über unterstützte Rahmengrößen von OPUS-Codec. Es unterstützt Frames mit: 2,5, 5, 10, 20, 40 oder 60 ms Audiodaten.

Eine Millisekunde Audio mit 16 kHz ist 16 Samples (16000/1000). Also für mono Sie frame_size eingestellt angeben:

  • 16 * 2,5 = 40 (sehr selten)
  • 16 * 5 = 80 (selten)
  • 16 * 10 = 160
  • 16 * 20 = 320
  • 16 * 40 = 640
  • 16 * 60 = 960

OPUS-Codec wird weitere Größen nicht akzeptieren. Der beste Weg, die Puffergröße von 1280 Samples zu bewältigen, ist die Aufteilung auf vier 20-ms-Pakete oder zwei 40-ms-Pakete.

So codieren Sie zwei oder vier Pakete von einem Puffer aus Puffer empfangen.

Verwandte Themen