Инструкции по архитектуре службы транскодирования видео
Инструкции по архитектуре службы транскодирования видео

Определение требований

Сервис транскодирования видео — фоновый сервис с возможностью конвертировать видео с высоким битрейтом в видео с низким битрейтом и конвертировать видео в разные форматы кодирования;

Определение спецификации

Показатели эффективности:

Показатели пропускной способности и производительности

4-ядерная сетевая карта 8G 1000M Видеокарта GeForce GT 1030 или выше ЦП до 80 % Использование сети до 70 %

Маршрут 100 720P HD 2Mbps -> 640*480P 800кбит/с50 каналов 1080P HD 4Mbps  -> 640*480P Требование к задержке 800 кбит/с: задержка воспроизведения видео службы транскодирования должна быть менее 3 с.

Поддерживаемые протоколы и типы кодирования:

тип протокола

TCP/UDP

Поддержка потоковой передачи

RTP/PS/RTMP

Тип видео

H264/VP8/VP9/H265

тип аудио

AAC/OPUS/iLBC

Архитектурный дизайн

Блок-схема модуля сервиса транскодирования видео выглядит следующим образом:

Рисунок 1. Общая блок-схема

FFmpeg — это среда разработки мультимедиа, которая может выполнять функции декодирования, преобразования и потоковой передачи аудио и видео в различных форматах. Она включает в себя libavcodec, библиотеку декодера аудио и видео в нескольких проектах, libavformat, библиотеку преобразования форматов аудио и видео, и libavfilter. Инструмент фильтра, используемый для создания водяных знаков, наложения и других специальных эффектов. В то же время FFmpeg может выполнять кодирование и декодирование видео, используя ускорение графического процессора Nvidia. Согласно сравнению производительности аппаратного и программного кодирования на веб-сайте Nvidia, производительность основана на количестве кодируемых кадров в секунду в качестве эталонного показателя. , а качество основано на PSNR в качестве эталонного показателя. Вы можете видеть. С точки зрения производительности кодировщик Nvidia в 2–5 раз выше, чем x264. С точки зрения качества кодировщик Nvidia лучше, чем x264, для сценариев с быстрой потоковой передачей.

ZLMediaKit — это высокопроизводительная платформа служб потокового мультимедиа операторского уровня, основанная на C++11. Она поддерживает несколько протоколов потокового мультимедиа (RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV), поддерживает взаимное преобразование между протоколами. и он инкапсулирует модель асинхронного сетевого программирования ввода-вывода и представляет собой платформу службы потокового мультимедиа, которая очень подходит для серверов перекодирования.

Модель резьбы

Поток приема запроса на перекодирование (прослушивание фиксированного порта 3500)

Получение потока медиа-пакетов

поток перекодирования

отправка потока

ветка журнала

Проектирование диаграммы классов

Определение формата входного запроса потока приема запроса на перекодирование:

Введите запрос

{“dest_ip”:11.12.112.10,“dest_port”:9000,“socket_protocol”:”udp”,“transport_protocol”:”rtp”,“source_width”:1080,“source_height”:1920,“source_samplerate”:2000,“source_media_type”:”rtp”,“source_video_codec”:”h264”,“source_audio_codec”:”aac”,“dest_video_codec”:”h264”,“dest_audio_codec”:”aac”,“dest_width”:640,“dest_height”:480,“dest_samplerate”:800 }

выход

{“recv_packet_ip”:”11.12.112.10”, “recv_packet_port”:”9099”}

выход:ЦельIP、порт,сетевой протокол, Разрешение исходного кода, скорость исходного кода, целевое разрешение, целевой битрейт, Тип носителя (RTP/PS/RTMP/RTSP), формат видео, формат аудио, целевой формат видео, Целевой аудиоформат

Возврат: IP/порт получения отслеживаемого пакета услуги перекодирования;

диаграмма бизнес-процесса

  1. Вызывающий абонент сначала отправляет сообщение на порт 3500 перекодирования видео Служить фоном.,Настройка информации, связанной с перекодированием,Запрос на начало транскодирования;
  2. видео перекодировать Служить после получения запроса от звонящего приехать,Определите, есть ли у вас возможности Служить, необходимые для перекодирования.,и хранить информацию о конфигурации,Возвращает прослушиваемый IP-адрес и порт для приема перекодированных пакетов;
  3. Вызывающий абонент прослушивает принимающий порт целевого видео,И затем после получения целевого видеопотока «Приехать»,Направление нуждающемуся клиенту,Вы также можете напрямую указать IP-адрес и порт клиента в качестве параметров для перекодирования. Служить на первом этапе.,Вызывающему абоненту не требуется получать перекодированный поток;
  4. IP получателя и порт отправки видеопотока приезжать транскодировать Служить;
  5. Отправьте перекодированные видеоданные на принимающий IP-адрес и порт;
  6. На этом этапе на порт 3500 отправляется сообщение о завершении перекодирования.

Поддержка балансировки нагрузки

Между главным узлом и главным узлом существует контрольное сообщение, между главным узлом и дочерними узлами существует контрольное сообщение, но между дочерними узлами нет контрольного сигнала, поэтому главный узел должен отвечать за распределение задач перекодирования; дочерние узлы пересылают запросы дочерним узлам и сохраняют информацию о состоянии каждого дочернего узла, такую ​​как количество задач и пропускная способность, которая отвечает за балансировку нагрузки между главным узлом и подузлами, на которых можно развернуть; разные серверы распределенным образом. Конкретные периодические сообщения и сообщения о распределении задач отражены в детальном проекте.

boy illustration
Руководство по развертыванию Nginx в Linux (Centos)
boy illustration
Интервью с Alibaba по Java: можно ли использовать @Transactional и @Async вместе?
boy illustration
Облачный шлюз Spring реализует примеры балансировки нагрузки и проверки входа в систему.
boy illustration
Используйте Nginx для решения междоменных проблем
boy illustration
Произошла ошибка, когда сервер веб-сайта установил соединение с базой данных. WordPress предложил решение проблемы с установкой соединения с базой данных... [Легко понять]
boy illustration
Новый адрес java-библиотеки_16 топовых Java-проектов с открытым исходным кодом, достойных вашего внимания! Обязательно к просмотру новичкам
boy illustration
Лучшие практики Kubernetes для устранения несоответствий часовых поясов внутри контейнеров
boy illustration
Введение в проект удаления водяных знаков из коротких видео на GitHub Douyin_TikTok_Download_API
boy illustration
Весенние аннотации: подробное объяснение @Service!
boy illustration
Пожалуйста, не используйте foreach для пакетной вставки в MyBatis. Для 5000 фрагментов данных потребовалось 14 минут. .
boy illustration
Как создать проект Node.js с помощью npm?
boy illustration
Mybatis-plus использует typeHandler для преобразования объединенных строк String в списки списков.
boy illustration
Не удалось установить программное обеспечение Mitsubishi. Возможно, возникла проблема с реестром.
boy illustration
Разрешение ошибок проекта SpringBoot 3 mybatis-plus: org.apache.ibatis.binding.BindingException: неверный оператор привязки
boy illustration
Более краткая проверка параметров. Для проверки параметров используйте SpringBoot Validation.
boy illustration
Поиграйтесь с интеграцией Spring Boot (платформа запланированных задач Quartz)
boy illustration
Несколько популярных режимов интерфейса API: RESTful, GraphQL, gRPC, WebSocket, Webhook.
boy illustration
Redis: практика публикации (pub) и подписки (sub)
boy illustration
Подробное объяснение пакета Golang Context
boy illustration
Краткое руководство: создайте свое первое приложение .NET Aspire
boy illustration
Краткое обсуждение метода пакетной вставки MyBatis: обработка 100 000 фрагментов данных занимает всего 2 секунды.
boy illustration
[Инструмент] Используйте nvm для управления переключением версий nodejs, это так здорово!
boy illustration
HTML можно преобразовать в word_html для отображения текстовых документов.
boy illustration
Статья Spring Security 6.x для быстрого понимания принципов настройки
boy illustration
Не забудьте изменить имя каждого модуля RUOYI один раз, чтобы избежать мошенничества ~~~
boy illustration
Научите вас шаг за шагом, как интегрировать систему обслуживания клиентов Hunyuan AI Q&A от 0 до 1.
boy illustration
Подробное объяснение Gzip: принципы и применение алгоритмов сжатия.
boy illustration
Скачать Tomcat - ссылка для скачивания на официальном сайте tomcat7, tomcat8, tomcat9
boy illustration
Развертывание IIS.NetCore
boy illustration
[Оптимизация памяти Android] Общие функции инструмента Android Profiler (мониторинг памяти | снимок памяти)