728x90

Architecture

  1. S3 에 파일이 업로드 되면 Lambda 가 Event 를 Trigger 한다.
  2. Event 를 trigger 한 Lambda 가 Media convert 로 job 을 생성하여 submmit 한다.
  3. Media convert 의 submmit 된 작업의 상태 변경 감지를 할수 있는 Event bridge 를 생성한다.
  4. Event bridge 가 Complete 된 상태를 다른 Endpoint 에 Noti 한다.

대략적인 구조는 다음과 같습니다

 

HLS 란 무엇인가?

https://d2.naver.com/helloworld/7122

https://velog.io/@corner3499/%EB%8F%99%EC%98%81%EC%83%81-HLS%EB%9E%80-%ED%8A%B9%EC%A7%95

 

동영상 HLS란? + 특징

스트리밍 동영상을 구성하기 위해 HLS라는 것을 사용하는데, 이것이 무엇인지에 대해 알아보겠습니다.HTTP으로 영상 스트리밍을 할 때 사용하는 프로토콜을 의미합니다.이 프로토콜은 2009년에 애

velog.io

 

Lambda 구성

lambda 는 node.js 16.x 버전으로 구성하였습니다.

 

 

생성한 lambda 에 Event type 을 All object create event 로 설정하고 intput, output 을 구분하기 위해 prefix 로 폴더를 구분합니다.

 

lambda 에서 하나의 S3 bucket 으로 폴더 구분없이 input output 을 하게되면 람다가 무한 재귀에 빠질수 있어 주의하셔야 합니다.

 

Media convert task json 만들기

 

media convert 에서 작업 생성에서 각각의 설정 값을 넣어주면 작업 JSON 표시가 나오는데 이 JSON 파일로 aws sdk 를 사용하여 
media convert 에 job 을 밀어 넣을 수 있습니다.

 

HLS 는 네트워크 대역폭 별로 화질을 다르게 서빙 할 수 있어 출력 그룹 (output group) 에 각각의 화질 별 파일을 설정 해줘야 합니다.

 

 

속도제어모드를 QVBR 로 하게 되면 maxBitrate 가 필수값으로 들어가야합니다.

 

AWS 에서 제공하는 maxBitrate 값입니다.

 

 

각각의 해상도 별로 output 을 설정한뒤 json 파일 보기를 눌러 해당 json 을 copy 합니다.

 

Media convert 의  endpoint 확인하기

// Load the SDK for JavaScript.
const aws = require('aws-sdk');

// Set the AWS Region.
aws.config.update({region: 'us-west-2'});

// Create the client.
const mediaConvert = new aws.MediaConvert({apiVersion: '2017-08-29'});

exports.handler = async (event, context) => {
  // Create empty request parameters
  const params = {
    MaxResults: 0,
  };

  try {
    const { Endpoints } = await mediaConvert.describeEndpoints(params).promise();
    console.log("Your MediaConvert endpoint is ", Endpoints);
  } catch (err) {
    console.log("MediaConvert Error", err);
  }
}

 

const aws = require('aws-sdk');

aws.config.update({region: 'ap-northeast-2'});

function getMediaConvertParams(originPath, fileName) {
  return {...copy 한 json 파일 내용}
}

const mediaConvert = new aws.MediaConvert({
  apiVersion: '2017-08-29',
  endpoint: '확인된 endpoint 입력'
});

async function convert(params) {
  try {
    const templateJobPromise = await mediaConvert.createJob(params).promise();
    console.log(templateJobPromise)
  } catch (err) {
    console.log("MediaConvert Error", err);
  }
}

Amazon EventBridge 로 Noti 하기

 

규칙을 생성합니다.

 

Event 패턴에서 Complete 된 상태만 받도록 설정했습니다.

 

대상선택

 

대상 선택에서는 Lambda 를 사용하셔도 되고 REST API endpoint 를 사용하셔도 됩니다.

 

이렇게 규칙을 생성하시면 첫번째 lambda 에서 media convert 로 job 을 밀어넣은뒤 job 의 status 가 complete 되게 되면 event bridge 에서 구성한 대상으로 event 를 받을수 있게 되었습니다.

728x90