在DirectShow中如何得到压缩后的包 ?
在DsPack的VideoCap示例中,我添加了三个Filter, 一个是compressor(H.261 Video Codec)filter, 一个是sample filter, 另一个是null render filter.
我能通过RenderStream()函数来压缩AVI文件 (实际上我不需要它, 我想得到压缩后的包sample在事件TsampleGrabber.OnBuffer中,并将它发送到Internet).
代码如下:
if VideoSourceFilter.FilterGraph <> nil then
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter, VideoCompressor as IBaseFilter, multiplexer as IBaseFilter);
它能够够很好地压缩成文件, 但我需要压缩后的sample, 于是修改成:
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,
VideoCompressor as IBaseFilter, multiplexer as IBaseFilter);
RenderStream(nil, nil, multiplexer as IBaseFilter,
VideoSample as IBaseFilter, VideoNullRender as IBaseFilter);
这时我不能得到压缩的sample ,仍然是未被压缩的,我再次修改为:
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,
nil, VideoCompressor as IBaseFilter);
RenderStream(nil, nil, VideoCompressor as IBaseFilter,
VideoSample as IBaseFilter, VideoNullRender as IBaseFilter);
仍然不成功,我感到非常迷惑.
哪位可以给我一点思路吗?
谢谢!