DSow视频开发,欢迎大家都来讨论 (140分)

我的部分代码如下:
===============
//设置制式...
SetCaptureAnalog(Filter as IBaseFilter, AnalogVideo_PAL_D);

FindInterface(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video, Filter as IBaseFilter, IID_IAMStreamConfig, AMStreamConfig);
//PREVIEW色深...
SetMediaBitCountToSystem(AMStreamConfig);
//PREVIEW分辩率...
SetCaptureScale1(AMStreamConfig, 768, 576);

FindInterface(@PIN_CATEGORY_CAPTURE, @MEDIATYPE_Video, Filter as IBaseFilter, IID_IAMStreamConfig, AMStreamConfigC);
//CAPTURE色深...
SetMediaBitCountToSystem(AMStreamConfigC);
//CAPTURE分辩率...
SetCaptureScale1(AMStreamConfigC, 768, 576);

strOutFileName := ExtractFilePath(Application.ExeName) + 'Capture.avi';
SetOutputFileName(MEDIASUBTYPE_Avi, PWideChar(strOutFileName), Multiplexer, Writer);
//链接视频Capture...
if Filter.FilterGraph <> nil then

RenderStream(@PIN_CATEGORY_CAPTURE,
nil,
Filter as IBaseFilter,
Encoder as IBaseFilter,
Multiplexer);

//链接视频PREVIEW...
if Filter.BaseFilter.DataLength > 0 then

RenderStream(@PIN_CATEGORY_PREVIEW,
nil,
Filter as IBaseFilter,
nil,
VideoWindow as IBaseFilter);
 
我现在的代码就是对@PIN_CATEGORY_PREVIEW和@PIN_CATEGORY_CAPTURE两者都生成一个IAMStreamConfig接口,两个IAMStreamConfig接口都设置分辩率、色深,这样做是否正确?

我现在的做法,在Capture时,VideoWindow没有视频显示,但AVI文件是生成了的,而且Encoder Filter也起了作用,但回放效果不是太好。
 
没人理了?是否我的代码糟糕透顶?
 
各位大哥,说话啊。
 
可以的,没有图象显示可能是在显示的时候有问题,你可以看看dx的帮助文档关于同时捕捉和播放的方法。
回放效果如何不好
 
我现在只有在 352 X 288 尺寸或其以下才有显示,大于这个尺寸VideoWindow就不显示出来,不知道什么原因。而且,视频在回放时如果有 200% 回放,会有锯齿。请问,如何消除回放时的锯齿呢?与Capture时一样??
 
jemyzhang:

老兄最近跑哪去了?快现身帮忙啊。

arcore
 
你可以用graphedit来键一个graph试试看效果如何,如果一样那就是编码器的问题
 
如果有人回答了这个问题,请用 email 通知我。
 
arcore:
"我现在只有在 352 X 288 尺寸或其以下才有显示,大于这个尺寸VideoWindow就不显示出来,不知道什么原因。 "
我们遇到了相似的问题,只有(Preview 和capture 尺寸相等) And (尺寸<352X288) 时才能
录制AVI文件,其它条件下能Preview 但是不能Pcature,我用的Encode 是Xvid,其它的
Encode(入divx,mpg4等)也一样,不知道为什么。
我的要求是:
1、Preview 和capture 同时可以有自己的尺寸,一边Preview 一边capture
2、只设置一次Preview 和capture 的iamstreamconfig ,以后记住Preview 和capture 的
尺寸。
老弟您的QQ号?
我的QQ:178646798
 
avi文件的格式是不是只有352*288的。如果是那只能够captuer这没大的了
 
jemyzhang :
AVI文件的格式应该不是只有352*288的,因为我在768 X 576下面Preview和Capture时,Preview没有显示,但是却生成了AVI的,只是效果不好。也就是说,Preview工作不正常,但Capture却是工作了的。

zhoufujin :
要保存IAMStreamconfig的设置是可以的。我现在只保存了制式、色深、分辩率以及Encoder的索引号。你把这些东西保存在Ini里面或是数据库里面都可以的。
Preview和Capture同时可以有自己的尺寸?你的意思是说这Preview 和Capture的尺寸不一样吗?为什么要设置成不同的尺寸呢?
我的QQ号在顶楼讲了的。而且,我们已经加为好友了的。你是“老小伙”吧?我是“在路上”。

To All:
这个问题我弄了很久了,一直没有解决。要解决这个问题,应该从两方面入手:
一是电脑的硬件配置,主要是CPU、硬盘(转速)、内存、显卡(显存最为重要)。我这边用于开发的电脑配置不好,所以,如果有条件的朋友,可以在一台显存至少为64M的电脑上面试一下,有没有性能改善,以决定是否与硬件有关。
二是再深入研究DShow。有可能我们现在做的并没有把DShow的功能用上。

小弟现在在忙别外一个比较急的东西,所以暂时没有时间来做这些。如果有哪位朋友做出来了,希望可以告之下。也请有经验的高手指点一下,小弟不胜感激!
 
对不起,我只记住了“在路上“没有记住arcore,请原谅。
另一个利用DirectX的控件可以做到Preview和Capture尺寸不一样(很灵活,小尺寸
Capture可以节省一些资源。)但是在DSPack2.3里面如何控制我还没有弄清楚。
用DSpack2.3碰到的下面问题一直没有解决:
当Preview和Capture尺寸不一样时或二者尺寸相等且大于352X288时
Preview正常而Capture不能写盘,您遇到这个问题了吗?
您帮忙分析一下原因,谢谢。
如果需要那个控件留下Email,我该您发邮件。
 
To zhoufujin:
我的邮件地址:arcore@163.com。
在DSPack2.3里面,它提供的组件功能并不是很万能的,有很多功能需要自己添加另外的代码,用COM接口编程来实现,比如设置Preview和Capture的分辩率(这两个分辩率可以相同也可以不相同)、设置制式、设置色深(即8Bit、16Bit、24bit、32bit)等等。这些工作是必须要有的,如果不做这些设置,Preview的效果都不理想,更不用说Capture了(最新版的QQ的视频聊天都有可能没有做这类设置)。而实现这些功能的接口都可以在DSPack2.3中的DShow9单元中找到。
我现在的情况根你相反:我在视频尺寸大于352X288Preview和Capture时,Preview没有显示,但是却生成了AVI的,只是效果不好。也就是说,Preview工作不正常,但Capture却是工作了的。我这种情况,我认为是TVideoWindow的问题。而对你的的情况呢,我想有可能是Encoder的原因。你现在用的什么Encoder?有些Encoder的确不大对劲(具体原因我也不知道)。我现在主要选择DivX3.11、DivX5.0、XviD等几种Encoder。
给用DSPack2.3的同行提个醒:DSPack2.3中的TVideoWindowEX2是有BUG的,具体什么BUG我还没有找出来。前几天我的程序一直不定时的出现一个读地址错误,我花了一天的时间来找错虫,后来终于查出来是那个鬼东西的原因:我的Form中有个VideoWindowEX2,我把Form中的ONCreate与ONClose事件中的代码全都注释了,相当于只创建了Form与上面的组件实例,再关闭Form,结果错误依然有;后来,我把VideoWindowEX2换成VideoWindow,就没有什么事了。有可能是TVideoWindowEX2的资源释放问题吧。
你那个控件可以发来看看,说不定可以找到什么启示呢,呵。不过,我个人觉得,如果没有必要,最好不要用第三方组件。我就准备把我的应用中的那个部分去掉DSPack中的组件,而只借用DSHOW9的接口单元,一行一行代码自己改写出来 -- 原因很简单,自己的代码放心些,不然出错了又得打着灯笼满天找了。
其实,我对DShow所知不多,只是有初步了解而已。但如果要实现我所要求的功能(768 X 576分辩率下流畅的视频Capture与Playback),必须要深入的了解DShow。所以,我想等我手头上的事情忙完以后,再好好研究一下DShow。我觉得老兄你也有此必要哦:)
给你几点建议:
1、听一个朋友说,清华出了一本专门讲DShow的书,在今年11月或是12月就会出版了,不知道现在可不可以买到了。这本书你可以买来看看;
2、深入的、系统的看DXSDK文档。我的一个朋友说,如果用VRM9的话,会更好。你可以看看SDK中的相关文档。

这段时间,我在忙另一个东西,所以,只有你老兄先走一步了。。:)有了好消息,别忘了拿出来分享一下哦。。。:)
 
arcore:
您说的“清华出了一本专门讲DShow的书”,可以到http://hqtech.nease.net/看看,
该斑竹是一个DShow的大侠。
“你现在用的什么Encoder?有些Encoder的确不大对劲",可能不然,在我说的另一个
控件里面用“DivX3.11、DivX5.0、XviD“没有问题。
比如设置Preview和Capture的分辩率、设置制式、设置色深,S端子等等。的确需要自己处理。
Preview和Capture不工作问题能不能和DSPack各个组件(如各个Filter)连接顺序有关?
以后继续探讨。
请您察看EMail
 
zhoufujin:终于又找到你了。我原来为您测试过一个程序,是关于dspack视频录像的。后来我的硬盘坏了,所有你发来的东西全部没了。。。

这几天花了一些时看一看dspack及dShow,确实感到内容很多,有深度。感到dspack的包装太好了。

现在我遇到一个问题:
进行录像时,如何解决视频、声音同步问题????
 
zl:您好
非常感谢您的帮助。
您的“如何解决视频、声音同步问题“的帖子我看过了,我以前没有研究
音频,只是研究录像,现在问题也没有解决。
DsPack的例子不行吗?您给我发了一段录像,ASf的,有声音,确实不同步
是不是硬件的问题?您的硬件是专业的采集卡吗?我用过上网用的(USB口)
不行。速度太慢。您用专业卡和DsPack的例子实验一下。一点建议,不一定正确。
您对我遇到的问题(上边叙述的)有什么建议?
希望继续联系。
 
采集卡就是普通的bt878采集卡,其它硬件原因也不可能,因为换了其它机器、其它采集卡也是同样。
昨晚读了陆其明(我心目中的DShow专家)的一篇文章,仍有诸多困惑。
http://www.copathway.com/itbookreview/view_paper.asp?paper_id=601
 
To zhoufujin:
那本书我也是在你说的那个网站上看到的,不知道现在书店有没有得卖。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部