当前位置: 代码迷 >> 多媒体/流媒体开发 >> DSHOW push解决方案
  详细解决方案

DSHOW push解决方案

热度:1442   发布时间:2013-02-26 00:00:00.0
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的

static GUID MEDIASUBTYPE_H264 = { MAKEFOURCC('h','2','6','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71};
GetMediaType如下

CheckPointer(pmt,E_POINTER);  
CAutoLock cAutoLock(m_pFilter->pStateLock());  
if(iPosition < 0)
{
return E_INVALIDARG;
}
// Have we run off the end of types?

if(iPosition > 4)
{
return VFW_S_NO_MORE_ITEMS;
}
HRESULT hr =NOERROR ;  
if (iPosition == 0){
ASSERT(pmt); 
pmt->InitMediaType () ;  
pmt->SetType(&MEDIATYPE_Video) ;  
pmt->SetSubtype(&MEDIASUBTYPE_H264);  
pmt->SetFormatType(&FORMAT_VideoInfo);  

VIDEOINFOHEADER vih;  
memset( &vih, 0, sizeof( vih ) );  
vih.bmiHeader.biCompression = 0;//BI_RGB;  
vih.bmiHeader.biBitCount = 24;  
vih.bmiHeader.biSize = 40;//sizeof(BITMAPINFOHEADER);  
vih.bmiHeader.biWidth = 352;  
vih.bmiHeader.biHeight = 288;
vih.bmiHeader.biPlanes = 1;
vih.bmiHeader.biSizeImage = 304128;//GetBitmapSize(&vih.bmiHeader);  
vih.bmiHeader.biClrImportant = 0;
vih.AvgTimePerFrame = 666670;
vih.dwBitRate = 34062336;
pmt->SetFormat((unsigned char *)&vih,sizeof(VIDEOINFOHEADER));  
pmt->SetTemporalCompression(TRUE);
hr = S_OK;
}  

return hr;

------解决方案--------------------------------------------------------
(1)你现在写的source filters是push model,而以前你能够以pull model的source filter与halli连接,这说明了什么?你写的是push model source filter,当然有极大可能不能与HALLI SPILTER相连,这个HALLI SPILTER可能只支持puLL model source filter.
(2)如果不是模式匹配的问题,而是媒体类型的问题,或许是VIDEOINFOHEADER数据填充不太合适,用缺省值试试。
(3)从此代码
static GUID MEDIASUBTYPE_H264 = { MAKEFOURCC('h','2','6','4'), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}; 
看出,你改了或者引用了mediaformat.h中的代码。如果还有问题,考虑一下是不是其它的代码也需要修改。

good luck.
  相关解决方案