소리가 들리지 않아요

라이브 스트리밍 운영하다 보면 "소리가 안 들려요"라는 리포트가 들어올 때가 있다. 원인은 수십 가지다. 플레이어 문제, 트랜스코딩 오디오 트랙 누락, 코덱 미스매치, 오디오 레벨 자체가 바닥 .. 어디서부터 봐야 하는지 감이 안 올 수 있다. 결론부터 말하면, 원본부터 확인하는 게 제일 빠르다. 파이프라인 끝단(플레이어)에서 올라가는 것보다, 입력단(소스)에서 내려가는 게 디버깅 효율이 훨씬 좋다. 그리고 속으로 제발 원래 소리가 없었길 기도한다..

Step 1: 원본 스트림 덤프

가장 확실한 방법은 인코더가 쏘는 원본 스트림을 그대로 떠보는 거다. rtmpdump로 RTMP 스트림을 파일로 떨군다:

rtmpdump -r "rtmp://push-domain/live/streamName" -o dump.flv

SRT 입력이면 ffmpeg으로 직접 받을 수도 있다:

ffmpeg -i "srt://host:port?mode=caller" -c copy -t 30 dump.ts

30초 정도면 충분하다. 이 파일에 오디오가 정상적으로 들어있는지 확인하는 게 첫 번째 관문이다.

Step 2: 라우드니스 측정

덤프 파일을 재생해 직접 들어보는 것도 가능하다. 다만 “무음”과 “거의 들리지 않을 정도로 작은 음량”은 생각보다 구분하기 어렵다. 이런 경우에는 EBU R128 필터를 이용해 라우드니스를 측정하면 보다 객관적으로 상태를 확인할 수 있다.

EBU R128이란

EBU R128은 유럽방송연맹(EBU)이 정한 오디오 라우드니스 표준이다. 핵심 지표는 LUFS (Loudness Units relative to Full Scale):

LUFS 값

의미

-14 LUFS

일반적인 스트리밍 서비스 기준 (Spotify, YouTube 등)

-23 LUFS

방송 표준 (EBU R128 권장)

-40 LUFS 이하

거의 안 들림

-70 LUFS

사실상 무음. 디지털 노이즈 플로어 수준

LUFS가 -70이면 "소리가 있긴 있다"가 아니라 "없다"고 봐야 한다. 기기 자체의 전자 잡음 수준이니까.

Step 3: ffmpeg ebur128 필터로 측정

ffmpeg에 내장된 ebur128 필터로 덤프 파일의 라우드니스를 측정한다:

ffmpeg -i dump.flv -af ebur128=peak=true -f null -

출력 마지막에 요약 정보가 나온다:

[Parsed_ebur128_0 @ 0x...] Summary:

  Integrated loudness:
    I:         -70.0 LUFS
    Threshold: -80.0 LUFS

  Loudness range:
    LRA:         0.0 LU
    Threshold:  -90.0 LUFS
    LRA low:   -70.0 LUFS
    LRA high:  -70.0 LUFS

  True peak:
    Peak:      -69.8 dBFS
image.png

Integrated loudness가 -70.0 LUFS. 이건 무음이다.

Loudness Range(LRA)도 0.0 LU — 볼륨 변화가 전혀 없다는 뜻이다. 실제 오디오 신호가 있다면 LRA가 최소 몇 LU는 나온다.

정상 케이스는 보통 이렇다.

image.png

결론

이 케이스의 원인: 원본 스트림에 애초에 소리가 없었다.

트랜스코딩 문제도 아니고, CDN 문제도 아니고, 플레이어 문제도 아니다. 인코더가 오디오를 못 잡고 있거나, 소스 장비(카메라, 믹서)에서 오디오 출력이 안 되고 있는 상황이다.

오디오 트랙 자체는 존재한다 — 컨테이너에 오디오 스트림이 있고, 샘플도 들어있다. 다만 레벨이 -70 LUFS, 즉 디지털 노이즈 플로어 수준이라 사실상 무음 데이터만 찍히고 있는 거다. ffprobe로 보면 오디오 스트림이 "있다"고 나오니까 메타데이터만 보면 정상으로 보일 수 있다. 이래서 라우드니스 측정이 필요하다.

이런 케이스에서 "트랜스코더 설정 바꿔보자", "CDN 캐시 퍼지하자" 이런 식으로 가면 시간만 날린다. 원본 덤프 → 라우드니스 측정. 2분이면 끝나는 걸 돌아가면 2시간이다.

요약 체크리스트

  1. rtmpdump 또는 ffmpeg -c copy로 원본 스트림 덤프

  2. ffmpeg -af ebur128=peak=true -f null -로 라우드니스 측정

  3. Integrated loudness 확인:

    • -40 LUFS 이상: 정상 범위. 문제는 다운스트림에 있음

    • -40 ~ -60 LUFS: 매우 낮음. 소스 레벨 확인 필요

    • -60 LUFS 이하: 사실상 무음. 소스 장비 점검

끝.