1

我正在编写一个具有视频输出 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 过滤器来完成图表吗?

4

1 回答 1

4

MEDIASUBTYPE_h264raw看起来不像标准的媒体子类型。您应该改用MEDIASUBTYPE_AVC1(no start codes) 或MEDIASUBTYPE_H264(with start codes);请参阅H.264 媒体类型。如果您使用其中任何一种子类型,则合适的 H.264 解码器应该能够连接到您的输出引脚。Windows 7 带有这样的 H.264 解码器,第三方解码器应提供适当的输入过滤器。

于 2012-08-24T04:01:58.220 回答