MistServer의 DVR 기능을 활용하여 실시간 스트림을 .ts 세그먼트로 저장하고 .m3u8 재생목록을 구성하는 방법을 소개합니다. Push 설정으로 DVR 녹화를 구성하고, Time-Shift 기능을 통해 과거 영상을 재생하는 방법도 함께 설명합니다.
MistServer DVR 스트림 녹화 설정: Time-Shift 재생
목차
1. MistServer DVR 기능 이해하기
MistServer는 라이브 스트림을 녹화하고, 이를 .ts 형식의 세그먼트와 .m3u8 재생목록으로 저장할 수 있는 DVR(Digital Video Recorder) 기능을 제공합니다.
- 실시간 스트리밍과 과거 영상 탐색 기능을 동시에 제공
- MistServer 3.3 이상에서 지원
- TS(Transport Stream) 포맷만 지원됨
2. Push 설정을 이용한 DVR 녹화 설정
MistServer에서 DVR 기능을 설정하려면 세그먼트(녹화 파일 조각) 저장 및 재생 목록(Playlist, .m3u8) 설정이 필요합니다.
- 세그먼트 파일 저장 위치 및 이름 설정
- m3u8(플레이리스트) 파일 생성
- 세그먼트 파일 이름을 고유하게 설정 ($segmentCounter 또는 $currentMediaTime 사용)
◆ 필수 설정
설정 | 설명 |
m3u8=path/file.m3u8 | MistServer가 스트림을 세그먼트 형태로 저장하고, 해당 세그먼트를 포함하는 .m3u8 파일 생성 |
$segmentCounter | 생성된 세그먼트의 번호를 삽입하여 고유한 파일명을 생성 |
$currentMediaTime | 세그먼트의 첫 번째 미디어 타임스탬프를 삽입 |
#날짜별로 세그먼트를 저장하며, 스트림별 m3u8 플레이리스트를 관리
/mnt/d/nvtest/$basename/$yday/$hour/$minute_$segmentCounter.ts?m3u8=../../$basename.m3u8
- $basename: 스트림 이름
- $yday, $hour, $minute: 날짜 및 시간 구조 폴더
- $segmentCounter: 고유 세그먼트 파일 번호
◆ 선택 설정
옵션 | 설명 | 예시 |
split=초 | 지정된 초 단위로 세그먼트 분할 | split=24 (24초 단위 세그먼트 생성) |
maxEntries=개수 | 플레이리스트에 저장할 최대 세그먼트 개수 | maxEntries=3600 (1일 기준 3600개 유지) |
targetAge=초 | 특정 초 이상 지난 세그먼트 삭제 | targetAge=86400 (1일 이상 된 세그먼트 삭제) |
append=1 | 녹화 중단 후 다시 시작 시 기존 파일 유지 | append=1 |
noendlist=1 | 스트리밍이 중단되더라도 플레이리스트를 종료하지 않음 | noendlist=1 |
#예시
#split=24 → 24초 단위로 세그먼트 저장
#maxEntries=3600 → 3600개의 세그먼트 유지 (1일 동안 기록)
#append=1 → 중단 후 재시작 시 기존 녹화 파일 유지
#noendlist=1 → 플레이리스트 종료 방지
&split=24&maxEntries=3600&append=1&noendlist=1
◆ 설정시 유의 사항
1. 세그먼트 크기 설정 (split 값)
- 기본적으로 세그먼트 크기는 60초로 설정됨.
- 세그먼트 크기가 클수록 서버 리소스가 절약되지만, 지연 시간이 길어질 수 있음.
- 낮은 지연 시간(DVR 딜레이 최소화)이 필요하면 작은 값(예: 10~30초)으로 설정.
2. 녹화가 중단되었을 때 대응 방법
- noendlist=1을 설정하면, 녹화가 중단되더라도 DVR 스트림이 VOD로 변환되지 않고 계속 사용할 수 있음.
- append=1을 추가하면, 스트림이 중단되었다가 재시작될 경우 기존 파일을 유지하고 새로운 세그먼트를 추가함.
3. DVR 저장 공간 관리
- maxEntries 또는 targetAge를 설정하지 않으면 저장 공간이 무한정 증가할 수 있음.
- maxEntries=3600(1일 기록), targetAge=86400(1일 이상 지난 세그먼트 삭제) 등의 값을 설정하여
저장 공간을 효율적으로 관리 가능.
3. DVR 녹화 설정 구성 예시
- 설정조건: 24초 단위 세그먼트, 1일(24시간) 저장, 중단 후 재시작 가능
/mnt/d/nvtest/$basename/$yday/$hour/$minute_$segmentCounter.ts
?m3u8=../../$basename.m3u8
&split=24
&maxEntries=3600
&append=1
&noendlist=1
/mnt/d/nvtest/ → 저장 폴더
$basename → 스트림 이름
$yday/$hour/ → 날짜 및 시간별 폴더 구조 생성
$minute_$segmentCounter.ts → 세그먼트 파일명 (고유 번호 포함)
m3u8=../../$basename.m3u8 → 스트림별 .m3u8 플레이리스트 생성
split=24 → 세그먼트를 24초 단위로 생성
maxEntries=3600 → 최대 3600개 세그먼트 유지 (24시간 유지)
append=1 → 중단 후 다시 시작 시 기존 파일 유지
noendlist=1 → 스트림 종료 시 플레이리스트가 종료되지 않도록 설정
1. DVR 녹화용 명령문을 사용하여 Push 작업을 설정 후 저장합니다.
2. Push 작업 동작을 확인합니다.
3. 저장경로에 .ts 세크먼트 파일과 재생목록이 생성되는 것을 확인 합니다.
4. DVR 스트림 재생하기: VLC
녹화된 스트림은 MistServer에서 서비스로 제공할 수 있습니다.
1. 스트림 설정 예시:
- 스트림 이름: dvr
- 플레이리스트 파일: camera.m3u8
2. VLC로 rtsp://172.18.89.20:5554/dvr에 접속하여 영상이 재생되는 것을 확인합니다.
3. 다음은 VLC에서 Stream 연결 방식에 따른 지연 속도를 비교해 보았습니다.
- 1) vlc로 IP Camera 에 직접 연결하여 plyer 한 경우
- 2) MistServer에서 IP Camera 에 연결하고 vlc에서 MistServer에 연결하여 play한 경우
- 3) MistServer에서 IP Camera 영상을 DVR 녹화하고, vlc에서 DVR 녹화영상 Stream에 연결하여 play한 경우
5. 과거 DVR 영상 Time-Shift 재생하기
MistServer의 DVR Time-Shift 기능을 활용하면 특정 시간으로 되돌려서 과거 녹화된 영상을 재생할 수 있습니다.
MistServer는 시간 기반 매개변수 (timestamp)를 지원하여, 특정 시간의 영상을 직접 재생할 수 있습니다.
MistServer에서는 과거 영상 탐색을 위한 다양한 매개변수를 제공합니다.
매개변수 | 설명 | 예제 |
startunix= | 특정 Unix Timestamp에서 시작 | startunix=1708381200(10분전) |
start=hh:mm:ss | 특정 시간부터 재생 | start=01:30:00 (1시간 30분) |
startrelative=-secs | 현재 시간 기준으로 몇 초 전에서 시작 | startrelative=-3600 (1시간 전) |
endunix= | 특정 Unix Timestamp에서 끝 | endunix=1708384800 |
end=hh:mm:ss | 특정 시간에서 종료 | end=02:00:00 |
duration=secs | 시작 시간부터 지정된 길이만큼 재생 | duration=600 (10분 동안만 재생) |
◆ 녹화영상 시작 시간 지정하기
1. RTSP URL 예제
#UTC 기분 Unix Timestamp 사용(10분전)
rtsp://172.18.89.20:5554/dvr?startunix=1708381200
#start=hh:mm:ss (특정 시간부터 재생)
rtsp://172.18.89.20:5554/dvr?start=01:30:00
$startrelative=-secs (현재 시간 기준 10분전)
rtsp://172.18.89.20:5554/dvr?startrelative=-600
2. HLS URL 예제
#UTC 기분 Unix Timestamp 사용(10분전)
http://172.18.89.20/dvr.m3u8?startunix=1708381200
#start=hh:mm:ss (특정 시간부터 재생)
http://172.18.89.20/dvr.m3u8?start=01:30:00
$startrelative=-secs (현재 시간 기준 10분전)
http://172.18.89.20/dvr.m3u8?startrelative=-600
◆ 녹화영상 종료 시간 지정하기
1. RTSP URL 예제
#endunix= (특정 Unix Timestamp에서 종료), 10분전 영상시작, 5분후 종료
rtsp://172.18.89.20:5554/dvr?startunix=1708381200&endunix=1708381800
#end=hh:mm:ss (특정 시간에서 종료)
rtsp://172.18.89.20:5554/dvr?start=01:30:00&end=02:00:00
#duration=secs (지정된 길이만큼 재생), (10분 전부터 5분 동안만 재생)
rtsp://172.18.89.20:5554/dvr?startrelative=-600&duration=300
2. HLS URL 예제
#endunix= (특정 Unix Timestamp에서 종료), 10분전 영상시작, 5분후 종료
rtsp://172.18.89.20:5554/dvr?startunix=1708381200&endunix=1708381800
#end=hh:mm:ss (특정 시간에서 종료)
http://172.18.89.20/dvr.m3u8?start=01:30:00&end=02:00:00
#duration=secs (지정된 길이만큼 재생), (10분 전부터 5분 동안만 재생)
http://172.18.89.20/dvr.m3u8?startrelative=-600&duration=300
◆ 10분 전 영상을 rtsp로 연결하여 영상을 재생한 결과입니다.
관련 글 링크
3.MistServer 스트리밍 이해하기: Inputs,Outputs,Push,Recording
5. MistServer Stream 녹화 설정 및 테스트: Push
4. MistServer Stream 설정 및 재생 테스트: Inputs,Outputs
https://docs.mistserver.org/howto/input/dvr_input/
Using DVR streams | MistServer documentation
How to input a 24/7 stream with retention window.
docs.mistserver.org
https://docs.mistserver.org/howto/pushing/dvr_recording
Recording DVR streams | MistServer documentation
How to record a 24/7 stream with retention window.
docs.mistserver.org
'1.시스템&인프라 > MistServer' 카테고리의 다른 글
8. MistServer Stream 관리 API 사용 예제 (0) | 2025.04.14 |
---|---|
7. MistServer API 인증 방식 및 주요 API 이해 (0) | 2025.04.11 |
5. MistServer Stream 녹화 설정 및 테스트: Push (0) | 2025.04.11 |
4. MistServer Stream 설정 및 재생 테스트: Inputs,Outputs (0) | 2025.04.11 |
3.MistServer 스트리밍 이해하기: Inputs,Outputs,Push,Recording (0) | 2025.04.11 |