[DShow] 여러가지 주저리..


[[[[ 이글은 제가 AVI파일을 DirectShow로 재생하면서 경험한 일을 그냥 두서없이 적은글입니다…. ]]]]

AVI 를 재생하기위한 Source Filter들..
    1. AsyncReader와 FileSourceFilter + AVISplitter (CLSID_AsyncReader, CLSID_AviSplitter)
        Direct Show의 기본.. 단점은 불완전한 파일에 대해서 재생불가.. 열려있는 파일이 재생이 되었던가..?-_-

    2. AVIFile-based reader Filter (CLSID_AVIDoc)
        아래것의 기본이 되는 필터인듯하다.
        하지만, 임의의 AVI파일의 사운드가 들리지 않는 현상이 발생한다.
        그래프 에디터로 확인시 연결은 잘되어있지만.. 재생시에 에러리턴..
        추측이지만.. VFW를 기본으로 사용하고.. 오디오가 VBR인경우 인식을 못해 사운드 재생이 안되는 듯하다.        

    3. AVI Splliter Filter이용 (CLSID_AviSource) – AviSource 필터는 단순히 AviSplitter를 상속했을 뿐이다.
        위와 거의 동일하다. 
        가장 두드러지는 특징은 불완전한 파일도 처음 Open시 reindexing 과정을 거쳐 재생을 시켜준다.
        하지만 최초 로딩시에만 적용이 된다.. 흑..ㅠ_ㅠ

AVI Audio Rendering..
    내 프로그램에서만 사운드를 조절하고 싶은데.. 어떤이유에서 인가.. 전체 Wave볼륨이 조절되었다.

    ///    볼륨조절부분 .. ////////////////////////////////////////////////////////////////////
    HRESULT hr;
    CComPtr<IBasicAudio> pVC;
    hr = m_pGraph->QueryInterface(IID_IBasicAudio,  (void **)&pVC);
    if(SUCCEEDED(hr))
    {
        pVC->put_Volume(lVolume);
    }
    ////////////////////////////////////////////////////////////////////////////////////////
    
    이코드면 분명 내 프로그램만 조절 되어야 한다… 근데 왜??
    결론 부터 말하자면 Audio Renderer 문제 였다.
    오디오 렌더러를 만들때 (CLSID_AudioRender – Waveout audio renderer) 를 사용했는데.. 이건 Wave볼륨값을 조절하는가보다.. 
    그래서 CLSID_DSoundRender – DSound audio renderer로 바꿔줬다.. 
    (근데 내가 왜 NULL렌더링을 안했지? NULL 렌더링하니.. 문제가 없네.. 삽질인가..-_-;;;;)


답글 남기기

이메일 주소는 공개되지 않습니다.