Какое значение использовать для поля max_data_bytes кодировщика Libopus?

В настоящее время я использую 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

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

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


person Jeff Gong    schedule 15.04.2019    source источник


Ответы (1)


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

В версии 1.1.4 кодировщик не объединяет пакеты, и верхний предел должен составлять 1275 байт. Для декодера, если используется репакетайзер, вы можете найти какой-то пакет размером до 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
person Damiano    schedule 16.04.2019