Хотіли коли-небудь подивитися live-відео з камер спостереження чи IoT-пристроїв у веб-браузері? Здається, це просто, але на практиці все набагато складніше.
У чому проблема
IP-камери транслюють через RTSP (Real Time Streaming Protocol), але браузери не підтримують RTSP. Ще з 2010-х років браузери виключили RTSP з міркувань безпеки. Іншими словами, камера і браузер «говорять різними мовами».
Для вирішення цієї проблеми є 2 топових інструменти:
FFmpeg — бог обробки відео. Використовується у VLC, Netflix та багатьох інших системах.
MediaMTX — легкий стрімінговий сервер. Може конвертувати RTSP у WebRTC тощо.
Відкрийте у браузері http://localhost:8889/ — RTSP автоматично конвертується в WebRTC і транслюється у браузері. Ось і все.
Як йде потік даних
Камера → сирі кадри
FFmpeg → кодування H.264 → RTSP-трансляція
MediaMTX → прийом RTSP
Браузер → WebRTC-запит
MediaMTX → автоконвертація → WebRTC-трансляція
Браузер → відтворення в реальному часі
Конвертація йде без перекодування, тому це ефективно. Величезні системи Netflix працюють за тією ж схемою.
Які наступні кроки?
Поточна збірка — це демо. Для production-оточення не вистачає:
Відсутня автентифікація
Працює лише на localhost
Не підтримуються реальні IP-камери
Немає обробки помилок
У Part 2 додамо безпеку, підключення до реальних IP-камер, підготуємо до продакшену.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Спробуйте створити власний пайплайн для прямої відеотрансляції: FFmpeg та MediaMTX
Хотіли коли-небудь подивитися live-відео з камер спостереження чи IoT-пристроїв у веб-браузері? Здається, це просто, але на практиці все набагато складніше.
У чому проблема
IP-камери транслюють через RTSP (Real Time Streaming Protocol), але браузери не підтримують RTSP. Ще з 2010-х років браузери виключили RTSP з міркувань безпеки. Іншими словами, камера і браузер «говорять різними мовами».
Для вирішення цієї проблеми є 2 топових інструменти:
FFmpeg — бог обробки відео. Використовується у VLC, Netflix та багатьох інших системах.
MediaMTX — легкий стрімінговий сервер. Може конвертувати RTSP у WebRTC тощо.
Що робити — 3 кроки
1. Стрімінг відеофайлу
Створіть конфігураційний файл MediaMTX (mediamtx.yml): yaml paths: test_video: source: publisher
Транслюйте файл через RTSP: bash ffmpeg -re -i your_video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video
Перевірте у VLC.
2. Стрімінг з веб-камери в реальному часі
Додайте у конфігурацію MediaMTX: yaml paths: webcam: source: publisher
Windows: bash ffmpeg -f dshow -rtbufsize 100M -i video=“Integrated Webcam” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam
Mac: bash ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam
Linux: bash ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam
3. Дивимось у браузері (магія WebRTC)
Ось найцікавіше. Вмикаємо підтримку WebRTC у MediaMTX:
yaml webrtc: yes webrtcAddress: :8889 webrtcEncryption: no webrtcAllowOrigin: ‘*’ webrtcLocalUDPAddress: :8189 webrtcIPsFromInterfaces: yes
paths: test_video: source: publisher webcam: source: publisher
Відкрийте у браузері http://localhost:8889/ — RTSP автоматично конвертується в WebRTC і транслюється у браузері. Ось і все.
Як йде потік даних
Конвертація йде без перекодування, тому це ефективно. Величезні системи Netflix працюють за тією ж схемою.
Які наступні кроки?
Поточна збірка — це демо. Для production-оточення не вистачає:
У Part 2 додамо безпеку, підключення до реальних IP-камер, підготуємо до продакшену.