[TIL] 실시간 스트리밍 지연 문제 - 트랜스코딩 설정 조정 결과

sooyoung choi·2024년 2월 6일
0

내일배움캠프

목록 보기
17/19
post-thumbnail

동일한 조건

  • 로컬 환경에서 테스트
  • OBS Studio 세팅 값
  • 서버 키자마자 바로 첫번째로 측정!
    한 결과 값
    - 여러번 할수록 딜레이 시간이 늘어나고 있는 상황

세팅

...
rtmp {
    server {
        listen 1935;
        listen [::]:1935 ipv6only=on;    
         application stream {
            live on;

            exec ffmpeg -i rtmp://localhost:1935/stream/$name
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 750k -f flv -g 30 -r 30 -s 640x360 -preset superfast -profile:v baseline rtmp://localhost:1935/live/$name_360p878kbs
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 400k -f flv -g 30 -r 30 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/live/$name_240p528kbs
              -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 200k -f flv -g 15 -r 15 -s 426x240 -preset superfast -profile:v baseline rtmp://localhost:1935/live/$name_240p264kbs;

...


프리셋

-preset superfast
  • 빠른 인코딩 속도를 제공
  • ultrafast로 변경하면 인코딩 속도를 더욱 높일 수 있다.
  • 딜레이를 줄이는 데 도움이 될 수 있지만, 비트레이트 대비 품질이 다소 저하될 수 있다.

프리셋 조정 superfast -> ultrafast

-preset ultrafast


키 프레임 간격

flv -g 30
  • 키 프레임 간격(-g 옵션)은 스트리밍의 지연 시간에 영향을 줄 수 있다.
  • 딜레이와 품질의 균형을 맞춰야 하기 때문에 키 프레임 간격을 3초에서 5초 사이로 설정해야 한다.

키 프레임 간격 조정 30 -> 90, 15 -> 90

  • 기존 1초당 30프레임
  • 조정 값 3초
 exec ffmpeg -i rtmp://localhost:1935/stream/$name
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 750k -f flv -g 90 -r 30 -s 640x360 -preset ultrafast -profile:v baseline rtmp://localhost:1935/live/$name_360p878kbs
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 400k -f flv -g 90 -r 30 -s 426x240 -preset ultrafast -profile:v baseline rtmp://localhost:1935/live/$name_240p528kbs
              -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 200k -f flv -g 90 -r 15 -s 426x240 -preset ultrafast -profile:v baseline rtmp://localhost:1935/live/$name_240p264kbs;


결과


기존 세팅, 딜레이 20초


조정 후, 딜레이 10초



로컬 환경에서 테스트 해봤을때 딜레이에 대한 문제는 트랜스코딩만으로는 해결되지는 않지만 꽤 의미있는 결과가 나왔다.

그러나 도커 서버를 실행하자마자 바로 방송을 켜서 딜레이 측정했을때에 비해 좀 더 켜놓고(시간이 지난 후) 방송도 여러번 켜고 나서 실행 됐을때의 딜레이가 점점 더 늘어나고 있다.

  • 처음 켰을때 조정 전 20초, 조정 후 10초
  • 방종 후 또 켰을때(시간이 좀 지체된 후) 조정 전 44초, 조정 후 27초

서버의 문제일수도 있지만 정확히 왜그런지에 대해 알아봐야겠다.
그치만 딜레이 차이 부분에서는 꼭 각 서버에서 첫번째 방송이 아니여도 조정 전, 후 딜레이 차이는 비슷하게 나고 있는 상황으로 보아 의미 있는 테스트였다.

2개의 댓글

comment-user-thumbnail
2024년 2월 21일

안녕하세요! 최근 저도 nginx로 스트리밍 서버 구축을 하고있는데
혹시 등록된 스트림키로만 방송을 송출할 수 있게 할 수 있게 하는 검증 부분을 구현하셨을까요?
아니면 아무 스트림키로도 rtmp서버에 접근이 가능한가요??

1개의 답글