VPS와 FFmpeg를 사용해 안정적인 24/7 YouTube 라이브스트림을 구축한 방법 (SaaS 없이)
Source: Dev.to
도전 과제
스트림은 처음에 정상적으로 작동했지만, YouTube에서 계속해서 “Not receiving enough video” 라는 메시지를 표시했습니다. 시청자들은 화면이 멈추는 현상을 겪었고, 처음에는 네트워크 문제인 것처럼 보였지만 실제 원인은 아니었습니다.
근본 원인
VPS에서 FFmpeg가 지속적으로 ~98–100 % CPU를 사용하고 있었습니다. CPU가 100 %에 달하면:
- 인코딩이 느려짐
- 타임스탬프가 흐트러짐
- 비트레이트가 불안정해짐
- 때때로 YouTube에 0 kbps가 전송됨
스트림은 CPU‑바인드 상태였으며, 대역폭이 문제가 아니었습니다.
기술적 해결책
목표는 CPU 사용량을 안전하게 ~60 % 이하로 유지하는 것이었습니다. FFmpeg를 다음과 같이 조정했습니다:
- 더 빠른 프리셋 사용
-preset superfast - 예측 가능한 비트레이트 제어 적용
-b:v 2000k -maxrate 2000k -bufsize 4000k - 30 fps에 맞는 키프레임 간격
-g 60 -keyint_min 60 - 필요 시 스케일링
-vf scale=1280:-2
최종 작동 명령 (간소화)
ffmpeg -re -stream_loop -1 -i video.mp4 \
-vf scale=1280:-2 \
-c:v libx264 -preset superfast -profile:v high \
-b:v 2000k -maxrate 2000k -bufsize 4000k \
-g 60 -keyint_min 60 -r 30 -pix_fmt yuv420p \
-c:a aac -b:a 128k -ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/STREAM_KEY
CPU 사용량이 ~50–60 %로 감소했고, 스트림은 Excellent Health 상태로 안정화되었습니다.
주요 시사점
- CPU 부하는 라이브 스트리밍 안정성에 직접적인 영향을 미칩니다.
내가 이것을 만든 이유
SaaS 비용 제한 없이 신뢰할 수 있는 24/7 스트림을 원했습니다. 이미 서버를 관리하고 있었기 때문에 직접 구축하는 것이 합리적이었고, 스트리밍, DevOps, 시스템 신뢰성 전반에 걸친 훌륭한 엔지니어링 연습이 되었습니다.