미디어 파운데이션: 필수 개념

디지털 미디어를 접하는 경우 이 항목에서는 Media Foundation 애플리케이션을 작성하기 전에 이해해야 하는 몇 가지 개념을 소개합니다.

스트림

스트림은 균일한 형식의 미디어 데이터 시퀀스입니다. 가장 일반적인 형식은 오디오 및 비디오이지만 스트림에는 텍스트, 스크립트 명령 및 스틸 이미지를 비롯한 거의 모든 종류의 데이터가 포함될 수 있습니다. 이 설명서의 스트림 이라는 용어는 네트워크를 통해 전달되는 것을 의미하지 않습니다. 로컬 재생을 위한 미디어 파일에는 스트림도 포함됩니다.

일반적으로 미디어 파일에는 단일 오디오 스트림 또는 정확히 하나의 비디오 스트림과 하나의 오디오 스트림이 포함됩니다. 그러나 미디어 파일에는 동일한 형식의 여러 스트림이 포함될 수 있습니다. 예를 들어 비디오 파일에는 여러 언어의 오디오 스트림이 포함될 수 있습니다. 런타임에 애플리케이션은 사용할 스트림을 선택합니다.

압축

압축 은 중복 정보를 제거하여 데이터 스트림의 크기를 줄이는 모든 프로세스를 나타냅니다. 압축 알고리즘은 다음과 같은 두 가지 광범위한 범주로 분류됩니다.

  • 무손실 압축. 무손실 알고리즘을 사용하면 재구성된 데이터가 원래 데이터와 동일합니다.
  • 손실 압축. 손실 알고리즘을 사용하면 재구성된 데이터는 원본의 근사값이지만 정확히 일치하지는 않습니다.

대부분의 다른 도메인에서는 손실 압축이 허용되지 않습니다. (스프레드시트의 "근사치"를 되돌립니다.) 그러나 손실 압축 체계는 몇 가지 이유로 오디오 및 비디오에 적합합니다.

첫 번째 이유는 인간의 인식의 물리학과 관련이있다. 음악 녹음과 같은 복잡한 소리를 들을 때, 그 소리에 포함된 정보 중 일부는 귀에 인식할 수 없습니다. 신호 처리 이론의 도움으로 인식할 수 없는 주파수를 분석하고 분리할 수 있습니다. 이러한 주파수는 지각 효과 없이 제거할 수 있습니다. 재구성된 오디오가 원본과 정확히 일치하지는 않지만 수신기와 동일하게 들립니다 . 비디오에도 비슷한 원칙이 적용됩니다.

둘째, 의도한 목적에 따라 소리 또는 이미지 품질이 약간 저하될 수 있습니다. 예를 들어 전화 통신에서 오디오는 종종 고도로 압축됩니다. 그 결과는 전화 통화에 충분하지만 전화를 통해 심포니 오케스트라의 말을 듣고 싶지는 않을 것입니다.

압축을 인코딩이라고도 하며 인코딩하는 디바이스를 인코더라고 합니다. 역방향 프로세스는 디코딩되고 디바이스는 자연스럽게 디코더라고 합니다. 인코더와 디코더 모두에 대한 일반적인 용어는 코덱입니다. 코덱은 하드웨어 또는 소프트웨어에서 구현할 수 있습니다.

디지털 미디어가 등장한 이후 압축 기술이 빠르게 변화하고 있으며 현재 많은 압축 체계가 사용되고 있습니다. 이 사실은 디지털 미디어 프로그래밍의 기본 과제 중 하나입니다.

미디어 컨테이너

원시 오디오 또는 비디오 스트림을 컴퓨터 파일로 저장하거나 네트워크를 통해 직접 전송하는 경우는 드뭅니다. 한 가지, 사용할 코덱을 미리 알지 못하고 이러한 스트림을 디코딩하는 것은 불가능합니다. 따라서 미디어 파일에는 일반적으로 다음 요소 중 적어도 일부가 포함됩니다.

  • 스트림 수, 각 스트림의 형식 등을 설명하는 파일 헤더입니다.
  • 콘텐츠에 임의로 액세스할 수 있는 인덱스입니다.
  • 콘텐츠를 설명하는 메타데이터(예: 아티스트 또는 제목).
  • 네트워크 전송 또는 임의 액세스를 사용하도록 설정하는 패킷 헤더입니다.

이 설명서에서는 컨테이너 라는 용어를 사용하여 스트림, 헤더, 인덱스, 메타데이터 등의 전체 패키지를 설명합니다. 파일 대신 컨테이너라는 용어를 사용하는 이유는 일부 컨테이너 형식이 라이브 브로드캐스트용으로 설계되기 때문입니다. 애플리케이션은 컨테이너를 파일에 저장하지 않고 실시간으로 생성할 수 있습니다.

미디어 컨테이너의 초기 예는 AVI 파일 형식입니다. 다른 예로는 MP4 및 ASF(Advanced Systems Format)가 있습니다. 컨테이너는 파일 이름 확장명(예: .mp4) 또는 MIME 형식으로 식별할 수 있습니다.

다음 다이어그램에서는 미디어 컨테이너에 대한 일반적인 구조를 보여 있습니다. 다이어그램은 특정 형식을 나타내지 않습니다. 각 형식의 세부 정보는 매우 다양합니다.

일반적인 미디어 컨테이너를 보여 주는 다이어그램

다이어그램에 표시된 구조체는 계층 구조이며 컨테이너의 시작 부분에 헤더 정보가 표시됩니다. 이 구조는 많은 컨테이너 형식(전부는 아님)의 일반적인 형식입니다. 또한 데이터 섹션에는 인터리브 오디오 및 비디오 패킷이 포함되어 있습니다. 이러한 유형의 인터리빙은 미디어 컨테이너에서 일반적입니다.

멀티플렉싱이라는 용어는 오디오 및 비디오 스트림을 패킷화하고 패킷을 컨테이너에 인터리빙하는 프로세스를 나타냅니다. 패킷화된 데이터에서 스트림을 다시 조립하는 역방향 프로세스를 demultiplexing이라고 합니다.

형식

디지털 미디어에서 용어 형식 은 모호합니다. 형식은 H.264 비디오와 같은 인코딩 유형 또는 MP4와 같은 컨테이너를 참조할 수 있습니다. 이러한 구분은 일반 사용자에게 혼동되는 경우가 많습니다. 미디어 형식에 지정된 이름이 항상 도움이 되는 것은 아닙니다. 예를 들어 MP3 은 인코딩 형식(MPEG-1 오디오 계층 3)과 파일 형식을 모두 나타냅니다.

그러나 미디어 파일을 읽는 데는 실제로 다음 두 단계가 포함되므로 구분이 중요합니다.

  1. 먼저 컨테이너를 구문 분석해야 합니다. 대부분의 경우 이 단계가 완료될 때까지 스트림 수와 각 스트림의 형식을 알 수 없습니다.
  2. 다음으로 스트림이 압축되면 적절한 디코더를 사용하여 디코딩해야 합니다.

이러한 사실은 컨테이너를 구문 분석하고 스트림을 디코딩하는 데 별도의 구성 요소를 사용하는 소프트웨어 디자인으로 자연스럽게 이어집니다. 또한 이 접근 방식은 플러그 인 모델에 적용되므로 타사에서 자체 파서와 코덱을 제공할 수 있습니다. Windows에서 COM(구성 요소 개체 모델)은 플러그 인 모델에 대한 요구 사항인 구현과 API를 분리하는 표준 방법을 제공합니다. 이러한 이유로 Media Foundation은 COM 인터페이스를 사용합니다.

다음 다이어그램은 미디어 파일을 읽는 데 사용되는 구성 요소를 보여 줍니다.

미디어 파일을 읽을 구성 요소를 보여 주는 다이어그램

미디어 파일을 작성하려면 다음 두 단계가 필요합니다.

  1. 압축되지 않은 오디오/비디오 데이터 인코딩
  2. 압축된 데이터를 특정 컨테이너 형식으로 배치합니다.

다음 다이어그램은 미디어 파일을 작성하는 데 사용되는 구성 요소를 보여 줍니다.

미디어 파일을 작성하는 구성 요소를 보여 주는 다이어그램

Media Foundation 프로그래밍 가이드