미디어 타입 맞추기


서버 쪽의 렌더 필터의 미디어 타입을 읽어서 보내면 그 타입이 클라이언트 쪽 소스 필터의 타입이 되게 하신다는 거죠?

 

일단, 한가지 조심하셔야 할게.. 렌더 필터 입력으로 들어가는 포맷은 디코딩이 끝난 출력 직전의 데이터입니다. 화면 크기에 따라 1프레임당 수백 키로 ~ 수메가 바이트가 됩니다.

이 타입을 클라이언트의 소스 필터로 보내셔도 실제 영상 데이터를 그 포맷으로 맞춰서 클라이언트로 전송시키기가 어렵습니다.

 

양쪽의 소스 필터 타입을 맞추고, 서버측 소스 필터로 출력 타입을 클라이언트로 보내고

클라이언트측 소스 필터가 서버측 소스 필터의 출력 내용을 받아서 출력하게 하는게 맞는거죠.

 

그건 그렇고.. 소스 필터의 출력핀 미디어 타입을 지정하려면

말씀하신대로 GetMediaType에서 해당 미디어 타입을 반환하면 됩니다.

따로 메서드를 추가하거나 인터페이스를 추가할 필요가 없습니다.

 

GetMediaType으로 반환할 미디어 타입을 설정하려면..

가장 쉬운게 그 필터에 그냥 일반 함수를 하나 추가해서 하는 방법입니다.

 

CBaseFilter를 상속받은 클래스라면 그 클래스에 메서드 하나 추가하면 되죠.

 

그 클래스의 오브젝트의 포인터를 IBaseFilter로 QueryInterface한 다음

AddFilter해서 필터 그래프에서 넣고

그 포인트를 다시 원래 오브젝트로 캐스팅해서 하면 되는 거죠.

 

 

class MySourceFilter : public CBaseFilter

{

..

void SetMyMediaType(CMediaType*);

..

};

 

MySourceFilter* myFilter = new MySourceFilter(..);

IBaseFilter* dsFilter;

myFilter->QueryInterface(__uuidof(IBaseFilter), (void**)&dsFilter);

 

MySourceFilter* myFilter2 = (MySourceFilter*)dsFilter;

myFilter2->SetMyMediaType(…)


답글 남기기

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