- 현상 : 실시간 관제를 위한 서비스에서 관제 영상이 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에서 영상소스가 끊기면 어떻게 경험할 것인가