Skip to content

SRT Reader

Обзор

SRT Reader — это модуль в составе Mcaster, который принимает публикацию по протоколу SRT (Secure Reliable Transport) или захватывает поток с другого сервера по SRT. Модуль обеспечивает надежную передачу видеопотоков с минимальной задержкой и автоматическим восстановлением потерянных пакетов.

Принцип работы

Прием публикации

Модуль может принимать SRT потоки от внешних источников:

  • Публикация — прием потоков от кодировщиков или других серверов
  • Захват — подключение к удаленным SRT серверам
  • Поддержка SPTS — работа с Single Program Transport Stream

Протокол SRT

  • Надежность — автоматическое восстановление потерянных пакетов
  • Безопасность — встроенное шифрование с помощью passphrase
  • Низкая задержка — оптимизированный для живого видео
  • Адаптивность — автоматическая настройка под качество сети

Конфигурация

Базовая настройка для приема публикации

stream input-srt {
  input publish://;
  srt_publish {
    port 5912;
    latency 40;
  }
}

Параметры конфигурации

Параметр Описание Обязательный Пример
input publish:// Разрешает публикацию в поток Да publish://
port Порт для приема SRT публикации Да 5912
latency Задержка в миллисекундах Нет 40
passphrase Ключ шифрования Нет mysecretkey

Расширенная конфигурация

stream secure-srt {
  input publish://;
  srt_publish {
    port 5913;
    latency 60;
    passphrase "mysecretkey123";
  }

  # Дополнительные настройки
  buffer_size 8192;
  timeout 5000;
}

Конфигурация для захвата потока

stream capture-srt {
  input srt://remote-server:5912?passphrase=mysecretkey;
  output rtmp://server/live/captured;
}

Опции SRT

passphrase

  • Назначение: Ключ шифрования для защиты потока
  • Требование: Должен быть одинаковым на обоих концах соединения
  • Формат: Строка произвольной длины
  • Рекомендация: Использовать сложные ключи для безопасности

latency

  • Назначение: Настройка задержки буферизации
  • Поведение: Влияет на стабильность, но не критична для работы
  • Значения: Обычно 20-200 миллисекунд
  • По умолчанию: 40 миллисекунд

Тестирование публикации

Отправка потока через FFmpeg

# Публикация локального файла
ffmpeg -re -i input.mp4 -c copy -f mpegts srt://localhost:5912

# Публикация с камеры
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts srt://localhost:5912

# Публикация с passphrase
ffmpeg -re -i input.mp4 -c copy -f mpegts "srt://localhost:5912?passphrase=mysecretkey"

Отправка потока с другого сервера

# С другого mcaster
ffmpeg -re -i input.mp4 -c copy -f mpegts srt://mcaster-server:5912

# С OBS Studio
# Настройте SRT Output в OBS с адресом mcaster-server:5912

Мониторинг

SRT специфичные параметры

Round Trip Time (RTT)

{
  "stats": {
    "input": {
      "srt": {
        "rtt": 25.5  // Round Trip Time в миллисекундах
      }
    }
  }
}
  • Описание: Суммарная задержка для обратной связи
  • Нормальное значение: 10-50 мс
  • Проблемное значение: >100 мс
  • Действие: При высоком RTT проверить качество сети

Реальная задержка

{
  "stats": {
    "input": {
      "srt": {
        "latency": 35.2  // Реальная задержка в миллисекундах
      }
    }
  }
}
  • Описание: Фактическая задержка принимающей стороны
  • Изменчивость: Меняется из-за потерь пакетов
  • Нормальное значение: 20-80 мс
  • Мониторинг: Отслеживать стабильность значения

Перепосланные пакеты

{
  "stats": {
    "input": {
      "srt": {
        "retransmitted_packets": 15  // Количество перепосланных пакетов
      }
    }
  }
}
  • Описание: Количество пакетов, отправленных повторно
  • Нормальное значение: 0-50 пакетов в минуту
  • Проблемное значение: >100 пакетов в минуту
  • Причина: Плохое качество сети

Общие метрики MPEGTS Reader

{
  "stats": {
    "input": {
      "packets_received": 125000,
      "packets_lost": 5,
      "bitrate": 5000000,
      "fps": 25.0
    }
  }
}

Примеры использования

Простая публикация

stream live_channel {
  input publish://;
  srt_publish {
    port 5912;
    latency 40;
  }
  output rtmp://server/live/stream;
}

Безопасная публикация

stream secure_channel {
  input publish://;
  srt_publish {
    port 5913;
    latency 60;
    passphrase "complex_secret_key_2024";
  }
  output rtmp://server/live/secure;
}

Множественные потоки

# Поток 1
stream channel_1 {
  input publish://;
  srt_publish {
    port 5912;
    latency 40;
  }
  output rtmp://server/live/ch1;
}

# Поток 2
stream channel_2 {
  input publish://;
  srt_publish {
    port 5913;
    latency 40;
  }
  output rtmp://server/live/ch2;
}

Интеграция с транскодером

stream transcoded_srt {
  input publish://;
  srt_publish {
    port 5914;
    latency 50;
  }

  transcoder {
    video {
      codec h264;
      bitrate 5000k;
    }
    audio {
      codec aac;
      bitrate 128k;
    }
  }

  output rtmp://server/live/transcoded;
}

Устранение неполадок

Проблемы с подключением

Не удается подключиться к порту

  1. Проверьте доступность порта — убедитесь, что порт не занят
  2. Проверьте firewall — разрешите входящие соединения
  3. Проверьте конфигурацию — убедитесь в правильности настроек
  4. Проверьте логи модуля на ошибки

Высокий RTT

  1. Проверьте качество сети между клиентом и сервером
  2. Увеличьте latency для стабилизации
  3. Проверьте загрузку сервера
  4. Рассмотрите использование CDN

Частые перепосылки пакетов

  1. Проверьте стабильность сети
  2. Уменьшите битрейт потока
  3. Проверьте настройки кодировщика
  4. Мониторьте качество интернет-соединения

Диагностические команды

# Проверка доступности порта
netstat -tuln | grep 5912

# Тест подключения
telnet localhost 5912

# Мониторинг сетевого трафика
tcpdump -i any -n port 5912

# Проверка метрик SRT
curl -X GET "http://localhost:8080/api/stream_get?name=input-srt"

Рекомендации по настройке

Оптимальные значения latency

  • Стабильная сеть: 20-40 мс
  • Нестабильная сеть: 60-120 мс
  • Спутниковое соединение: 200-500 мс
  • Мобильная сеть: 100-200 мс

Безопасность

  • Используйте сложные passphrase — минимум 16 символов
  • Регулярно меняйте ключи — каждые 30-90 дней
  • Ограничьте доступ к портам — используйте firewall
  • Мониторьте подключения — отслеживайте подозрительную активность

Производительность

  • Достаточная пропускная способность — минимум 2x битрейт потока
  • Стабильное интернет-соединение — для минимизации потерь
  • Оптимизация кодировщика — настройка под SRT
  • Мониторинг ресурсов — CPU, память, сеть

Мониторинг критических параметров

  • stats.input.srt.rtt — качество сети
  • stats.input.srt.retransmitted_packets — стабильность соединения
  • stats.input.srt.latency — реальная задержка

Заключение

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