ASF 분할자 개체 구성

ASF 분할자 개체는 ASF(Advanced Systems Format) 파일의 ASF 데이터 개체를 구문 분석하는 WMContainer 계층 개체입니다. 미디어 파일의 ASF 데이터 개체를 구문 분석하기 위해 분할기를 만들고 초기화한 후에는 특정 스트림에 대한 샘플을 생성하도록 분할자를 구성해야 합니다. IMFASFSplitter::SelectStreams를 호출하여 필요한 스트림을 선택합니다.

필요에 따라 애플리케이션은 역순으로 샘플을 생성하거나 보호된 콘텐츠에 대한 샘플을 생성하도록 구성할 수도 있습니다. 이러한 옵션을 설정하려면 IMFASFSplitter::SetFlags 를 호출하고 지원되는 플래그의 필요한 비트 조합을 전달합니다. 이 메서드를 호출하기 전에 클라이언트는 IMFASFSplitter::Initialize 호출을 성공적으로 완료해야 합니다. 그렇지 않으면 setFlags가MF_E_NOT_INITIALIZED 오류 코드와 함께 실패합니다. 분할자를 초기화하는 방법에 대한 자세한 내용은 ASF 분할자 개체 만들기를 참조하세요.

이 플래그가 현재 분할자에 설정되어 있는지 여부를 검사 IMFASFSplitter::GetFlags를 호출합니다.

구문 분석용 스트림 선택

IMFASFSplitter::Initialize 호출을 통한 초기화 프로세스 중에 분할자는 ASF 파일의 스트림 수와 스트림 식별자를 검색합니다. 기본적으로 분할자는 스트림을 선택하지 않습니다. 애플리케이션은 IMFASFSplitter::SelectStreams를 호출하여 스트림을 선택해야 합니다. 이 메서드는 스트림 번호의 배열을 사용합니다. 스트림의 스트림 번호를 얻으려면 ASF 프로필에서 IMFASFProfile::GetStream 을 호출하거나 스트림 설명자에서 IMFStreamDescriptor::GetStreamIdentifier 를 호출합니다. ContentInfo 개체에서 ASF 프로필과 스트림 설명자를 모두 가져올 수 있습니다. 클라이언트가 분할자에서 인식되지 않는 스트림 번호를 전달하면 MF_E_INVALIDSTREAMNUMBER 오류와 함께 실패합니다.

SelectStreams를 호출하면 이전 선택 항목이 지워지게 됩니다. 배열에 지정되지 않은 스트림은 선택되지 않습니다. 현재 선택된 스트림 목록을 얻으려면 IMFASFSplitter::GetSelectedStreams를 호출합니다. 이 메서드는 메서드가 스트림 번호로 채우는 배열에 대한 포인터를 사용합니다. 배열 크기가 선택한 스트림 수보다 작으면 메서드가 실패하고 MF_E_BUFFERTOOSMALL 오류가 발생합니다. 이 경우 메서드는 pwNumStreams 매개 변수에서 선택한 스트림 수를 반환합니다. 그런 다음 이 숫자를 사용하여 올바른 크기의 배열을 할당하고 메서드를 다시 호출할 수 있습니다.

예제 코드는 자습서: ASF 파일 읽기에서 "구문 분석할 스트림 선택"을 참조하세요.

역방향 재생 설정

분할자의 초기화 프로세스 중에 ASF 콘텐츠가 역방향 재생을 지원하는지 여부를 결정합니다. 이 경우 분할기는 MFASF_SPLITTER_REVERSE 플래그를 설정하여 샘플을 역순으로 생성하도록 구성할 수 있습니다. 콘텐츠가 역방향 재생을 지원하지 않는 경우 IMFASFSplitter::SetFlagsMF_E_INVALIDREQUEST 반환하지만 플래그는 분할자에 설정됩니다.

스플리터가 역방향으로 구문 분석되도록 구성된 경우 분할기는 항상 ASF 데이터 개체를 포함하는 버퍼의 끝에서 구문 분석을 시작합니다. 따라서 역방향 구문 분석의 경우 데이터 오프셋과 구문 분석할 데이터의 길이를 적절하게 설정해야 합니다. 올바른 값을 설정하는 방법에 대한 자세한 내용은 기존 ASF 데이터 개체에서 스트림 샘플 생성을 참조하세요.

보호된 콘텐츠 설정

분할자는 IMFASFSplitter::SetFlags를 통해 MFASF_SPLITTER_WMDRM 설정하여 패킷 수준 암호화 콘텐츠와 작동하도록 구성할 수 있습니다. 이렇게 하면 분할기에서 Windows Media DRM(디지털 권한 관리)으로 보호되는 콘텐츠에 대한 샘플을 제공하도록 지시합니다. 이 플래그가 설정되면 분할기에서 생성된 샘플에는 미디어 데이터의 암호를 해독하고 프레임을 재구성하는 데 필요한 정보(예: MFSampleExtension_PacketCrossOffsets 특성)가 포함됩니다. 이 특성은 DWORD의 배열을 포함하는 Blob입니다. 각 DWORD 는 프레임의 시작을 기준으로 프레임에 대한 페이로드 경계를 제공합니다. 이 특성이 없으면 프레임이 단일 페이로드에 포함됩니다. 일반적으로 분할기에서 생성된 샘플에는 여러 미디어 버퍼가 포함되며, 애플리케이션은 IMFSample::ConvertToContiguousBuffer를 호출하여 모든 버퍼를 하나의 연속 버퍼로 복사할 수 있습니다. 결과 버퍼에는 프레임이 포함되고 특성 값에는 이 버퍼에 대한 오프셋이 포함됩니다.

ASF 분할자