요약
- UDP 패킷 크기 분포만으로 오디오 코덱을 추정할 수 있다: Opus는 100-200B, PCM은 ~960B 이상
- 정확한 코덱 식별은 아니지만 "압축 오디오 vs 비압축 PCM" 구분에는 충분하다
- RTP/프로토콜 오버헤드를 고려해야 하므로, 순수 payload 크기가 아닌 전체 패킷 크기로 분석한다
본문
방법
sudo tcpdump -i en0 udp -c 1000 -w /tmp/capture.pcap
캡처 후 수신 패킷만 필터링하여 크기 분포를 분석한다:
tcpdump -r capture.pcap -nn 'udp and src host <서버IP>' | \
awk '{for(i=1;i<=NF;i++) if($i ~ /length/) print $(i+1)}' | \
sort -n | uniq -c | sort -rn
판별 기준
| 패킷 크기 | 코덱 추정 | 근거 |
|---|---|---|
| 60-200B | Opus (또는 다른 압축 코덱) | Opus 20ms 프레임 at 24-48kbps = 60-120B payload + RTP 헤더 |
| ~960-1920B | PCM (비압축) | 48kHz × 2B × 1ch × 10-20ms |
| 200-500B | 번들 패킷 또는 FEC 포함 | 여러 프레임 번들링 또는 FEC 중복 데이터 |
한계
- 패킷 크기만으로는 Opus와 다른 압축 코덱(AAC, G.722 등)을 구분할 수 없다
- RTP 헤더 크기(12B+), 프로토콜 오버헤드, 암호화 패딩이 포함되어 순수 payload 크기와 다름
- 제어/시그널링 패킷이 섞여 있으므로 구간별 필터링 필요
실제 적용 사례
Agora 통화 녹음 서비스에서 tcpdump로 397개 수신 패킷을 분석한 결과:
- 51-200B 구간에 76% 집중, 평균 130B → Opus 인코딩 확인
- 1001B 이상은 0.7% → PCM이 아님을 확인