硬盘中有一个视频文件a.mpg(视频可在http://www.uushare.com/user/chenwenze/files/3121160下载),
用Windows Media Player可以正常播放,现在用DSPack搭个最简单的播放程序,一个VideoWindow,一个FilterGraph,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
    FilterGraph1.Active := True;
    FilterGraph1.RenderFile('D:\bears.mpg');
    FilterGraph1.Play;
end;
出现错误:“由于没有连接插针而导致此项操作无法执行。 ($80040209).”
并且视频没有在VideoWindow中播放而是在一个新跳出来的ActiveMovie Window窗口中播放。现在猜测一下可能是由于RenderFile使用的是智能连接引起的没能使用正确的解码器,而WMP估计是手动连接。仅仅是猜测。哪位高人了解个中原因?该如何解决这个问题呢?知道解决方案的希望能附上代码,谢谢!

解决方案 »

  1.   

    你只加入了filterGraph没有用videowindow,找不到渲染器所以会这样
    加入一个videowindow设置它的filterGraph,再用你上面的代码应该就行了
    与解码器无关
      

  2.   

    看贴不仔细,我的程序里是有VideoWindow的。
      

  3.   

    对不起没看清楚
    以前我遇到过这情况是因为解码器输出的颜色域和渲染器支持的不符
    所以你还是有道理的
    试试ffdshow解码
    或者手动在解码之后加入AVI Decompressor 或者 Color Space Converter
      

  4.   

    我帮你试了试
    把VideoWindow改成vmr就行了 mode := vmVMR
    默认的渲染器好像不支持