Я думаю, что у меня довольно фундаментальная проблема с математическим расчетом пропускной способности.
Я работаю в сфере потокового видео, и клиенты часто задают мне знаменитый вопрос: «Сколько потоков я могу отправить одновременно?»
Мой ответ неизменно один и тот же:
Допустим, у вас 1024 кгнемного в секунду поток. Это маловероятно, потому что это исключительно качественный HD-поток. В любом случае, если у вас 100 мега-немного в секунду, это означает, что с помощью простых математических расчетов вы теоретически сможете выдавать 100 таких потоков чрезвычайно высокого качества одновременно.
... на что я всегда получаю ответ типа "Всего 100 потоков!?!?!"
Я не знаю, как ответить. Точна ли моя математика? Клиенты в дикой природе часто видят гораздо больше одновременных пользователей, чем это, с высококачественными потоками. Я что-то упускаю в математике?
Технически, учитывая единицы в вашем вопросе, ваша математика неверна. Однако это больше семантически неправильно, поскольку это может быть истолковано как правильное в зависимости от того, как определить единицы.
Большая путаница сводится к используемому устройству. А килобит против кибибита. А мегабит против мебибита.
См. Страницу Википедии на Единицы скорости передачи данных для более подробной информации.
Кроме того, я предполагаю на проводе скорости передачи данных для потока. Если ваш медиапоток - то, что выводит кодировщик, составляет 1024 килобита в секунду, скорость передачи данных по проводам (RTP, UDP, IP, служебные данные Ethernet) будет больше 1024 килобит в секунду. Вы должны учитывать накладные расходы, если хотите быть точными в реальном мире. Однако приведенный ниже пример иллюстрирует математику независимо от выходной скорости кодировщика.
В нашем примере я предполагаю, что на проводе скорость передачи данных составляет 1024 килобита в секунду, что означает, что выходной сигнал кодера составляет менее 1024 килобит в секунду.
1024 килобит в секунду на проводе скорость передачи данных составляет 1 024 000 бит в секунду. Линия со скоростью 100 мегабит в секунду - это 100000000 бит в секунду.
100000000 бит / с / 1024000 бит / с дает 97 возможных «потоки / скорость передачи данных» 1024 килобит в секунду на 100-мегабитном канале.
Как всегда заикался мой учитель физики: Единицы! Единицы! Единицы!
Нет, ваша математика точна. 1024 килобита - это один мегабит. А точнее 1024 кибибит это один мебибит. Но да, 1 мебибит - это много пропускной способности для одного потока.
Ваша математика достаточно близка. Причина, по которой люди запускают больше потоков в дикой природе, вероятно, заключается в том, что некоторые клиенты фактически не успевают за потоками. Если ваши клиенты предоставляют отчеты о приеме пакетов, вы должны обнаружить, что среднее количество байтов, получаемых клиентами в секунду, просто не может превышать количество байтов, которое может удерживать исходящая линия.
Есть еще один аспект, о котором нужно позаботиться. Обычно - когда мы получаем около 100 Мбит / с, мы говорим об Ethernet. Все данные, которые отправляются через Ethernet, разделяются на пакеты. Самый большой пакет Ethernet (MTU - Maximum Transmission Unit) по умолчанию равен 1518. Из этого размера вы должны вычесть заголовки:
Таким образом, всего у вас есть 58 байтов заголовка и 1460 используемых байтов для передачи данных. Это еще один фактор ~ 96,2%.