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로 송출이 됩니다.
'IT > 리눅스' 카테고리의 다른 글
리눅스에서 tar로 묶은 파일을 윈도우 파워쉘에서 압축 해제 시 한글 깨지는 문제 해결 (0) | 2024.08.22 |
---|---|
wget 명령어의 모든것(HTTP, HTTPS, FTP 지원, 복수파일, 폴더전체, 이어받기 등등) (0) | 2024.07.24 |
ffmpeg으로 rtsp 송출하기(RTSPSimpleServer, mediamtx) (0) | 2024.07.12 |
Ubuntu에서 방화벽 설정하기(우분투 ufw, IP범위, 포트범위) (0) | 2024.06.05 |
파일 시스템이란? NTFS와 exFAT 특징과 차이점 (0) | 2024.04.17 |