StageVideo를 사용한 하드웨어 가속 소개

비디오 크기 조절, 색상 변환, 블리팅 등이 포함되는 하드웨어 가속 프레젠테이션으로 하드웨어 가속 디코딩 성능을 향상시킵니다. GPU(하드웨어) 가속을 지원하는 장치에서는 flash.media.StageVideo 객체를 사용하여 장치 하드웨어에서 직접 비디오를 처리할 수 있습니다. 직접 처리는 CPU의 작업 부담을 덜어 GPU가 비디오를 처리하는 동안 CPU가 다른 작업을 수행할 수 있도록 합니다. 반면 이전의 Video 클래스는 주로 소프트웨어 프레젠테이션을 사용합니다. 소프트웨어 프레젠테이션은 CPU에서 실행되므로 시스템 리소스를 많이 소모할 수 있습니다.

현재 전체 GPU 가속 기능을 제공하는 장치는 극소수입니다. 하지만 스테이지 비디오를 사용하면 응용 프로그램이 사용 가능한 하드웨어 가속을 최대한 활용할 수 있습니다.

StageVideo 클래스로 인해 Video 클래스가 무용지물이 되지는 않습니다. 두 클래스를 함께 활용하면 주어진 시간에 장치 리소스에서 허용하는 최적의 비디오를 표시할 수 있습니다. 응용 프로그램은 적절한 이벤트를 수신하고 필요에 따라 StageVideo 및 Video 간에 전환함으로써 하드웨어 가속을 활용합니다.

StageVideo 클래스를 구현하면 비디오를 사용하는 데 몇 가지 제약을 겪게 됩니다. 따라서 StageVideo를 구현하기 전에 지침을 읽어 보고 응용 프로그램에서 제약을 수용할 수 있는지 확인하십시오. 제약을 수용할 수 있으면 Flash Player에서 하드웨어 가속 프레젠테이션을 사용할 수 있다고 확인되는 경우에는 언제든지 StageVideo를 사용하십시오. 지침 및 제한 사항 을 참조하십시오.

병렬 평면: 스테이지 비디오 및 Flash 표시 목록

스테이지 비디오 모델에서는 Flash Player가 비디오를 표시 목록과 분리할 수 있습니다. Flash Player는 두 개의 Z 순서로 정렬된 평면 간에 합성 표시를 나눕니다.

스테이지 비디오 평면
스테이지 비디오 평면은 배경에 배치되며 하드웨어 가속 비디오만 표시합니다. 이러한 설계로 인해, 스테이지 비디오 평면은 장치에서 하드웨어 가속이 지원되지 않거나 사용 불가능한 경우에는 사용할 수 없습니다. ActionScript에서 StageVideo 객체는 스테이지 비디오 평면에서 재생되는 비디오를 처리합니다.

Flash 표시 목록 평면
Flash 표시 목록 엔터티는 스테이지 비디오 평면 앞에 있는 평면에서 합성됩니다. 표시 목록 엔터티에는 재생 컨트롤을 비롯하여 런타임이 렌더링하는 모든 항목이 포함됩니다. 하드웨어 가속을 사용할 수 없는 경우 비디오는 Video 클래스 객체를 통해 이 평면에서만 재생될 수 있습니다. 스테이지 비디오는 항상 Flash 표시 목록 그래픽 뒤에서 표시됩니다.

StageVideo 객체는 화면에서 윈도우가 정렬된 사각 영역 안에 회전 없이 나타납니다. 스테이지 비디오 평면 뒤에 객체를 포갤 수는 없습니다. 하지만 Flash 표시 목록 평면을 사용하면 다른 그래픽을 스테이지 비디오 평면 위에 배치할 수 있습니다. 스테이지 비디오는 표시 목록과 동시에 실행됩니다. 따라서 두 메커니즘을 함께 사용하면 두 개의 개별적인 평면을 사용하는 통합된 시각 효과를 만들 수 있습니다. 예를 들어 앞쪽 패널을 배경에서 실행되는 스테이지 비디오 위에서 작동하는 재생 컨트롤에 사용할 수 있습니다.

스테이지 비디오 및 H.264 코덱

Flash Player 응용 프로그램에서 비디오 하드웨어 가속 구현은 두 단계로 이루어집니다.

  1. 비디오를 H.264로 인코딩

  2. StageVideo API 구현

최선의 결과를 얻으려면 두 단계를 모두 수행합니다. H.264 코덱을 사용하면 비디오 디코딩에서 프레젠테이션에 이르기까지 하드웨어 가속을 최대한 활용할 수 있습니다.

스테이지 비디오는 GPU-CPU 다시 읽기를 할 필요가 없습니다. 즉, GPU가 더 이상 표시 목록 객체와의 합성을 위해 디코딩된 프레임을 CPU로 보내지 않습니다. 대신 GPU가 디코딩되고 렌더링된 프레임을 직접 표시 목록 객체 뒤에 있는 화면으로 전송합니다. 이 기법은 CPU와 메모리의 사용을 줄일 뿐 아니라 픽셀 화질도 높입니다.

지침 및 제한 사항

비디오를 전체 화면 모드에서 실행 중이면 장치가 하드웨어 가속을 지원하는 한 언제든지 스테이지 비디오를 사용할 수 있습니다. 하지만 Flash Player는 브라우저 내에서도 실행됩니다. 브라우저 컨텍스트 내에서 wmode 설정은 스테이지 비디오의 가용성에 영향을 미칩니다. 스테이지 비디오를 사용하려면 항상 wmode="direct" 를 사용하는 것이 좋습니다. 스테이지 비디오는 전체 화면 모드가 아닌 경우에는 다른 wmode 설정과 호환되지 않습니다. 이러한 제한으로 인해 런타임에 스테이지 비디오가 사용 가능한 상태와 사용 불가능한 상태 사이에서 예상치 않게 자주 바뀔 수 있습니다. 예를 들어 사용자가 스테이지 비디오가 실행되는 동안 전체 화면 모드를 종료하면 비디오 컨텍스트는 브라우저로 되돌아갑니다. 브라우저의 wmode 매개 변수가 "direct" 로 설정되어 있지 않으면 갑자기 스테이지 비디오를 사용할 수 없게 되는 경우가 발생할 수 있습니다. Flash Player는 일련의 이벤트를 통해 재생 컨텍스트 변경 사항을 응용 프로그램에 전달합니다. StageVideo API를 구현할 때 스테이지 비디오를 사용할 수 없는 경우에 대비하여 Video 객체를 백업으로 유지합니다.

스테이지 비디오는 하드웨어와의 직접적인 관계 때문에 일부 비디오 기능을 제한합니다. 스테이지 비디오는 다음과 같은 제한을 적용합니다.

  • Flash Player는 동시에 비디오를 표시할 수 있는 StageVideo 객체의 수를 SWF 파일당 4개로 제한합니다. 그러나 장치 하드웨어 리소스에 따라 실제 제한 개수는 더 적을 수도 있습니다.

  • 비디오 타이밍이 런타임에서 표시하는 내용의 타이밍과 동기화되지 않습니다.

  • 비디오 표시 영역이 직사각형으로만 나타날 수 있습니다. 타원형이나 불규칙한 모양 등의 고급 표시 영역을 사용할 수 없습니다.

  • 비디오를 회전할 수 없습니다.

  • 비디오를 비트맵 캐싱할 수 없으며 또는 BitmapData 객체를 사용하여 액세스할 수 없습니다.

  • 비디오에 필터를 적용할 수 없습니다.

  • 비디오에 색상 변환을 적용할 수 없습니다.

  • 비디오에 알파 값을 적용할 수 없습니다.

  • 표시 목록 평면에 있는 객체에 적용되는 블렌드 모드는 스테이지 비디오에 적용되지 않습니다.

  • 전체 픽셀 경계에만 비디오를 배치할 수 있습니다.

  • GPU 렌더링은 주어진 장치 하드웨어에서 가장 효과적으로 사용할 수 있지만 여러 장치들 간에 픽셀이 완전히 동일하게 유지되지는 않습니다. 드라이버 및 플랫폼의 차이로 인해 약간의 변형이 발생합니다.

  • 몇몇 장치는 필요한 색상 공간 중 일부를 지원하지 않습니다. 예를 들어 일부 장치는 H.264 표준인 BT.709를 지원하지 않습니다. 이 경우 빠른 표시를 위해 BT.601을 사용할 수 있습니다.

  • 스테이지 비디오는 보통, 불투명, 투명 등의 WMODE 설정과 함께 사용할 수 없습니다. 스테이지 비디오는 전체 화면 모드가 아닌 경우 WMODE=direct 만 지원합니다. WMODE는 Safari 4 이상 및 IE 9 이상에서는 효과가 없습니다.

보통 이러한 제한은 비디오 플레이어 응용 프로그램에는 영향을 주지 않습니다. 이상의 제한을 허용할 수 있으면 언제든지 스테이지 비디오를 사용하십시오.