다음을 통해 공유


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

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

스트림

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

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

압축

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

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

대부분의 다른 도메인에서는 손실 압축이 허용되지 않습니다. (스프레드시트의 '근사치'를 되돌려받는 상황을 상상해 보세요!) 그러나 손실 압축 체계는 이유가 몇 가지 있기 때문에 오디오 및 비디오에 잘 맞습니다.

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

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

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

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

미디어 컨테이너

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

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

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

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

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

일반적인 미디어 컨테이너다이어그램

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

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

형식

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

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

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

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

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

미디어 파일다이어그램

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

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

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

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

Media Foundation 프로그래밍 가이드