В конце концов мы нашли ответ в исходном коде Live555 (в частности, MP3Internals.cpp).
По сути, вам нужно прочитать part_2_3_lengths для каждой гранулы в каждом канале, а затем вычислить их.
Грубо говоря:
uint numBits = 0;
for (int channelIdx = 0; channelIdx < isMono ? 1 : 2; channelIdx ++)
{
for (int granuleIdx = 0; granuleIdx < 2; granuleIdx ++)
{
numBits += SideInfoGranules[channelIdx][granuleIdx].Part_2_3_Length;
}
}
// Now maths this number. I don't know where the magic constants 7 and 8 come from though.
var aduDataSize = (numBits + 7) / 8;
Синтаксический анализ part_2_3_length слишком сложен для объяснения здесь, но он хорошо объяснен в getSideInfo1
и getSideInfo2
методах MP3Internals.cpp (например здесь );
Еще не изучили его к глубоко моему сам, но при оглядывании о проекте, который я в настоящее время делаю, я приехал accross LipeRMI.
Вы могли бы хотеть взглянуть на него, поскольку это приспособило к использованию Интернета и упоминаниям "тень клиенты таким способом, которым они могут быть позади локальной сети, маршрутизатора или брандмауэра";
Править:
Помнивший другая реализация, с которой я столкнулся некоторое время назад, назвала Голубей RMI 1.0: Решение для Java проблема с брандмауэром RMI Вы могли бы хотеть взглянуть на ту также.