我正在尝试使用Directshow中的MPEG2编码器将原始视频帧编码为mpeg2视频 . 从文件wmcodecdsp.h中过滤CLSID_CMPEG2EncoderVideoDS . 我已经创建了自己的推送源过滤器,它将原始帧注入过滤器图形 . 输入帧格式为RGB24 . 但是,当我尝试将Push源滤波器的输出连接到MPEG2视频编码器的输入时,我的滤波器图失败了 .

过滤器图具有以下结构 .

Push Source ---> MPEG2 Video Encoder ----> AVI Muxer ---> Filer Write(容器格式.avi) .

我发现故障的实际原因是由于Push滤波器的输出引脚和MPEG2 Encoder的输入引脚之间的媒体格式不匹配 .

Push滤波器输出引脚的媒体格式为

  • Formattype = FORMAT_VideoInfo .

  • 主要类型= MEDIATYPE_Video .

  • 次要类型= MEDIASUBTYPE_RGB24 .

  • cbformat = 88 .

然而,MPEG2编码器输入引脚的媒体格式对于次要类型和cbformat是不同的(基本上GUID不匹配) . 是否可以使用SetMediaFormat()手动设置MPEG2编码器的媒体格式 . 在MSDN网站上提到MPEG2编码器支持RGB24输入格式 . 我用其他编码器(如MJPEG压缩器)试过我的滤波器图 . 它工作正常 . 请分享你的想法 .

感谢致敬

普拉迪普