2013-02-25 9 views
1

"http://directshownet.sourceforge.net/"의 DirectShot.Net 래퍼를 사용하여 많은 비디오 파일에서 프레임을 추출하려고합니다.DirectShow.Net 필터의 조합은 없지만 GSpot은 괜찮습니다.

DxScan 샘플 앱을 실행할 때마다. "중간 필터를 조합하여 연결을 찾을 수 없습니다."라는 메시지가 나타납니다. 이것은 WMV 파일, MP4 파일, AVI 파일에서 발생합니다. 샘플 앱에서 내가 가리키는 모든 미디어.

GSpot 코덱 도구를 사용하여 비디오를 열고 그래프를 렌더링하도록 요청하면 문제없이 문제가 해결됩니다. 따라서 기계는 확실히 컨텐트를 재생할 수 있습니다.

승 7 64 비트입니다. x64, x86 또는 Auto를 대상으로 동일한 오류가 발생합니다. 실행중인 Visual Studio를 관리자로 포함합니다.

아래의 Romain R에서 제안한 비디오 미디어 유형을 포함하는 올바른 핀을 찾으려면 샘플 코드를 수정했습니다.

내가 사용하고 있습니다 : MP4 파일의 경우

  IEnumPins epins; 
      capFilter.EnumPins(out epins); 
      IntPtr fetched = Marshal.AllocCoTaskMem(4); 
      IPin[] pins = new IPin[1]; 
      while (epins.Next(1, pins, fetched) == 0) 
      { 
       PinInfo pinfo; 
       pins[0].QueryPinInfo(out pinfo); 
       IEnumMediaTypes mtypes; 
       pins[0].EnumMediaTypes(out mtypes); 
       AMMediaType[] types = new AMMediaType[1]; 
       while(mtypes.Next(1, types, new IntPtr()) == 0){ 
        var majorType = types[0].majorType; 
        if (majorType == MediaType.Video) 
        { 
         //This is never reached 
        } 
       } 
      } 

, 그것은 결코 위의 주석 라인을 타격하지입니다. 그러나 WMV 파일의 경우 이제 데모가 올바르게 실행됩니다.

아마도 적절한 MP4 파일 필터를 찾지 못했기 때문일 수 있습니다. Windows Media Player에서 내용이 제대로 재생 될지 여부는 불분명합니다.

가능성이 있습니까?

답변

0

DxScan 샘플은 신뢰할 수없는 방법으로 필터 그래프를 작성하고 있습니다. 특히, 미디어 파일 용으로 제공된 소스 필터로부터 취득하는 최초의 핀이 비디오 핀 인 것을 전제로하고 있습니다. 항상 그런 것은 아닙니다. 더 나은 그래프 작성 방법이 잘 작동해야합니다. 단계별로 오류가있는 행을 찾으려고 할 수 있습니다. 대부분의 경우, 샘플 그래버 필터 입력 핀이 연결될 것입니다.

UPD. 원본 필터에는 입력 핀이 없으므로 스트림을 비디오 프레임과 오디오 샘플로 변환하는 파서/디멀티플렉서 필터라고하는 추가 필터가 필요합니다. DirectShow API는 Render* 방법을 제공하여이 체인의 필수 링크와 DxScan이 수행중인 직접 연결을 제안하는 측면에서 그래프 작성을 지원합니다.

즉, DxScan이 가장 좋은 샘플이 아닐 수도 있습니다. DirectShow로 이륙하기 위해 MSDN 샘플/네이티브 API에 대한 참조가 더 좋습니다.

놀이터 및 주요 리서치 및 API 탐색 도구는 DirectShow.NET 래퍼 라이브러리 샘플이 아닌 Windows SDK (GraphStudio 또는 Graph2Studio 또는 대체 개선 옵션 인)의 GraphEdit이어야합니다.

Windows Media Player에서 내용이 정상적으로 재생됩니다.

WMP는 DirectShow를 재생하지 않습니다.

+0

DShow.Net에서 비디오 핀을 감지하는 방법에 대한 예제가 있습니까? –

+0

핀을 반복하면서 미디어 유형을 열거합니다. 열거 된 최초의 미디어 타입이'majortype == MEDIATYPE_Video'의 경우는 비디오 핀입니다. –

+0

위 코드를 사용하면 MediaType이 majortype 인 핀을 반환하지 않는 것으로 보입니다.비디오 아마도 올바른 필터 (캡처 필터)의 핀을 테스트하고 있습니다. –