VOD Streaming Server 구축 2 (AWS)

ASHAPPYASIKNOW·2022년 7월 16일
0

AWS

목록 보기
2/6
post-thumbnail

구축 계획

VOD Streaming Server 구축 단계

  1. 수동으로 input S3에 mp4 파일을 업로드한다.
  2. Media Convert로 HLS 로 변환하여 output S3에 저장한다.
  3. Output S3에 Cloud Front를 연결한다.
  4. Streaming이 잘 되는지 확인해 본다.

범위

참고: VOD Streaming Server 구축 1 (AWS)

  1. Input S3에 MP4 동영상 파일 업로드
  2. MediaConvert 에서 Job 생성 및 실행 (mp4 -> HLS)
  3. Output S3에 HLS로 변환된 파일들 저장
  4. Akamai HLS player를 사용하여 HLS 파일 재생

Input S3에 동영상 파일 올리기

동영상 다운로드

무료동영상: pixabay
(상용이용시 라이센스 확인필요)

여러 동영상 중에서 마음에 드는 동영상을 다운받는다.

개인적으로 Wood Anemones 파일을 다운받았음

Input S3 폴더 만들기

create folder 기능을 두 번 이용하여 vod/mp4 폴더 만든다.

파일 올리기

다운받은 파일을 올려 준다.


Output S3에 출력 폴더만들기

vod/hls 폴더 생성

input S3와 마찬가지로 폴더 생성을 진행하면 된다.

MediaConvert를 이용하여 MP4를 HLS로 변환하기

Job template 생성

자주 반복되는 작업은 Job template로 만들어 실재 Job을 실행시킬 때 불러와서 사용할 수 있다. 여기에서 Job이란 mp4를 HLS를 변환시키는 과정 하나를 의미한다.

General information

Name: tpl_mp4_to_hls
Categrory: VOD
Description: template to convert mp4 files to HLS files

Output groups

Add button을 클릭한다.

Apple HLS 선택

Youtube 처럼 network 속도가 안 좋을 때는 저 해상도로 play가 되고 network 속도가 좋을 때는 고해상도로 재생해야 하므로 HLS를 선택하였다.

Output S3 지정

Outputs 추가

1개의 Input 파일을 기반으로 3개의 해상도를 만들려고 한다. (SD, HD, FHD)
Output 동영상의 사이즈와 bitrate는 아래 표를 참고하면 된다.

개인적으로 생각하기에는 비전문가 입장에서 bitrate를 마음대로 정하는 것은 쉽지 않은 이슈인 것 같다. 그 이유는 encoding 과정에서 압축이라는 과정이 일어나기 때문이다. 압축이라는 과정이 어떤 방식으로 얼마나 많이 일어나느냐에 따라서 파일 용량과 화질이 결정된다.

그래서 아래의 표와 같이 전문가들이 만들어 놓은 가이드를 기반으로 약간 더 안정적인 선택을 하는 것이 좋다고 생각한다.

Tip: HLS 파일을 플레이 해 보았을 때 화질이 안 좋아 보인다면 그때 bitrate option을 좀 더 크게 주면 된다.

No.ResolutionWidthHeightPixcelBitrate
1SD720480345,6001,200~1,500 kbps
2HD1280720921,6001,500~4,000 kbps
3FHD192010802,073,6004,000~8,000 kbps
4UHD (4K)409621608,294,4008,000~14,000 kbps

참고: Internet connection and recommended encoding settings

Output 1,2,3 만들기

파일명에 붙을 이름 정의

파일명이기 때문에 동작하고는 관계가 없음

Output 1,2,3 설정

파란색으로 표시된 Output1을 누르면 설정 창으로 넘어가게 된다.

Output 1

Output 2

Output 3

모든 설정이 완료되었다면 Create 버튼을 눌러서 Template 생성을 완료합니다.

Template를 이용한 Job 생성

기존에 만들어 놓았던 Template을 사용하는 경우에는 Input 설정을 추가해 주면 된다.

Input 설정 추가

권한 설정

AWS integration

Service role control: Create a new service role, configure permissions 선택

New role name: mediaconvert_mp4_to_hls_role
Input S3 locations: s3://input/vod/mp4
Output S3 locations: s3://output/vod/hls

이 과정이 완료되었다면 create 가장 아래쪽에 존재하는 create 버튼을 누르면 된다.

진행 과정

위의 사진처럼 Job status가 Processing -> Complete로 변하는 것을 확인할 수 있다.

Error가 발생하는 사람들은 권한 문제를 다시 한번 살펴 보기를 바란다.

HLS 파일 확인

Streming 확인시 Wood Anemones-112429.m3u8 파일을 사용한다.

Wood Anemones-112429.m3u8는 모든 해상도의 index 파일을 포함하고 있다.

Wood Anemones-112429720x480_1.5mbps_qvbr.m3u8
Wood Anemones-1124291280x720_4mbps_qvbr.m3u8
Wood Anemones-1124291920x1080_8mbps_qvbr.m3u8

이 파일들은 각각 ts 파일들을 indexing 하고 있다.

Akamai Player를 이용한 Streaming 확인

CloudFront 주소 확인

생성된 CloudFront를 보면 Domain name을 확인할 수 있다.

동영상 플레이 확인

HLS 파일을 Play 하려면 Akamai Player의 도움이 필요하다.

현재 https 관련 설정을 하지 않았기 때문에 akamai player도 http로 접속해야 한다. (http://players.akamai.com/players/hlsjs)

파일 이름 알아내기

파일 이름을 클릭한다.

상세 정보 중 Object URL에서 힌트를 얻을 수 있다.

http://[cloudfront-domain-name]/vod/hls/Wood+Anemones-112429.m3u8 을 주소창에 입력하면 결과를 동영상이 다운받아져서 동작하는 것을 확인할 수 있다.

이렇게 output s3가 cloudfront에 연동되는 것을 확인하였다.

HLS Player가 동작 하지 않을 때 확인

CORS 이슈 확인

이 경우에는 Output S3에 CORS 권한을 추가해 주어야 한다.

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

위의 내용을 적용했지만 안되는 경우

Cloud Front 에 Invalidation 을 실행해야 한다.

그 이유는 이미 한번 호출한 적이 있기 때문에 CloudFront에서 캐싱하고 있을 가능성이 매우 크다.

Cloud Front 이동 후 Invalidations 탭으로 이동

/vod/hls/* 해당 폴더 안의 모든 파일에 대해서 invalidation을 신청하였다. (시간이 오래 걸릴 수 있습니다.)

In progress

Completed

완료된 후 다시 시도해보면 동영상이 잘 나오는 것을 확인할 수 있습니다.

profile
36.9 It's good time to start something new

0개의 댓글