이번에 AWS MediaConvert를 통해 ABR 형태 HLS 포맷으로 영상을 자동 컨버팅 할 수 있도록 하는 시스템을 구축하는 사항이 생겼다. 그래서 찾아보던 중 AWS MediaConvert JAVA 예제 github 소스를 발견하여 해당 소스를 활용하여 Spring-boot에서 사용할 수 있도록 모듈화 해보았다.
앞서 ABR 모드로 트랜스코딩하기 때문에 ABR에 대해 간결하게 적어본다.
ABR이란?
ABR (Available Bit Rate) : 가용 비트율
네트워크 프로그램이 활용할 수 있는 주파수 대역을 가능한 최대로 쓰면서 효과적으로 사용하도록 한다. 네트워크 트래픽을 발생시키는 장치에 피드백을 지속적으로 보내는데, 피드백을 받은 장치는 스위치 장비가 양질의 서비스를 보장할 수 있도록 하며, 네트워크 혼잡도에 따라 전송 속도를 조절한다.
출처: https://littlecarbb.tistory.com/entry/CBR-VBR-ABR이란 [Shameless Simon]
AWS github 예제에서 지원하는 기능은 다음과 같다.
https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/mediaconvert/src
- 접근 계정 mediaconvert endpoint url 획득
- 트랜스코딩 Job 신규 생성
- 트랜스코딩한 Job 리스트 조회
- 트랜스코딩 중인 Job 정보 단건 조회
위 기능들 중 Job 생성, 리스트, 단건 조회만 필요하여 세가지를 별도로 모듈화 하여 구축해보았다.
== 나의 GITHUB 예제 링크 ==
https://github.com/realwater20/aws_media_convert
STEP 1) IAM 역할 생성 (IAM > 역할 > 역할 생성)
STEP 2) IAM 사용자 생성 (IAM > 사용자 > 사용자 추가)
* 권한은 기존 정책 직접 연결을 통해 S3, AWSElementMediaConvert FullAccess 권한으로 설정한다.
STEP 3) TEST MP4 S3에 업로드
STEP 4) TEST MP4 파일 컨버팅 테스트 하기
STEP 4-1) 컨버팅 Job 생성 테스트
아마 필자가 세팅해놓은 설정대로 생성하게 되면 4개의 파일이 생성된다. 아래 파일 기준으로 플레이를 하게 되면 아래와 같다.
test.m3u8 ( 180, 720, 1080 중 네트워크 속도에 따라 화질이 결정된다. - ABR 모드 )
test_180.m3u8 (180p 화질로 플레이)
test_720.m3u8 (720p 화질로 플레이)
test_1080.m3u8 (1080p 화질로 플레이)
STEP 4-2) 컨버팅 생성 Job 상세 조회
STEP 4-3) 컨버팅 생성 Job 리스트 조회
* 리스트 조회의 경우 최신 순으로 조회되도록 기본 설정되어 있으며 Request 객체를 통해 order 값을 변경할 수 있다.
위와 같이 MediaConvert API 연동에 대해서 알아보았다. 아직 화질 컨버팅에 대한 자세한 설정은 알아봐야겠으나 예제로는 QVBR로 영상을 압축하도록 되어있을것이다. 시간이 된다면 다음장에는 화질 컨버팅 관련된 옵션에 대해 자세히 알아볼것이다.