下面是我的代码, 用delphi实现的, 却始终出错, 请指点!
var
prevFilter,currFilter,vRenderFilter: IBaseFilter;
hr: HRESULT;
begin
(FilterGraph1 as IGraphbuilder).FindFilterByName('Video Renderer',vRenderFilter);
if vRenderFilter = nil then exit;
currFilter := vRenderFilter;
hr := GetNextFilter(currFilter,PINDIR_INPUT,prevFilter);
while (prevFilter <> nil) do
begin
if getOutputPinCount(prevFilter) = 2 then//如果前一个filter有两个输出pin,就删除当前的,从而断开链路
begin
(FilterGraph1 as IGraphBuilder).RemoveFilter(currFilter);
exit;
end;
currFilter := prevFilter;
prevFilter := nil;
hr := GetNextFilter(currFilter,PINDIR_INPUT,prevFilter);
end;
end;
11 个解决方案
#1
报的错是在模块quartz.dll出现地址访问错误
#2
是想不显示video,而只听到声音?
按你说的方法,删掉render filter后要连一个新的例如asfwriter一类的filter
按你说的方法,删掉render filter后要连一个新的例如asfwriter一类的filter
#3
wm asf writer我已经加进去了, 我的目的就是要把电影里的声音存下来, 但视频我不想要, 所以我要断开视频链路
#4
不把VIDEO RENDER 加进去就可以了
#5
要不用DES
#6
to 大刀: 我没想把video Renderer加进去, 我是用的智能连接, 自动加的
用不着智能连接的
我只是想找出为什么出了刚才的错! 我只想把视频输出的链路删掉啊
用不着智能连接的
我只是想找出为什么出了刚才的错! 我只想把视频输出的链路删掉啊
#7
那就不要用智能连接了
自己指定就可以了
这个用DES最方便了
自己指定就可以了
这个用DES最方便了
#8
不要用智能连接的方式,自己把filter一个一个加到你的graph里。
如果目的只是要保存声音的话,就在audio链路里用wavdest 和filewriter,而video那条路直接render出来就可以了。
你上面的错误可能是你没有给出完整的filter graph,因为总要有个终点
如果目的只是要保存声音的话,就在audio链路里用wavdest 和filewriter,而video那条路直接render出来就可以了。
你上面的错误可能是你没有给出完整的filter graph,因为总要有个终点
#9
谢谢各位的回复, 怎么说呢, 现在的链路是这个样子
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
-> wmVideo Decoder Dmo -> Video Renderer
我要删除第二行的视频链路, 因为我只要保存声音
当然了我可以自己添加filter, 如下:
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
但这样将不具备通用性,因为如果是个mpeg文件呢, avi文件呢? 我是不是要为每种格式都准备一套链路? 我不想这么做, 所以我决定用智能连接, 先让directshow自己建好链路,我再手工删除掉视频这一路的就行了
现在的问题是在我删除视频链路这一块出了问题, 我是video Renderer开始删除的, 向前遍历, 直到发现filter有两个输出pin , 不知道我这思路对不对, 反正我的代码有问题, 老报错, 请大家指点
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
-> wmVideo Decoder Dmo -> Video Renderer
我要删除第二行的视频链路, 因为我只要保存声音
当然了我可以自己添加filter, 如下:
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
但这样将不具备通用性,因为如果是个mpeg文件呢, avi文件呢? 我是不是要为每种格式都准备一套链路? 我不想这么做, 所以我决定用智能连接, 先让directshow自己建好链路,我再手工删除掉视频这一路的就行了
现在的问题是在我删除视频链路这一块出了问题, 我是video Renderer开始删除的, 向前遍历, 直到发现filter有两个输出pin , 不知道我这思路对不对, 反正我的代码有问题, 老报错, 请大家指点
#10
既然要只保存声音,那么干吗要从视频链路动手呢?应该截断音频的render才对呀,要不就用个tee filter,一边播放声音一边存成wav
#11
晕!
怎么不明白呢, 我打开的是个视频文件, 把音频保存下来当然要切断视频链路了
怎么不明白呢, 我打开的是个视频文件, 把音频保存下来当然要切断视频链路了
#1
报的错是在模块quartz.dll出现地址访问错误
#2
是想不显示video,而只听到声音?
按你说的方法,删掉render filter后要连一个新的例如asfwriter一类的filter
按你说的方法,删掉render filter后要连一个新的例如asfwriter一类的filter
#3
wm asf writer我已经加进去了, 我的目的就是要把电影里的声音存下来, 但视频我不想要, 所以我要断开视频链路
#4
不把VIDEO RENDER 加进去就可以了
#5
要不用DES
#6
to 大刀: 我没想把video Renderer加进去, 我是用的智能连接, 自动加的
用不着智能连接的
我只是想找出为什么出了刚才的错! 我只想把视频输出的链路删掉啊
用不着智能连接的
我只是想找出为什么出了刚才的错! 我只想把视频输出的链路删掉啊
#7
那就不要用智能连接了
自己指定就可以了
这个用DES最方便了
自己指定就可以了
这个用DES最方便了
#8
不要用智能连接的方式,自己把filter一个一个加到你的graph里。
如果目的只是要保存声音的话,就在audio链路里用wavdest 和filewriter,而video那条路直接render出来就可以了。
你上面的错误可能是你没有给出完整的filter graph,因为总要有个终点
如果目的只是要保存声音的话,就在audio链路里用wavdest 和filewriter,而video那条路直接render出来就可以了。
你上面的错误可能是你没有给出完整的filter graph,因为总要有个终点
#9
谢谢各位的回复, 怎么说呢, 现在的链路是这个样子
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
-> wmVideo Decoder Dmo -> Video Renderer
我要删除第二行的视频链路, 因为我只要保存声音
当然了我可以自己添加filter, 如下:
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
但这样将不具备通用性,因为如果是个mpeg文件呢, avi文件呢? 我是不是要为每种格式都准备一套链路? 我不想这么做, 所以我决定用智能连接, 先让directshow自己建好链路,我再手工删除掉视频这一路的就行了
现在的问题是在我删除视频链路这一块出了问题, 我是video Renderer开始删除的, 向前遍历, 直到发现filter有两个输出pin , 不知道我这思路对不对, 反正我的代码有问题, 老报错, 请大家指点
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
-> wmVideo Decoder Dmo -> Video Renderer
我要删除第二行的视频链路, 因为我只要保存声音
当然了我可以自己添加filter, 如下:
wm asf reader -> wmAudio Decoder Dmo -> wm asf writer
但这样将不具备通用性,因为如果是个mpeg文件呢, avi文件呢? 我是不是要为每种格式都准备一套链路? 我不想这么做, 所以我决定用智能连接, 先让directshow自己建好链路,我再手工删除掉视频这一路的就行了
现在的问题是在我删除视频链路这一块出了问题, 我是video Renderer开始删除的, 向前遍历, 直到发现filter有两个输出pin , 不知道我这思路对不对, 反正我的代码有问题, 老报错, 请大家指点
#10
既然要只保存声音,那么干吗要从视频链路动手呢?应该截断音频的render才对呀,要不就用个tee filter,一边播放声音一边存成wav
#11
晕!
怎么不明白呢, 我打开的是个视频文件, 把音频保存下来当然要切断视频链路了
怎么不明白呢, 我打开的是个视频文件, 把音频保存下来当然要切断视频链路了