일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JPA
- async
- 멀티쓰레드
- Gradle
- api설계
- @async
- restful
- RDB
- autowired
- 라이브커머스
- 네이버
- 스프링
- mariaDB
- 인턴생활
- db 스키마
- Spring
- wooza
- 자바
- SpringBoot
- REST API
- 이커머스
- AWS
- 서버구축
- 실검
- cmi
- 미디어서버
- DB 설계
- 스트리밍서버
- API
- 이커머스 api
- Today
- Total
Polymor!
wowza 스트리밍 서버 구축하기 본문
스트리밍 서버를 떠올리면 대표적으로 여러 플랫폼이있다, Wowza Engine , AWS , Azure 등
AWS도 관심이많지만 와우자도 많이 쓰이고 예전부터 많이 듣던거라.. 와우자로 구축하기로 결정
스트리밍 기법엔 크게 Live와 VoD(video on demand) 방식이 있다. 쉽게 이해하면 실시간 아프리카 티비랑 넷플릭스, 두개의 차이를 생각하면 이해가 된다. Live 는 빠르고 정확한 인코딩이 필요할 거고.. VoD는 방대한 데이터베이스가 필요할 것이다. (참고로 AWS + WOWZA ENGINE 으로 데이터베이스와 스트리밍 서버 분리된 모델도 지원한다고 나와있다.)
Wowza Cloud 는 말그대로 돈내면 모든걸 다 관리해주는 (CDN까지..wow) 소프트웨어 완제품같고, Wowza Engine은 API 제공해주고 커스터마이징 가능한 수준에서 알아서 할 수 있으면 해라 하듯 제공해주는 플랫폼정도라 보면 될 것같다.
First Mile 에서 인코딩은 영상이 그냥 보내면 너무 방대한 데이터니 압축을 해주는 기법이다. 실제로 매우 중요한 파트이다.
CDN은 'Content Delivery Network' 의 약자로, 한마디로 클라이언트한테 인터넷을 통해 전달되기 직전단이라고 보면 된다.
CDN은 왜 중요하고 많은 비용을 지불해서도 사용해야할까? 아래 그림을 보면 바로 이해가 될듯하다.
위 그림처럼 한대의 물리 서버를 구축해놓는다 가정을 해보자. 그리고 유튜브같은 전세계 네트워킹 플랫폼을 돌리게되면,
트래픽, 서버 과부하 문제는 둘째치고, 서울에서 라이브하는 방송을 뉴욕에서 보려면.. 라이브가 가능할까?
이번엔 오리지널 서버를 여러 캐시 서버로 분산시켜놓으면, 예를 들면 본사는 서울인데, 뉴욕,도쿄,파리에 같은 데이터를 저장해놓은
캐시서버를 두면, 비교적 빠르게 캐시서버를 로컬서버로 이용해서 처리할 수있지않을까?
물론 인터넷으로 넘어가는 순간 내 영역밖이겠지만, 그 직전단까지 최대치로 성능을 끌어놓는걸 CDN이라고 생각하면 될 것 같다.
무엇보다도 Low Latency (낮은 지연시간) 이 굉장히 중요한 스트리밍 영역에서는 이러한 설계도 신경을 많이 써야할 것이다.
여담으로 요즘은 많은 통신 기업에서 (미국 At&t, 한국 KT 등..) CDN 사업영역을 엄청나게 확장한다. KT CDN 클라우드..돈이된다.
스트리밍 서버는 파면 팔수록 알아야 하는 내용이 너무 많기 때문에... 우선은 여기까지하고 와우자를 깔아보자
우선 wowza 공홈에 들어가서 Wowza Engine 을 다운로드한다. ( Wowza Cloud는 엔드유저가 사용하는 플랫폼 같고..개발목적이면 엔진)
wooza engine 은 기본적으로 자바 기반이니 자바도 함께 설치한다. 참고로 java 9 ~ 12 를 지원한다고 나오는데, 나는 15 최신 버전이었지만 문제가 없었다.
설치 이미지를 다운로드하고, 인증 번호도 메일로 받아 잘 설치하면, 아래처럼 Engine Manager 라는 관리자 페이지가 자동으로 로딩된다.
나는 맥유저라
/Library/WowzaStreamingEngine-4.8.5.05 위치에 설치됨을 확인했다.
설치는 간단한데, 몰랐던 개념때문에 좀 애를 먹었다.
디폴트로 wooza engine 이 SERVICE 모드로 실행되고 있었는데, 이거는 STAND ALONE 모드와 별개이다.
서비스 모드에서 터미널 서버 언로딩 명령어는
sudo launchctl unload -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist 인데
나는 STAND ALONE 모드로 착각해서 /Library/WowzaStreamingEngine-4.8.5.05/conf/./shutdown.sh 로 서버 언로딩을 하려하니 잘 안됬었다. 이 부분을 헷갈리면 안된다.
반대로 로딩할때는
서비스 모드 : sudo launchctl load -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist
stand alone 모드: conf/./startup.sh
그리고 포트를 디폴트로 8088을 사용을하고, 8087 은 RESTFul 포트인데 이것도 설정 파일 (server.xml) 에서 손대서 꼬였었다.
다른건 바꾸어도 무관한데 8087은 바꾸면 안된다.
오늘 내가 해본건 mp4확장자로 test.mp4라는 영상을 서버에 올려 VoD streaming을 테스트해보았다. 우선 VoD app을 하나 만들고, Configuration만 잘 맞춰서 컨텐츠를 올리면 매우 쉽게 실행되는걸 확인할 수있다.
conf/Server.xml 만 손대고 content/올리고싶은영상.mp4 하면 된다.
내 브라우저가 지원하는 프로토콜은 MPEG DASH밖에 없어서 이거로 우선 확인을했다. 영상 프로토콜도 정말 여러가지가 있는데 ,
그중 신기한건 Apple HLS 는 http프로토콜을 그대로 쓴다. 애플 디바이스는 웬만하면 다 지원이 되는걸로 아는데 맥은 안되나보다.
서버는 복잡하다. 영상 스트리밍은 오죽할까싶지만, wooza engine을 깔아보니 헷갈렸던 개념들이 많이 정립이되었다. 까보면 톰켓이랑 이것저것.. 그냥 일반 웹서버 구성이랑 비슷해서 빨리 적응할 수 있을것 같다. 다음번엔 encoding을 해보려한다.
'Web' 카테고리의 다른 글
[e-commerce] ORM & DB 스키마 설계 (1) | 2021.02.06 |
---|---|
[e-commerce] 개발 동기와 그 여정들 (0) | 2021.02.06 |
[네트워크] 비동기와 동기 그리고 멀티 쓰레드에 관한 이야기. (0) | 2020.07.28 |
Tiktok 스트리밍 서비스 앱 (0) | 2020.06.07 |
스트리밍 프로토콜 이해하기(feat.네이버 V라이브) (0) | 2020.05.30 |