안녕하세요. 오늘은 실시간 미디어 서버를 구축하는 방법에 대해 다뤄보겠습니다.
https://github.com/bluenviron/mediamtx
MediaMTX(구 rtsp-simple-server) 오픈 소스 프로젝트는
즉시 사용가능한, 종속성이 없는 실시간 미디어 서버 및 미디어 프록시로 개발되었습니다.
다양한 프로토콜과 코덱을 지원하여 스트림을 할 수 있게 개발되어
무척이나 간편하게 사용할 수 있는 프로그램(서버)입니다.
위 링크를 들어가시면
이런식으로 우측 하단에 Releases 버전이 올라와있고,
해당 버튼을 누르면
해당 버전의 변경된 사항들의 설명과
컴파일된 파일들이 올라와있습니다.
저희는 윈도우 버전을 이용해 미디어 서버를 구축해볼테니
windows라고 써져있는 압축파일을 다운로드하시면 됩니다.
mediamtx_v1.버전_windows_amd64.zip
해당 서버의 파일을 다운받으셨으면 압축을 풀어줍니다.
mediamtx.yml 파일을 메모장으로 열어보시면
각 항목별 글로벌 설정, 프로토콜 별 설정, 포트설정 등 다양한 설정을 변경하실 수 있습니다.
별도로 수정은 추후에 하는 것으로 하고, mediamtx.exe 파일을 실행하여 서버를 실행시켜줍니다.
이런식으로 정상적으로 창이 꺼지지않고 정보가 나오면 서버는 켜진 상태입니다.
우선 해당 서버를 이용해 화면을 송출하는 방법부터 알아보겠습니다.
rtmp 프로토콜 및 rtsp 프로토콜 또는 WHIP을 이용해 서버에 영상 데이터를 전송하면
미디어 서버측에서 이를 수신받아, 영상을 게시할 수 있습니다.
최근 OBS(Open Broadcaster Software) 에서 WHIP 방식의 영상 전송 방식을 지원하는데,
이는 매우 적은 지연시간으로 영상을 전송할 수 있는 방식입니다.
따라서 송출방식을 각각 rtmp(옛날 방식) 과 whip(최신 방식)을 이용해 영상을 전송 후 영상을 게시하여 비교해보겠습니다.
해당 링크에서 obs를 받아줍니다.
설치를 하면 아래와 같은 화면이 나옵니다.
그러면 우측 하단의 설정 버튼을 눌러줍니다.(영어로 되있으시면 Setting)
설정창이 열리면 일반 탭에 언어 설정 탭이 있습니다. 해당 부분 참고 부탁드립니다.
저희가 살펴보아야 할 곳은 방송 탭 과 출력 탭입니다.
방송 탭을 가보겠습니다.
서비스 탭을 선택하면 OBS 가 지원하는 스트리밍 사이트들 목록이 쭉 뜹니다.
저희는 그중에서 '사용자 지정' 과 ‘WHIP' 목록을 이용하여 영상을 서버에 전송할 것입니다.
우선 rtmp 프로토콜을 이용해 영상을 전송해보겠습니다.
사용자 지정 탭으로 선택 후
서버에 아래 정보 입력
서버 : rtmp://localhost:1935
스트림 키 : mystream (임의로 설정)
이후 방송 시작
방송을 시작하게되면 rtmp 프로토콜로 서버측에 데이터가 전송되며,
서버측에선 이를 수신받아 다양한 프로토콜로 게시하게됩니다.
게시한 영상을 간편하게 확인하려면, 여러가지 방법이 있는데,
대표적으로 서버측에서 지원하는 게시방법 (웹브라우저)으로 접속이 가능합니다.
1.hls 방식(지연시간 긺)
http://localhost:8888/mystream (임의로 설정한 스트림 주소)
2.webrtc 방식(지연시간 적음)
http://localhost:8889/mystream (임의로 설정한 스트림 주소)
혹은 vlc 와 같은 외부 프로그램으로 rtmp, rtsp 프로토콜을 직접 읽어올 수 있습니다.
rtmp 방식의 가장 큰 문제점은, 효율적이지 않고 지원되는 코덱도 한정적입니다.
때문에 rtmp 방식으로 영상을 전송하게 되면 위 방식에서 webrtc 방식으로 송출한 영상은
소리가 나오지 않게됩니다(코덱 미지원)
때문에 지연시간이 중요한 경우 최신버전 OBS에서 지원하는 WHIP 방식으로 영상을 전송하시는 것을 권장드립니다.
다음은 WHIP 방식 전송 방법입니다.
오디오 인코더를 변경하겠냐는 문구인데, 예를 선택해줍니다.
Bearer 토큰 항목은 비워주고 아래와 같이 입력해줍니다.
http://localhost:8889/mystream/whip
이후 방송 시작
그리고
http://localhost:8889/mystream (임의로 설정한 스트림 주소)
로 접속해보시면 영상이 나오고, rtmp 로 출력할 때와는 달리..
우측 하단을 보시면 소리가 활성화되어 출력되고 있다는 것을 확인하실 수 있습니다.
지연시간도 로컬환경에서 테스트 했을 때 1초 미만으로 초 저지연이라 할 수 있을만한 반응속도네요.
지금도 꾸준히 개발되고있고, 많은 개발자들이 기여중인 프로젝트라
앞으로 어떻게 바뀌고 더 개선된 모습으로 나올지 기대중인 프로젝트입니다.
블로그의 모든 글 펌은 자유이나 출처만 표기해주시면 감사하겠습니다.