본문 바로가기

IT/리눅스

ffmpeg으로 rtsp 송출하기(RTSPSimpleServer, mediamtx)

반응형

 

ffmpeg으로 시험환경을 구성하면서 udp 송출은 간단하게 구현이 되기 때문에 rtsp도 똑 같이 실행해보려고 했습니다. 

 

아래는 udp 송출 예시 입니다. 

 

https://yongeekd01.tistory.com/164

 

ffmpeg으로 nvidia gpu로 영상 인코딩 하면서 multicast 송출하기(멀티 GPU사용, hwaccel, cuda)

ffmpeg으로 동영상을 송출하기에 이어서 NVIDIA 멀티 GPU를 이용하여 인코딩을 추가하여 고속으로 송출하는 방법을 알아보겠습니다. https://yongeekd01.tistory.com/163 다양한 포맷의 동영상 파일을 mpegts, ud

yongeekd01.tistory.com

 

 

비슷한 방법으로 아래와 같이 명령어를 주고 수행을 했더니 에러가 발생합니다. 

 

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

 

 

 

Connection to tcp://localhost:8554?timeout=0 failed: Connection refused
Could not write header for output file #0 (incorrect codec parameters ?): Connection refused

 

ffmpeg으로 rtsp를 송출하는데 있어서는 ffmpeg 자체 기능만 가지고는 안되고 rtsp 서버가 필요합니다.

 

1. RTSPSimpleServer

RTSPSimpleServer는 RTSP (Real-Time Streaming Protocol) 서버 소프트웨어로, RTSP 스트림을 간단하게 설정하고 관리할 수 있도록 설계된 도구입니다. 이 서버는 주로 실시간 비디오 및 오디오 스트리밍 애플리케이션에서 사용됩니다.

 

* 주요 특징

 

(1) RTSPSimpleServer는 매우 간단하게 설치하고 설정할 수 있습니다.

기본 설정 파일을 제공하며, 복잡한 설정 없이 바로 사용할 수 있습니다.

 

(2) 다양한 포맷의 비디오 및 오디오 스트림을 지원하여 RTSP 클라이언트와의 호환성이 뛰어나며, 여러 스트림을 동시에 처리할 수 있습니다.

 

(3) 시스템 리소스를 적게 사용하여 효율적으로 동작합니다. 이는 고성능 스트리밍 서버가 필요한 경우에도 적합합니다.

 

(4) GitHub에서 소스 코드를 제공하며, 커뮤니티의 기여와 피드백을 통해 지속적으로 개선되고 있습니다.

https://github.com/bluenviron/mediamtx

 

GitHub - bluenviron/mediamtx: Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read,

Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams. - bluenviron/mediamtx

github.com

 

 

2. RTSPSimplerServer 설치 및 실행 

다음 페이지에서 다운로드 버전을 확인합니다. 

 

https://github.com/bluenviron/mediamtx/releases 

 

Releases · bluenviron/mediamtx

Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams. - bluenviron/mediamtx

github.com

 

저는 아래 버전을 사용했습니다. 

mediamtx_v1.8.4_linux_amd64.tar.gz

 

파일을 다운로드 받고 압축을 풀어주세요

wget https://github.com/bluenviron/mediamtx/releases/download/v1.8.4/mediamtx_v1.8.4_linux_amd64.tar.gz

tar xvzf mediamtx_v1.8.4_linux_amd64.tar.gz

 

서버를 실행합니다. 

./mediamtx

 

 

3. ffmpeg 으로 rtsp 스트리밍 하기 

다시 명령어를 수행해 보겠습니다. 

 

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

 

어? 에러가 나는군요

Could not write header for output file #0 (incorrect codec parameters ?): Server returned 400 Bad Request

 

서버쪽에서 찍힌 에러를 보니 SDP 파일에 문제가 있다고 나옵니다. 

2024/07/12 14:49:19 INF [RTSP] [conn 127.0.0.1:48808] closed: invalid SDP: media 2 is invalid: clock rate not found
2024/07/12 14:49:19 INF [RTSP] [session 85894030] destroyed: not in use

 

ffmpeg에서 SDP 오류는 코덱을 명시적으로 지정하지 않는 경우에 발생할 수 있습니다. 

 

비디오 오디오 코덱을 지정하고 다시 실행해 보겠습니다.

 

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

 

 

정상적으로 실행이 되었습니다. 

 

4. 클라이언트에서 확인하기 

 

vlc 로 접속 해서 확인해 볼까요?? 네트워크 스트림 열기로 ffmpeg 을 실행한 주소를 접속합니다. rtsp://192.168.10.219:8554/test_stream

 

 

정상 적으로 rtsp 스트림이 송출되고 있는 것을 확인할 수 있습니다. 

 

다음은 참고 

 

https://yongeekd01.tistory.com/199

 

vlc를 이용해서 동영상 파일을 rtsp 스트림으로 전송하기

개발하면서 테스트 하다보면 스트림을 가상으로 생성해서 수신해야 하는 경우가 있습니다. 여기서는 많이 사용하는 vlc 를 이용하여 rtsp 스트림을 전송해보고 다른 app에서 수신해보겠습니다. 

yongeekd01.tistory.com

 

반응형