미디어 파운데이션

Media Foundation

Media Foundation(MF)은 Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 및 Windows 11의 디지털 미디어용 COM 기반 멀티미디어 프레임워크 파이프라인 및 인프라스트럭처 플랫폼입니다.Microsoft DirectShow, Windows Media SDK, DirectX Media Objects(DMO) 및 Audio Compression Manager(ACM) Video for Windows(VFW)와 같은 기타 모든 "레거시" 멀티미디어 API를 대체하는 것입니다.기존의 DirectShow 테크놀로지는 몇 가지 기능부터 순서대로 Media Foundation으로 대체될 예정입니다.당분간 Media Foundation과 Direct Show가 공존할 것입니다.Media Foundation은 Windows XP를 포함한 이전 버전의 Windows에서는 사용할 수 없습니다.

Windows Vista에서 제공되는 첫 번째 릴리스는 오디오 및 비디오 재생 품질, 고품질 콘텐츠(HDTV 등), 콘텐츠 보호 및 디지털 데이터 액세스 제어를 위한 통합 접근 방식 및 상호 운용성에 중점을 두고 있습니다.DXVA 2.0을 내장하여 비디오 처리 파이프라인을 하드웨어로 오프로드하여 성능을 향상시킵니다.비디오는 인코딩된 색공간에서 처리되어 하드웨어로 전달되며 하드웨어는 네이티브 색공간에서 이미지를 구성합니다.이로 인해 중간 색공간 변환이 방지되어 성능이 향상됩니다.MF에는 Enhanced Video Renderer(EVR; 확장 비디오렌더러)라고 불리는 새로운 비디오렌더가 포함되어 있습니다.이것은 VMR 7과 9의 다음 반복입니다.EVR은 재생 타이밍과 동기화를 보다 잘 지원합니다.실시간 멀티미디어 처리를 우선시하는 새로운 서비스인 Multimedia Class Scheduler Service(MMCSS)를 사용하여 재생에 필요한 리소스를 찢어짐이나 결함 없이 예약합니다.

Windows 7 에 포함되어 있는 [1]제 2 릴리스에서는, WDM 1.1 드라이버를 사용하는 경우, HD 컨텐츠의 고속화를 위해서, 미디어 포맷의 서포트와 DXVA HD 가 도입되고 있습니다.

아키텍처

Media Foundation 아키텍처

MF 아키텍처는 제어층, 코어층플랫폼층으로 나뉩니다.코어 레이어에는 Media Foundation의 대부분의 기능이 캡슐화되어 있습니다.미디어 파운데이션 파이프라인은 다음 3가지 컴포넌트로 구성됩니다.Media Source, Media Sink 및 Media Foundation Transforms(MFT)미디어 소스는 압축 또는 비압축 멀티미디어 데이터의 소스로 기능하는 객체입니다.파일, 네트워크 서버, 캠코더 등 다양한 데이터 소스를 공통 인터페이스에 의해 추상화된 소스 고유기능으로 캡슐화할 수 있습니다.소스 개체는 URI, 파일 또는 bytestream에서 미디어 소스를 생성하는 소스 리졸바 개체를 사용할 수 있습니다.비표준 프로토콜에 대한 지원은 해당 프로토콜에 대한 소스 해결 프로그램을 생성하여 추가할 수 있습니다.소스 오브젝트는 시퀀서 오브젝트를 사용하여 일련의 소스(재생 목록)를 사용하거나 여러 소스를 단일 논리 소스로 병합할 수도 있습니다.미디어 싱크는 처리된 멀티미디어 데이터의 수신자입니다.미디어 싱크는 콘텐츠를 출력 장치에 렌더링하는 렌더러 싱크 또는 콘텐츠를 파일 등의 영속적인 스토리지 시스템에 저장하는 아카이브 싱크 중 하나입니다.렌더러 싱크는 출력 유형에 따라 압축되지 않은 데이터를 입력으로 받는 반면 아카이브 싱크는 압축되지 않은 데이터 또는 압축되지 않은 데이터를 가져올 수 있습니다.미디어 소스에서 싱크까지의 데이터는 MFT에 의해 동작합니다.MFT는 데이터를 다른 형태로 변환하는 특정 기능입니다.MFT에는 멀티플렉서 및 디멀티플렉서, 코덱 또는 리버브 등의 DSP 효과를 포함할 수 있습니다.코어 레이어는, 파일 액세스, 네트워킹, 클럭 동기등의 서비스를 사용해 멀티미디어 렌더링의 타이밍을 설정합니다.이들은 소스 및 싱크 바이트 스트림에 액세스하기 위해 필요한 서비스, 프레젠테이션 클럭 및 코어 레이어 컴포넌트가 비동기적으로 기능하도록 하는 객체 모델을 제공하는 플랫폼 계층의 일부이며 일반적으로 OS 서비스로 구현됩니다.일시정지, 정지, 고속전송, 리버스 또는 시간압축은 프레젠테이션클럭을 제어함으로써 실행할 수 있습니다.

그러나 미디어 파이프라인 컴포넌트는 연결되어 있지 않고 개별 컴포넌트로 표시됩니다.제어 계층에서 실행되는 애플리케이션은 특정 비디오 처리 태스크에 필요한 소스 유형, 변환 및 싱크를 선택하고 데이터 흐름 파이프라인을 완료하기 위해 컴포넌트(토폴로지) 간에 "연결"을 설정해야 합니다.예를 들어 압축된 오디오/비디오 파일을 재생하기 위해 파이프라인은 파일소스 오브젝트, 오디오 및 비디오스트림을 분할하는 특정 파일컨테이너 포맷의 디멀티플렉서, 오디오 및 비디오스트림을 압축 해제하는 코덱, 오디오 및 비디오 효과용 DSP 프로세서, 마지막으로 EVR 렌더러로 구성됩니다.또는 비디오 캡처 애플리케이션의 경우 캠코더는 비디오 및 오디오 소스로 동작합니다.이 소스에 코덱 MFT는 데이터를 압축하여 스트림을 컨테이너에 통합하는 멀티플렉서에 공급합니다.마지막으로 파일 싱크 또는 네트워크 싱크는 이를 파일에 쓰거나 네트워크를 통해 스트림에 씁니다.또한 애플리케이션은 파이프라인 구성요소 간의 데이터 흐름을 조정해야 합니다.제어층은 파이프라인 내의 데이터 흐름을 실현하기 위해 하나의 파이프라인 컴포넌트에서 샘플을 "풀(요구)"하여 다음 컴포넌트로 전달해야 합니다.파이프라인 컴포넌트가 데이터를 다음 컴포넌트에 푸시하는 DirectShow의 "푸시" 모델과는 대조적입니다.Media Foundation은 보호된 미디어 경로라고 하는 보호된 실행 환경 내에서 파이프라인을 호스팅하여 콘텐츠 보호를 허용합니다.제어층 컴포넌트는 렌더링이 프레젠테이션클럭과 동기화되는 속도로 데이터를 파이프라인을 통해 전파해야 합니다.렌더링 속도(또는 시간)는 멀티미디어 스트림의 일부로 메타데이터로 포함됩니다.소스 개체는 메타데이터를 추출하여 전달합니다.메타데이터는 비트레이트 및 프레젠테이션타이밍에 관한 정보인 코드화된 메타데이터와 제목 및 작성자 이름과 같은 설명적메타데이터의 두 가지 유형입니다.코드화된 메타데이터는 파이프라인 세션을 제어하는 객체에 넘겨지고 응용 프로그램이 사용할 수 있도록 기술 메타데이터가 노출됩니다.

Media Foundation은 응용 프로그램이 명시적으로 수행하지 않고도 토폴로지를 설정하고 데이터 흐름을 원활하게 하기 위해 사용할 수 있는 Media Session 개체를 제공합니다.제어층에 존재하며 토폴로지 로더 개체를 표시합니다.응용 프로그램은 로더에 필요한 파이프라인 토폴로지를 지정하며, 로더는 구성 요소 간에 필요한 연결을 만듭니다.미디어 세션오브젝트는 프레젠테이션클럭과 동기하는 작업을 관리합니다.프레젠테이션 클럭 오브젝트를 생성하여 참조를 싱크대에 전달합니다.그런 다음 클럭의 타이머 이벤트를 사용하여 파이프라인에 데이터를 전파합니다.또, 애플리케이션의 일시정지, 정지, 재개 요구를 처리하기 위해서, 클럭의 상태도 변경됩니다.

실용적인 MF 아키텍처

이론적으로 Media Foundation 아키텍처는 Media Session, Pipeline, Media Source, Transform 및 Media Sink 모델 1개뿐입니다.그러나 이 아키텍처는 셋업이 복잡할 수 있으며 심플한 포인트 솔루션에서 미디어 데이터 처리를 처리하도록 설계된 가볍고 비교적 쉽게 구성할 수 있는 MF 컴포넌트도 상당히 많습니다.따라서 실질적인 고려사항으로 인해 기본 파이프라인 설계에 대한 변형을 구현해야 했으며 파이프라인 모델 외부에서 작동하는 소스 리더 및 싱크 라이터와 같은 구성 요소가 개발되었습니다.일부 소스에서는 Media Foundation 아키텍처를 3개의 일반 클래스로 분할합니다.

  • 파이프라인 아키텍처
  • 리더 라이터 아키텍처
  • 파이프라인 아키텍처와 Reader-Writer 아키텍처 간의 하이브리드

파이프라인 아키텍처는 개별 미디어 세션 개체와 파이프라인을 사용하여 구분됩니다.미디어 데이터는 하나 이상의 미디어 소스에서 하나 이상의 미디어 싱크로, 옵션으로 0개 이상의 미디어 변환을 통해 흐릅니다.미디어 세션은 파이프라인을 통해 미디어 데이터의 흐름을 관리하고 파이프라인이 여러 개의 포크와 분기를 가질 수 있도록 합니다.MF 응용 프로그램은 미디어 원본에서 미디어 싱크로 이동할 때 사용자 정의 미디어 변환 구성 요소를 구현하고 파이프라인의 적절한 위치에 삽입하여 미디어 데이터에 액세스할 수 있습니다.

Reader-Writer Architecture는 미디어 데이터를 제공하기 위해 Source Reader라는 구성 요소를 사용하고 이를 소비하기 위해 Sink Writer 구성 요소를 사용합니다.원본 판독기에는 내부 파이프라인 유형이 포함되어 있지만 응용 프로그램에서 액세스할 수 없습니다.소스 리더는 미디어 소스가 아니며 싱크 라이터는 미디어 싱크가 아니며 파이프라인에 직접 포함하거나 미디어 세션에서 관리할 수 없습니다.일반적으로 미디어 데이터는 응용 프로그램의 액션에 의해 소스 리더에서 싱크 라이터로 흐릅니다.응용 프로그램은 소스 리더에서 미디어 데이터 패킷(미디어 샘플이라고 함)을 가져와 싱크 라이터에 직접 제공하거나 소스 리더에서 동일한 작업을 수행하는 콜백 함수를 설정합니다.실제로 데이터 전송을 관리할 때 응용 프로그램 자체는 파이프라인 아키텍처 응용 프로그램에서 미디어 세션과 유사한 역할을 수행합니다.MF 애플리케이션은 소스 리더와 싱크 라이터 간의 미디어 샘플 전송을 관리하므로 항상 원시 미디어 데이터에 액세스할 수 있습니다.Source Reader 및 Sink Writer 컴포넌트에는 미디어 데이터 포맷 변환을 지원하기 위해 미디어 트랜스폼을 자동으로 로드하는 기능이 제한되어 있지만, 이 기능은 내부적으로 수행되며 응용 프로그램에서 이를 거의 제어할 수 없습니다.

소스 리더와 싱크 라이터는 사용하기 쉽고 파이프라인 아키텍처는 미디어 데이터의 흐름을 매우 정교하게 제어합니다.그러나 파이프라인에서 사용할 수 있는 컴포넌트(Enhanced Video Renderer 등)의 대부분은 Reader-Writer 아키텍처 애플리케이션에서는 쉽게 사용할 수 없습니다.소스 리더에 의해 생성되는 미디어 샘플의 구조는 미디어 소스의 출력과 동일하기 때문에 미디어 샘플이 파이프라인을 통과할 때 대행 수신되고 복사본이 미디어 싱크로 전달되는 파이프라인 아키텍처를 설정할 수 있습니다.이를 하이브리드 아키텍처라고 하며 싱크 라이터의 사용 편의성을 활용하면서 미디어 세션과 파이프라인의 정교한 처리 능력을 활용하는 애플리케이션을 가질 수 있습니다.싱크 라이터는 파이프라인의 일부가 아니며 미디어 세션과 상호 작용하지 않습니다.실제로 미디어 데이터는 Sample Grabber Sink라고 불리는 특수 Media Sink에 의해 처리됩니다.Sample Grabber Sink는 미디어 데이터를 소비하고 Sink Writer에 복사본을 전달합니다.또한 미디어 샘플을 복사하여 파이프라인을 통과할 때 싱크 라이터에 전달하는 커스텀 미디어 트랜스폼을 사용하여 하이브리드 아키텍처를 구현할 수도 있습니다.두 경우 모두 파이프라인의 특수 구성요소는 단순 리더-라이터 응용프로그램처럼 효과적으로 작동하며 싱크 라이터를 공급합니다.일반적으로 하이브리드 아키텍처는 파이프라인과 싱크 라이터를 사용합니다.이론적으로는 소스 리더가 어떻게든 미디어 샘플을 파이프라인에 주입할 수 있는 메커니즘을 구현할 수 있지만 샘플 그래버 싱크와는 달리 이러한 표준 컴포넌트는 존재하지 않습니다.

Media Foundation 트랜스폼

MFT(Media Foundation Transforms)는 미디어 데이터를 처리하는 일반 모델을 나타냅니다.주로 미디어 소스와 미디어 싱크 사이에 디코더, 인코더, 믹서 및 디지털 신호 프로세서(DSP)를 구현하기 위해 Media Foundation에서 사용됩니다.Media Foundation Transforms는 DirectX Media Objects(DMO; 미디어 객체)에서 처음 도입된 트랜스폼모델의 진화입니다.그들의 행동은 더 명확하게 명시되어 있다.하이브리드 DMO/MFT 객체도 만들 수 있습니다.응용 프로그램은 Media Foundation 파이프라인 내에서 MFT를 사용하거나 독립 실행형 개체로 직접 사용할 수 있습니다.MFT 는, 다음의 몇개의 타입으로 할 수 있습니다.

  • 오디오 및 비디오코덱
  • 오디오 및 비디오 효과
  • 멀티플렉서 및 디멀티플렉서
  • 티스
  • 색공간 변환기
  • 샘플 레이트 변환기
  • 비디오 스케일러

Microsoft 에서는, Windows Vista, Windows 7, 및 Windows 8 [3]에서는, DirectShow 필터 대신에 Media Foundation Transform을 작성할 것을 개발자에게 추천합니다.비디오 편집 및 비디오 캡처에는 DirectShow를 사용하는 것이 좋습니다.이것은, Windows Vista 에서의 Media Foundation 의 주된 목적은 아니기 때문입니다.Windows 7 이후 MFT는 AVStream 기반 미디어 디바이스의 [4]하드웨어 가속 비디오 처리, 인코딩 및 디코딩도 지원합니다.

확장 비디오 렌더러

Media Foundation은 비디오 콘텐츠를 렌더링하기 위해 EVR(Enhanced Video Renderer)을 사용합니다.EVR은 믹서 역할도 합니다.최대 16개의 동시 스트림을 혼합할 수 있으며 첫 번째 스트림은 참조 스트림입니다.참조 스트림을 제외한 모든 스트림은 지정된 z 순서뿐만 아니라 픽셀당 투명도 정보를 가질 수 있습니다.참조 스트림은 투명 픽셀을 가질 수 없으며 모든 스트림의 뒤쪽에 고정된 z 순서 위치가 있습니다.최종 이미지는 모든 스트림에서 해당 픽셀의 색상과 투명도에 따라 각 픽셀을 색칠하여 단일 표면에 합성됩니다.

내부적으로 EVR은 스트림을 혼합하기 위해 믹서 객체를 사용합니다.또한 출력의 인터레이스를 해제하고 필요에 따라 색보정을 적용할 수도 있습니다.컴포지트된 프레임은 프레젠터 오브젝트로 전달되며, Direct3D 디바이스로의 렌더링이 스케줄 되어 디바이스를 사용하는 DWM 및 기타 애플리케이션과 공유됩니다.출력 비디오의 프레임환율은 기준 스트림의 프레임환율과 동기화됩니다.다른 스트림(서브스트림)의 프레임환율이 다른 경우 EVR은 여분의 프레임을 폐기하거나(서브스트림의 프레임환율이 높은 경우), 같은 프레임을 여러 번 사용합니다(서브스트림의 프레임환율이 낮은 경우).

지원되는 미디어 형식

Windows Vista에서 Media Foundation을 통한 인코딩에 지원되는 기본 형식은 Windows Media Audio 및 Windows Media Video뿐입니다.디코딩의 경우 MP3 파일소스는 Windows Vista에서 MP3 스트림을 읽을 수 있지만 MP3 파일 싱크는 Windows [5]7에서만 사용할 수 있습니다.포맷 지원은 확장 가능합니다.개발자는 인코더/디코더 MFT 및/또는 커스텀 미디어 소스/미디어 싱크를 작성하여 다른 포맷에 대한 지원을 추가할 수 있습니다.

Windows 7 에서는, Windows Vista 로 사용할 수 있는 코덱의 서포트가 확대됩니다.여기에는 AVI, WAV,[5] AAC/ADTS 파일소스, MP4, M4A, M4V, MP4V, MOV 3G 컨테이너[6] 포맷을 읽기 위한 MPEG-4 파일소스, MP4 [7]포맷으로 출력하는 MPEG-4 파일싱크가 포함됩니다.

Windows Vista와 마찬가지로 트랜스코딩(인코딩) 지원은 내장 Windows 응용 프로그램을 통해 공개되지 않지만 Media Foundation Transforms(MFT;[5] 미디어 기반 변환)로 여러 코덱이 포함되어 있습니다.Windows [5]7에는 Windows Vista에서 도입된 Windows Media Audio 및 Windows Media Video 인코더와 디코더, ASF 파일싱크와 파일소스 에 베이스라인 프로파일레벨 3과 메인프로파일을 지원하는 H.264 인코더AAC Low Complexity(AAC-LC) 프로파일인코더가 포함되어 있습니다.

다양한 미디어 포맷을 재생 내용은 Windows7또한 기본 메인,High-profile 지원 증가 5.1,[10]AAC-LC과 HE-AAC v1(SBR)와 multichannel과 이동 HE-AAC v2(PS)스테레오 decoders,[11]MPEG-4파트 2심플 프로파일 및 고급 심플 프로파일 디코더는 디코딩 인기 있는 코덱 구현을 포함한다[12]을 수평으로 한 H.264 디코더를 소개하고 있다.디 같은 sAVI용 MJPEG 및 DV MFT 디코더뿐만 아니라[5] vX, XvidNero Digital도 지원합니다[13].Windows Media Player 12는 기본적으로 내장 Media Foundation 코덱을 사용하여 이러한 형식을 재생합니다.

Media Foundation을 사용한 MIDI 재생도 아직 지원되지 않습니다.

응용 프로그램 지원

Media Foundation을 지원하는 응용 프로그램은 다음과 같습니다.

윈도우즈에서 보호된 미디어 경로를 사용하는 응용 프로그램도 Media Foundation을 사용합니다.

레퍼런스

  1. ^ "DXVA-HD". Archived from the original on 2012-04-20. Retrieved 2010-04-18.
  2. ^ "Example Source". GitHub. Archived from the original on 2020-11-23. Retrieved 2019-01-19.
  3. ^ "Migrating from DirectShow to Media Foundation and comparison of the two". Archived from the original on 2008-04-09. Retrieved 2007-02-22.
  4. ^ AVStream에서의 하드웨어 코덱 지원 시작
  5. ^ a b c d e "Supported Media Formats in Media Foundation". Archived from the original on 2010-04-29. Retrieved 2010-04-18.
  6. ^ "MPEG-4 File Source". Archived from the original on 2010-03-14. Retrieved 2010-04-18.
  7. ^ "MPEG-4 File Sink". Archived from the original on 2010-08-04. Retrieved 2010-04-18.
  8. ^ "H.264 Video Encoder". Archived from the original on 2010-03-04. Retrieved 2010-04-18.
  9. ^ "AAC Encoder". Archived from the original on 2009-10-13. Retrieved 2010-04-18.
  10. ^ "H.264 Video Decoder". Archived from the original on 2010-04-21. Retrieved 2010-04-18.
  11. ^ "AAC Decoder". Archived from the original on 2010-03-18. Retrieved 2010-04-18.
  12. ^ "MPEG4 Part 2 Video Decoder". Archived from the original on 2010-02-11. Retrieved 2010-04-18.
  13. ^ "DV Video Decoder". Archived from the original on 2010-03-29. Retrieved 2010-04-18.

외부 링크