[AWS Mediaconvert] 암호화된 HLS 생성하기
AWS Mediaconvert
AWS Elemental MediaConvert는 파일 기반의 비디오 및 오디오 트랜스코딩 서비스이다. 이 서비스를 사용하면 브로드캐스트와 멀티스크린 전달을 위한 VOD(주문형 비디오) 콘텐츠를 직접 관리 및 구현하지 않고 손쉽게 생성할 수 있다.
Mediaconvert Template
mediaconvert는 Job단위로 트랜스코딩을 진행한다. 만약 특정 트랜스코딩 작업을 반복해야 하는 경우, 매번 새롭게 Job을 생성하지 않고 동일한 작업을 수행하는 Template을 사용할 수 있다.
오디오 파일을 input으로 넣어 암호화된 HLS를 생성하는 Template을 생성해보기로 한다. 작업 생성에 관련된 모든 설정은 Mediaconvert guide를 참고하였다.
Encrypted HLS 생성하기
1. 입력 선택기 생성
입력 파일의 오디오 자산을 선택할 수 있는 오디오 선택기를 설정한다. S3에 있는 파일이나 HTTP/HTTPS url을 통해서 입력 파일을 지정할 수 있다.
참고로 오디오만 다루는 경우 입력 클리핑으로 음원 길이를 자를 수 없다. (비디오는 가능)
2. 출력 그룹 생성
트랜스코딩하여 출력할 파일 그룹을 생성한다. Apple HLS 파일을 생성할 것이므로 해당 파일 타입을 선택한다.
입출력 파일은 모두 여러 개를 설정할 수 있다. 만약 비트레이트가 다른 각각의 HLS를 만들고자 한다면 원하는 개수대로 출력 그룹을 생성해주면 된다.
3. 기본 HLS 설정
1 - 출력 파일 저장 위치를 설정
2 - 세그먼트 세부 설정 (세그먼트 파일 여부, 세그먼트 길이 등등)
3 - 세그먼트를 하위 디렉터리에 배치할지 여부 설정
4 - 매니페스트 기간에 부동 소수점 값을 사용할지 여부. 세그먼트 길이 제어 GOP 배수와 더불어 부동 소수점을 사용하면 좀 더 자연스러운 frame의 세그먼트를 얻을 수 있다.
(참고 : https://aws.amazon.com/ko/blogs/media/part-1-back-to-basics-gops-explained/)
5 - 세그먼트 파일의 suffix 값 설정
6 - 세그먼트 파일의 정보를 담고 있는 manifest 파일(master.m3u8)을 추가하고 master 파일에 suffix 값을 설정한다
1 - 오디오 전용 출력에서만 설정한다. ts 컨테이너에서 파일 생성하기 위해 M2TS(MPEG-2 Transport Stream) 을 선택한다. 설정하지 않는 경우 모든 세그먼트는 AAC 파일로 출력되며 재생에 문제가 생길 수 있다.
2 - 원하는 스펙에 맞는 Bitrate와 Samplerate를 선택한다.
3 - 오디오 정규화. 출력되는 파일을 특정 음량으로 정규화하기 위해서 고급 > 오디오 정규화 기능을 사용할 수 있다. (추가 비용 발생) 목표로 하는 LKFS값을 입력한다.
4. HLS DRM 암호화 설정
일반 HLS 출력은 3번까지만 진행하면 되지만, 암호화 된 HLS 생성을 위해서는 DRM 암호화를 선택한다.
암호화 방법 - 주어진 암호화 체계에 따라 세그먼트를 암호화 함
키 공급자 유형 - DRM 암호화 키가 정적인지 또는 SPEKE 표준을 따르는 키 공급자에서 오는지 여부를 지정한다. (SPEKE 참고 : https://docs.aws.amazon.com/speke/latest/documentation/what-is-speke.html )
매니페스트의 초기화 벡터 - 포함인 경우 manifest (master.m3u8) 파일에 초기화 벡터(IV=000x...) 값이 나열된다.
상수 초기화 벡터 - 제외인 경우 공란
정적 키 값 - 키 공급자 유형에서 정적 키를 선택한 경우 정적 키 값을 설정한다. 32자 16진수 문자열을 사용한다. (ex : aa5ddb0f5b312a13995d711698ab6b87)
URL - 암호화 키가 저장된 라이센스 서버의 위치
오프라인 암호화 - EXT-X-SESSION-KEY 요소를 마스터 재생목록에 삽입하려면 이 설정을 활성화한다. 이렇게 하면 오프라인 Apple HLS FairPlay 콘텐츠를 보호할 수 있다.
5. 출력 결과
S3에 출력 결과를 저장하였다.
세그먼트들은 암호화 되어 있어 다운로드 받아도 바로 플레이할 수 없다. 플레이어를 통해 암호화 키가 저장된 서버를 통해 키를 받아와야만 해당 세그먼트를 플레이할 수 있다.