Обработка потери пакетов RTP

Я пишу программу буфера дрожания в c для обработки пакетов rtp. Здесь RTP использует UDP для транспортировки, поэтому соединение ненадежно, и пакеты не будут в порядке, а также будет некоторая потеря пакетов. В случае изменения порядка пакетов я упорядочу их по порядковому номеру (в информации заголовка RTP), но как я могу обработать или компенсировать потерю пакетов? (потому что потеря пакетов не в моих руках)

Примечание. Я обрабатываю h264 в качестве полезной нагрузки, и они попросили меня использовать только заголовок RTP.


person Techky    schedule 27.03.2015    source источник
comment
Вы спрашиваете, как закодировать обработку потери пакетов или какие стратегии вы можете использовать для обработки потери пакетов (например, заполнить комфортным шумом, воспроизвести предыдущие пакеты, постепенное появление / исчезновение и т. д.?)   -  person nos    schedule 27.03.2015
comment
Будет лучше для меня, если вы скажете, как закодировать потерю обработки пакета? если это сложно, расскажите о некоторых лучших методах или стратегиях, я поменяю это на кодирование, поняв это.   -  person Techky    schedule 27.03.2015
comment
Тогда это, вероятно, выходит за рамки простого ответа - это будет много кода, и это нетривиально   -  person nos    schedule 27.03.2015
comment
Находится ли сервер, создающий пакеты RTP, под вашим контролем? Существуют некоторые методы на стороне сервера, которые могут уменьшить потерю пакетов.   -  person Joel Cunningham    schedule 28.03.2015
comment
@nos извините за поздний ответ, все в порядке, мне не нужен код, просто предложите мне несколько хороших методов (как вы упомянули выше, заполните комфортный шум, воспроизведите предыдущие пакеты, постепенное появление / исчезновение и т. д.), которые могут помочь мне реализовать код (по крайней мере, некоторые Полезные ссылки)   -  person Techky    schedule 30.03.2015
comment
@JoelCunningham Нет, создание RTP-пакета не находится под моим контролем, и моя работа заключается только в том, чтобы получить RTP-пакет с сервера и манипулировать им таким образом, чтобы уменьшить дрожание в нем (например, путем обработки потери пакетов, дублирования пакетов, упорядочения пакетов и т. д. .)   -  person Techky    schedule 30.03.2015
comment
В книге Колина Перкинса RTP есть две соответствующие главы: "Скрытие ошибок" и "Исправление ошибок". Я бы порекомендовал получить книгу, это один из лучших ресурсов RTP.   -  person Joel Cunningham    schedule 03.04.2015
comment
@JoelCunningham, спасибо^_^   -  person Techky    schedule 03.04.2015


Ответы (2)


Вы не можете. Вы ничего не можете сделать, кроме как сфабриковать потерянные данные.

Надеемся, что фактическое кодирование, используемое в пакетах RTP, может помочь фактическому получателю справиться с потерей пакетов немного лучше. За исключением того, что вы декодируете полезную нагрузку RTP и действуете как кодек для полезной нагрузки, вы ничего не можете сделать, чего кодек все равно не сделает.

В H.264 каждый пакет RTP будет содержать либо целую единицу NAL, фрагмент единицы NAL или, возможно, несколько единиц NAL. Кодек H.264 будет ожидать, что ему будет передан поток блоков NAL, и ИТ-специалист будет знать, что делать в случае потери пакетов.

person Len Holgate    schedule 27.03.2015

Короче говоря, как говорили и другие, вы не можете.

Если пакеты теряются случайным образом после равномерного распределения, вы можете защитить свой поток, добавив в него FEC.

person Balázs Kreith    schedule 18.02.2019