AWS에서 Live Encoder가 출시되었다.
기존 Elastic Transcoder의 경우 S3 내의 VOD 파일을 단순히 Transcoding 해준 서비스였다면, 이번 AWS Elemental MediaLive는 여러 input Live stream에 대해 인코딩/트랜스코딩이 가능하다.
기존 Elastic Transcoder와 대비되는 서비스는 MediaConvert
AWS Elemental MediaLive
- AWS의 Encoder 서비스로 Live 비디오 스트림을 실시간으로 인코딩하고 배포하는 서비스
1) 주요 특징
- 두 개의 가용 영역에 리소스 분산
- 스트림에 따라 리소스를 자동적으로 관리하여 고가용성을 제공
- Input Stream은 RTP, RTMP(push), RTMP(pull), HLS Protocol 그리고 두 개의 Input Stream을 지원
- Ouput Stream은 HLS, Microsoft Smooth, UDP, to S3를 지원
- Codec은 현재까지 H.264만 지원
2) 사용 방법
2-1. Input Stream에 대한 정의(RTP, RTMP pull/push, HLS)
2-2. Input security groups 정의 후 inputs에 Attach
2-3. Channels 생성 후 미리 정의된 Channel template 중 선택하고, Output에 대한 Destnation url과 옵션을 지정
(Output의 경우 그룹핑이 가능)
그 외 *input(HLS)/ouput optional한 설정이 매우 많음!!!!!
3) 비용 비교
Wowza VS AWS Elemental MediaLive
(사실 Wowza와 MediaLive는 비교 대상군이 아니긴하다. Wowza는 부분적으로 인코딩/트랜스코딩이 가능한 미디어 서버고, MediaLive는 전문 인코더)
기준
Input: 1080p HD, HEVC, 20Mbps
Output: 1080p HD / 720p HD / 480 SD
Elemental MediaLive: $546
Wowza 미디어 플랫폼(CPU: 16/Mem: 30GiB): $1000 이상(Wowza License 온디맨드 라이센스 금액 포함)
Wowza 이중화 구성의 경우 운영/비용적으로 MediaLive가 더 우위에 있으며, 라이센스를 보유하더라도 Elemental MediaLive가 더 저렴할 것으로 예상
(Input Live HD Stream -> Output 5개의 채널 기준으로 EC2 Type의 경우 개인적 경험에 의한 기준임으로 더 절약될 수도 있음, Wowza 기준)
4) 아쉬운 점
로그가 현재 CloudWatch Logs와 Integration이 되어 있지 않음. Stream 로그를 어디서 확인해야 할지 모르겠다.
도큐먼트를 뒤져도 로그에 대한 설명은 없음. 이제 CloudWatch Logs와 Integration 되었음!!
5) 테스트(Archive)
Input: RTMP(PULL)
Encoder: AWS Elemental MediaLive
Output: S3(HLS) - destination의 경우 http(s), s3(ssl) 형태로 입력(S3는 아카이빙용! 실제 서비스는 Mediastore와 연동 필요)
(CDN Settings Hls basic put의 경우 s3(ssl), http(s) 사용 가능)
ex)s3(ssl)://'bucketname'/경로/파일명(하위 경로에 파일명.m3u8 형태로 저장)
ex)http(s)://경로(s3를 http(s) 경로로 사용할 경우 role 적용이 안 되기 때문에 s3는 s3(ssl) 경로 사용 권장)
HLS 청크의 주요 옵션(Output Group Manifest and Segments): Segment Length, Num Segments
Archive의 경우: Rollover Interva 옵션 이용
Name Modifier에 $dt$, $rv 등 옵션 값을 통해 파일명에 메타 정보 입력 가능
S3로 미디어 hls chunk들이 저장
일단은 Play가 된다.
Archive 용도로 Live의 VOD 서비스로는 사용할만하다. CloudFront와 연동하면 좀 더 나은 성능으로 볼 수 있을 듯 하다.
다만 국내 리전에 없어서 실제 서비스로 사용하기에는 무리가 있다. (해외 송출 Stream 끊김 현상이 발생될 수 있으므로)
Media 카테고리까지 접수....어서 빨리 한국 리전에도 런칭되기를
추가 정보
Document
AWS Korea Blog
*Input option 추가
Channel and input details
General info
Channel name: 채널 이름
IAM role: role 권한 부여
Create role from template를 통해 MediaLive에서 사용할 Role을 생성할 수 있음
(S3 GET/PUT 등 and SSM ReadOnlyAccess 권한)
Remember role 선택 시 추가로 채널을 생성할 경우 기존 Role을 사용
Channel input
Create input 선택
Input details
Input details
Input name - required: Input 이름
Input type - required
RTP, RTMP(push), RTMP(pull), HLS 중 선택
Input security Group
Use existing: 기존 생성한 Security Group 사용
(VPC S.G와 별개, MediaLive의 경우 Public 서비스)
Create: Security Group 생성
Input codec
MPEG2, AVC, HEVC 중 선택
Input resolution
SD, HD, UHD 중 선택
Maximum input bitrate
10, 20, 50 Mbps 중 선택
Channel template
이미 구성된 template 혹은 Custom template(매우 다양한...옵션을 통해, 서비스별 설정 가능) 생성
General channel settings
Blanking 및 AD 관련 등 설정으로 중계 서버가 필요
input settings
Disable
Network Input Settings: HLS(HTTP) 사용할 때 필요한 설정(보통 INPUT은 RTMP로...)
Server Validation
CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME: HTTPS 통신 시 인증서 확인 옵션
(wildcard 사용 시 subdomain과 인증은 에러가 발생될 수 있음)
CHECK_CRYPTOGRAPHY_ONLY: SSL 인증서만 확인하는 옵션인가?
HLS Input Settings
DIsable
HLS Input Settings
Bandwidth: m3u8 bandwidth 옵션에서 가장 근접한 input을 받음
(입력 안 하면 가장 큰 bandwidth input을 받음)
Retries: input 실패에 대한 재시도
Retry Interval: Retries 옵션 주기
Buffer Segments: segment 버퍼 갯수(입력 안 하면 바로 Ingest)
Input Filter: MPEG-2 input deblocking filter가 default
AUTO: input에 따라 deblokcing 필터 적용
DISABLED: 적용하지 않음
FORCED: input type에 관계없이 적용
Filter Strength: 필터 크기
Deblock Filter: Deblock Filter 사용 유무
Denosise Filter: Denoise Filter 사용 유무
Source End Behavior: File의 경우 Loop 선택(default continue)
Video Selector: map 옵션
Selector Settings: 스트림이 멀티 채널의 경우 Program id 또는 pid를 기준으로 Input 제어
Video selector program program id
Video selector pid
Color Space
FOLLOW
REC_601
REC_709
Color Space Usage: Color Space가 FOLLOW가 아닐 때 적용
FALLBACK: input color space가 없을 경우 space에 정의한 옵션 적용
FORCE: input color space 관계 없이 space에 정의한 옵션 적용
Audio Selectors: demuxing audio 설정
Caption Selectors: demuxing caption 설정
*output option 추가(HLS기준)
확인 중... 학습해야 할 설정 값이 너무 많음.
참고로 모니터링은 아래를 참고, 모든 AWS Media의 Resource들을 가시적으로 볼 수 있음. 열일하는 Elemental Team.
프로파일 구성은 유튜브를 그냥 참고해서 해도 무난한 서비스는 가능할 듯?
QVBR의 경우 해상도별 권장 프로파일
추가
1. Elemental 인코더 장비 - 비디오 프로파일 (To MediaLive)
- Insert Color Metadata (On이 기본) : 입력 색상이 보내는 화면에 맞춰서 출력에 적용되는 옵션 (Off를 권장)
- Aspect Ratio - MediaStore-> INITIALIZE_FROM / Package -> SPECIFIED
- FrameRate - XXX는 30 FPS 사용중 (29.97은 프레임이 빠질 수 있음), 30 FPS를 적용하는 걸로 결정
- BitRate - QVBR로 설정 (Elemental 인코더 장비 -> MediaLive로 8M, QVBR 퀄리티 레벨 : 7(권장))
- BufferSize (레이턴시가 증가되지만 끊기면 안되기에 설정해 줘야함 - 보통 BitRate 1배로 잡음, 4K는 1.5~2배)
- Reference Frame (P-Frame) : 3 으로 두었을때가 (QVBR 화질에서 제일 좋음), Progressive 방식 사용
- Profile (FHD는 High에 4.2로 지정, Auto가 권장되지만 최대 맥시멈이 4.2 - 명시적으로 보이기를 원함)
- Framerate Control - SPECIFIED, Numerator - 30, Denominator - 1
- GOP Size 1, Units SECONDS
- 1080P - Profile HIGH, 720P - MAIN
- Input Loss Action PAUSE_OUTPUT, Redundant Manifest ENABLED
- Slices 값을 (숫자의 값에 따라서 블록 사이즈 값을 달라짐, FHD는 4로, SD 밑에급은 1로 설정 권장)
- Density vs Quality : 리소스를 퍼포먼스에 투자할건지 (하이퀄리티로 갈수록 매크로 블록을 잘게잘게 쌓아서 화질을 높임, 0 : Default)
- DeInterlace Filter 활성화, Low Latency Mode (체크 해제), GOP Size - 1초 권장 (레이턴시, 비디오 화질 상승에 좋음)
- Audio 노멀라이즈 설정 (엘리멘탈 엔코더 앞단에 적용할지 뒷단인 MediaLive에 적용할 지)
- Elemental 인코더 장비 세션이 끊기는 이슈
: 현재 설정은 2초에 한번씩 10번 요청 (20초 시도) = 연결 안되면 15초 동안 세션 대기
: Restart Delay = 15에서 0으로 변경 시 수동으로 재시작 해야함
: Restart Delay 옵션으로 메모리가 증가된 이슈는 디지베이스 확인 필요
2. Elemental 인코더 장비 - 비디오 프로파일 (To Mediastore)
- MediaStore로 HLS 라이브 송출 시 퍼블릭 네트워크 구간에 대한 보장이 어려움
- MediaLive -> MediaStore 구조의 경우 아마존 네트워크 구간 사용
- 2초 세그먼트, Seg to index 값 보통 10개를 권장 하지만 2 * 10 = 20초 (물론 동영상 서비스 성향에 따라 다르게)
(3개 아니면 5개로 세그먼트를 줄이는 방안, 5초 세그먼트 1~2시간 테스트 시 문제는 없었음)
- CABAC 설정 (Main, High이면 CABAC 권장, 360p/480p Baseline이면 CAVLC )
AWS Media 서비스 가이드랩은 아래 문서를 참고.
Failover의 경우(Redundant)
Input Loss Action에서 PAUSE_OUTPUT을 통해 Redundant가 가능하다.
Source Stream 1, 2가 있다고 가정할 때, PAUSE_OUTPUT 옵션을 활성화 시키면 Master Menifest에서 Sub Menifest 1, 2를 갖고 있다가 Stream 1이 끊겼을 때 Sub Menifest에서 1 스트림 Path를 삭제하고 Client에 전달한다.
위와 같은 방식으로 Soure Stream이 끊겨도 MediaLive는 Redundant를 보장한다.
만약 EMIT_OUTPUT으로 설정 했다면, Sub Menifest 1 스트림 Path를 삭제하지 않고 블랙화면으로 송출을 계속 한다.
따라서 Source Stream Failover를 고려한다면 PAUSE_OUTPUT 옵션을 활성화 하자.
추가로 여기서 MediaStore, MediaPackage 연동의 차이점이 발생되는데,
MediaStore의 경우 단순히 MediaLive의 Stream Path 2개를 전달한다. 따라서 플레이어 특성에 따라 재요청 없이 Redundant가 동작하지 않을 경우가 발생하기도 한다. (사파리의 경우 바로 재생 가능)
MediaPackage의 경우 MediaLive Stream Path를 재가공하기 때문에 플레이어 특성 없이 Redundant 동작이 가능하다.
참고
AWS Media 서비스 활용 low-latency 관련
'Media Services > MediaLive' 카테고리의 다른 글
AWS Elemental MediaConnect 소개 (0) | 2020.11.03 |
---|