我正在尝试使用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压缩器)试过我的滤波器图 . 它工作正常 . 请分享你的想法 .
感谢致敬
普拉迪普