Share via


ASF 스트림 만들기 및 구성

각 ASF 파일에는 하나 이상의 스트림이 포함되어 있습니다. ASF Profile 개체는 ASF 스트림의 컬렉션을 나타냅니다. ASF 인코딩의 경우 인코딩하려는 스트림을 만들고 구성해야 합니다.

애플리케이션은 ASF 프로필 개체를 사용하여 다음 작업을 수행할 수 있습니다.

  • 스트림을 추가하거나 제거합니다.
  • 스트림의 구성 설정을 가져옵니다.
  • 페이로드 확장을 구성합니다.
  • ASF 상호 제외 개체를 추가, 제거 또는 수정합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

새 스트림 만들기

ASF 프로필 개체에는 하나 이상의 ASF 스트림에 대한 구성 설정이 포함되어야 합니다. 각 스트림은 IMFASFStreamConfig 인터페이스를 노출하는 스트림 구성 개체로 표시됩니다. 스트림 구성 개체의 정보는 ASF 파일 헤더의 Stream Properties 개체 및 확장 스트림 속성 개체에 해당합니다. (참조) ASF 파일 구조입니다.)

ASF 프로필에 스트림을 추가하려면 다음 단계를 수행합니다.

  1. 빈 스트림 구성 개체를 만듭니다.
  2. 애플리케이션의 요구 사항에 따라 스트림을 구성합니다.
  3. 프로필에 스트림을 추가합니다.

프로필에 대한 스트림을 만들려면 IMFASFProfile::CreateStream을 호출하여 빈 스트림 구성 개체를 만들고 ppIStream 매개 변수에서 포인터를 받습니다. CreateStream 은 만들 스트림의 형식을 알고 있어야 합니다. ASF 파일에 사용되는 가장 일반적인 스트림 유형은 오디오 및 비디오 스트림입니다. Media Foundation에서 스트림 형식은 IMFMediaType 인터페이스를 노출하는 미디어 형식 개체로 표시됩니다. 미디어 유형의 주요 유형은 오디오 또는 비디오와 같은 디지털 미디어 스트림의 범주를 정의합니다. 하위 형식은 주 형식의 형식을 정의합니다. CreateStream에서 설정한 초기 미디어 유형은 스팀 구성 개체를 사용하여 변경할 수 있습니다. 스트림에 대한 미디어 형식을 검색하려면 IMFASFStreamConfig::GetMediaType을 호출하거나 IMFASFStreamConfig::GetStreamType을 호출하는 주요 형식을 검색합니다. 스트림의 초기 미디어 형식은 IMFASFStreamConfig::SetMediaType을 호출하여 구성된 새 미디어 형식으로 바꿀 수 있습니다.

애플리케이션이 MFCreateASFProfileFromPresentationDescriptor를 호출 하여 유효한 프레젠테이션 설명자에서 프로필을 만드는 경우 이 함수는 각 스트림에 대한 스트림 구성 개체를 자동으로 설정하고 프로필에서 설정합니다. 스트림 미디어 형식은 프레젠테이션 설명자와 연결된 스트림 설명자를 기반으로 설정됩니다.

스트림 번호 할당

모든 형식의 스트림 스트림 번호를 할당해야 합니다. 스트림 번호는 순차적일 필요는 없지만 1에서 127까지의 범위에 있어야 합니다. 스트림 번호를 할당하려면 IMFASFStreamConfig::SetStreamNumber를 호출 합니다. 스트림 번호 호출 을 얻으려면 IMFASFStreamConfig::GetStreamNumber입니다.

참고 항목

스트림 번호는 IMFASFProfile::GetStream을 사용하여 프로필에서 스트림을 가져올 때 사용하는 스트림 인덱스와 다릅니다. 스트림 인덱스는 프로필 개체에 의해 스트림에 할당된 숫자입니다. 스트림 인덱스는 IMFASFProfile::GetStreamCount에서 검색한 스트림 수보다 0에서 1 사이입니다. IMFASFProfile::GetStreamByNumber를 호출 하여 스트림 번호로 프로필에서 스트림을 가져올 수도 있습니다.

 

새는 버킷 값 설정

스트림을 나타내는 각 스트림 구성 개체에는 연결된 새는 버킷 매개 변수, 비트 속도 및 버퍼 창 값이 있어야 합니다.

이러한 값은 MF_ASFSTREAMCONFIG_LEAKYBUCKET1 특성 및 MF_ASFSTREAMCONFIG_LEAKYBUCKET2 특성을 통해 애플리케이션에서 사용할 수 있습니다. 파일 인코딩의 경우 실제 값은 인코딩 형식에 따라 달라지고 인코더에 의해 결정됩니다. 이미 구성된 인코더가 있고 출력 형식이 인코더에 설정된 경우 애플리케이션은 새는 버킷 매개 변수에 대한 인코더를 쿼리하고 이러한 특성의 값을 설정해야 합니다.

파이프라인 계층 구성 요소를 사용하고 ASF 미디어 싱크에 대한 스트림을 구성하는 경우 구성된 인코더가 없을 가능성이 높습니다. 이 경우 인코더 사후 미디어 형식 협상을 쿼리하고 ASF 미디어 싱크 속성 저장소의 MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET 속성에서 업데이트된 값을 설정해야 합니다. 인코딩 속성 저장소는 프로필과 연결된 ContentInfo 개체를 통해 검색됩니다. 업데이트된 값은 스트림의 새는 버킷 특성 값에 자동으로 반영됩니다. 새는 버킷 및 인코더에서 새는 버킷 값을 가져오는 방법에 대한 일반적인 내용은 새는 버킷 버퍼 모델을 참조 하세요.

페이로드 확장

스트림에 대한 미디어 데이터는 ASF 멀티플렉서에 의해 ASF 데이터 개체에 미디어 샘플추가됩니다. 이러한 미디어 샘플은 페이로드 확장 데이터를 포함할 수 있습니다. SMPTE 시간 코드 데이터, 정사각형 픽셀이 아닌 가로 세로 비율, 샘플 기간 및 샘플에 포함된 경우 비디오 키 프레임입니다. 지원되는 페이로드 확장 유형 목록은 ASF 페이로드 확장 GUID를 참조 하세요.

샘플 생성 중에 멀티플렉서가 해당 스트림에 대한 각 샘플에 보조 데이터를 추가할 수 있도록 페이로드 확장을 허용하도록 스트림을 구성해야 합니다.

스트림에 설정된 페이로드 확장의 총 수를 얻으려면 IMFASFStreamConfig::GetPayloadExtensionCount를 호출한 다음 IMFASFStreamConfig::GetPayloadExtension을 호출하여 목록을 열거합니다. 스트림에 대한 페이로드 확장을 추가하려면 IMFASFStreamConfig::AddPayloadExtension을 호출합니다. 그러면 스트림에 대해 생성된 개별 미디어 샘플에 추가 데이터가 추가됩니다.

스트림과 연결된 기존 페이로드 확장을 제거하려면 IMFASFStreamConfig::RemoveAllPayloadExtensions를 호출 합니다.

프로필에 스트림 추가

스트림이 구성되면 IMFASFProfile::SetStream을 호출하여 스트림을 프로필에 추가합니다.

프로필에서 기존 스트림을 제거하려면 IMFASFProfile::RemoveStream을 호출 합니다.

구성된 프로필은 IMFASFContentInfo::SetProfile을 호출하여 ContentInfo 개체에서 설정해야 합니다. 기존 스트림을 변경하는 경우 프로필에 다시 추가하고 ContentInfo 개체에서 프로필을 설정해야 합니다.

ASF 프로필

Media Foundation의 ASF 지원

WMContainer ASF 구성 요소