2014-05-16 21 views
4

DirectShow 필터로 비디오를 재생하는 순간에 응용 프로그램을 만들고 있습니다. 응용 프로그램은 WPF로 작성되었으며 MediaElements를 사용하여 비디오를 재생합니다. DirectShow 필터가 등록되어 있으면 비디오가 재생됩니다. 지금은 재생하기 전에 필터를 등록하기 위해 regsvr32를 사용합니다.임베디드 DirectShow 필터 등록

응용 프로그램을 실행할 때 포함 된 리소스에서 필터를로드 할 수 있다면 궁금한 사항은 무엇입니까? 필터를 등록하려면 관리자 권한이 필요하지 않습니다.

편집 :

나는이 정보를 사용하고 해결책을 마련하기 위해 노력하고있어 좋아. DirectShow 영역에 대한 지식 부족에 대해 변명해야합니다. 필자는 필터를 작성하지 않았고, 단지 그것을 사용하는 솔루션을 제시하려고합니다. DirectShow 및 그 구성 요소를 좀 더 잘 이해할 수 있도록 조금 더 연구하려고합니다.

필터를로드하는 데 사용하는 편리한 ComHelper 클래스를 찾았습니다.

https://gist.github.com/jjeffery/1568627

나는 필터의 인스턴스를 만들려면 아래 코드를 사용하고 있습니다.

LibraryModule module = LibraryModule.LoadModule(@"filter.ax"); 
var comObject = ComHelper.CreateInstance(module, new Guid("c91aa7be-f627-46e3-b79f-2de55da46a8b")); 

이 정보가 맞습니까? 나는 다음에 어디로 갈지 알아 내려고하고있다. 어떻게하면 필터 그래프를 만들 수 있을까요?

+0

내가 이것을 사용하지만, 액세스 위반 예외가 될 때 응용 프로그램 종료를 발생

도 참조하십시오. 동일한 등록 된 필터를 사용하면 예외가 발생하지 않습니다. 이 문제를 해결하는 방법을 알고 있습니까? –

답변

1

등록되지 않은 필터를 사용하여 필터 그래프를 작성할 수 있지만 장애물을 인식하고 허용 가능한지 여부를 결정해야합니다.

DirectShow 필터는 스레딩에 대한 요구가 완화 된 COM 개체입니다. 즉, 그래프에 필터를 추가해도 완전한 COM 등록이 필요하지 않습니다. 그래프 IGraphBuilder::AddFilter은 필터를 얻은 방법을 묻지 않고 필터의 인터페이스 포인터를 허용합니다. 즉, 필터 인스턴스화를 처리 한 다음 필터를 수동으로 추가하고 연결 핀을 추가하면 그래프가 올바르게 작동합니다.

등록하지 않으려는 필터는 C++ 객체를 직접 생성하거나 DLL을로드하고 COM을 등록을 통한 인스턴스화와 함께 수행하는 방식으로 내 보낸 기능 DllGetClassObject을 사용하여 인스턴스화 할 수 있습니다.

또 다른주의 사항은 관리자 권한이 필요없이 COM 클래스를 "사용자 단위"로 등록 할 수 있으며 이러한 등록은 표준 CoCreateInstance 인스턴스화를 가능하게합니다 (그러나 인텔리전트 연결은 아님 - 아래 참조).

일반적으로 DirectShow Intelligent Connect를 통해 비디오/오디오 디코더와 같은 관심 필터를 자동으로 추가 할 것으로 예상되는 시나리오가 있습니다. 이것은 전체 COM 등록에서만 작동하며, 대체 옵션은 여기에서 생략 한 API 후킹입니다. 긴 이야기를 짧게 줄이려면 : 필터를 등록하지 않았다면 코드를 통해 직접 필터 그래프에 인스턴스를 추가하고 추가해야합니다.

삽입시 최종 메모입니다. 필터는 여전히 DLL에 의해 호스팅되므로 실행 코드를 메모리에로드해야합니다. 이는 "자원에서"직접로드 할 수 없음을의 L합니다. 실행 가능한 DLL 이미지를 메모리에 직접 빌드 할 수있는 특정 방법이 있지만 가장 쉬운 방법은 DLL을 필터로 유지하고 LoadLibrary을 사용하여 외부 파일에서 일반 DLL로로드하는 것입니다.단일 바이너리를 갖고 싶다면 DLL을 바이너리 리소스로 포함시킨 다음 런타임에 임시 파일로 추출한 다음 LoadLibrary을 계속 진행하면됩니다.

+0

정보를 제공해 주셔서 감사합니다. 좀 더 많은 정보로 내 게시물을 업데이트했습니다. – thecaptain0220

+0

편집 후에 아무 것도 추가 할 필요가 없습니다. 모든 것이 양호한 상태로 유지됩니다. –