3장. 동영상 서비스 패턴

이 장에서는 동영상을 빠르고 호환성있게 전달하는 패턴에 대해 설명한다. 동영상 서비스에서는 pattern-infra-2tier 가 기본이 될 만큼 엄청난 저장공간과 전송대역폭을 필요로 한다. 막대한 비용이 지출되는 만큼 어떻게 안정적이고 경제적인 서비스를 구성할 것인가에 초점을 맞추어야 한다.

실시간 HLS 전송

해결하고 싶은 문제

아이폰을 기준으로 시장표준 동영상 전송방식은 HLS(Http Live Streaming)이다. 이미 스토리지에 MP4포맷으로 저장된 수 많은 영상을 HLS의 미디어 포맷인 MPEG2-TS로 분할(Segmentation)하기에는 시간과 공간의 제약이 크다.

솔루션/패턴 설명

M2MP4HLS 기능을 이용해 실시간으로 MP4영상을 HLS로 가공하여 전송한다.

../_images/dgm011.png

구현

  • 동영상 스토리지/서비스 앞에 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)을 혼동하지 말자.

기타

사용자가 동영상 전체를 시청하는 빈도가 낮다면 Range요청 기능을 이용해 스토리지/원본서버의 대역폭 소비를 최소화한다.

실시간 구간편집

해결하고 싶은 문제

고객은 영상 전체보다 이슈 장면만 선별적으로 소비한다. 복잡한 사전작업 없이 이슈 즉시 편집된 영상을 제공하고 싶다.

솔루션/패턴 설명

Multi-Trimming 기능을 이용해 실시간으로 MP4영상을 편집한다.

../_images/dgm012.png

구현

  • 동영상 스토리지/서비스 앞에 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 을 사용한다.

기타

실시간 HLS 전송 과 같이 사용할 수 있다.

http://example.com/video.mp4?trimming=17-20,30-40/mp4hls/index.m3u8

실시간 트랜스코딩

해결하고 싶은 문제

상품상세, 사용자리뷰 동영상의 트랜스코딩은 배치 또는 파이프라인을 통해 진행되는 경우가 많다. 업로드 되는 동영상이 많아지면 목표 시간안에 트랜스코딩이 완료되지 않아 동영상 게시가 지연될 뿐만 아니라 실패처리 비용이 지속적으로 증가한다.

솔루션/패턴 설명

M2 가 클라이언트 요청 동영상을 실시간으로 트랜스코딩한다.

../_images/dgm020.png

구현

  • 동영상 스토리지/서비스 앞에 M2 를 배치한다.
  • 트랜스코딩 모듈을 활성화한다.
  • Key Frame 조건 등 상세 동영상 트랜스코딩 옵션을 설정한다.

장점/효과

  • 동영상을 미리 트랜스코딩하지 않아도 된다.
  • 별도의 백엔드 프로세스나 추가 저장공간의 소비가 없다.

주의점

  • 변환되는 동안 클라이언트가 대기하기 때문에 너무 긴 영상에는 적합하지 않다.
  • 우선순위가 높은 동영상이라면 미리 요청해 두는 것만으로 서비스 품질이 개선된다. (Pre-warming)

기타

선별적으로 비표준 동영상(wmv, mov 등)에 대해서만 표준 동영상/ mp4 로 트랜스코딩이 가능하다.

동영상 썸네일이미지 추출

해결하고 싶은 문제

동영상의 특정시점을 즉시 이미지로 추출하여 서비스하고 싶다.

솔루션/패턴 설명

M2 가 동영상으로부터 클라이언트가 요청하는 시점을 이미지로 추출하여 전송한다.

../_images/dgm021.png

구현

  • 동영상 스토리지/서비스 앞에 M2 를 배치한다.

  • 동영상 썸네일 모듈을 활성화한다.

  • 클라이언트로 입력 파라미터를 연동하고 게시한다.

    https://{도메인}/{엔드포인트}/{추출시간}/{원본 URL}
    

장점/효과

  • (캐싱되어 있지 않은 동영상이라도) 어느 구간이든 즉시 이미지를 추출한다.
  • 이미지 추출에 필요한 영역만 원본서버로부터 다운로드 받는다.
  • 용량이나 길이 제한이 없다.
  • 이미 스토리지에 저장된 모든 영상에 즉시 적용이 가능하다.
  • 별도의 백엔드 프로세스나 추가 저장공간의 소비가 없다.

주의점

MP4 를 기반으로 동작하기 때문에 MP4 가 아닌 영상인 경우 실시간 트랜스코딩 을 이용해 손쉽게 MP4 로 만들 수 있다.

기타

Progressive HLS Transcoding

해결하고 싶은 문제

전형적인 동영상 배포 프로세스는 많은 단계를 거친다.

1. 업로드
2. 스토리지/원본
3. 배치프로세스
4. 트랜스코더 (1080p, 720p, 360p)
5. 스토리지/가공
6. 웹서버
7. CDN

이 과정의 대표적인 단점은 아래와 같다.

  • 스토리지 사용량 증가
  • 배치프로세스 백엔드 구축/운영비용
  • 트랜스코더 도입/운용 비용
  • 배포지연. 중요도 순이 아닌 FIFO(First Input First Out) 구조.
  • 연계서비스의 어려움

솔루션/패턴 설명

M2 를 이용해 HLS(Http Live Streaming)로 동영상이 소비되는 영역만 분할하여 트랜스코딩/전송한다.

../_images/dgm019.png

영상을 미리 생성해두지 않아도 다음과 같이 소비되는 영역에 대해서만 트랜스코딩/전송/소비가 동시에 이루어진다.

../_images/rsc006.png

장점/효과

단계가 다음과 같이 축소된다.

1. 업로드
2. 스토리지/원본
3. M2 (분할 트랜스코딩)
4. CDN
  • 원본이외에 스토리지를 사용하지 않는다.
  • 배치프로세스가 필요 없다.
  • 업로드 즉시 배포가 가능하다.
  • 이미지 추출을 통한 2차 가공물을 생산할 수 있다.
  • 이미지/비디오 플랫폼을 통합할 수 있다.

주의점

원본 영상이 MP4(H.264/AAC)가 아니라면 업로드 단계의 영상 트랜스코딩이 필요하다.