사설 중계 서버 내용 정리
사용 소프트웨어
- Oven Media Engine (서버)
- OvenPlayer (플레이어)
서버 사양
- Linode - Shared CPU (linode 2 GB)
- 월 10$
- 1 CPU / 50GB 용량 /2GB RAM
- 40 Gbps In / 2 Gbps Out - 리전 : JP
- OS : Ubuntu 20.04 LTS
경험상 8인까지 해당 사양으로 송출하는데 문제 없었음
부하의 대략적인 계산 상 대역폭 한계까지 한번에 이용하는데 문제 없을듯
이번 대회(2023 Lima Major)의 경우 QHD 18000 Kbps (2.25 MB/s) 로 송출이니 동일 사양 기준 최대 110명 가량 수용 가능해보임
서버의 준비가 끝나면 즉시 IP를 확인해 도메인과 연결할 필요가 있음
추후 https 연동 때 지연될 일 없도록
서버 설정
해당 문서를 따라하면 끝이지만 일부 기능의 경우 Git 버전과 가이드 버전이 상이해 설치 시 문제가 발생할 수 있음
일단 처음 vps를 열면 기본으로 다음 줄을 실행해야한다
sudo apt-get update & sudo apt-get upgrade
1. Oven Media Engine (이하 OME) 다운로드
2. OME 빌드 및 실행
3. 방화벽 설정
sudo ufw allow 3333/tcp
sudo ufw allow 3334/tcp
sudo ufw allow 1935/tcp
sudo ufw allow 9999/udp
sudo ufw allow 4000/udp
sudo ufw allow 3478/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 10000-10005/udp
4. OME 준비
nano /usr/share/ovenmediaengine/conf/Server.xml
<Application>
<Name>앱이름(event)</Name>
...
...
</Application>
---
<OutputProfiles>
<OutputProfile>
<Name>스트림이름(hawawa)</Name>
...
</OutputProfile>
</OutputProfiles>
이후 앱이름과 스트림이름은 방송 설정 중 사용
5. https 준비
- certbot 설치
apt-get install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --standalone
- ome와 인증키 연결
송출 설정
비트레이트 등의 자유이며 해상도의 경우 OvenPlayer가 자동으로 변형됨
1. 프로토콜
- RTMP
- h264 로 방송
- 안정적임
OBS 송출 설정
URL : RTMP://도메인.주소:포트/앱이름
Stream Key : 스트림이름
위 앱이름 스트림 이름은 서버 설정 4. 항목에서 가져옴
- SRT (Beta)
- 요즘들어 어느정도 대중화된 H.265 (HEVC) 사용 가능
- 하드웨어 인코딩 (NVENC) 사용하여 부담줄일 수 있음
- 다만 송신에 H.265 이용 불가해 x264 강제
- 새 오픈소스 코덱인 AV1까지는 x264 쭉 가야할듯
OBS 송출 설정
URL : srt://도메인주소:포트?streamid=srt%3A%2F%2F도메인주소%3A포트%2F앱이름%2F스트림이름
Stream Key : 불필요
- WebRTC 등 기타
- 더욱 저지연 프로토콜도 있으나 안정성 문제로 이용 안함
- 해당 글은 양방향 통신, 초저지연 컨텐츠보다는 일반 방송 서버에서 제공하지 못하는 대역폭의 고화질 이벤트 방송용임
OvenPlayer 설정
이전 이벤트 (TI 11) 의 경우 두가지 송신 프로토콜을 제공함
WebRTC (더 낮은 지연, 비교적 불안정) / llhls (낮은 지연, 비교적 안정)
ll-dash 등을 사용해봤으나 당시 훨씬 불안정한 모습을 보여 위 두가지만 지웠했으며 대부분의 경우 이 2가지 프로토콜로 원활한 시청이 가능했다고 함
OvenPlayer 용 스크립트
<!--js 2개 로드-->
<!--llhls js 받기-->
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest/dist/hls.min.js"></script>
<!--ovenplayer js 받기-->
<script src="https://cdn.jsdelivr.net/npm/ovenplayer/dist/ovenplayer.js"></script>
<!--플레이어 생성-->
<div id="플레이어이름"></div>
<!--플레이어 설정-->
<script>
// Initialize OvenPlayer
const player = OvenPlayer.create('플레이어이름', {
sources: [
{
label: 'WebRTC 라벨이름',
type: 'webrtc',
file: 'ws://도메인주소:3333/앱이름/스트림이름'
},
{
label: 'hls 라벨이름',
type: 'llhls',
file: 'https://도메인주소:3334/앱이름/스트림이름/llhls.m3u8'
}
]
});
</script>
위 내용에서도 나와있듯 두 url
- ws://도메인주소:3333/앱이름/스트림이름
- https://도메인주소:3334/앱이름/스트림이름/llhls.m3u8
의 경우 웹플레이어 외 설치형 플레이어 (VLC, 팟플레이어 등) 에 주소로 입력해 시청 가능함
덤 1
최근 ome 와 ovenplayer를 개발해 공개하던 회사가 OvenVideo 라는 비디오 관리 플랫폼 서비스를 출시함
해당 서비스 내용은 생각중이던 커뮤니티 플랫폼 제작에 용이해보이나 결국 본인이 개발자가 아니고, 자세한 내용까지 나와있지는 않아 이후 관리가 필요해질 때 확인 필요해보임
특히 현 고객으로 SK, KT, 카카오, KBS 등이 있는걸로 보아 일반적인 개인 수준에서 이용할 서비스로 보이지는 않음
덤 2
VP9 등이 망하고 h.26x는 라이센스 문제로 잘 이용되지 않던 중 AV1이 이번 그래픽카드 세대에 들어 하드웨어 인코딩을 지원하기 시작함
오픈소스고 구글 애플 등 여러기업에서 미니 향후 2~3년 내에는 어지간하면 다 지원할 것으로 보임
특히 인코딩의 경우 인텔 Arc, AMD RDNA 3 (7천번대), nVidia ada (4천번대) 에서 지원하며 그중 Arc의 인코더로서의 가성비가 매우 뛰어난 편
나중에 다시 스트리밍 PC를 쓰레드리퍼로 돌리게 된다면 현재 사용중인 A4000에 추가로 A770 생각중