RTSP(Real Time Streaming Protocol)
- 실시간 멀티미디어 데이터 스트리밍을 제어하기 위한 네트워크 프로토콜
- 영상과 음성 스트림의 재생, 일시정지 등을 제어할 수 있음
- 기본적으로 TCP 554번 포트를 사용
- 상태 기반 프로토콜로 client와 server 간의 세션을 유지함
기본 URL 구조
rtsp://[username:password@]hostname[:port]/path
FFmpeg
- 오디오·비디오를 인코딩, 디코딩, 변환, 스트리밍, 분석할 수 있는 멀티미디어 프레임워크
- 비디오/오디오 파일을 변환(인코딩/디코딩)하거나 녹화하거나 스트리밍할 때 사용
- 주요 실행파일로 ffmpeg, ffplay, ffprobe가 있음
ffmpeg
- FFmpeg의 멀티미디어 변환기 (FFmpeg에서 파일 인코딩/디코딩에 특화되어 있는 도구)
- 설정값
| 파라미터 | 위치 | 의미 | 예제 |
| y | 전역 | 출력 파일 덮어쓰기 (overwrite) | -i input.mp4 |
| re | 입력 앞 | 실시간 속도로 읽기 | -re -i input.mp4 |
| -i | - | 입력 파일 지정 (input) | -af "volume=2.0" |
| -c:v | 출력 | 코덱 지정 (codec) | -c:v libx264 |
| -af | 출력 | 오디오 필터 사용 (audio filter) | ffmpeg -y ... |
ffmpeg [전역옵션] [입력옵션] -i input.mp4 [출력옵션] output.mp4
- 결과값
| 항목 | 의미 | 단위 |
| frame | 처리된 프레임 수 | 개 |
| fps | 초당 처리 프레임 수 (인코딩 속도) | frames/sec |
| q | 품질 지표 (낮을수록 고품질) | - |
| size | 현재까지 생성된 파일 크기 | kB, MB |
| time | 처리된 미디어 시간 | HH:MM:SS.ms |
| bitrate | 평균 비트레이트 | kbits/s |
| speed | 실시간 대비 처리 속도 (1.0x = 실시간) | 배속 (x) |
frame= 7500 fps= 60 q=23.0 size= 102400kB time=00:05:00.00 bitrate=2800kbits/s speed=2.4x
| 상태 | fps | speed | q | 판단 |
| 정상 | 30~60+ | 1.0x 이상 | 18~28 | 안정적 |
| 느림 | 10 이하 | 0.5x 이하 | - | CPU 부족 |
| 고품질 | - | - | 18 이하 | 우수한 화질 |
| 저품질 | - | - | 35 이상 | 압축률 높음 |
ffprobe
- FFmpeg의 파일 정보 분석 도구 (FFmpeg에서 파일 분석에 특화되어 있는 도구)
ffplay
- FFmpeg의 실시간 멀티미디어 플레이어 (FFmpeg에서 영상 실행에 특화되어 있는 도구)
- 빠른 속도, 다양한 코덱 지원
- 설정값
| 파라미터 | 설정값 | 의미 |
| use_wallclock_as_timestamps | 1 | 실제 시스템 시간을 타임스탬프로 사용 |
| i | rtsp url | RTSP 통신 URL 지정 |
| fflags | nobuffer | 버퍼링 비활성화 |
| probesize | 숫자 | 스트림 분석에 사용할 데이터 크기 |
| analyzeduration | 숫자 | 스트림 분석 시간 |
| rtbufsize | 숫자 | 실시간 버퍼 크기 |
| sync | audio, video | 동기화 기준 설정 |
| framedrop | 없음 | 프레임 드랍 허용 |
| flags | low_delay | 저지연 모드 |
| window_tilte | 문자 | 재생창 제목 설정 |
| top | 숫자 | 재생창 좌표 설정(모니터 기준) |
| left | 숫자 |
ffplay -i rtsp://[아이디]:[패스워드]@[IP]:554
-rtsp_transport tcp -fflags nobuffer -flags low_delay
-use_wallclock_as_timestamps 1 -probesize 32 -analyzeduration 1 -window_title Camera1
-noborder -x 640 -y 480 -left 0 -top 0
- 결과값
| 항목 | 의미 | 단위 |
| A-V | Audio-Video 동기화 차이 | 초 |
| fd | dropped frames / total frames | 개수 |
| aq | Audio Queue - 오디오 버퍼 크기 | KB |
| vq | Video Queue - 비디오 버퍼 크기 | KB |
| sq | Subtitle Queue - 자막 버퍼 크기 | Bytes |
1765156965.51 A-V: -0.001 fd= 67 aq= 0KB vq= 40KB sq= 0B
- 정상: vq, aq가 적절한 값 유지 (수십~수백 KB)
- 버퍼링 부족: vq나 aq가 0에 가까움
- 지연 발생: vq나 aq가 계속 증가
- 동기화 문제: A-V 값이 크면 오디오/비디오 싱크 안 맞음
댓글