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;
}
Устранение неполадок¶
Проблемы с подключением¶
Не удается подключиться к порту¶
- Проверьте доступность порта — убедитесь, что порт не занят
- Проверьте firewall — разрешите входящие соединения
- Проверьте конфигурацию — убедитесь в правильности настроек
- Проверьте логи модуля на ошибки
Высокий RTT¶
- Проверьте качество сети между клиентом и сервером
- Увеличьте latency для стабилизации
- Проверьте загрузку сервера
- Рассмотрите использование CDN
Частые перепосылки пакетов¶
- Проверьте стабильность сети
- Уменьшите битрейт потока
- Проверьте настройки кодировщика
- Мониторьте качество интернет-соединения
Диагностические команды¶
# Проверка доступности порта
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 обеспечивает надежную и безопасную передачу видеопотоков с минимальной задержкой. Модуль поддерживает как прием публикации, так и захват потоков, что делает его универсальным решением для различных сценариев вещания. Встроенный мониторинг и диагностика позволяют эффективно управлять качеством передачи и быстро устранять возникающие проблемы.