Add INI configuration and optional audio capture

This commit is contained in:
seo-amugae committed 2026-10-08 00:30:23 +09:00
1 parent 5b15b06570
commit 089c2421c5
4 files changed
+464 -47

No files matched your search

+68
View File
@@ -31,6 +31,8 @@ RTSP는 `ddagrab` 기반 Desktop Duplication API로 화면과 마우스 커서
- 기존 MediaMTX가 RTSP 포트를 사용 중이면 해당 프로세스 재사용
- 자동 생성 MediaMTX 설정은 RTSP over TCP만 사용해 UDP RTP 포트 충돌 방지
- 로그인 시 자동 실행 작업 등록 및 제거
- `config.ini` 기반 기능별 설정과 명령줄 override
- 오디오 캡처/AAC 트랙을 `1` 또는 `0`으로 활성화·비활성화
## RTSP URL
@@ -44,6 +46,7 @@ rtsp://<현재_NIC_IP>:8554/monitor2
## 구성
- `screen-rtsp.ps1`: 캡처, 오디오 loopback, GPU 선택, MediaMTX/FFmpeg watchdog
- `config.ini`: 영상, 오디오, 네트워크, RTSP 설정과 진단 명령 예시
- `ffmpeg.exe`: `ddagrab`, `h264_nvenc`, `h264_amf`, `h264_qsv`, `aac` 지원 FFmpeg
- `mediamtx.exe`: RTSP 서버. 현재 검증 기준 버전은 v1.21.1
- `mediamtx.yml`: 없으면 스크립트가 기본 설정을 자동 생성
@@ -54,6 +57,51 @@ rtsp://<현재_NIC_IP>:8554/monitor2
실행 파일과 생성 파일은 저장소에 포함하지 않습니다. 배포할 때 `ffmpeg.exe`와 `mediamtx.exe`를 `screen-rtsp.ps1` 옆에 둡니다.
## 설정 파일
기본 설정은 `screen-rtsp.ps1`과 같은 폴더의 `config.ini`에서 읽습니다.
```ini
[Video]
FrameRate=30
Bitrate=8000k
EncoderPriority=NVIDIA,AMD,Intel
[Audio]
Enabled=1
Bitrate=192k
SignalThreshold=0.0005
```
`Audio.Enabled=1`이면 현재 재생 장치의 시스템 소리를 WASAPI loopback으로 캡처해 AAC 트랙을 추가합니다. `0`이면 오디오 장치 감시, loopback worker, AAC 트랙을 모두 사용하지 않고 영상만 송출합니다.
줄 앞의 공백을 제외한 첫 문자가 `#`, `;`, `//`이면 설명이나 참고 명령으로 인식해 건너뜁니다. 값 오른쪽의 inline 주석은 지원하지 않으므로 설명은 별도 줄에 작성합니다. 명령줄에서 직접 지정한 값은 INI 값보다 우선합니다.
알 수 없는 섹션, 설정 이름, 범위를 벗어난 값, `0/1` 이외의 기능 스위치는 시작 전에 오류로 표시합니다.
| 섹션 | 설정 | 기본값 | 설명 |
|---|---|---:|---|
| `General` | `ChannelCount` | `2` | 송출 채널과 필요한 모니터 수 |
| `General` | `StableTimeSec` | `3` | 정상 상태 안정화 시간 |
| `General` | `PollIntervalSec` | `1` | 상태 확인 주기 |
| `Video` | `FrameRate` | `30` | 화면 프레임률 |
| `Video` | `Bitrate` | `8000k` | 채널별 영상 비트레이트 |
| `Video` | `EncoderPriority` | `NVIDIA,AMD,Intel` | GPU 선택 순서 |
| `Audio` | `Enabled` | `1` | 시스템 재생음과 AAC 트랙 사용 여부 |
| `Audio` | `Bitrate` | `192k` | AAC 비트레이트 |
| `Audio` | `SignalThreshold` | `0.0005` | 실제 재생 장치 판별 peak 기준 |
| `Network` | `NicDescription` | 빈 값 | 비우면 기본 경로 NIC 자동 선택 |
| `Network` | `HealthTarget` | 빈 값 | Source IP ping 대상 |
| `RTSP` | `Port` | `8554` | MediaMTX RTSP 포트 |
GPU, 모니터, 오디오, NIC, FFmpeg 지원, RTSP 포트를 확인하는 PowerShell 명령은 `config.ini` 위쪽에 모두 주석 형태로 포함되어 있습니다.
INI를 해석한 최종 설정값만 확인하고 종료할 수도 있습니다.
```powershell
.\screen-rtsp.ps1 -ShowConfiguration
```
## 처리 흐름
1. FFmpeg의 `ddagrab`과 H.264 하드웨어 인코더 포함 여부를 확인합니다.
@@ -80,6 +128,14 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\screen-rtsp.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\screen-rtsp.ps1 -InstallStartup
```
등록된 작업은 `config.ini` 경로만 전달하므로 설정 파일을 수정한 뒤 작업을 다시 시작하면 변경값이 적용됩니다.
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\screen-rtsp.ps1 -StartupStatus
Stop-ScheduledTask -TaskName "Screen RTSP Watchdog"
Start-ScheduledTask -TaskName "Screen RTSP Watchdog"
```
자동 실행 제거:
```powershell
@@ -88,6 +144,18 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\screen-rtsp.ps1 -Unins
## 실행 옵션
다른 설정 파일을 사용하는 예시:
```powershell
.\screen-rtsp.ps1 -ConfigPath C:\RTSP\config.ini
```
명령줄 값은 `config.ini`보다 우선합니다. 다음 실행에서만 오디오를 끄는 예시:
```powershell
.\screen-rtsp.ps1 -AudioEnabled 0
```
GPU 우선순위를 바꾸는 예시:
```powershell