Delphi 如何使用DSPack从MemoryStream渲染视频?
我能够在Delphi2010中使用TFilterGraph和TVideoWindow从文件系统渲染视频。我想从MemoryStream而不是直接从文件系统渲染视频。这是一个概念:Delphi 如何使用DSPack从MemoryStream渲染视频?,delphi,video,directshow,dspack,Delphi,Video,Directshow,Dspack,我能够在Delphi2010中使用TFilterGraph和TVideoWindow从文件系统渲染视频。我想从MemoryStream而不是直接从文件系统渲染视频。这是一个概念: 将视频存储在数据库blob字段中。 将blob(视频)读入内存流。 使用DSPack渲染blob(视频)。 如何告诉FilterGraph使用MemoryStream而不是文件?Ciuly的web角上发布了一个工作演示,回答了您问题的最后一部分: 至于其他两部分,加载到数据库blob字段并从中读取: //add a
如何告诉FilterGraph使用MemoryStream而不是文件?Ciuly的web角上发布了一个工作演示,回答了您问题的最后一部分: 至于其他两部分,加载到数据库blob字段并从中读取:
//add a file stream to a blob field
MemoryStream:= TMemoryStream.Create;
try
MemoryStream.LoadFromFile(VideoFileName);
MemoryStream.Position:= 0;
ClientDataSet1.Edit;
ClientDataSet1YOURBLOBFIELD.LoadFromStream(MemoryStream);
ClientDataSet1.Post;
finally
MemoryStream.Free;
end;
//read a memory stream from a blob field
MemoryStream:= TMemoryStream.Create;
try
ClientDataSet1YOURBLOBFIELD.SaveToStream(MemoryStream);
MemoryStream.Position:= 0;
//do your magic with the memory stream here
finally
MemoryStream.Free;
end;
没有股票DirectShow过滤器可以做到这一点,但是Windows SDK中有一个示例可以完成类似的操作。不确定DSPack是否有可用的等效软件。这很简单。主要的问题是,您无法使用现成的组件将内存流转换为DirectShow管道。这正是我链接到的Ciuly软件包所做的。它是一组组件和附带的工具,写在DSPack之上,使用DirectShow API扩展其功能,将内存流作为输入而不是文件。我查看了Ciuly的页面,但无法使其正常工作。不确定是否是因为安装DSPack代码的位置与Ciuly的页面不同。有点晚了,但由于我被引述为“无法工作”问题,我觉得我应该澄清一下。progdigy.com已经宕机一段时间了。不知道为什么。Sourceforge页面已经过时,它提到的google代码页面也很旧(2010年),它的版本与我在演示时使用的版本完全相同(2.3.4供后人参考)。如果出现问题,您很可能没有正确执行操作(或者您没有安装必要的directshow筛选器以便能够播放媒体文件)。但为了帮你解决这个问题,我需要的不仅仅是“不能让它工作”