본문 바로가기

IT/리눅스

ffmpeg 송출 에러 av_interleaved_write_frame(): Broken pipe 해결

반응형

ffmpeg으로 스트림을 송출할 때 전송 중 av_interleaved_write_frame(): Broken pipe 에러가 발생 할 수 있습니다. 

 

저같은 경우는 rtsp 송출을 시험하면서 frame rate를 30에서 5 fps로 줄였더니 발생하더군요. 

물론 여러가지 케이스가 있을 수 있겠지만 대부분은 버퍼 조정과 지연 조정으로 해결이 됩니다. 

 

다음 기본 옵션에서는 정상 이었으나 

ffmpeg -stream_loop -1 -re -i "data/test.ts" -c:v libx264 -c:a aac -f rtsp rtsp://localhost:8554/test_stream

 

다음과 같이 5fps로 프레임 레이트를 조절 한후 에러가 발생 했습니다. 

ffmpeg -stream_loop -1 -re -i "data/test.ts" -c:v libx264 -c:a aac -r 5 -f rtsp rtsp://localhost:8554/test_stream

 

몇가지 옵션을 추가 해보겠습니다. 저는 좋다는 건 일단은 다 때려 넣었지만 조절이 필요할 수도 있습니다. 

 

(1) -max_interleave_delta 옵션 


-max_interleave_delta 0 옵션은 FFmpeg가 패킷을 더 잘 정렬할 수 있도록 도와줍니다.

 

(2) -rtsp_transport tcp 옵션

 

-rtsp_transport tcp 옵션을 사용하여 TCP를 통해 스트림을 전송하면 안정성을 높일 수 있습니다.

 

(3) FFmpeg 버퍼 설정 조정


버퍼 설정을 조정하여 스트림 송출의 안정성을 높일 수 있습니다. -bufsize와 -b:v 옵션을 사용하여 비디오 버퍼 크기를 설정합니다. 

이 값은 비트레이트에 영향을 주기 때문에 인코딩 화질에 직접 관여합니다.

 

(4) 기타 설정 

 

-flags +low_delay: 낮은 지연을 설정합니다.
-rtsp_flags listen: 서버 모드에서 RTSP를 실행합니다.
-tune zerolatency: 인코딩 지연을 최소화합니다.

 

 

이렇게 완성된 명령어는 다음과 같습니다. 

 

ffmpeg -stream_loop -1 -re -i "data/test.ts" -c:v libx264 -c:a aac -r 5 -bufsize 1024k -b:v 2000k -f rtsp -rtsp_transport tcp -max_interleave_delta 0 -flags +low_delay -tune zerolatency rtsp://localhost:8554/test_stream

 

이제 에러가 사라졌군요. 

정상적으로 5fps로 송출이 됩니다. 

 

 

 

 

반응형