Стриминг HLS и трансляции с низкой задержкой
RUSEON Core оснащен встроенным in-memory трансмуксером HLS, упаковывающим входящие кадры RTSP в сегменты MPEG-TS на лету без обращения к диску.
1. Спецификация эндпоинтов HLS
| Эндпоинт | Метод | Тип ответа | Описание |
|---|---|---|---|
/stream/hls/{id}/index.m3u8 | GET | application/vnd.apple.mpegurl | Multi-variant мастер-плейлист с привязкой субтитров ИИ |
/stream/hls/{id}/stream.m3u8 | GET | application/vnd.apple.mpegurl | Плейлист видеопотока со скользящим окном сегментов в RAM |
/stream/hls/{id}/subs.m3u8 | GET | application/vnd.apple.mpegurl | Дорожка субтитров WebVTT с метаданными детекций ИИ |
/stream/hls/{id}/{segment} | GET | video/MP2T | Виртуальный сегмент MPEG-TS из оперативной памяти |
2. Пример интеграции плеера (Hls.js)
html
<!DOCTYPE html>
<html>
<head>
<title>RUSEON HLS Live Stream</title>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
<video id="video" controls autoplay muted style="width: 100%; max-width: 960px;"></video>
<script>
const video = document.getElementById('video');
const videoSrc = 'http://localhost:8080/stream/hls/cam-01/index.m3u8';
if (Hls.isSupported()) {
const hls = new Hls({
liveSyncDurationCount: 3,
maxBufferLength: 10
});
hls.loadSource(videoSrc);
hls.attachMedia(video);
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
// Нативная поддержка Safari
video.src = videoSrc;
}
</script>
</body>
</html>3. Конфигурация в config.yaml
yaml
server:
hls:
live_segments_in_memory: 3 # Количество сегментов в RAM (по умолчанию: 3)
cameras:
- id: "cam-01"
url: "rtsp://admin:pass@192.168.1.100:554/live"
lazy_hls: true # Формировать HLS только при наличии зрителей