什么是DirectShow过滤器可以连接到H.264(原始格式)输出引脚?

时间:2012-08-24 03:15:12

标签: directshow h.264

我正在编写一个文件源过滤器,它有一个视频输出PIN,输出引脚类型是H.264原始格式:

HRESULT CVideoOutPin::GetMediaType(CMediaType *pMediaType)
{
    CAutoLock lock(m_pFilter->pStateLock());

    ZeroMemory(pMediaType, sizeof(CMediaType));


    pMediaType->InitMediaType();
    // {7807c3af-524f-11ce-9f53-0020af0ba770}
    pMediaType->SetSubtype(&MEDIASUBTYPE_h264raw);

    unsigned int * pSize = (unsigned int *) pMediaType->ReallocFormatBuffer(sizeof(unsigned int) * 2);
    pSize[0] = m_pFlvFile->GetWidth();
    pSize[1] = m_pFlvFile->GetHeight();

    pMediaType->SetFormat((BYTE *)pSize, sizeof(unsigned int) * 2);

    //*pMediaType = m_oVideoMediaType;

    return S_OK;
}

我在GraphEdit.exe中尝试了几个解压缩过滤器,但没有一个可以连接到我的输出引脚。

我可以使用任何DirectShow过滤器来完成图表吗?

1 个答案:

答案 0 :(得分:4)

MEDIASUBTYPE_h264raw看起来不像标准媒体子类型。您应该使用MEDIASUBTYPE_AVC1(无开始代码)或MEDIASUBTYPE_H264(带开始代码);见H.264 Media Types。如果您使用这些子类型中的任何一种,则合适的H.264解码器应该能够连接到您的输出引脚。 Windows 7附带这样的H.264解码器,第三方解码器应该提供适当的输入滤波器。