다음을 통해 공유


ASF 프로필 만들기

이 항목에서는 Microsoft Media Foundation에서 ASF 프로필로 만드는 방법을 설명합니다.

새 프로필 만들기

빈 ASF 프로필을 만들려면 MFCreateASFProfile 함수를 호출합니다. 이 함수는 IMFASFProfile 인터페이스에 대한 포인터를 반환합니다. 애플리케이션은 이 인터페이스를 사용하여 프로필에 스트림을 추가하고 각 스트림을 구성할 수 있습니다. 자세한 내용은 ASF 스트림 만들기 및 구성을 참조하세요.

필요에 따라 애플리케이션은 둘 이상의 스트림에 상호 제외 개체를 추가할 수 있습니다. ASF 스트림에 상호 제외 사용을 참조하세요.

ASF ContentInfo 개체에서 프로필 가져오기

애플리케이션은 ASF ContentInfo 개체에서 기존 ASF 파일의 ASF 프로필을 가져올 수 있습니다. 프로필은 이미 구성되어 있으며 파일의 모든 스트림에 대한 설정을 포함합니다.

파일의 ASF 헤더 개체를 구문 분석하여 ContentInfo 개체를 초기화합니다. 이 작업은 IMFASFContentInfo::P arseHeader 메서드를 통해 수행됩니다. 모든 헤더 개체를 읽고 ASF 라이브러리가 채워지면 이 파일의 프로필이 생성됩니다. 애플리케이션은 IMFASFContentInfo::GetProfile을 호출하여 이 초기화된 프로필에 대한 포인터를 가져올 수 있습니다.

프레젠테이션 설명자에서 프로필 가져오기

파일의 프레젠테이션 설명자 또는 ASF ContentInfo 개체에서 기존 ASF 파일의 프로필 개체를 가져올 수 있습니다. 이 경우 프로필은 이미 구성되어 있으며 파일의 모든 스트림에 대한 설정을 포함합니다. 이는 기존 ASF 프로필을 수정하려는 경우에 유용할 수 있습니다. 예를 들어 Windows Media Video 파일을 더 낮은 비트 속도로 다시 인코딩할 수 있습니다.

프레젠테이션 설명자에서 프로필을 얻으려면 MFCreateASFProfileFromPresentationDescriptor를 호출합니다. 이 함수는 프레젠테이션 설명자를 구문 분석하고 ASF 프로필을 미디어 파일에 대한 정보로 채웁니다. 함수는 IMFASFProfile 인터페이스에 대한 포인터를 반환합니다. 그런 다음 이 인터페이스를 사용하여 프로필을 수정할 수 있습니다.

프레젠테이션 설명자를 얻으려면 다음 메서드 중 하나를 호출합니다.

다음 예제에서는 프레젠테이션 설명자에서 프로필을 만드는 방법을 보여줍니다. 함수는 파일에 대한 미디어 원본을 만들고, 미디어 원본에서 프레젠테이션 설명자를 가져오고, 프로필을 만듭니다. 이 예제에서는 pszFileName 이 ASF 파일의 URL을 지정한다고 가정합니다.

HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
    *ppProfile = NULL;

    IMFSourceResolver* pResolver = NULL;
    IUnknown* pSourceUnk = NULL;
    IMFMediaSource* pSource = NULL;
    IMFPresentationDescriptor* pPD = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pResolver);

    // Use the source resolver to create the media source.
    if (SUCCEEDED(hr))
    {
        MF_OBJECT_TYPE ObjectType;

        hr = pResolver->CreateObjectFromURL(
                pszFileName,
                MF_RESOLUTION_MEDIASOURCE, 
                NULL,                      
                &ObjectType,               
                &pSourceUnk   
            );
    }

    // Get the IMFMediaSource interface from the media source.
    if (SUCCEEDED(hr))
    {
        hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
    }

    // Get the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = pSource->CreatePresentationDescriptor(&pPD);
    }

    // Get the profile from the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
    }

    SafeRelease(&pResolver);
    SafeRelease(&pSourceUnk);
    SafeRelease(&pSource);
    SafeRelease(&pPD);
    return hr;
}

이 예제 에서는 SafeRelease 를 사용하여 인터페이스 포인터를 해제합니다.

ASF 프로필