答案 0 :(得分:4)
这有点不标准,但您可以使用类似WCF的东西在桌面应用程序中自我托管端点。然后将视频输入源设置为自托管端点的“URL”。这适用于WPF或WinForms。虽然不确定Silverlight。
自托管端点可以从您的嵌入资源中提取媒体并从那里传输媒体。
答案 1 :(得分:3)
对我来说,问题不在于如何使用DirectShow库(the `DirectShow.Net Forum是专门为此设计的),而是如何使用嵌入式资源。
几年前,我在合同工作中碰到了类似的事情,雇主担心某些客户可能窃取他的专有信息。我的信息包含在数百个PDF文档中,但这个想法与视频文件的作用相同。以下是我解决问题的方法:
首先,将视频文件放在资源列表中:我使用Visual Studio
,所以我转到Project
的属性,单击资源选项卡,选择文件选项,然后选择Add Resource
> Add Existing File...
将以下两个namespaces
添加到您将使用的代码文件中:
using System.IO; using System.Diagnostics;
Process player = null; string tempFile = "~clip000.dat"; try { File.WriteAllBytes(tempFile, Properties.Resources.MyMovie_AVI); player = Process.Start(tempFile); player.WaitForExit(); } finally { File.Delete(tempFile); }
最有可能的情况是,不会调用Process.Start
方法,而是调用相应的DirectShow
方法。这个想法仍然是相同的:将您的资源提取为byte
数组,将它们写入新的临时文件,使用该文件,然后在完成后删除该文件的
请确保将Delete
语句放在finally
块中,以便在文件仍在播放时发生任何错误或用户关闭程序时,您的应用程序仍会清除旧文件。
修改强> 的
我认为这可能是一种可行的方法:
using (MemoryStream ms = new MemoryStream(Properties.Resources.MyMovie_AVI)) {
// Now you have to find a way in `DirectShow` to use a Stream
}
答案 2 :(得分:1)
您可以使用其他库吗?
我使用WPF MediaKit来做一些安全的实时h264视频流的非标准流式传输。开发人员(Jermiah Morill)非常敏感,我可以执行的定制很广泛(因为你得到了源代码)。
此时,您可以将视频作为嵌入式资源嵌入,将字节数组(可能是其中的一部分或整个文件)加载到内存中,然后从内存中播放。