다음을 통해 공유


DirectShow에서 ASF 파일 읽기(Windows 미디어 형식 11 SDK)

[Windows Media Format 11 SDK 이 페이지와 연결된 기능은 레거시 기능입니다. 소스 판독기싱크 작성기에 의해 대체되었습니다. 원본 판독기싱크 기록기 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 원본 판독기싱크 기록기 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

ASF 파일의 재생은 WM ASF 판독기 필터에 의해 처리됩니다. WM ASF 판독기는 파일을 읽을 때 웹 스트림, 스크립트 명령 스트림 및 다른 유형의 임의 스트림을 포함하여 각 스트림에 대한 출력 핀을 자동으로 만듭니다. 여러 비트 전송률 파일의 경우 핀은 현재 선택한 스트림에 대해서만 만들어집니다.

WM ASF 판독기는 애플리케이션이 파일 내에서 임시 검색을 수행할 수 있도록 하는 DirectShow IMediaSeeking 인터페이스를 지원합니다. 그러나 iMediaSeeking::SetRate 지정된 대로 1.0 이외의 속도로 재생은 지원되지 않습니다.

또한 필터는 다음 표에 설명된 대로 여러 Windows Media Format SDK 인터페이스를 노출합니다.

인터페이스 노출 방법 코멘트
IWMDRMReader 필터에서 IServiceProvider 통해 DRM(디지털 권한 관리)으로 보호되는 콘텐츠를 재생해야 하는 애플리케이션에 대해 제공됩니다. 이 인터페이스를 사용하여 Reader 개체에서 직접 다른 인터페이스를 가져올 수도 있습니다.
IWMHeaderInfo QueryInterface 를 필터에서 애플리케이션이 파일 및 콘텐츠 특성뿐만 아니라 표식 및 스크립트 정보 및 메타데이터를 읽을 수 있도록 제공됩니다.
IWMReaderAdvanced 필터의 QueryInterface 애플리케이션이 WM Reader 개체의 정보 메서드에 액세스할 수 있도록 필터에서 부분적으로 구현됩니다.
IWMReaderAdvanced2 QueryInterface 필터에서 애플리케이션이 Reader 개체의 정보 메서드에 액세스할 수 있도록 필터에서 부분적으로 구현됩니다.

 

WM ASF 판독기 필터는 DirectShow 8.0에서 처음 제공되었습니다. DirectShow 8.1 및 9.0과 함께 제공되는 필터 버전은 Windows Media Format SDK의 버전 7과x을 지원합니다. 다른 QASF 구성 요소와 함께 최신 버전의 필터는 Windows Media Format 9 시리즈 SDK 이상 버전과 함께 제공하고 지원하며 DirectX 9.0에서 필터를 대체합니다. DirectX 8.x 또는 9.x SDK를 설치한 후 Windows Media Format SDK를 설치하면 DirectX의 qasf.dll 버전을 9 시리즈 버전으로 덮어쓸 수 있습니다. DirectShow IGraphBuilder::RenderFile 메서드에서 다른 동작이 발생할 수 있는 시나리오를 제외하고는 문제가 발생하지 않아야 합니다. WM ASF Reader의 Windows Media Format 9 Series SDK 버전은 .asf, .wmv 및 .wma 파일 이름 확장명을 위한 기본 소스 필터입니다. 즉, 이 형식의 파일이 지정된 경우 IGraphBuilder::RenderFile 또는 IGraphBuilder::AddSourceFilter와 같은 메서드에서 필터 그래프 관리자가 WM ASF 판독기를 자동으로 만들고 필터 그래프에 추가합니다. DirectX 9.0 이전 버전 및 Windows XP 서비스 팩 1 이전 버전에서는 RenderFile 메서드는 이전 Windows 미디어 원본 필터를 사용합니다. 이 동작은 Windows Media Player 6.4를 사용한 애플리케이션과 이전 버전과의 호환성을 보장하기 위해 유지되었습니다. 레거시 Windows 미디어 원본 필터에 대한 자세한 내용은 DirectShow SDK 설명서를 참조하세요.

WM ASF 판독기를 사용하여 Windows 미디어 기반 콘텐츠로 ASF 파일을 재생하려면 세 가지 기본 단계는 필터 그래프 관리자의 인스턴스를 만들고, IGraphBuilder::RenderFile 호출하여 그래프를 만든 다음, IMediaControl::Run 호출하여 파일을 재생하는 것입니다. 다음 코드 예제는 DirectShow를 사용하여 ASF 파일을 재생하는 전체 프로그램입니다. 이 예제를 실행하려면 DirectX SDK가 설치되어 있어야 하며 DirectShow SDK 설명서 항목 "빌드 환경 설정"의 지침에 따라 빌드 환경을 구성해야 합니다. 또한 renderFile 호출할 때 컴퓨터에 파일을 지정해야 합니다.

#include <dshow.h>
#include <stdio.h>

void main(void)
{
    IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;

    // Initialize the COM library.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        printf("ERROR - Could not initialize COM library");
        return;
    }

    // Create the Filter Graph Manager and query for interfaces.
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                        IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        printf("ERROR - Could not create the Filter Graph Manager.");
        return;
    }

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

    // Build the graph. IMPORTANT: Change this string to a file
    // on your system.
    hr = pGraph->RenderFile(L"test.wmv", NULL);
    if (SUCCEEDED(hr))
    {
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            // Wait for completion.
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);

            // Note: Do not use INFINITE in a real application, because it
            // can block indefinitely.
        }
    }
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();
}

이 간단한 예제의 애플리케이션 코드는 WM ASF 판독기를 특별히 참조하지 않습니다. 해당 필터는 필터 그래프 관리자에 의해 생성, 연결, 실행 및 결국 해제됩니다. 그러나 대부분의 시나리오에서는 재생을 시작하기 전에 WM ASF 판독기를 구성할 수 있습니다.