принцип технологии webrtc_webrtc проект с открытым исходным кодом
принцип технологии webrtc_webrtc проект с открытым исходным кодом

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

1. Обзор

Существует три метода упаковки избыточности webrtc: Red (rfc2198), Ulpfec (rfc5109) и Flexfec (черновик). Среди них Red и Ulpfec следует использовать парами.

2. Ред ФЭК

Просто упакуйте старые сообщения в новые пакеты. Как показано на рисунке ниже, когда избыточность равна 1, ситуация с пакетом RFC2198:

Этот метод редко используется в области аудио и видео, поскольку избыточный пакет может защитить только определенное сообщение. Этот метод потребляет большую полосу пропускания, имеет ограниченные возможности восстановления и очень экономичен. Только ранний сбор факсов T38 и номеров RFC2833 будет использовать этот протокол, поскольку объем данных для сбора факсов и номеров относительно невелик.

Webrtc утверждает, что используется избыточность RFC2198. На самом деле он просто заимствует формат инкапсуляции этого протокола для инкапсуляции избыточных сообщений FEC.

3. Улп ФЭК

Подробное введение можетссылка:webrtc Метод QOS 2.2 (ulpfec введение в rfc5109)_блог CrystalShaw-CSDN blog_ulpfec

XOR — группа из M сообщений для генерации N (N — избыточность FEC) сообщений FEC и их упаковки. Если какие-либо N пакетов в этой группе сообщений потеряны, их можно восстановить с помощью этой группы сообщений (M-N) + избыточных пакетов FEC. Объем защиты значительно расширен, чем у простого RFC2198. Например, на схеме ниже: D — медиа-пакет, R — избыточный пакет, а избыточность, показанная на этом рисунке, равна 2.

1. Схема упаковки на стороне отправки

2. Диаграмма потери сетевых пакетов

3. Схема восстановления потерянных пакетов

webrtc выбирает шаблон XOR через таблицу PacketMaskTable. Таблица PacketMaskTable имеет две модели: непрерывная потеря пакетов (kFecMaskBursty, kPacketMaskBurstyTbl) и случайная потеря пакетов (kFecMaskRandom, kPacketMaskRandomTbl).

Теоретически, webrtc может адаптивно выбирать kFecMaskRandom или kFecMaskBursty посредством обратной связи, связанной со степенью потерь и беспорядка, что дает лучшие результаты. Но жаль, что функция webrtc отсутствует и по умолчанию используется модель случайной потери пакетов.

4. Флекс ФЭК

Подобно реализации UlpFEC, ULPFEC выполняет XOR только для одномерных массивов строк. FlexFec более гибок и представляет алгоритм чередования, который может выполнять XOR для одномерных строк, столбцов и двумерных массивов.

1. 1D строка исключающее ИЛИ

2. XOR столбца 1D

3. 2D XOR строк и столбцов

Эта часть все еще является черновиком, и я не вдавался в подробности того, как выбрать код режима XOR. Будет добавлено позже.

Следует отметить, что включение FlexFEC необходимо одновременно с этим включить. WebRTC-FlexFEC-03/Enabled && WebRTC-FlexFEC-03-Advertised/Enabled В противном случае произойдет аварийное исключение.

5. Краткое описание алгоритма FEC

FEC — это алгоритм прямого исправления ошибок в области беспроводной передачи данных. При поиске информации в Интернете я часто путаюсь в алгоритмах беспроводной связи. После долгих исследований я до сих пор не знаю, какое это имеет отношение к передаче видео.

В области беспроводной передачи данных существует три основных алгоритма FEC: TURBO, LDPC и POLAR.

Алгоритмы FEC в области передачи аудио и видео включают в себя следующее:

1. В опус-аудио webrtc используется внутриполосное FEC и чередующееся кодирование.

2. Видео ulpfec Webrtc использует XOR

3. Алгоритм Рида-Соломона относительно сложен и теоретически обладает относительно высокой способностью к восстановлению данных.

6. анализ кода webrtc

1) Включить FEC

webrtc по умолчанию включает FEC Red+Ulp. Flex находится только на экспериментальной стадии и пока не может быть официально использован.

2) Пакет ФЭК

  • Отправка избыточной обработки сообщений

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose