
Electra 미디어 플레이어 는 언리얼 엔진을 위한 미디어 플레이어 플러그인으로, HTTP 라이브 스트리밍(HLS) 포맷을 사용하며 라이브 스트리밍과 VOD 모두를 위해 디자인되었습니다. 이 플러그인을 사용하면 소스에 대한 링크를 제공하여 라이브 퍼포먼스와 미디어를 언리얼 프로젝트로 스트리밍할 수 있습니다. 스트리밍과 더불어 Electra는 .mp4
를 프로그레시브 방식으로 다운로드하고 .mp4
파일을 로컬에서 재생할 수 있도록 지원합니다.
Electra를 지원하는 플랫폼은 다음과 같습니다.
- Windows 7 이상
- macOS
- iOS 13.0 이상
- Android Lollipop(5.1) 이상
- Playstation 4
- Playstation 5
- Xbox One/S/X
- Xbox Series X
- Nintendo Switch
재생 가능한 최대 비디오 해상도 및 최대 프레임 레이트는 플랫폼마다 다릅니다. 자세한 사양을 확인하려면 해당 플랫폼의 문서를 참고하세요.
Electra 미디어 플레이어를 사용하여 프로젝트에 비디오를 스트리밍하는 방법에 대해 자세히 알아보려면 비디오 스트림 재생을 참고하세요.
지원되는 미디어 포맷
Electra 미디어 플레이어는 언리얼 엔진 내에서 HLS 포맷의 미디어 스트림을 지원하는 스트리밍 미디어 플레이어입니다. 자세한 내용은 HTTP 라이브 스트리밍을 참고하세요.
Electra 미디어 플레이어는 아래의 사양이 충족되는 경우 단일 멀티플렉스 .mp4
(ISO/IEC 14496-12) 파일의 재생을 지원합니다.
- 최대 하나의 비디오 트랙을 포함합니다.
- 비디오 및 오디오 트랙만 포함합니다.
- faststart 으로 포맷되어 파일의 메타데이터 moov atom 을 mdat 프레임 앞에 저장합니다.
file://
URL 스킴을 통해서만 액세스됩니다.
.mp4
의 특화된 사양인 CMAF(Common Media Application Format)도 지원됩니다.
지원되는 파일 포맷의 전체 목록을 확인하려면 미디어 프레임워크 테크니컬 레퍼런스를 참고하세요.
지원되는 코덱
Electra 미디어 플레이어는 아래 나열된 코덱으로 인코딩된 미디어 파일과 스트림만 지원합니다.
미디어 타입 | 코덱 |
---|---|
비디오 코덱 | H.264/AVC(ISO/IEC 14496-10) |
오디오 코덱 | AAC(ISO/IEC 14496-3) |
HTTP 라이브 스트리밍
Electra 미디어 플레이어는 HLS(RFC-8216)를 지원하여 언리얼 프로젝트에서 스트리밍 기능을 제공합니다. HLS을 통해 서버는 미디어 파일을 세그먼트로 분해하여 인덱스 파일을 생성합니다. 이 인덱스 파일은 미디어 세그먼트 및 클라이언트가 읽는 세그먼트의 위치의 목록이 포함되어 있으며 미디어 재생 요청을 포맷하기 위해 이 목록을 사용합니다.
또한 HLS는 다양한 비트 레이트를 가진 미디어 파일의 베리언트 스트림을 지원하기 때문에 클라이언트는 재생 시 중단 현상을 최소화할 수 있습니다. 베리언트 스트림은 마스터 플레이리스트라는 다른 인덱스 파일에 정의되어 있습니다. HLS 아키텍처에 대한 자세한 내용은 Apple의 HLS 문서를 참고하세요.
베리언트 스트림 제한 사항
HLS는 베리언트 스트림이 서로 일치하는 세그먼트를 식별하는 방법 없이 서로 다른 세그먼트 지속 시간과 서로 다른 세그먼트 수를 사용할 수 있도록 허용합니다. Electra 미디어 플레이어는 클라이언트 오버헤드를 줄이기 위해 모든 비디오 베리언트의 세그먼트가 동일하게 나뉘도록 요구합니다. VOD 프레젠테이션의 경우, Electra 미디어 플레이어는 베리언트 플레이리스트에서 세그먼트의 절대 인덱스를 기반으로 베리언트를 전환합니다.
플레이리스트가 지속적으로 변경되고 일부 미디어 세그먼트가 롤링되기 때문에 라이브 스트리밍 프레젠테이션은 다르게 처리됩니다. EXT-X-PROGRAM-DATE-TIME 태그를 사용하여 미디어의 세그먼트를 동일하게 나누고 일치하는 세그먼트를 식별합니다.
최적의 퍼포먼스를 위해 Electra 미디어 플레이어는 플레이리스트와 미디어 세그먼트에 대한 다음과 같은 제한 사항을 가지고 있습니다.
- 베리언트 스트림은 ISO/IEC-14496-12 또는 CMAF 세그먼트로 포맷되어야 합니다. ISO/IEC-13818-1에 따른 MPEG2 전송 스트림 세그먼트는 지원되지 않습니다.
-
베리언트 스트림의 대응 세그먼트는 각 세그먼트 인덱스에 동일한 지속 시간을 가지고 있어야 합니다. 비디오의 세그먼트는 동일하게 나뉘지 않아도 됩니다. 모든 베리언트 스트림 A 및 B 에 대해 세그먼트 n 의 세그먼트 지속 시간 dur 은 동일합니다.
dur(segment A(n)) == dur(segment B(n))
서로 다른 스트림 타입이 세그먼트로 나뉘었을 때 동일한 지속 시간을 가지고 있지 않아도 됩니다. 오디오는 비디오 세그먼트 보다 다양한 세그먼트 지속 시간을 사용할 수 있습니다.
- 오디오 스트림은 전환되지 않습니다. 마스터 플레이리스트에 지정된 오디오 스트림은 오직 하나여야 합니다.
- 세그먼트 지속 시간은 베리언트 플레이리스트에서 가장 가까운 정수 값으로 올림/내림되지 않습니다. 오디오와 비디오는 서로 다르게 세그먼트가 나뉩니다. 개별 비디오 이미지와 오디오 샘플 블록은 서로 같지 않기 때문입니다. Electra 미디어 플레이어는 시작 시간이 비디오 세그먼트의 시작 시간과 가장 근접한 오디오 세그먼트를 찾아 비디오 시작 시간보다 앞선 오디오 샘플을 버려 오디오를 비디오에 동기화합니다. 세그먼트 지속 시간이 베리언트 플레이리스트에 정확하게 지정되어 있지 않은 경우 작은 오류가 축적되어 결국에는 잘못된 오디오 세그먼트를 시작 세그먼트로 선택하여 오디오가 비디오와 동기화되지 않는 결과를 초래합니다.
-
마스터 플레이리스트에 오디오 그룹이 필요합니다. 컨테이너 포맷은 단일 기본 스트림이 필요하기 때문에 마스터 플레이리스트에 오디오 그룹을 지정해야 합니다. 다음은 마스터 플레이리스트의 오디오 그룹 미디어 태그의 예시입니다.
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="group_audio",NAME="audio_0",DEFAULT=YES,URI="manifest_0.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=8905600,RESOLUTION=1920x1080,CODECS="avc1.42c028,mp4a.40.2",AUDIO="group_audio"
EXT-X-STREAM-INF
태그에서는CODECS
및RESOLUTION
프로퍼티가 필요합니다. 이러한 프로퍼티는 RFC-8216에 제일 적합하지만 Electra 미디어 플레이어에 필요합니다.EXT-X-STREAM-INF
태그에서FRAME-RATE
프로퍼티를 사용합니다.FRAME-RATE
프로퍼티는 Electra 미디어 플레이어로 미디어를 재생할 경우 사용하는 것을 강력하게 권장합니다. 초당 30 프레임 이상을 디코딩하는 데 문제가 있는 플랫폼에서 재생할 수 없는 스트림을 식별하고 필터링할 수 있기 때문입니다.- 필요한 오디오 그룹이 아닌 변환 그룹은 지원되지 않습니다. 변환 그룹은 다른 보기 각도와 같은 대체 콘텐츠에 사용됩니다. Electra 미디어 플레이어는 비디오 베리언트 플레이리스트가 레퍼런스하는 오디오 그룹인 단 하나의 변환 그룹만 지원합니다.
- 비디오 세그먼트는 IDR(Instantaneous Decoder Refresh) 프레임을 첫 프레임으로 가지고 있어야 합니다. 비디오 스트림에 IDR 프레임이 있을 때만 재생이 시작됩니다. 이는 태그 자체를 설정할 필요는 없지만 설정하면 유용한
EXT-X-INDEPENDENT-SEGMENTS
태그를 묵시적으로 사용해야 하는 것과 같습니다. - 프레임 정밀도 탐색은 지원되지 않습니다. 재생이 시작되어야 하는 특정 시간에 가장 근접한 IDR 프레임을 찾아 이 프레임에서부터 재생이 시작됩니다.
- AES-128 암호화만 HLS 포맷의 스트림을 지원합니다. SAMPLE-AES는 지원되지 않습니다.
미디어 스트림은 비디오 프레젠테이션이 없는 오디오 트랙을 가지고 있을 수 있습니다. 오디오 없이 비디오만 스트림하는 것 또한 가능합니다.
지원되지 않는 HLS 태그
Electra는 마스터 및 베리언트 플레이리스트에서 다음의 태그를 무시합니다. 이러한 태그는 정확한 재생이 요구되지 않는 한 파일에 있어도 오류를 유발하지 않습니다.
EXT-X-DISCONTINUITY
EXT-X-DISCONTINUITY-SEQUENCE
EXT-X-DATERANGE
EXT-X-I-FRAMES-ONLY
EXT-X-I-FRAME-STREAM-INF
EXT-X-SESSION-DATA
EXT-X-SESSION-KEY