AWS lambda 와 media convert 를 사용하여 HLS 변환하기
Architecture
- S3 에 파일이 업로드 되면 Lambda 가 Event 를 Trigger 한다.
- Event 를 trigger 한 Lambda 가 Media convert 로 job 을 생성하여 submmit 한다.
- Media convert 의 submmit 된 작업의 상태 변경 감지를 할수 있는 Event bridge 를 생성한다.
- 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
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 를 받을수 있게 되었습니다.
'Cloud > AWS' 카테고리의 다른 글
CloudFront 와 Browser cache (0) | 2022.11.26 |
---|---|
AWS - EC2 Volume 확장하기 (0) | 2022.04.27 |
AWS- VPC, Routing table, Internet Gateway 설정하기 (0) | 2022.03.19 |
Aws - EC2 로 배포하고 Https 도메인 등록하기 (Route53, 로드밸런스, Certificate Manager) (0) | 2022.02.24 |
EC2 에 HTTPS 로 도메인 연동하기 (Nginx) (0) | 2022.02.23 |
댓글
이 글 공유하기
다른 글
-
CloudFront 와 Browser cache
CloudFront 와 Browser cache
2022.11.26 -
AWS - EC2 Volume 확장하기
AWS - EC2 Volume 확장하기
2022.04.27 -
AWS- VPC, Routing table, Internet Gateway 설정하기
AWS- VPC, Routing table, Internet Gateway 설정하기
2022.03.19 -
Aws - EC2 로 배포하고 Https 도메인 등록하기 (Route53, 로드밸런스, Certificate Manager)
Aws - EC2 로 배포하고 Https 도메인 등록하기 (Route53, 로드밸런스, Certificate Manager)
2022.02.24