Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何使用DSPack从MemoryStream渲染视频?_Delphi_Video_Directshow_Dspack - Fatal编程技术网

Delphi 如何使用DSPack从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

我能够在Delphi2010中使用TFilterGraph和TVideoWindow从文件系统渲染视频。我想从MemoryStream而不是直接从文件系统渲染视频。这是一个概念:

  • 将视频存储在数据库blob字段中。
  • 将blob(视频)读入内存流。
  • 使用DSPack渲染blob(视频)。

  • 如何告诉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筛选器以便能够播放媒体文件)。但为了帮你解决这个问题,我需要的不仅仅是“不能让它工作”