MistServer에서 Push 기능을 이용한 스트림 녹화 설정
"본 글은 과거 티스토리에서 발행했던 콘텐츠를 기반으로, 최신 정보를 반영해 새롭게 정리한 업데이트 버전입니다."
📚 목차
1. 스트림 녹화와 Push 기능 개요
2. Push 방식 비교: Regular Push vs Automatic Push
3. 자동 녹화 파일명 변수 활용
4. Automatic Push(자동 녹화) 설정 및 테스트
5. 수동 녹화(Regular Push) 활용
✔ 마무리
1. 스트림 녹화와 Push 기능 개요
MistServer의 Push 기능은 수신한 스트림을 외부로 전송하거나 디스크에 저장하는 역할을 합니다.
이를 통해 라이브 방송을 자동으로 녹화하여 VOD 파일로 보관하거나, 수신 스트림을 다른 서버/CDN으로 실시간 전송하는 구성이 가능합니다.
대표적인 활용 예시는 다음과 같습니다.
🔸사내 행사·교육 라이브 송출 후 자동 녹화 및 아카이빙
🔸CCTV·보안 카메라 영상 저장 및 원격 백업 서버 전송
🔸RTMP 입력을 SRT·HTTP-FLV 등 다른 프로토콜로 변환하여 외부 송출
Push는 정기 백업·아카이빙뿐만 아니라 서비스 이중화에도 필수적인 기능입니다.

2. Push 방식 비교: Regular Push vs Automatic Push
MistServer의 Push 기능은 스트림을 외부로 전송하거나 파일로 저장하는 방법에 따라 두 가지로 나눌 수 있습니다.
바로 Regular Push(수동 푸시)와 Automatic Push(자동 푸시)입니다.
🔷 Automatic Push (자동 푸시)
▸ 스트림이 활성화되는 순간 자동으로 실행되는 방식입니다.
▸ 예를 들어, rtmp://example.com/live/stream 대상이 설정돼 있으면, 해당 스트림이 시작되는 즉시 MistServer가 자동으로 그 주소로 전송합니다.
▸ RTMP, RTSP, HLS, SRT, MPEG-TS, WebRTC 등 다양한 프로토콜을 지원합니다.
▸ 자동 재시도 기능이 있어, 전송 실패 시 지정한 간격과 횟수에 따라 다시 시도합니다.
▸ CCTV, 24시간 라이브 채널, 상시 녹화와 같이 항상 동일한 동작이 필요한 경우에 적합합니다.
🔷 Regular Push (수동 푸시)
▸ 관리자가 직접 시작과 종료를 제어하는 방식입니다.
▸ 스트림이 비활성 상태여도, 관리자가 UI나 API에서 푸시 명령을 실행하면 바로 전송이 시작됩니다.
▸ 예를 들어, ?push=rtmp://example.com/live/stream API 호출 시, 해당 주소로 즉시 푸시가 시작됩니다.
▸ 이벤트 녹화, 특정 시간대만 저장, 테스트 송출처럼 유연한 제어가 필요한 경우에 유용합니다.
| 구분 | 실행 시점 | 제어방식 | 활용사례 |
| Automatic Push | 스트림이 활성화되는 즉시 자동 실행 | 조건 기반 자동화 | CCTV, 상시 방송 |
| Regular Push | 관리자가 명령 실행 시 즉시 시작 | 수동 제어 | 이벤트 녹화, 테스트 송출 |
3. 자동 녹화 파일명 변수 활용
MistServer의 녹화 기능을 제대로 활용하려면 파일명 자동 생성 규칙을 잘 설정하는 것이 중요합니다. 단순히 output.mp4 같은 고정 이름을 사용하면, 새로 녹화될 때마다 이전 파일이 덮어쓰기 되어 데이터가 손실될 수 있습니다.
반면, 변수(variable)를 사용하면 녹화 시점에 따라 파일명이 달라져서 중복을 피하고, 파일을 날짜·시간·스트림별로 깔끔하게 분류할 수 있습니다.
예를 들어 CCTV 영상을 24시간 내내 저장한다고 가정해 보겠습니다.
▸ 고정 파일명: /recordings/camera1.mp4
→ 하루 종일 덮어쓰기, 과거 영상 사라짐
▸ 변수 포함: /recordings/$year/$month/$day/$stream-$hour$minute$second.mp4
→ 연·월·일·시간·분·초 단위로 파일 분리 저장, 원하는 시점의 파일 쉽게 찾기 가능
🔷 변수 치환(Variable Substitution) 개념
MistServer에서는 녹화가 시작될 때 변수명($…)을 실제 값으로 치환해 파일 경로와 이름을 생성합니다.
즉, 설정 시점에는 $year 같은 키워드로 작성하고, 녹화가 시작될 때 해당 시점의 실제 값(예: 2025)으로 바꿔서 파일명을 완성합니다.
아래 표는 자주 사용하는 변수와 예시 값입니다.
| 변수명 | 설명 | 예시 값 |
| $stream | 전체 스트림 이름(와일드카드 포함) | live/camera1 |
| $basename | 스트림명(와일드카드 제외) | camera1 |
| $year | 연도(4자리) | 2025 |
| $month | 월(01~12) | 08 |
| $day | 일(01~31) | 11 |
| $hour | 시(00~23) | 15 |
| $minute | 분(00~59) | 42 |
| $second | 초(00~60) | 07 |
| $datetime | 날짜·시간 조합 ($year.$month.$day.$hour.$minute.$second) | 2025.08.11.15.42.07 |
| $rand8 | 8자리 랜덤 문자 | A1B2C3D4 |
| $rand16 | 16자리 랜덤 문자 | E5F6G7H8I9J0K1L2 |
🔷 실무 활용 예시
▸ 날짜별 폴더 구조 자동 생성
/mnt/recordings/$year/$month/$day/$stream.mp4
→ /mnt/recordings/2025/08/11/camera1.mp4
장점: 날짜별로 폴더가 나뉘어 검색이 빠름.
▸ 분 단위 저장(.ts)
/mnt/recordings/$stream-$hour$minute.ts
→ camera1-1542.ts
장점: 하루 영상을 1분 단위로 나눠 관리 가능.
* 분할 저장은 ts포맷이 가능합니다.
▸ 랜덤값 포함으로 파일 충돌 방지
/mnt/recordings/$stream-$datetime-$rand8.mp4
→ camera1-2025.08.11.15.42.07-A1B2C3D4.mp4
장점: 동시에 여러 녹화가 시작돼도 중복 없음.
🔷 설정 팁
▸ $year/$month/$day 구조를 쓰면 장기 보관에 유리합니다.
▸ $datetime은 검색 시 직관적이라 방송 편집 시 유용합니다.
▸ 랜덤값($rand8, $rand16)은 동시 다발적 녹화 충돌 방지에 필수입니다.
▸ 스트림 이름이 긴 경우 $basename만 사용하는 것이 깔끔합니다.
4. Automatic Push(자동 녹화) 설정 및 테스트
MistServer의 Automatic Push 기능은 특정 스트림이 활성화되는 순간 자동으로 푸시 작업을 시작하도록 설정할 수 있는 기능입니다.
이를 녹화 대상으로 사용하면, 라이브 스트림이 들어올 때마다 별도의 수동 조작 없이 파일로 저장되도록 만들 수 있습니다.
특히, 방송·CCTV·IPTV 환경에서 송출과 동시에 녹화를 시작해야 하는 경우에 매우 유용합니다.
🔷 Automatic Push 동작 원리
▸ 트리거 기반 실행: 지정한 스트림명이 활성화되면 MistServer가 즉시 지정한 Target(저장 경로 또는 외부 서버)으로 데이터를 전송하거나 저장을 시작합니다.
▸ 재시도 지원: 녹화 작업이 실패했을 경우, 설정한 간격과 횟수에 따라 자동으로 재시도합니다.
▸ 다중 스트림 지원: 와일드카드(*)를 활용하면 동일 규칙으로 여러 스트림의 자동 녹화를 동시에 구성할 수 있습니다.
예를 들어, 스트림명이 camera1 또는 camera2인 입력이 들어오면 /mnt/recordings/{날짜}/{시간}.mp4 경로에 자동 저장되도록 설정할 수 있습니다.
🔷 설정 절차
1. 관리자 UI 접속 후 상단 메뉴에서 Push를 클릭합니다.
2. Delay before retry: 푸시 실패 후 재시도까지의 대기 시간(초 단위).
▸ 예: 10 → 실패 시 10초 뒤 재시도
3. Maximum retries: 재시도 횟수.
▸ 예: 3 → 최대 3회 재시도
▸ 0 → 재시도 없음
4. Add Automatic Push 버튼을 눌러 새 규칙을 추가합니다.

5. Stream 항목에 대상 스트림명을 입력합니다.
▸ 예를 들어, camera와 같이 특정 스트림을 지정하거나, 와일드카드(*)를 사용하여 여러 스트림에 동시에 적용할 수도 있습니다.
6. Target 항목에 저장 경로와 파일명 패턴을 지정합니다.
/mnt/d/nvtest/$year/$month/$day/$stream-$hour$minute_$segmentCounter.ts
# 참고
- 1분 마다 새로운 파일(.ts)을 생성합니다.
- mp4는 분할 생성 지원을 안하는 것으로 테스트 되었습니다.
7. 녹화 시작 시간 및 종료 시간 (선택 사항): 특정 시간대에만 녹화를 수행하도록 설정할 수 있습니다.

8. 모든 항목을 입력한 뒤 Save 버튼 클릭.
🔷 자동 녹화 상태 확인
자동 녹화 설정 후 "Save"를 선택하면 MistServer는 해당 스트림이 활성화되는 시점부터 자동으로 녹화를 시작합니다.

▸ (1) Automatic push 작업 목록: 관리자 UI의 해당 섹션에서 현재 설정된 자동 푸시 작업 목록을 확인할 수 있습니다.
▸ (2) 전체 Push 작업 목록: Automatic Push 및 일반 Push 명령을 통해 현재 실행 중인 모든 푸시 작업 목록을 보여줍니다.
▸ 설정한 "Target 명" 형식에 따라 지정된 경로에 영상 파일이 정상적으로 녹화되는지 확인합니다.
▸ 예를 들어, /mnt/d/nvtest/2025/02/19/camera-1902.mp4와 같은 형식으로 파일이 생성되는 것을 확인할 수 있습니다.
▸ "전체 Push" 목록에서 실행 중인 자동 녹화 작업을 "Stop" 버튼을 눌러 강제로 종료할 수 있습니다.
▸ 하지만 자동 푸시로 설정된 작업은 "Stop" 후에도 스트림이 활성화되어 있다면 자동으로 재시작되어 새로운 파일이 생성됩니다.

🔷 녹화 종료
Automatic Push(자동 녹화)는 스트림이 활성화될 때마다 자동으로 재시작되는 특성이 있기 때문에, 단순히 "Stop" 버튼만 눌러서는 완전히 종료되지 않습니다.
예를 들어, CCTV 스트림이 계속 송출되고 있는 상태에서 Stop을 누르면, 몇 초 뒤 스트림이 다시 감지되면서 자동 녹화가 재개되어 새로운 파일이 생성됩니다.

(1) 관리자 UI의 Push → Automatic Push 목록에서 해당 녹화 작업을 찾아 Remove 버튼을 클릭합니다.
(2) UI의 전체 Push 목록(All Pushes) 화면에서 현재 진행 중인 녹화 작업을 선택한 뒤 Stop 버튼을 클릭합니다.
5. 수동 녹화(Regular Push) 활용
Regular Push는 사용자가 원하는 시점에 직접 녹화를 시작하고 종료할 수 있는 기능입니다.
Automatic Push와 달리 스트림이 활성화되었는지 여부와 관계없이, 관리자가 명령을 내리는 즉시 녹화를 시작할 수 있다는 장점이 있습니다.
이 방식은 다음과 같은 상황에서 특히 유용합니다.
🔸 이벤트성 콘텐츠 저장: 예를 들어, 회의·세미나 중 특정 발표 구간만 녹화
🔸 문제 발생 구간 저장: CCTV에서 이상 상황 발생 시 즉시 녹화 시작
🔸 서비스 점검 테스트: 저장 경로, 파일명 규칙, 인코딩 상태 등을 확인하는 테스트 녹화
🔷 설정 절차
1. MistServer 관리자 UI 접속
2. Push 메뉴 또는 특정 스트림의 Status 메뉴 진입

3. 새 Push 작업 추가 클릭
4. Stream: 녹화할 스트림명을 지정 (예: camera1)
5. Target: 저장할 경로와 파일명 지정 (변수 사용 가능)
예: /mnt/recordings/camera1-$datetime.mp4

6. Save 버튼 클릭 → 즉시 녹화 시작

7. 녹화를 종료하려면 Push 목록에서 해당 작업을 선택 후 Stop 클릭
🔷 참고: API를 통한 수동 녹화 예시
MistServer API를 활용하면 CLI나 스크립트에서도 쉽게 녹화를 제어할 수 있습니다.
아래는 HTTP API를 사용하여 camera1 스트림을 /mnt/recordings/camera1.mp4로 저장하는 예시입니다.
1. API를 통한 수동 녹화 예시
curl "http://server/api?command=push&stream=camera1&target=file:///mnt/recordings/camera1.mp4"
2. API를 활용한 종료 예시
curl "http://server/api?command=stop_push&id=<PushID>"
🔷 실무 팁
▸ 파일명 변수 활용: $datetime 또는 $epoch를 사용해 중복 방지
▸ 테스트 시 주의: 저장 경로의 쓰기 권한과 디스크 용량 확인 필수
▸ 장기 운영 시: 일정 기간 이후 녹화 파일 자동 삭제 스크립트를 함께 구성하면 디스크 관리에 효과
✔ 마무리
MistServer의 Push 기능은 단순히 영상을 녹화하거나 송출하는 수준을 넘어, 서비스 품질 유지와 데이터 관리 전략의 핵심 요소가 됩니다.
Automatic Push는 상시 방송·CCTV·IPTV처럼 끊김 없이 지속되는 서비스 환경에서 안정적인 자동 녹화를 보장하고, Regular Push는 특정 이벤트·문제 상황·테스트 환경에서 즉시 대응할 수 있는 유연성을 제공합니다.
운영 환경에서는 다음과 같은 전략을 추천합니다.
🔸 Automatic Push로 기본 아카이빙 구조를 구성해 모든 주요 스트림이 자동 저장되도록 함
🔸 이벤트나 긴급 상황 발생 시 Regular Push를 활용해 별도의 독립 파일로 신속히 녹화
🔸 저장 경로 권한·디스크 용량 모니터링과 주기적인 파일 정리 자동화를 병행
🔸 테스트 환경에서는 짧은 구간 녹화를 반복 수행하여 저장 경로·코덱·네트워크 전송이 정상 동작하는지 사전 검증
결국 Push 기능은 자동화된 안정성과 수동 제어의 즉시성을 모두 확보할 수 있는 MistServer의 강점입니다.
이 두 방식을 상황에 맞게 혼합 운영하면, 방송 서비스부터 보안 모니터링까지 다양한 환경에서 안정적이고 효율적인 녹화·전송 체계를 구축할 수 있습니다.
👉 관련 글 링크
1. [MistServer] 설치 실습 - Ubuntu에 직접 설치 vs Docker 컨테이너 실행
2. [MistServer] 설치 후 필수 기본 설정 가이드 (v3.8 기준)
3. [MistServer] Input 실습: 다양한 입력 방식 설정과 스트림 결과 확인
4. [MistServer] Push 기능을 이용한 스트림 녹화 설정
5. [MistServer] DVR(Time-Shift) 설정과 재생 실습
6. [MistServer] OBS Studio와 MistServer 3.8을 이용한 라이브 방송 실습(RTMP,WHIP)
7. [MistServer] API 인증 방식과 HTTP·WebSocket API 비교
8. [MistServer] 스트림 관리 API 실습 (Python)
※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
'1.시스템&인프라 > 스트리밍' 카테고리의 다른 글
| [MistServer] OBS Studio와 MistServer 3.8을 이용한 라이브 방송 실습(RTMP,WHIP) (0) | 2025.11.06 |
|---|---|
| [MistServer] DVR(Time-Shift) 설정과 재생 실습 (0) | 2025.11.06 |
| [MistServer] Input 실습: 다양한 입력 방식 설정과 스트림 결과 확인 (0) | 2025.11.06 |
| [MistServer] 설치 후 필수 기본 설정 가이드 (v3.8 기준) (0) | 2025.11.06 |
| [MistServer] 설치 실습 - Ubuntu에 직접 설치 vs Docker 컨테이너 실행 (0) | 2025.11.06 |