RTSP-ті HLS-ке түрлендіру — MediaMTX, FFmpeg, SaaS
Браузерде (Chrome, Firefox, Safari, Edge) RTSP-ағын ашылмайды — тек HLS немесе WebRTC. Мына мақалада RTSP-ды HLS-ке түрлендірудің 3 әдісін салыстырамыз: MediaMTX (ашық код), FFmpeg (қолмен) және RTSP.KZ (SaaS).
Қысқаша
- Браузер RTSP-ты түсінбейді → түрлендіру керек
- 3 нұсқа: MediaMTX, FFmpeg, RTSP.KZ
- Кідіріс: стандартты HLS 10-30 сек, LL-HLS 2-3 сек, WebRTC 0.2 сек
- Ең қарапайымы — RTSP.KZ (5 минут ішінде дайын)
1. HLS дегеніміз не?
HLS (HTTP Live Streaming) — Apple 2009 жылы шығарған стандарт (RFC 8216). Идея: бейнені .ts-сегменттерге кесіп, .m3u8-манифест арқылы браузерге беру.
Файл құрылымы:
segment_0.ts <- 2-10 сек бейне
segment_1.ts
segment_2.ts
...
Артықшылықтары: барлық браузерде істейді (Safari нативтіде, Chrome/Firefox — hls.js кітапханасы арқылы), CDN арқылы масштабтауға болады, корпоративтік firewall-дардан өтеді.
2. Нұсқа A: MediaMTX (ашық код)
MediaMTX — Go тілінде жазылған ашық код, бір бинарлы файл. Docker-де де жұмыс істейді.
Іске қосу
- GitHub-тан бинарлы файлды жүктеу
mediamtx.ymlконфигін жасау:
my_camera:
source: rtsp://admin:pass@192.168.1.64:554/Streaming/Channels/101
sourceProtocol: tcp
hlsSegmentCount: 3
hlsSegmentDuration: 2s
- Іске қосу:
./mediamtx - HLS-сілтемесі:
http://server:8888/my_camera/index.m3u8
3. Нұсқа B: FFmpeg (қолмен)
FFmpeg — эталондық бейне-құралы. Бір командамен HLS-конверсия жасайды.
Қарапайым команда
-c copy -f hls \
-hls_time 2 -hls_list_size 6 \
-hls_flags delete_segments \
/var/www/stream/index.m3u8
Параметрлер
| Параметр | Мағынасы |
|---|---|
-c copy | Қайта кодтамай, тек контейнерді ауыстыру. CPU 0%. |
-hls_time 2 | Сегмент 2 секунд (кідіріс аз болу үшін) |
-hls_list_size 6 | Плейлистте 6 сегмент қалдыру |
-hls_flags delete_segments | Ескі сегменттерді жою (дискіні аямау) |
4. Нұсқа C: RTSP.KZ (SaaS)
Егер сервер жалдау, MediaMTX баптау, FFmpeg қыруан-ойылған беруді қаламасаңыз — RTSP.KZ бәрін қорап-етіп береді.
Қосу
- Кабинетке кіру → «Камера қосу»
- Камерадан RTSP-URL жапсыру немесе Discovery Agent-пен автоматты табу
- «Қосу» түймесі
- Дайын HLS-сілтемесі:
HTTPS автоматты. WebRTC де қорап-етіп беріледі. LL-HLS қосулы (2-3 сек кідіріс).
5 минут ішінде — HLS-сілтемесі
Сервер жалдау, конфиг жазу, FFmpeg-ті жалау керек емес. Камера қосасыз — HLS-сілтемесі дайын. 1 сағат тегін тіркеусіз.
Тегін бастау →5. Салыстыру
| MediaMTX | FFmpeg | RTSP.KZ | |
|---|---|---|---|
| Іске қосу уақыты | 30 мин | 5 мин | 5 мин |
| Сервер керек пе? | Иә | Иә | Жоқ |
| Автоматты бақылау | Иә (демон) | Жоқ (supervisor) | Иә |
| WebRTC | Иә | Иә (сипатта күрделі) | Иә (автоматты) |
| LL-HLS | Иә | Иә | Иә (әдепкі) |
| Ак IP керек пе? | Иә | Иә | Жоқ |
| Тегін | Иә | Иә | 1 сағат |
6. HLS-ті сайтқа кіргізу
Safari нативтіде HLS-ті ойнатады, Chrome/Firefox — hls.js кітапханасы керек:
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
const v = document.getElementById('v');
const url = 'https://rtsp.kz/hls/abc123/index.m3u8';
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(url); hls.attachMedia(v);
} else if (v.canPlayType('application/vnd.apple.mpegurl')) {
v.src = url;
}
</script>
Жиі қойылатын сұрақтар
Заманауи браузерлер (Chrome, Firefox, Safari, Edge) RTSP-хаттамасын қолдамайды — тек HLS немесе WebRTC ойнатылады. RTSP-ды HLS-ке түрлендіргенде — кез келген құрылғыда онлайн көру мүмкіндігі болады.
3 негізгі: MediaMTX (ашық код), FFmpeg (қолмен), RTSP.KZ SaaS. Күрделі жүйелер үшін — Wowza, Nimble.
Стандартты HLS: 10-30 сек. Low-Latency HLS (LL-HLS): 2-3 сек. WebRTC (HLS емес): 200 мс.
GitHub-тан бинарлы файлды жүктеу → mediamtx.yml-де camera source көрсету → ./mediamtx → HLS-сілтемесі: http://server:8888/my_camera/index.m3u8.
ffmpeg -rtsp_transport tcp -i rtsp://cam -c copy -f hls -hls_time 2 -hls_list_size 6 -hls_flags delete_segments /var/www/stream.m3u8. -c copy — қайта кодтамай.