3장. 동영상 서비스 패턴¶
이 장에서는 동영상을 빠르고 호환성있게 전달하는 패턴에 대해 설명한다. 동영상 서비스에서는 pattern-infra-2tier 가 기본이 될 만큼 엄청난 저장공간과 전송대역폭을 필요로 한다. 막대한 비용이 지출되는 만큼 어떻게 안정적이고 경제적인 서비스를 구성할 것인가에 초점을 맞추어야 한다.
실시간 HLS 전송¶
해결하고 싶은 문제¶
아이폰을 기준으로 시장표준 동영상 전송방식은 HLS(Http Live Streaming)이다. 이미 스토리지에 MP4포맷으로 저장된 수 많은 영상을 HLS의 미디어 포맷인 MPEG2-TS로 분할(Segmentation)하기에는 시간과 공간의 제약이 크다.
구현¶
동영상 스토리지/서비스 앞에
M2
를 배치한다.MP4HLS 기능을 활성화한다.
# vhosts.xml - <Vhosts><Vhost><Media> <MP4HLS Status="Active" Keyword="mp4hls"> <Index Ver="3" Alternates="off">index.m3u8</Index> <Sequence>0</Sequence> <Duration>10</Duration> <AlternatesName>playlist.m3u8</AlternatesName> </MP4HLS>
플레이어에서 기존 동영상 URL 뒤에
/mp4hls/index.m3u8
를 붙여 호출한다.http://www.example.com/video.mp4/mp4hls/index.m3u8
장점/효과¶
별도의 백엔드 프로세스나 추가 저장공간의 소비 없이 즉시 HLS 서비스가 가능하다.
주의점¶
포맷변경/분할(Segmentation)과 트랜스코딩(transcoding)을 혼동하지 말자.
실시간 구간편집¶
해결하고 싶은 문제¶
고객은 영상 전체보다 이슈 장면만 선별적으로 소비한다. 복잡한 사전작업 없이 이슈 즉시 편집된 영상을 제공하고 싶다.
구현¶
동영상 스토리지/서비스 앞에
M2
를 배치한다.Multi-Trimming 기능을 활성화한다.
# server.xml - <Server><VHostDefault><Media> # vhosts.xml - <Vhosts><Vhost><Media> <MP4Trimming MultiParam="trimming" MaxRatio="50">ON</MP4Trimming> <M4ATrimming MultiParam="trimming">ON</M4ATrimming>
플레이어에서 기존 동영상 주소 뒤에 원하는 구간을 초단위로 명시한다.
http://example.com/video.mp4?trimming=10-70
장점/효과¶
별도의 백엔드 프로세스나 추가 저장공간의 소비 없이 즉시 편집된 동영상 서비스가 가능하다.
주의점¶
ngx_http_mp4_module 이나 Mod-H264-Streaming-Testing-Version2 같은 사용방식을 원한다면 Trimming 을 사용한다.
실시간 트랜스코딩¶
해결하고 싶은 문제¶
상품상세, 사용자리뷰 동영상의 트랜스코딩은 배치 또는 파이프라인을 통해 진행되는 경우가 많다. 업로드 되는 동영상이 많아지면 목표 시간안에 트랜스코딩이 완료되지 않아 동영상 게시가 지연될 뿐만 아니라 실패처리 비용이 지속적으로 증가한다.
구현¶
- 동영상 스토리지/서비스 앞에
M2
를 배치한다. - 트랜스코딩 모듈을 활성화한다.
Key Frame
조건 등 상세 동영상 트랜스코딩 옵션을 설정한다.
장점/효과¶
- 동영상을 미리 트랜스코딩하지 않아도 된다.
- 별도의 백엔드 프로세스나 추가 저장공간의 소비가 없다.
주의점¶
- 변환되는 동안 클라이언트가 대기하기 때문에 너무 긴 영상에는 적합하지 않다.
- 우선순위가 높은 동영상이라면 미리 요청해 두는 것만으로 서비스 품질이 개선된다. (Pre-warming)
기타¶
선별적으로 비표준 동영상(wmv, mov 등)에 대해서만 표준 동영상/ mp4
로 트랜스코딩이 가능하다.
동영상 썸네일이미지 추출¶
해결하고 싶은 문제¶
동영상의 특정시점을 즉시 이미지로 추출하여 서비스하고 싶다.
구현¶
동영상 스토리지/서비스 앞에
M2
를 배치한다.동영상 썸네일 모듈을 활성화한다.
클라이언트로 입력 파라미터를 연동하고 게시한다.
https://{도메인}/{엔드포인트}/{추출시간}/{원본 URL}
장점/효과¶
- (캐싱되어 있지 않은 동영상이라도) 어느 구간이든 즉시 이미지를 추출한다.
- 이미지 추출에 필요한 영역만 원본서버로부터 다운로드 받는다.
- 용량이나 길이 제한이 없다.
- 이미 스토리지에 저장된 모든 영상에 즉시 적용이 가능하다.
- 별도의 백엔드 프로세스나 추가 저장공간의 소비가 없다.
기타¶
- 실시간 이미지 가공 을 통해 추출된 썸네일을 즉시 가공할 수 있다.
- 스마트 배너 이미지 와 같이 활용하면 유뷰브 썸네일 이미지를 손쉽게 제작할 수 있다.
Progressive HLS Transcoding¶
해결하고 싶은 문제¶
전형적인 동영상 배포 프로세스는 많은 단계를 거친다.
1. 업로드
2. 스토리지/원본
3. 배치프로세스
4. 트랜스코더 (1080p, 720p, 360p)
5. 스토리지/가공
6. 웹서버
7. CDN
이 과정의 대표적인 단점은 아래와 같다.
- 스토리지 사용량 증가
- 배치프로세스 백엔드 구축/운영비용
- 트랜스코더 도입/운용 비용
- 배포지연. 중요도 순이 아닌 FIFO(First Input First Out) 구조.
- 연계서비스의 어려움
솔루션/패턴 설명¶
M2
를 이용해 HLS(Http Live Streaming)로 동영상이 소비되는 영역만 분할하여 트랜스코딩/전송한다.
영상을 미리 생성해두지 않아도 다음과 같이 소비되는 영역에 대해서만 트랜스코딩/전송/소비가 동시에 이루어진다.
장점/효과¶
단계가 다음과 같이 축소된다.
1. 업로드
2. 스토리지/원본
3. M2 (분할 트랜스코딩)
4. CDN
- 원본이외에 스토리지를 사용하지 않는다.
- 배치프로세스가 필요 없다.
- 업로드 즉시 배포가 가능하다.
- 이미지 추출을 통한 2차 가공물을 생산할 수 있다.
- 이미지/비디오 플랫폼을 통합할 수 있다.
주의점¶
원본 영상이 MP4(H.264/AAC)가 아니라면 업로드 단계의 영상 트랜스코딩이 필요하다.