Какое значение использовать для поля max_data_bytes кодировщика Libopus? - PullRequest
0 голосов
/ 16 апреля 2019

В настоящее время я использую libopus для кодирования имеющегося у меня звука.

При ознакомлении с документацией о том, как использовать кодировщик, один из аргументов функции кодирования принимаетэто max_data_bytes, opus_int32, который имеет следующую документацию:

Size of the allocated memory for the output payload. May be used to impose an upper limit on the instant bitrate, but should not be used as the only bitrate control

К сожалению, я не смог получить много из этого определения относительно того, как установитьверхний размер и отношение этого аргумента к битрейту.Я попытался обратиться к некоторым из приведенных примеров, таким как this или this , но оба имеют аргумент, определенный как некоторую константу без большой информации.

Может ли кто-нибудь помочь мне понятьопределение этого значения и какое число мне может быть интересно использовать для него?Спасибо!

1 Ответ

1 голос
/ 16 апреля 2019

Зависит от версии датчика и параметров кодирования.

В 1.1.4 кодер не объединяет пакеты, и верхний предел должен составлять 1275 байт. Для декодера, если используется repacketizer, вы можете найти какой-нибудь пакет размером до 3 * 1275.

В последней версии все может измениться, я вполне уверен, что репакетизатор как-то слился в кодировщике. Посмотрите в RFC.

Просто вставьте сюда несколько моих заметок за полтора года назад ...

//Max opus frame size if 1275 as from RFC6716.

//If sample <= 20ms opus_encode return always an one frame packet.
//If celt is used and sample is 40 or 60ms, two or three frames packet is generated as max celt frame size is 20ms
//in this very specific case, the max packet size is multiplied by 2 or 3 respectively
...