Проблема: пакеты могут прийти не в том порядке, что были отправлены, пакеты могут быть потеряны.
У rpt есть sequence это порядковый номер пакета размером два байта (uint16), при достижении максимального значения 65535, начинается с 0. т.е. счетчик цикличен.
Есть timestamp (uint32) это "временной интервал" видео потока, обычно он увеличивается на 90000.
Как я вижу решение этой задачи:
- получаем пакет
- определяем правильная последовательность или нет
- если правильная отправляем в декодировщик
- если не правильная сохраняем в хранилище
- решаем ждем правильный пакет или перестаем ждать и отправляем все пакеты в декодировщик
Еще есть механизмы восстановления пакетов FEC (forward error correction) и механизм запроса повторения пакета (NACK).
- получаем пакет
- определяем правильная последовательность или нет
- если правильная отправляем в декодировщик
- если не правильная сохраняем в хранилище
- пытаемся восстановить
- если не восстановили, запрос на повторную передачу
- если восстановили отправляем в декодировщик
- проверяем есть ли следующий пакет в хранилище, если есть проверяем следующий
- решаем ждем правильный пакет или перестаем ждать и отправляем все пакеты в декодировщик
- когда отправлять nack, если пришел не следующий пакет, отправляем нак для следующего, но нужно понимать пока нет следующего для каких еще отправлять