Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Существует три метода упаковки избыточности webrtc: Red (rfc2198), Ulpfec (rfc5109) и Flexfec (черновик). Среди них Red и Ulpfec следует использовать парами.
Просто упакуйте старые сообщения в новые пакеты. Как показано на рисунке ниже, когда избыточность равна 1, ситуация с пакетом RFC2198:
Этот метод редко используется в области аудио и видео, поскольку избыточный пакет может защитить только определенное сообщение. Этот метод потребляет большую полосу пропускания, имеет ограниченные возможности восстановления и очень экономичен. Только ранний сбор факсов T38 и номеров RFC2833 будет использовать этот протокол, поскольку объем данных для сбора факсов и номеров относительно невелик.
Webrtc утверждает, что используется избыточность RFC2198. На самом деле он просто заимствует формат инкапсуляции этого протокола для инкапсуляции избыточных сообщений FEC.
Подробное введение можетссылка:webrtc Метод QOS 2.2 (ulpfec введение в rfc5109)_блог CrystalShaw-CSDN blog_ulpfec
XOR — группа из M сообщений для генерации N (N — избыточность FEC) сообщений FEC и их упаковки. Если какие-либо N пакетов в этой группе сообщений потеряны, их можно восстановить с помощью этой группы сообщений (M-N) + избыточных пакетов FEC. Объем защиты значительно расширен, чем у простого RFC2198. Например, на схеме ниже: D — медиа-пакет, R — избыточный пакет, а избыточность, показанная на этом рисунке, равна 2.
webrtc выбирает шаблон XOR через таблицу PacketMaskTable. Таблица PacketMaskTable имеет две модели: непрерывная потеря пакетов (kFecMaskBursty, kPacketMaskBurstyTbl) и случайная потеря пакетов (kFecMaskRandom, kPacketMaskRandomTbl).
Теоретически, webrtc может адаптивно выбирать kFecMaskRandom или kFecMaskBursty посредством обратной связи, связанной со степенью потерь и беспорядка, что дает лучшие результаты. Но жаль, что функция webrtc отсутствует и по умолчанию используется модель случайной потери пакетов.
Подобно реализации UlpFEC, ULPFEC выполняет XOR только для одномерных массивов строк. FlexFec более гибок и представляет алгоритм чередования, который может выполнять XOR для одномерных строк, столбцов и двумерных массивов.
Эта часть все еще является черновиком, и я не вдавался в подробности того, как выбрать код режима XOR. Будет добавлено позже.
Следует отметить, что включение FlexFEC необходимо одновременно с этим включить. WebRTC-FlexFEC-03/Enabled && WebRTC-FlexFEC-03-Advertised/Enabled В противном случае произойдет аварийное исключение.
FEC — это алгоритм прямого исправления ошибок в области беспроводной передачи данных. При поиске информации в Интернете я часто путаюсь в алгоритмах беспроводной связи. После долгих исследований я до сих пор не знаю, какое это имеет отношение к передаче видео.
В области беспроводной передачи данных существует три основных алгоритма FEC: TURBO, LDPC и POLAR.
Алгоритмы FEC в области передачи аудио и видео включают в себя следующее:
1. В опус-аудио webrtc используется внутриполосное FEC и чередующееся кодирование.
2. Видео ulpfec Webrtc использует XOR
3. Алгоритм Рида-Соломона относительно сложен и теоретически обладает относительно высокой способностью к восстановлению данных.
webrtc по умолчанию включает FEC Red+Ulp. Flex находится только на экспериментальной стадии и пока не может быть официально использован.
RTPSenderVideo::SendVideo. Когда кодер поддерживает временное расслоение, избыточными могут быть только видеоданные уровня 0. В противном случае все видеоданные будут избыточны. Избыточность динамически регулируется в зависимости от скорости потери пакетов.
BitrateAllocator::OnNetworkChanged ->VideoSendStreamImpl::OnBitrateUpdated ->ProtectionBitrateCalculator::SetTargetRates ->media_optimization::VCMLossProtectionLogic::UpdateMethod ->media_optimization::VCMNackFecMethod::UpdateParameters
VCMNackFecMethod::ComputeMaxFramesFec
ForwardErrorCorrection::NumFecPackets хранит количество медиа-пакетов * коэффициент защиты.
VCMFecMethod::ProtectionFactor
ForwardErrorCorrection::EncodeFec
ForwardErrorCorrection::GenerateFecPayloads
Примечание:
webrtc по умолчанию отключает функцию ULPFEC в кодировке H264, но FlexFEC можно включить
MaybeCreateFecGenerator
->ShouldDisableRedAndUlpfec
->PayloadTypeSupportsSkippingFecPackets
RED (REDundant coding) – WebRTC Glossary
ULPFEC (Uneven Level Protection Forward Error Correction) – WebRTC Glossary
webrtc fec – Очевидно, это Вуконг – Blog Park
Алгоритм FEC алгоритм_cloudfly_cn blog-CSDN blog_fec
Интерпретация маски ulp-fec, flex-fec, блог table_zhenfei2017 — блог CSDN(Введение резервирования и резервированияMaskпараметр)
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/169598.html Исходная ссылка: https://javaforall.cn