分别做了视频和音频的网络传输FILTER,GraphFilter中测试正常。用程序加载,视频没有问题,音频却有问题:找到Layer-3 编码器:
WCHAR sMEPGL3[] = L"@device:cm:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\85MPEG Layer-3"; IBindCtx *pBindCtx;
    CreateBindCtx(0, &pBindCtx);
    ULONG chEaten = 0;
    IMoniker *pMoniker = 0;
    MkParseDisplayName(pBindCtx, sMEPGL3, &chEaten, &pMoniker);
    pBindCtx->Release();
    pMoniker->BindToObject(0,0,IID_IBaseFilter, (void**)&mpgl3);
连接filter:   hr = g_pGraph->AddFilter(pSrc,devicename.AllocSysString());
        if (FAILED(hr))
 {
 pSrc->Release();
 return FALSE;
 }
g_pGraph->AddFilter(mpgl3,L"MPEG13");
hr=g_pGraph->AddFilter(netsend,L"netsend2");
             IEnumPins* pins;
 pSrc->EnumPins(&pins);
 IPin* psrc;
 while(S_OK==(hr=pins->Next(1,&psrc,NULL)))
 {
 PIN_DIRECTION der;
 psrc->QueryDirection(&der);
 if(der==PINDIR_OUTPUT)
 break;
 }
 pins->Release();  if (FAILED(hr))
 {
 pSrc->Release();
 return FALSE;
 }
             mpgl3->EnumPins(&pins);
 IPin* pout;
 IPin* pin;
 pins->Next(1,&pin,NULL);
 pins->Next(1,&pout,NULL);
 pins->Release();
 netsend->EnumPins(&pins);
             IPin* pin2;
 pins->Next(1,&pin2,NULL);
             pins->Release();            
     AM_MEDIA_TYPE* pmt=NULL;
 IEnumMediaTypes* enumt=NULL;
 hr=pout->EnumMediaTypes(&enumt);
 hr=enumt->Next(1,&pmt,NULL);
 hr=g_pGraph->ConnectDirect(psrc,pin,NULL);
             if (FAILED(hr))
 {
 pSrc->Release();
 return FALSE;
 }

 hr=g_pGraph->ConnectDirect(pout,pin2,pmt);
             if(FAILED(hr))
 {
pSrc->Release();
                return FALSE;
 }

程序显示一切正常,但Run后发现,pin2根本得不到数据。非常奇怪,在GraphEdit中一切正常。
netsend的GetMediaType如下:
HRESULT
CInputPin::GetMediaType (
    IN  int             iPos,
    OUT CMediaType *    pmt
    )
{
    ASSERT (pmt) ;    if (iPos == 0) {        pmt -> InitMediaType () ;
       pmt->majortype   =   MEDIATYPE_Audio;   
pmt->subtype   =   TIME_FORMAT_NONE;           return S_OK ;
    }    return VFW_S_NO_MORE_ITEMS ; 
}HRESULT
CInputPin::CheckMediaType (
    IN  const CMediaType *  pmt
    )
{
    return NOERROR ;
}