Нужно отдать RTSP-поток с IP-камеры в YouTube Live, не держа ffmpeg руками на хосте. Собран Docker-образ, который поднимает трансляцию на VPS и гонит поток в YouTube.
Образ
Репозиторий на Docker Hub: alekseykrivoshein/rtsptoyoutube. Внутри – ffmpeg (или обвязка вокруг него), на входе RTSP URL камеры, на выходе RTMP-ключ YouTube.
Что понадобится
- VPS или хост с Docker (удобно, когда камера в локалке, а стрим уходит наружу с VPS, если есть маршрутизация/VPN; либо Docker рядом с камерой при белом IP);
- камера с RTSP (логин/пароль в URL, если нужны);
- канал YouTube с включённым Live и stream key из YouTube Studio.
Запуск
Типовой сценарий: передать переменные с URL камеры и ключом стрима, контейнер держит соединение и перезапускается при обрыве (зависит от restart-политики). Пример каркаса:
docker run -d --name rtsp2yt --restart unless-stopped \ -e RTSP_URL="rtsp://user:pass@192.168.1.50:554/stream1" \ -e YOUTUBE_KEY="xxxx-xxxx-xxxx-xxxx" \ alekseykrivoshein/rtsptoyoutube
Имена переменных и точный API образа смотрите в описании на Docker Hub: у разных сборок могут отличаться STREAM_KEY, RTMP_URL и флаги ffmpeg. Ключ YouTube не коммитьте в git и не светите в публичных логах.
Пример в бою
Рабочий пример трансляции: bolotnaya.online/online-camera. Там же можно глянуть, как выглядит выходной поток с камеры.
Docker у Beget
Образ прогонялся на Docker-окружении Beget. Краткая шпаргалка по Docker у провайдера: domaintools.site/begetdocker. На любом VPS логика та же: Docker + доступ к RTSP + исходящий 1935/443 к YouTube RTMP.
На что смотреть при сбоях
- камера отвечает по RTSP с хоста контейнера (
ffprobe/vlcс того же сервера); - правильный path потока (main/substream), иначе чёрный экран или обрыв;
- YouTube: стрим «жив» в Studio, ключ не сброшен, нет блокировки Live у канала;
- битрейт и разрешение камеры не выше лимитов Live для вашего типа трансляции;
- NAT/firewall: исходящий RTMP не режется.
