본문 바로가기

개발 프로젝트/2025 영상분석 솔루션 프로젝트

영상 ffmpeg 인코딩 후 HLS 송출시 Latency 문제 개선

  • 현상 : 실시간 관제를 위한 서비스에서 관제 영상이 HLS로 송출될때 1분이상 지연된 영상이 송출됨
  • 원인 : ffmpeg에서 인코딩할 시에 영상segment가 25초짜리 3개의 ts 파일로 인코딩 되어 있어 75초 이전의 영상이 송출됨
    • 심층원인 : 인코딩 전의 영상소스가 rtsp로 25초당 1번꼴로 keyframe이 삽입되어 파일 인코딩을 25초 단위로 할 수 밖에 없었음
  • 해결책 : 실시간 관제 서비스이기때문에 연결의 안정성보다는 실시간성이 중요하기때문에 끊김을 감수하더라도 ts파일을 2초, 2개로 설정
    • 심층원인 해결책 :  ffmpeg를 사용해서 keyframe을 1초당 30번으로 강제변환하여
  • as is
    •  
ffmpeg -i rtsp://127.0.0.1:7682/Test-01 \
-c:v copy -c:a copy \
-hls_time 5 \
-hls_list_size 3 \
-hls_flags delete_segments+append_list \
-fflags nobuffer \
-strict experimental \
-avioflags direct
-fflags discardcorrupt \
-flags low_delay \
-start_number 1 \
/home/hls/output.m3u8
  • to be
    • c:v c:a
ffmpeg -i rtsp://192.168.0.6:554/instance \
-c:v libx264 -preset ultrafast -tune zerolatency \
-g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" \
-c:a aac -b:a 128k \
-hls_time 2 -hls_list_size 2 \
-hls_flags delete_segments+append_list \
-hls_allow_cache 0 -fflags nobuffer -strict experimental \
-avioflags direct -fflags discardcorrupt -flags low_delay \
-start_number 1 /home/data/hls/2/output.m3u8

 

  • furtherchecking
    • HLS에서 webclient가 네트워크가 끊기면 서비스 이용자가 어떻게 경험할 것인가
    • HLS에서 영상소스가 끊기면 어떻게 경험할 것인가