학습
모듈
Implement device profiles - Training
Students will learn about the various types of device profiles, and how to create and manage them.
이 항목에서는 Microsoft Media Foundation에서 ASF 프로필로 만드는 방법을 설명합니다.
빈 ASF 프로필을 만들려면 MFCreateASFProfile 함수를 호출합니다. 이 함수는 IMFASFProfile 인터페이스에 대한 포인터를 반환합니다. 애플리케이션은 이 인터페이스를 사용하여 프로필에 스트림을 추가하고 각 스트림을 구성할 수 있습니다. 자세한 내용은 ASF 스트림 만들기 및 구성을 참조하세요.
필요에 따라 애플리케이션은 둘 이상의 스트림에 상호 제외 개체를 추가할 수 있습니다. ASF 스트림에 상호 제외 사용을 참조하세요.
애플리케이션은 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 를 사용하여 인터페이스 포인터를 해제합니다.
학습
모듈
Implement device profiles - Training
Students will learn about the various types of device profiles, and how to create and manage them.